diff --git a/ChangeLog b/ChangeLog index 2ca36bb3a02..4366e4a7a69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,68 @@ +2007-12-06 Jan Dj,Ad(Brv + + * configure.in: Add AC_CONFIG_SRCDIR which was lost in the previous + change. + +2007-12-04 Jan Dj,Ad(Brv + + * configure.in: Give package name and verision to AC_INIT. + +2007-12-03 Magnus Henoch + + * configure.in: Use PKG_CHECK_MODULES to check for D-Bus. + + * configure: Regenerate. + +2007-12-03 Michael Albinus + + * configure.in: No need for DBUS_INFO anymore. + + * configure: Regenerate. + + * Makefile.in (INFO_FILES): Use dbus unconditionally. + +2007-12-02 Michael Albinus + + * configure.in: Add D-Bus checks. D-Bus is disabled by default. + + * configure: Regenerate. + + * Makefile.in (INFO_FILES): Add dbus. + +2007-12-02 Romain Francoise + + * make-dist: Fix last change. + +2007-11-28 Petr Salinger (tiny change) + + * configure.in: Add support for gnu-kfreebsd. + +2007-11-28 Glenn Morris + + * make-dist: Add etc/nxml. + +2007-11-24 Romain Francoise + + * Makefile.in (INFO_FILES): Add nxml-mode. + +2007-11-23 Romain Francoise + + * make-dist: Include nXML. Don't try to copy FTP, it was removed on + 2007/10/17. Don't special-case alloca.c which is no longer in CVS. + +2007-11-20 Andreas Schwab + + * configure.in: Always include when checking for + res_init. + +2007-11-17 Andreas Schwab + + * update-subdirs: Atomically update subdirs.el. + +2007-11-17 Glenn Morris + + * Makefile.in (check-declare): New target. + 2007-11-07 Glenn Morris * configure.in: Deprecate Mac Carbon port. diff --git a/Makefile.in b/Makefile.in index f0f710b4711..b3de304491a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -138,11 +138,11 @@ man1dir=$(mandir)/man1 # since there are now many packages documented with the texinfo # system, it is inappropriate to imply that it is part of Emacs. infodir=@infodir@ -INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \ - eintr elisp emacs emacs-mime erc eshell eudc flymake forms \ - gnus idlwave info message mh-e newsticker org pcl-cvs pgg \ - rcirc reftex remember sc ses sieve speedbar tramp vip viper \ - widget woman smtpmail url +INFO_FILES=ada-mode autotype calc ccmode cl dbus dired-x ebrowse ediff \ + efaq eintr elisp emacs emacs-mime erc eshell eudc flymake \ + forms gnus idlwave info message mh-e newsticker nxml-mode \ + org pcl-cvs pgg rcirc reftex remember sc ses sieve speedbar \ + tramp vip viper widget woman smtpmail url # Directory for local state files for all programs. localstatedir=@localstatedir@ @@ -424,7 +424,7 @@ install-arch-dep: mkdir ## Note that the Makefiles in the etc directory are potentially useful ## in an installed Emacs, so should not be excluded. -## installuser: +## installuser: ## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html ## Nuisance because i) it needs to be the user running install, so ## configure can't set it; ii) can't (?) use the result of rule @@ -811,3 +811,13 @@ bootstrap-clean-before-fast: FRC -(cd doc/lispref && $(MAKE) $(MFLAGS) clean) -(cd doc/lispintro && $(MAKE) $(MFLAGS) clean) (cd leim; $(MAKE) $(MFLAGS) clean) + +.PHONY: check-declare + +check-declare: + @if [ ! -e $(srcdir)/src/emacs ]; then \ + echo "You must build Emacs to use this command"; \ + exit 1; \ + fi + (cd leim; $(MAKE) $(MFLAGS) $@) + (cd lisp; $(MAKE) $(MFLAGS) $@) diff --git a/admin/ChangeLog b/admin/ChangeLog index 706b2f68c8d..c3252d3ff70 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,18 @@ +2007-12-05 Glenn Morris + + * admin.el (set-version): Handle configure.in. Adapt for doc/ + directory layout for manuals. + +2007-12-01 Reiner Steib + + * FOR-RELEASE: Remove Gnus send mail problem. Other Gnus bugs + have been fixed in Gnus CVS but have not yet been synched to + Emacs. + +2007-11-17 Glenn Morris + + * admin.el (process-lines): Move to ../lisp/subr.el. + 2007-10-23 Glenn Morris * MAINTAINERS: Move here from ../. diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 387baade381..3ab61ba577c 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -89,23 +89,31 @@ http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg00209.html ** menu indications of key bindings for remapped commands http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg01339.html -** tromey@redhat.com: two View-mode "quit" bugs -http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg00103.html - ** rms: gnus-dired.el is a mistake. Those features should not be part of Gnus. They should be moved to some other part of Emacs. -** C-x v v no longer works the way it used to -http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00785.html - -** vc-diff no longer works the way it used to -http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01753.html -(vc-revert also needs the repository now with CVS) - ** sdl.web@gmail.com, 28 Oct: window-system in face definition -** add README files for etc/gnus, etc/images/smilies/medium,grayscale -update etc/images README files with any new images +** Gnus archive groups are not shown at all if they are not at the default level. +Fixed in Gnus CVS, but the patch has not been synched to Emacs yet: +http://thread.gmane.org/gmane.emacs.gnus.general/65622/focus=65757 + +** Extra question asked when doing a reply in Gnus +Fixed in Gnus CVS, but the patch has not been synched to Emacs yet: +http://thread.gmane.org/gmane.emacs.gnus.general/65627/65768 + +** sdl.web@gmail.com, 30 Oct: ps-lpr-switches has no effect + +** Stephen.Berman@gmx.net: minibuffer and current-local-map + +** timh@insightful.com, 9 Nov: X-coding-system incompatibility, and workaround + +** Get rid of old-style backquotes in cc-vars.el. +ttn has a patch: +http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg02052.html + +** Fix or document the shortcoming of easymenu and :suffix. +http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01857.html * DOCUMENTATION diff --git a/admin/admin.el b/admin/admin.el index 76c50243b3d..a490442a44b 100644 --- a/admin/admin.el +++ b/admin/admin.el @@ -29,23 +29,6 @@ ;;; Code: -(defun process-lines (program &rest args) - "Execute PROGRAM with ARGS, returning its output as a list of lines. -Signal an error if the program returns with a non-zero exit status." - (with-temp-buffer - (let ((status (apply 'call-process program nil (current-buffer) nil args))) - (unless (eq status 0) - (error "%s exited with status %s" program status)) - (goto-char (point-min)) - (let (lines) - (while (not (eobp)) - (setq lines (cons (buffer-substring-no-properties - (line-beginning-position) - (line-end-position)) - lines)) - (forward-line 1)) - (nreverse lines))))) - (defun add-release-logs (root version) "Add \"Version VERSION released.\" change log entries in ROOT. Root must be the root of an Emacs source tree." @@ -85,10 +68,14 @@ Root must be the root of an Emacs source tree." (set-version-in-file root "README" version (rx (and "version" (1+ space) (submatch (1+ (in "0-9.")))))) - (set-version-in-file root "man/emacs.texi" version + (set-version-in-file root "configure.in" version + (rx (and "AC_INIT" (1+ (not (in ?,))) + ?, (0+ space) + (submatch (1+ (in "0-9.")))))) + (set-version-in-file root "doc/emacs/emacs.texi" version (rx (and "EMACSVER" (1+ space) (submatch (1+ (in "0-9.")))))) - (set-version-in-file root "lispref/elisp.texi" version + (set-version-in-file root "doc/lispref/elisp.texi" version (rx (and "EMACSVER" (1+ space) (submatch (1+ (in "0-9.")))))) (set-version-in-file root "lib-src/makefile.w32-in" version diff --git a/configure b/configure index 1fc2db097b8..74ab9d542f9 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. +# Generated by GNU Autoconf 2.61 for emacs 23.0.50. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. @@ -570,11 +570,11 @@ MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= +PACKAGE_NAME='emacs' +PACKAGE_TARNAME='emacs' +PACKAGE_VERSION='23.0.50' +PACKAGE_STRING='emacs 23.0.50' +PACKAGE_BUGREPORT='' ac_unique_file="src/lisp.h" ac_config_libobj_dir=src @@ -692,6 +692,8 @@ RSVG_CFLAGS RSVG_LIBS GTK_CFLAGS GTK_LIBS +DBUS_CFLAGS +DBUS_LIBS XFT_CFLAGS XFT_LIBS FREETYPE_CFLAGS @@ -783,7 +785,7 @@ sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1247,7 +1249,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures emacs 23.0.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1295,7 +1297,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --docdir=DIR documentation root [DATAROOTDIR/doc/emacs] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1320,7 +1322,9 @@ _ACEOF fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of emacs 23.0.50:";; + esac cat <<\_ACEOF Optional Features: @@ -1366,6 +1370,7 @@ Optional Packages: --without-xaw3d don't use Xaw3d --without-xim don't use X11 XIM --without-carbon don't use Carbon GUI on Mac OS X + --without-dbus don't use D-Bus --with-x use the X Window System Some influential environment variables: @@ -1442,7 +1447,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -configure +emacs configure 23.0.50 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1456,7 +1461,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was +It was created by emacs $as_me 23.0.50, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -1792,6 +1797,14 @@ fi + + + + + + + + @@ -1807,6 +1820,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers src/config.h:src/config.in" + test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -2028,6 +2042,12 @@ if test "${with_carbon+set}" = set; then fi +# Check whether --with-dbus was given. +if test "${with_dbus+set}" = set; then + withval=$with_dbus; +fi + + # Check whether --enable-carbon-app was given. if test "${enable_carbon_app+set}" = set; then enableval=$enable_carbon_app; carbon_appdir_x=${enableval} @@ -2278,6 +2298,19 @@ case "${canonical}" in esac ;; + ## FreeBSD kernel + glibc based userland + *-*-kfreebsd*gnu* ) + opsys=gnu-kfreebsd + case "${canonical}" in + alpha*-*-kfreebsd*) machine=alpha ;; + ia64-*-kfreebsd*) machine=ia64 ;; + sparc64-*-kfreebsd*) machine=sparc ;; + powerpc-*-kfreebsd*) machine=macppc ;; + i[3456]86-*-kfreebsd*) machine=intel386 ;; + amd64-*-kfreebsd*|x86_64-*-kfreebsd*) machine=amdx86-64 ;; + esac + ;; + ## NetBSD ports *-*-netbsd* ) opsys=netbsd @@ -12012,6 +12045,113 @@ _ACEOF fi fi +HAVE_DBUS=no +if test "${with_dbus}" = "yes"; then + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi + + if test "$PKG_CONFIG" = "no" ; then + HAVE_DBUS=no + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + { echo "$as_me:$LINENO: checking for dbus-1 >= 1.0" >&5 +echo $ECHO_N "checking for dbus-1 >= 1.0... $ECHO_C" >&6; } + + if $PKG_CONFIG --exists "dbus-1 >= 1.0" 2>&5; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + succeeded=yes + + { echo "$as_me:$LINENO: checking DBUS_CFLAGS" >&5 +echo $ECHO_N "checking DBUS_CFLAGS... $ECHO_C" >&6; } + DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 1.0"|sed -e 's,///*,/,g'` + { echo "$as_me:$LINENO: result: $DBUS_CFLAGS" >&5 +echo "${ECHO_T}$DBUS_CFLAGS" >&6; } + + { echo "$as_me:$LINENO: checking DBUS_LIBS" >&5 +echo $ECHO_N "checking DBUS_LIBS... $ECHO_C" >&6; } + DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 1.0"|sed -e 's,///*,/,g'` + { echo "$as_me:$LINENO: result: $DBUS_LIBS" >&5 +echo "${ECHO_T}$DBUS_LIBS" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + DBUS_CFLAGS="" + DBUS_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + DBUS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-1 >= 1.0"` + + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + HAVE_DBUS=yes + else + HAVE_DBUS=no + fi + + if test "$HAVE_DBUS" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DBUS 1 +_ACEOF + + fi +fi + HAVE_XAW3D=no if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then if test "$with_xaw3d" != no; then @@ -18962,13 +19102,11 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include /* for off_t */ - #include +#include int main () { -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); +return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); ; return 0; } @@ -19008,13 +19146,11 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 -#include /* for off_t */ - #include +#include int main () { -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); +return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); ; return 0; } @@ -20046,52 +20182,19 @@ fi # Do we have res_init, for detecting changes in /etc/resolv.conf? resolv=no -{ echo "$as_me:$LINENO: checking for res_init" >&5 -echo $ECHO_N "checking for res_init... $ECHO_C" >&6; } -if test "${ac_cv_func_res_init+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define res_init to an innocuous variant, in case declares res_init. - For example, HP-UX 11i declares gettimeofday. */ -#define res_init innocuous_res_init - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char res_init (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef res_init - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char res_init (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_res_init || defined __stub___res_init -choke me -#endif - +#include +#include +#include int main () { -return res_init (); +return res_init(); ; return 0; } @@ -20114,25 +20217,16 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_func_res_init=yes + have_res_init=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_res_init=no + have_res_init=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_res_init" >&5 -echo "${ECHO_T}$ac_cv_func_res_init" >&6; } -if test $ac_cv_func_res_init = yes; then - have_res_init=yes -else - have_res_init=no -fi - if test "$have_res_init" = no; then OLIBS="$LIBS" LIBS="$LIBS -lresolv" @@ -20150,7 +20244,7 @@ cat >>conftest.$ac_ext <<_ACEOF int main () { -res_init(); +return res_init(); ; return 0; } @@ -24356,6 +24450,11 @@ Read the emacs-devel archives for more information." echo fi +if test "$HAVE_DBUS" = yes && test "${opsys}" != "gnu-linux"; then + echo "D-Bus integration has been tested for GNU/Linux only." + echo +fi + # Remove any trailing slashes in these variables. test "${prefix}" != NONE && @@ -24785,7 +24884,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by $as_me, which was +This file was extended by emacs $as_me 23.0.50, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -24838,7 +24937,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -config.status +emacs config.status 23.0.50 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" @@ -25102,6 +25201,8 @@ RSVG_CFLAGS!$RSVG_CFLAGS$ac_delim RSVG_LIBS!$RSVG_LIBS$ac_delim GTK_CFLAGS!$GTK_CFLAGS$ac_delim GTK_LIBS!$GTK_LIBS$ac_delim +DBUS_CFLAGS!$DBUS_CFLAGS$ac_delim +DBUS_LIBS!$DBUS_LIBS$ac_delim XFT_CFLAGS!$XFT_CFLAGS$ac_delim XFT_LIBS!$XFT_LIBS$ac_delim FREETYPE_CFLAGS!$FREETYPE_CFLAGS$ac_delim @@ -25121,8 +25222,6 @@ KMEM_GROUP!$KMEM_GROUP$ac_delim GETLOADAVG_LIBS!$GETLOADAVG_LIBS$ac_delim GETOPT_H!$GETOPT_H$ac_delim GETOPTOBJS!$GETOPTOBJS$ac_delim -version!$version$ac_delim -configuration!$configuration$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -25164,6 +25263,8 @@ _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +version!$version$ac_delim +configuration!$configuration$ac_delim canonical!$canonical$ac_delim srcdir!$srcdir$ac_delim lispdir!$lispdir$ac_delim @@ -25187,7 +25288,7 @@ carbon_appdir!$carbon_appdir$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 21; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 23; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/configure.in b/configure.in index 7150e5fa0ba..76fd9a48173 100644 --- a/configure.in +++ b/configure.in @@ -24,8 +24,9 @@ dnl Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, dnl Boston, MA 02110-1301, USA. AC_PREREQ(2.61)dnl -AC_INIT(src/lisp.h) +AC_INIT(emacs, 23.0.50) AC_CONFIG_HEADER(src/config.h:src/config.in) +AC_CONFIG_SRCDIR(src/lisp.h) dnl Support for --program-prefix, --program-suffix and dnl --program-transform-name options @@ -120,6 +121,7 @@ EMACS_ARG_N([toolkit-scroll-bars],[don't use Motif or Xaw3d scroll bars]) EMACS_ARG_N([xaw3d],[don't use Xaw3d]) EMACS_ARG_N([xim],[don't use X11 XIM]) EMACS_ARG_N([carbon],[don't use Carbon GUI on Mac OS X]) +EMACS_ARG_N([dbus],[don't use D-Bus]) AC_ARG_ENABLE(carbon-app, [AS_HELP_STRING([--enable-carbon-app@<:@=DIR@:>@], @@ -253,6 +255,19 @@ case "${canonical}" in esac ;; + ## FreeBSD kernel + glibc based userland + *-*-kfreebsd*gnu* ) + opsys=gnu-kfreebsd + case "${canonical}" in + alpha*-*-kfreebsd*) machine=alpha ;; + ia64-*-kfreebsd*) machine=ia64 ;; + sparc64-*-kfreebsd*) machine=sparc ;; + powerpc-*-kfreebsd*) machine=macppc ;; + i[3456]86-*-kfreebsd*) machine=intel386 ;; + amd64-*-kfreebsd*|x86_64-*-kfreebsd*) machine=amdx86-64 ;; + esac + ;; + ## NetBSD ports *-*-netbsd* ) opsys=netbsd @@ -1193,7 +1208,7 @@ dnl see the `changequote' comment above. machine=amdx86-64 opsys=gnu-linux ;; - ## Tensilica Xtensa Linux-based GNU system + ## Tensilica Xtensa Linux-based GNU system xtensa-*-linux-gnu* ) machine=xtensa opsys=gnu-linux ;; @@ -1351,11 +1366,11 @@ AC_PATH_PROG(GZIP_PROG, gzip) ## Need makeinfo >= 4.6 (?) to build the manuals. AC_PATH_PROG(MAKEINFO, makeinfo, no) -dnl By this stage, configure has already checked for egrep and set EGREP, +dnl By this stage, configure has already checked for egrep and set EGREP, dnl or exited with an error if no egrep was found. if test "$MAKEINFO" != "no" && \ test x"`$MAKEINFO --version 2> /dev/null | $EGREP 'texinfo[[^0-9]]*([[1-4]][[0-9]]+|[[5-9]]|4\.[[6-9]]|4\.[[1-5]][[0-9]]+)'`" = x; then - MAKEINFO=no + MAKEINFO=no fi if test "$MAKEINFO" = "no"; then @@ -1547,7 +1562,7 @@ dnl Do this early because it can frob feature test macros for Unix-98 &c. AC_SYS_LARGEFILE -### The standard library on x86-64 GNU/Linux distributions can +### The standard library on x86-64 GNU/Linux distributions can ### be located in either /usr/lib64 or /usr/lib. case "${canonical}" in x86_64-*-linux-gnu* ) @@ -1898,7 +1913,7 @@ dnl USE_X_TOOLKIT is set. no ) USE_X_TOOLKIT=none ;; dnl If user did not say whether to use a toolkit, make this decision later: dnl use the toolkit if we have gtk, or X11R5 or newer. - * ) + * ) if test x"$with_gtk" = xyes; then USE_X_TOOLKIT=none else @@ -1917,7 +1932,7 @@ esac if test "$window_system" = none && test "X$with_x" != "Xno"; then AC_CHECK_PROG(HAVE_XSERVER, X, true, false) if test "$HAVE_XSERVER" = true || - test -n "$DISPLAY" || + test -n "$DISPLAY" || test "`echo /usr/lib/libX11.*`" != "/usr/lib/libX11.*"; then AC_MSG_ERROR([You seem to be running X, but no X development libraries were found. You should install the relevant development files for X @@ -2252,6 +2267,17 @@ if test "${HAVE_GTK}" = "yes"; then fi fi +dnl D-Bus has been tested under GNU/Linux only. Must be adapted for +dnl other platforms. Support for higher D-Bus versions but 1.0 is +dnl also not configured. +HAVE_DBUS=no +if test "${with_dbus}" = "yes"; then + PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.0, HAVE_DBUS=yes, HAVE_DBUS=no) + if test "$HAVE_DBUS" = yes; then + AC_DEFINE(HAVE_DBUS, 1, [Define to 1 if using D-Bus.]) + fi +fi + dnl Do not put whitespace before the #include statements below. dnl Older compilers (eg sunos4 cc) choke on it. HAVE_XAW3D=no @@ -2836,15 +2862,19 @@ AC_CHECK_LIB(ncurses, tparm) # Do we have res_init, for detecting changes in /etc/resolv.conf? resolv=no -AC_CHECK_FUNC(res_init, have_res_init=yes, have_res_init=no) +AC_TRY_LINK([#include +#include +#include ], + [return res_init();], + have_res_init=yes, have_res_init=no) if test "$have_res_init" = no; then OLIBS="$LIBS" LIBS="$LIBS -lresolv" AC_MSG_CHECKING(for res_init with -lresolv) AC_TRY_LINK([#include #include -#include ], - [res_init();], +#include ], + [return res_init();], have_res_init=yes, have_res_init=no) AC_MSG_RESULT($have_res_init) if test "$have_res_init" = yes ; then @@ -3538,7 +3568,12 @@ if test "$HAVE_CARBON" = "yes"; then known problems. It is not recommended for use by non-developers. Read the emacs-devel archives for more information." echo -fi +fi + +if test "$HAVE_DBUS" = yes && test "${opsys}" != "gnu-linux"; then + echo "D-Bus integration has been tested for GNU/Linux only." + echo +fi # Remove any trailing slashes in these variables. diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 3c020fcc5e7..9c4d874e139 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,12 +1,50 @@ +2007-11-26 Richard Stallman + + * help.texi (Help Echo): Cleanups. + +2007-11-23 Thien-Thi Nguyen + + * files.texi (Why Version Control?): Fix typo. + (VCS Concepts): Fix typos; small tense fix. + (Selecting a Fileset): Fix typos; small rewording. + (Log Buffer): Likewise. + (Old Revisions): Likewise. + +2007-11-17 Eli Zaretskii + + * mule.texi (Communication Coding): Fix wording of last change. + +2007-11-16 Werner Lemberg + + * custom.texi (Specifying File Variables), major.texi (Choosing + Modes): Mention '\" in man pages. + +2007-11-16 Kenichi Handa + + * mule.texi (Communication Coding): Document x-select-request-type. + + * frames.texi (Cut/Paste Other App): Mention x-select-request-type. + +2007-11-15 Francesco Potort,Al(B + + * maintaining.texi (TEXTAGS): note that you can use "-" for stdout with + --output=file. + +2007-11-13 Martin Rudalics + + * help.texi (Help Summary, Apropos, Misc Help): Fix typos. + (Help Echo): Avoid mentioning the term "region" here and + consistently use the term "active text". + +2007-11-11 Glenn Morris + + * calendar.texi (Special Diary Entries): Fix Thanksgiving example. + 2007-11-10 Paul Pogonyshev * search.texi (Query Replace): Mention `query-replace-show-replacement'. -2007-11-09 Reiner Steib - - * gnus.texi, gnus-faq.texi, message.texi: Bump version to 5.10.9. - 2007-11-09 Nick Roberts * building.texi (Watch Expressions): Remove obscure sentence. @@ -20,14 +58,6 @@ * cmdargs.texi (Misc Variables): Remove Sun windows info. -2007-10-27 Emanuele Giaquinta (tiny change) - - * gnus-faq.texi ([5.12]): Remove reference to discontinued service. - -2007-10-27 Reiner Steib - - * gnus.texi (Troubleshooting): Adjust Gnus version number. - 2007-10-30 Nick Roberts * building.texi (Watch Expressions): Describe gdb-delete-out-of-scope. @@ -37,11 +67,6 @@ * misc.texi (Directory Tracking): Explain a bit more about dirtrack-mode. -2007-10-29 Richard Stallman - - * widget.texi (Introduction): Delete discussion of implementation - internals. - 2007-10-25 Glenn Morris * fortran-xtra.texi (Fortran): F90 mode handles F2003. diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi index 6b285094735..bb359a962a3 100644 --- a/doc/emacs/calendar.texi +++ b/doc/emacs/calendar.texi @@ -1397,19 +1397,19 @@ nonmarking (with @samp{&}) when possible. specifies a regularly occurring event by offsets specified in days, weeks, and months. It is comparable to a crontab entry interpreted by the @code{cron} utility. Here is a nonmarking, floating diary entry -that applies to the last Thursday in November: +that applies to the fourth Thursday in November: @findex diary-float @example -&%%(diary-float 11 4 -1) American Thanksgiving +&%%(diary-float 11 4 4) American Thanksgiving @end example @noindent The 11 specifies November (the eleventh month), the 4 specifies Thursday (the fourth day of the week, where Sunday is numbered zero), and the -@minus{}1 specifies ``last'' (1 would mean ``first,'' 2 would mean -``second,'' @minus{}2 would mean ``second-to-last,'' and so on). The -month can be a single month or a list of months. Thus you could change +second 4 specifies the fourth Thursday (1 would mean ``first,'' 2 would +mean ``second,'' @minus{}2 would mean ``second-to-last,'' and so on). +The month can be a single month or a list of months. Thus you could change the 11 above to @samp{'(1 2 3)} and have the entry apply to the last Thursday of January, February, and March. If the month is @code{t}, the entry applies to all months of the year.@refill diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 29d1c902b7c..4bd1ba66df7 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -1099,10 +1099,14 @@ particular Lisp file. @xref{Enabling Multibyte}. the first line as well. @cindex shell scripts, and local file variables +@cindex man pages, and local file variables In shell scripts, the first line is used to identify the script interpreter, so you cannot put any local variables there. To accommodate this, Emacs looks for local variable specifications in the @emph{second} line when the first line specifies an interpreter. +The same is true for man pages which start with the magic string +@samp{'\"} to specify a list of troff preprocessors (not all do, +however). A @dfn{local variables list} goes near the end of the file, in the last page. (It is often best to put it on a page by itself.) The local diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index dc819bef178..8e2cb879754 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1270,7 +1270,7 @@ you want to use. @subsubsection Understanding the problems it addresses Version control systems provide you with three important capabilities: -@dfn{reversibility}. @dfn{concurrency}, and @dfn{history}. +@dfn{reversibility}, @dfn{concurrency}, and @dfn{history}. The most basic capability you get from a version-control system is reversibility, the ability to back up to a saved, known-good state when @@ -1298,7 +1298,7 @@ git, and Mercurial. @cindex SCCS SCCS was the first version-control system ever built, and was long ago superseded by later and more advanced ones; Emacs supports it only for -backward compatibility and historical reasons. VC compensates for +backward compatibility and historical reasons. VC compensates for certain features missing in SCCS (snapshots, for example) by implementing them itself, but some other VC features, such as multiple branches, are not available with SCCS. Since SCCS is non-free you @@ -1439,7 +1439,7 @@ happen when you check in a change to a file that conflicts with a change checked in by someone else after your checkout. Both kinds of conflict have to be resolved by human judgment and communication. - SCCS always uses locking. RCS is lock-based by default but can be + SCCS always uses locking. RCS is lock-based by default but can be told to operate in a merging style. CVS and Subversion are merge-based by default but can be told to operate in a locking mode. Most later version-control systems, such as GNU Arch, git, and @@ -1463,7 +1463,7 @@ between them as much as possible. and other operations are @dfn{file-based}; each file has its own @dfn{master file} with its own comment and revision history separate from that of all other files in the system. Later systems, beginning -with Subversion, became @dfn{changeset-based}; a checkin under these +with Subversion, are @dfn{changeset-based}; a checkin under these may include changes to several files and that change set is treated as a unit by the system. Any comment associated with the change belongs to no single file, but is attached to the changeset itself. @@ -1489,7 +1489,7 @@ systems and a bit archaic; nowadays those operations are usually called Early version-control systems were designed around a @dfn{centralized} model in which each project has only one repository used by all developers. SCCS, RCS, CVS, and Subversion share this kind of model. -It has two important problems. One is that a single repository is a +It has two important problems. One is that a single repository is a single point of failure---if the repository server is down all work stops. The other is that you need to be connected live to the server to do checkins and checkouts; if you're offline, you can't work. @@ -1622,7 +1622,7 @@ your fileset is the marked files only. If they are not, VC mode will fail when you attempt to execute a command on the fileset. - In VC, filesets, are, essentially, a way to pass multiple file + VC filesets are, essentially, a way to pass multiple file arguments as a group to underlying version-control commands. For example, on Subversion a checkin with more than one file in its fileset will become a joint commit, as though you had typed @@ -1640,7 +1640,7 @@ version-control systems. Emacs uses the concept of named filesets elsewhere (@pxref{Filesets}) to allow you to view and visit files in functional -groups. Unlike those, VC filesets are not named and don't persist +groups. Unlike those, VC filesets are not named and don't persist across sessions. @node Doing The Right Thing @@ -1803,8 +1803,8 @@ are set around the entire contents of the buffer so that it is easy to kill the contents of the buffer with @kbd{C-w}. @findex log-edit-insert-changelog - If you work by writing entries in the @file{ChangeLog} -(@pxref{Change Log}) and then commit the change under revision + If you work by first writing entries in the @file{ChangeLog} +(@pxref{Change Log}) and afterwards committing the change under revision control, you can generate the Log Edit text from the ChangeLog using @kbd{C-c C-a} (@kbd{log-edit-insert-changelog}). This looks for entries for the file(s) concerned in the top entry in the ChangeLog @@ -1845,7 +1845,7 @@ time to complete the check-in. convenient to specify the same log entry for many of the files. (This is the normal way to do things on a changeset-oriented system, where comments are attached to changesets rather than the history of -individual files.) The most convenient way to do this is to mark all the +individual files.) The most convenient way to do this is to mark all the files in VC-Dired mode and check in from there; the log buffer will carry the fileset information with it and do a group commit when you confirm it with @kbd{C-c C-c}. @@ -1952,15 +1952,15 @@ revisions are not, in general, present as files on your disk.) @kindex C-x v g For some back ends, you can display the file @dfn{annotated} with per-line revision information and using colors to enhance the visual -appearance, with the command @kbd{M-x vc-annotate}. It creates a new +appearance, with the command @kbd{M-x vc-annotate}. This creates a new buffer (the ``annotate buffer'') displaying the file's text, with each part colored to show how old it is. Text colored red is new, blue means old, and intermediate colors indicate intermediate ages. By default, the color is scaled over the full range of ages, such that the oldest changes are blue, and the newest changes are red. - When you give a prefix argument to this command, it uses the -minibuffer to read two arguments: the ID of which revision to display and + When you give a prefix argument to this command, Emacs reads two +arguments using the minibuffer: the ID of which revision to display and annotate (instead of the current file contents), and the time span in days the color range should cover. @@ -2006,7 +2006,7 @@ return to your working revision. @node Secondary VC Commands @subsection The Secondary Commands of VC - This section explains the secondary commands of VC; those that you might + This section explains the secondary commands of VC, those that you might use once a day. @menu diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index e1207738cfa..23c48b72b41 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -224,9 +224,12 @@ for text in the cut buffer. If neither of those sources provides text to yank, the kill ring contents are used. The standard coding system for X Window System selections is -@code{compound-text-with-extensions}. To specify another coding -system for selections, use @kbd{C-x @key{RET} x} or @kbd{C-x @key{RET} -X}. @xref{Communication Coding}. +@code{compound-text-with-extensions}. You may find that the pasted +text is not what you expected. In such a case, you can specify +another coding system for selections by @kbd{C-x @key{RET} x} or +@kbd{C-x @key{RET} X}, or can request the different data type by +modifying the variable @code{x-select-request-type}. +@xref{Communication Coding}. @node Word and Line Mouse @subsection Mouse Commands for Words and Lines diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi index fe7c2a85ffa..ee170e0c7da 100644 --- a/doc/emacs/help.texi +++ b/doc/emacs/help.texi @@ -155,10 +155,10 @@ Display information on the character sets, coding systems, and input methods used in language environment @var{language-env} (@code{describe-language-environment}). @item C-h F @var{function} @key{RET} -Enter Info and goes to the node that documents the Emacs function +Enter Info and go to the node that documents the Emacs function @var{function} (@code{Info-goto-emacs-command-node}). @item C-h K @var{key} -Enter Info and goes to the node that documents the key sequence +Enter Info and go to the node that documents the key sequence @var{key} (@code{Info-goto-emacs-key-command-node}). @item C-h S @var{symbol} @key{RET} Display the Info documentation on symbol @var{symbol} according to the @@ -296,8 +296,8 @@ be found by this command. Search for user-option variables whose names match @var{pattern}. @item M-x apropos-value @key{RET} @var{pattern} @key{RET} -Search for functions whose definitions @var{pattern}, and variables -whose values match @var{pattern}. +Search for functions whose definitions match @var{pattern}, and +variables whose values match @var{pattern}. @item C-h d @var{pattern} @key{RET} Search for functions and variables whose @strong{documentation @@ -545,9 +545,9 @@ documentation of @var{function} or @var{key}. @findex info-lookup-symbol When editing a program, if you have an Info version of the manual for the programming language, you can use @kbd{C-h S} -(@code{info-lookup-symbol}) to find symbol (keyword, function or -variable) in the proper manual. The details of how this command works -depend on the major mode. +(@code{info-lookup-symbol}) to find an entry for a symbol (keyword, +function or variable) in the proper manual. The details of how this +command works depend on the major mode. @kindex C-h l @findex view-lossage @@ -642,24 +642,23 @@ Emacs (@code{describe-no-warranty}). @cindex tooltips @cindex balloon help - When a region of text is ``active,'' so that you can select it with -the mouse or a key like @kbd{RET}, it often has associated help text. -For instance, most parts of the mode line have help text. On -graphical displays, the help text is displayed as a ``tooltip'' -(sometimes known as ``balloon help''), when you move the mouse over -the active text. @xref{Tooltips}. On some systems, it is shown in -the echo area. On text-only terminals, if Emacs cannot follow the -mouse, it cannot show the help text on mouse-over. + When text on the screen is ``active'', so that it does something +special in response to mouse clicks or @kbd{RET}, it often has associated +help text. For instance, most parts of the mode line have help text. On +terminals that support mouse tracking, Emacs displays the help text as a +``tooltip'' (sometimes known as ``balloon help'') or in the echo area, +whenever you leave the mouse stationary over the active text. +@xref{Tooltips}. @kindex C-h . @findex display-local-help @vindex help-at-pt-display-when-idle - You can also access text region help info using the keyboard. The -command @kbd{C-h .} (@code{display-local-help}) displays any help text -associated with the text at point, using the echo area. If you want -help text to be displayed automatically whenever it is available at -point, set the variable @code{help-at-pt-display-when-idle} to -@code{t}. + If your terminal doesn't support mouse-tracking, you can display the +help text for active buffer text using the keyboard. @kbd{C-h .} +(@code{display-local-help}) displays any help text associated with the +character after point, using the echo area. To display help text +automatically whenever it is available on the character after point, set +the variable @code{help-at-pt-display-when-idle} to @code{t}. @ignore arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1 diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 988d5890b8c..24337cb6f9e 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -367,7 +367,10 @@ etags @var{inputfiles}@dots{} @noindent The @code{etags} program reads the specified files, and writes a tags -table named @file{TAGS} in the current working directory. +table named @file{TAGS} in the current working directory. You can +optionally specify a different file name for the tags table by using the +@samp{--output=@var{file}} option; specifying @file{-} as a file name +prints the tags table to standard output. If the specified files don't exist, @code{etags} looks for compressed versions of them and uncompresses them to read them. Under @@ -406,7 +409,8 @@ well as the files it directly contains. directory where the tags file was initially written. This way, you can move an entire directory tree containing both the tags file and the source files, and the tags file will still refer correctly to the source -files. If the tags file is in @file{/dev}, however, the file names are +files. If the tags file is @file{-} or is in the @file{/dev} directory, +however, the file names are made relative to the current working directory. This is useful, for example, when writing the tags to @file{/dev/stdout}. diff --git a/doc/emacs/major.texi b/doc/emacs/major.texi index 1cb76ee5fdf..3980c5de003 100644 --- a/doc/emacs/major.texi +++ b/doc/emacs/major.texi @@ -174,7 +174,10 @@ interpreter program names and major modes. systems) use the @samp{-*-} feature on the first line, because the system would get confused when running the interpreter. So Emacs looks for @samp{-*-} on the second line in such files as well as on the -first line. +first line. The same is true for man pages which start with the magic +string @samp{'\"} to specify a list of troff preprocessors (not all do, +however). + @vindex default-major-mode When you visit a file that does not specify a major mode to use, or diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index 0def4bc5c3e..d7dd364b6d0 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -1086,6 +1086,20 @@ you override it by using the command again. The command @kbd{C-x @key{RET} X} (@code{set-next-selection-coding-system}) specifies the coding system for the next selection made in Emacs or read by Emacs. +@vindex x-select-request-type + The variable @code{x-select-request-type} specifies the data type to +request from the X Window System for receiving text selections from +other applications. If the value is @code{nil} (the default), Emacs +tries @code{COMPOUND_TEXT} and @code{UTF8_STRING}, in this order, and +uses various heuristics to choose the more appropriate of the two +results; if none of these succeed, Emacs falls back on @code{STRING}. +If the value of @code{x-select-request-type} is one of the symbols +@code{COMPOUND_TEXT}, @code{UTF8_STRING}, @code{STRING}, or +@code{TEXT}, Emacs uses only that request type. If the value is a +list of some of these symbols, Emacs tries only the request types in +the list, in order, until one of them succeeds, or until the list is +exhausted. + @kindex C-x RET p @findex set-buffer-process-coding-system The command @kbd{C-x @key{RET} p} (@code{set-buffer-process-coding-system}) @@ -1115,6 +1129,15 @@ specified by one of the environment variables @env{LC_ALL}, specified above, whose value is nonempty is the one that determines the text representation.) +@vindex x-select-request-type + The variable @code{x-select-request-type} specifies a selection data +type of selection to request from the X server. The default value is +@code{nil}, which means Emacs tries @code{COMPOUND_TEXT} and +@code{UTF8_STRING}, and uses whichever result seems more appropriate. +You can explicitly specify the data type by setting the variable to +one of the symbols @code{COMPOUND_TEXT}, @code{UTF8_STRING}, +@code{STRING} and @code{TEXT}. + @node File Name Coding @section Coding Systems for File Names diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 284809bdac1..586f250bd06 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,71 @@ +2007-12-04 Richard Stallman + + * objects.texi (Symbol Type): Fix typo. + +2007-12-03 Richard Stallman + + * hooks.texi (Standard Hooks): Add link to Hooks for Loading. + +2007-12-01 Glenn Morris + + * functions.texi (Declaring Functions): Improve previous change. + +2007-11-30 Glenn Morris + + * functions.texi (Declaring Functions): Add optional fourth + argument of declare-function, and setting third argument to `t'. + +2007-11-29 Richard Stallman + + * customize.texi (Composite Types): Document `group' type. + +2007-11-29 Glenn Morris + + * functions.texi (Declaring Functions): Add findex. Mention + `external' files. + +2007-11-26 Juanma Barranquero + + * functions.texi (Declaring Functions): Fix directive. + +2007-11-25 Richard Stallman + + * help.texi (Help Functions): Clean up last change. + + * advice.texi (Preactivation, Activation of Advice): Minor cleanup. + + * loading.texi (Named Features): Minor cleanup. + + * macros.texi (Eval During Expansion): Minor cleanup. + + * variables.texi (Variable Aliases): Minor cleanup. + +2007-11-24 Richard Stallman + + * functions.texi (Declaring Functions): Clarify previous change. + + * compile.texi (Compiler Errors): Clarify previous change. + +2007-11-24 Richard Stallman + + * display.texi (Refresh Screen, Forcing Redisplay): + Clarify the text and move items around. + +2007-11-24 Glenn Morris + + * functions.texi (Declaring Functions): New section. + * compile.texi (Compiler Errors): Mention declaring functions, + defvar with no initvalue, and byte-compile-warnings. + +2007-11-15 Martin Rudalics + + * vol1.texi (Top): Remove Frame-Local Variables from Node Listing. + * vol2.texi (Top): Remove Frame-Local Variables from Node Listing. + +2007-11-13 Martin Rudalics + + * help.texi (Help Functions): Document new macro `with-help-window'. + 2007-11-10 Paul Pogonyshev * searching.texi (Replacing Match): Describe new @@ -1743,7 +1811,7 @@ Explain string and vector representations of key sequences * keymaps.texi (Changing Key Bindings): - * commands.texi (Interactive Codes, Interactive Codes): + * commands.texi (Interactive Codes): * help.texi (Describing Characters): Refer to it. 2006-05-23 Luc Teirlinck @@ -3500,8 +3568,7 @@ * text.texi (Undo): Document extensible undo entries. - * searching.texi (String Search, Regexp Search, Regexp Search): - Cleanups. + * searching.texi (String Search, Regexp Search): Cleanups. * nonascii.texi (Character Codes): Minor fix. diff --git a/doc/lispref/advice.texi b/doc/lispref/advice.texi index 7eb89d7bd41..168135ef794 100644 --- a/doc/lispref/advice.texi +++ b/doc/lispref/advice.texi @@ -448,7 +448,7 @@ that results from activating advice for a function. A value of @code{always} specifies to compile unconditionally. A value of @code{never} specifies never compile the advice. -A value of @code{maybe} specifies to compile if the byte-compiler is +A value of @code{maybe} specifies to compile if the byte compiler is already loaded. A value of @code{like-original} specifies to compile the advice if the original definition of the advised function is compiled or a built-in function. @@ -545,11 +545,11 @@ work properly, because of a mismatch. Activation of the advised function takes longer than usual. @item -The byte-compiler gets +The byte compiler gets loaded while an advised function gets activated. @item @code{byte-compile} is included in the value of @code{features} even -though you did not ever explicitly use the byte-compiler. +though you did not ever explicitly use the byte compiler. @end itemize Compiled preactivated advice works properly even if the function itself diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi index aeaa9f79eb8..292c52a6dfa 100644 --- a/doc/lispref/compile.texi +++ b/doc/lispref/compile.texi @@ -505,9 +505,14 @@ The call to @var{func} must be in the @var{then-form} of the @code{if}, and @var{func} must appear quoted in the call to @code{fboundp}. (This feature operates for @code{cond} as well.) - Likewise, you can suppress a compiler warning for an unbound variable -@var{variable} by conditionalizing its use on a @code{boundp} test, -like this: + You can tell the compiler that a function is defined using +@code{declare-function} (@pxref{Declaring Functions}). Likewise, you +can tell the compiler that a variable is defined using @code{defvar} +with no initial value. + + You can suppress the compiler warning for a specific use of an +undefined variable @var{variable} by conditionalizing its use on a +@code{boundp} test, like this: @example (if (boundp '@var{variable}) ...@var{variable}...) @@ -518,8 +523,8 @@ The reference to @var{variable} must be in the @var{then-form} of the @code{if}, and @var{variable} must appear quoted in the call to @code{boundp}. - You can suppress any compiler warnings using the construct -@code{with-no-warnings}: + You can suppress any and all compiler warnings within a certain +expression using the construct @code{with-no-warnings}: @c This is implemented with a defun, but conceptually it is @c a special form. @@ -530,9 +535,13 @@ but the compiler does not issue warnings for anything that occurs inside @var{body}. We recommend that you use this construct around the smallest -possible piece of code. +possible piece of code, to avoid missing possible warnings other than one +one you intend to suppress. @end defspec + More precise control of warnings is possible by setting the variable +@code{byte-compile-warnings}. + @node Byte-Code Objects @section Byte-Code Function Objects @cindex compiled function diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index 7c723a29f28..b97ce20fc22 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -755,6 +755,11 @@ string, and the third a function. In the customization buffer, each element is displayed and edited separately, according to the type specified for it. +@item (group @var{element-types}@dots{}) +This works like @code{list} except for the formatting +of text in the Custom buffer. @code{list} labels each +element value with its tag; @code{group} does not. + @item (vector @var{element-types}@dots{}) Like @code{list} except that the value must be a vector instead of a list. The elements work the same as in @code{list}. diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 4c9df9c5ede..165636006d3 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -55,21 +55,10 @@ This function clears and redisplays frame @var{frame}. This function clears and redisplays all visible frames. @end deffn - This function calls for redisplay of certain windows, the next time -redisplay is done, but does not clear them first. - -@defun force-window-update &optional object -This function forces some or all windows to be updated on next redisplay. -If @var{object} is a window, it forces redisplay of that window. If -@var{object} is a buffer or buffer name, it forces redisplay of all -windows displaying that buffer. If @var{object} is @code{nil} (or -omitted), it forces redisplay of all windows. -@end defun - - Processing user input takes absolute priority over redisplay. If you -call these functions when input is available, they do nothing -immediately, but a full redisplay does happen eventually---after all the -input has been processed. + In Emacs, processing user input takes priority over redisplay. If +you call these functions when input is available, they don't redisplay +immediately, but the requested redisplay does happen +eventually---after all the input has been processed. Normally, suspending and resuming Emacs also refreshes the screen. Some terminal emulators record separate contents for display-oriented @@ -89,11 +78,56 @@ to redraw, @code{nil} means redrawing is needed. The default is @code{nil}. @section Forcing Redisplay @cindex forcing redisplay + Emacs normally tries to redisplay the screen whenever it waits for +input. With this function you can request an immediate attempt to +redisplay, in the middle of Lisp code, without actually waiting for +input. + +@defun redisplay &optional force +This function tries immediately to redisplay, provided there are no +pending input events. It is equivalent to @code{(sit-for 0)}. + +If the optional argument @var{force} is non-@code{nil}, it does all +pending redisplay work even if input is available, with no +pre-emption. + +The function returns @code{t} if it actually tried to redisplay, and +@code{nil} otherwise. A value of @code{t} does not mean that +redisplay proceeded to completion; it could have been pre-empted by +newly arriving terminal input. +@end defun + + @code{redisplay} with no argument tries immediately to redisplay, +but has no effect on the usual rules for what parts of the screen to +redisplay. By contrast, the following function adds certain windows +to the pending redisplay work (as if their contents had completely +changed), but doesn't immediately try to do any redisplay work. + +@defun force-window-update &optional object +This function forces some or all windows to be updated on next +redisplay. If @var{object} is a window, it requires eventual +redisplay of that window. If @var{object} is a buffer or buffer name, +it requires eventual redisplay of all windows displaying that buffer. +If @var{object} is @code{nil} (or omitted), it requires eventual +redisplay of all windows. +@end defun + + @code{force-window-update} does not do a redisplay immediately. +(Emacs will do that when it waits for input.) Rather, its effect is +to put more work on the queue to be done by redisplay whenever there +is a chance. + Emacs redisplay normally stops if input arrives, and does not happen at all if input is available before it starts. Most of the time, this is exactly what you want. However, you can prevent preemption by binding @code{redisplay-dont-pause} to a non-@code{nil} value. +@defvar redisplay-dont-pause +If this variable is non-@code{nil}, pending input does not +prevent or halt redisplay; redisplay occurs, and finishes, +regardless of whether input is available. +@end defvar + @defvar redisplay-preemption-period This variable specifies how many seconds Emacs waits between checks for new input during redisplay. (The default is 0.1 seconds.) If @@ -107,22 +141,6 @@ This variable is only obeyed on graphical terminals. For text terminals, see @ref{Terminal Output}. @end defvar -@defvar redisplay-dont-pause -If this variable is non-@code{nil}, pending input does not -prevent or halt redisplay; redisplay occurs, and finishes, -regardless of whether input is available. -@end defvar - -@defun redisplay &optional force -This function performs an immediate redisplay provided there are no -pending input events. This is equivalent to @code{(sit-for 0)}. - -If the optional argument @var{force} is non-@code{nil}, it forces an -immediate and complete redisplay even if input is available. - -Returns @code{t} if redisplay was performed, or @code{nil} otherwise. -@end defun - @node Truncation @section Truncation @cindex line wrapping diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 601644629e5..3767e778cf7 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -23,6 +23,7 @@ define them. of a symbol. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler will open code. +* Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives that have a special bearing on how functions work. @@ -1222,6 +1223,88 @@ do for macros. (@xref{Argument Evaluation}.) Inline functions can be used and open-coded later on in the same file, following the definition, just like macros. +@node Declaring Functions +@section Telling the Compiler that a Function is Defined +@cindex function declaration +@cindex declaring functions +@findex declare-function + +Byte-compiling a file often produces warnings about functions that the +compiler doesn't know about (@pxref{Compiler Errors}). Sometimes this +indicates a real problem, but usually the functions in question are +defined in other files which would be loaded if that code is run. For +example, byte-compiling @file{fortran.el} used to warn: + +@smallexample +In end of data: +fortran.el:2152:1:Warning: the function `gud-find-c-expr' is not known to be defined. +@end smallexample + +In fact, @code{gud-find-c-expr} is only used in the function that +Fortran mode uses for the local value of +@code{gud-find-expr-function}, which is a callback from GUD; if it is +called, the GUD functions will be loaded. When you know that such a +warning does not indicate a real problem, it is good to suppress the +warning. That makes new warnings which might mean real problems more +visible. You do that with @code{declare-function}. + +All you need to do is add a @code{declare-function} statement before the +first use of the function in question: + +@smallexample +(declare-function gud-find-c-expr "gud.el" nil) +@end smallexample + +This says that @code{gud-find-c-expr} is defined in @file{gud.el} (the +@samp{.el} can be omitted). The compiler takes for granted that that file +really defines the function, and does not check. + + The optional third argument specifies the argument list of +@code{gud-find-c-expr}. In this case, it takes no arguments +(@code{nil} is different from not specifying a value). In other +cases, this might be something like @code{(file &optional overwrite)}. +You don't have to specify the argument list, but if you do the +byte compiler can check that the calls match the declaration. + +@defmac declare-function function file &optional arglist fileonly +Tell the byte compiler to assume that @var{function} is defined, with +arguments @var{arglist}, and that the definition should come from +the file @var{file}. @var{fileonly} non-nil means only check that +@var{file} exists, not that it actually defines @var{function}. +@end defmac + + To verify that these functions really are declared where +@code{declare-function} says they are, use @code{check-declare-file} +to check all @code{declare-function} calls in one source file, or use +@code{check-declare-directory} check all the files in and under a +certain directory. + + These commands find the file that ought to contain a function's +definition using @code{locate-library}; if that finds no file, they +expand the definition file name relative to the directory of the file +that contains the @code{declare-function} call. + + You can also say that a function is defined by C code by specifying +a file name ending in @samp{.c}. @code{check-declare-file} looks for +these files in the C source code directory. This is useful only when +you call a function that is defined only on certain systems. Most +of the primitive functions of Emacs are always defined so they will +never give you a warning. + + Sometimes a file will optionally use functions from an external package. +If you prefix the filename in the @code{declare-function} statement with +@samp{ext:}, then it will be checked if it is found, otherwise skipped +without error. + + There are some function definitions that @samp{check-declare} does not +understand (e.g. @code{defstruct} and some other macros). In such cases, +you can pass a non-@code{nil} @var{fileonly} argument to +@code{declare-function}, meaning to only check that the file exists, not +that it actually defines the function. Note that to do this without +having to specify an argument list, you should set the @var{arglist} +argument to @code{t} (because @code{nil} means an empty argument list, as +opposed to an unspecified one). + @node Function Safety @section Determining whether a Function is Safe to Call @cindex function safety diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 64b6a6ecfa2..1454e5ab95e 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -687,6 +687,18 @@ This macro is used in the command @code{help-for-help} which is the binding of @kbd{C-h C-h}. @end defmac +@defmac with-help-window buffer-name body@dots{} +This macro evaluates the @var{body} forms, inserting any output they +produce into a buffer named @var{buffer-name} like +@code{with-output-to-temp-buffer} (@pxref{Temporary Displays}). It +also puts that buffer in Help mode, displays a message telling the +user how to quit and scroll the help window, and does various other +things that make a help window work better. + +Don't use @code{print-help-return-message} in the body of this macro; +it would cause bad results. +@end defmac + @defopt three-step-help If this variable is non-@code{nil}, commands defined with @code{make-help-screen} display their @var{help-line} strings in the diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi index d0bb2de8675..3f7f4b4d8bb 100644 --- a/doc/lispref/hooks.texi +++ b/doc/lispref/hooks.texi @@ -31,6 +31,10 @@ these functions are called in a special way (they are passed arguments, or their values are used). The variables whose names end in @samp{-function} have single functions as their values. +A special feature allows you to specify expressions to evaluate if and +when a file is loaded (@pxref{Hooks for Loading}). That feature is +not exactly a hook, but does a similar job. + @c We need to xref to where each hook is documented or else document @c it here. diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index cbea262cc45..06f9b6bc016 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -692,7 +692,7 @@ done. When @code{require} is used at top level in a file, it takes effect when you byte-compile that file (@pxref{Byte Compilation}) as well as when you load it. This is in case the required package contains macros -that the byte compiler must know about. It also avoids byte-compiler +that the byte compiler must know about. It also avoids byte compiler warnings for functions and variables defined in the file loaded with @code{require}. diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index 152b7b652b6..81477bb2eff 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -623,7 +623,7 @@ it. Here is an example: Another problem with calling @code{eval} in a macro definition is that it probably won't do what you intend in a compiled program. The -byte-compiler runs macro definitions while compiling the program, when +byte compiler runs macro definitions while compiling the program, when the program's own computations (which you might have wished to access with @code{eval}) don't occur and its local variable bindings don't exist. diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index 0da05488858..64c79d63162 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -525,7 +525,7 @@ bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper. A @dfn{symbol} in GNU Emacs Lisp is an object with a name. The symbol name serves as the printed representation of the symbol. In -ordinary Lisp use, with one single obarray (@pxref{Creating Symbols}, +ordinary Lisp use, with one single obarray (@pxref{Creating Symbols}), a symbol's name is unique---no two symbols have the same name. A symbol can serve as a variable, as a function name, or to hold a diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index 0ca217dbe47..aee7d4f8be3 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -1701,7 +1701,7 @@ the old name is obsolete and therefore that it may be removed at some stage in the future. @defun make-obsolete-variable obsolete-name current-name &optional when -This function makes the byte-compiler warn that the variable +This function makes the byte compiler warn that the variable @var{obsolete-name} is obsolete. If @var{current-name} is a symbol, it is the variable's new name; then the warning message says to use @var{current-name} instead of @var{obsolete-name}. If @var{current-name} diff --git a/doc/lispref/vol1.texi b/doc/lispref/vol1.texi index d41b2f076df..5784ed0b19b 100644 --- a/doc/lispref/vol1.texi +++ b/doc/lispref/vol1.texi @@ -441,7 +441,6 @@ Variables * Setting Variables:: Storing new values in variables. * Variable Scoping:: How Lisp chooses among local and global values. * Buffer-Local Variables:: Variable values in effect only in one buffer. -* Frame-Local Variables:: Variable values in effect only in one frame. * Future Local Variables:: New kinds of local values we might add some day. * File Local Variables:: Handling local variable lists in files. * Variable Aliases:: Variables that are aliases for other variables. diff --git a/doc/lispref/vol2.texi b/doc/lispref/vol2.texi index 515973c6281..c27f004e16f 100644 --- a/doc/lispref/vol2.texi +++ b/doc/lispref/vol2.texi @@ -440,7 +440,6 @@ Variables * Setting Variables:: Storing new values in variables. * Variable Scoping:: How Lisp chooses among local and global values. * Buffer-Local Variables:: Variable values in effect only in one buffer. -* Frame-Local Variables:: Variable values in effect only in one frame. * Future Local Variables:: New kinds of local values we might add some day. * File Local Variables:: Handling local variable lists in files. * Variable Aliases:: Variables that are aliases for other variables. diff --git a/doc/man/ChangeLog b/doc/man/ChangeLog index 24cae258db5..90346a186a7 100644 --- a/doc/man/ChangeLog +++ b/doc/man/ChangeLog @@ -1,3 +1,12 @@ +2007-11-22 Francesco Potort,Al(B + + * etags.1: Ctags and Etags now share the same defaults, so remove + --defines, --globals, --members, --typedefs, --typedefs-and-c++. + +2007-11-15 Francesco Potort,Al(B + + * etags.1: Note that you can use "-" for stdout with -o. + 2007-09-06 Glenn Morris * ctags.1, emacs.1, emacsclient.1, etags.1: Move from etc/ to diff --git a/doc/man/etags.1 b/doc/man/etags.1 index 04b67f389f4..897cd0b881a 100644 --- a/doc/man/etags.1 +++ b/doc/man/etags.1 @@ -32,11 +32,10 @@ etags, ctags \- generate tag file for Emacs, vi [\|\-\-parse\-stdin=\fIfile\fP\|] .br [\|\-\-append\|] [\|\-\-backward\-search\|] -[\|\-\-cxref\|] [\|\-\-defines\|] [\|\-\-forward\-search\|] -[\|\-\-globals\|] [\|\-\-ignore\-indentation\|] -[\|\-\-language=\fIlanguage\fP\|] [\|\-\-members\|] +[\|\-\-cxref\|] [\|\-\-no\-defines\|] [\|\-\-forward\-search\|] +[\|\-\-no\-globals\|] [\|\-\-ignore\-indentation\|] +[\|\-\-language=\fIlanguage\fP\|] [\|\-\-no\-members\|] [\|\-\-output=\fItagfile\fP\|] [\|\-\-regex=\fIregexp\fP\|] -[\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|] [\|\-\-update\|] [\|\-\-help\|] [\|\-\-version\|] \fIfile\fP .\|.\|. @@ -59,9 +58,9 @@ table (defaults: \fBTAGS\fP for \fBetags\fP, \fBtags\fP for \fBctags\fP) in the current working directory. Files specified with relative file names will be recorded in the tag table with file names relative to the directory where the tag table -resides. If the tag table is in /dev, however, the file names are made -relative to the working directory. Files specified with absolute file -names will be recorded +resides. If the tag table is in /dev or is the standard output, +however, the file names are made relative to the working directory. +Files specified with absolute file names will be recorded with absolute file names. Files generated from a source file\-\-like a C file generated from a source Cweb file\-\-will be recorded with the name of the source file. @@ -91,28 +90,14 @@ Only \fBctags\fP accepts this option. In C and derived languages, create tags for function declarations, and create tags for extern variables unless \-\-no\-globals is used. .TP -.B \-d, \-\-defines -Create tag entries for C preprocessor constant definitions -and enum constants, too. Since this is the default behavior of -\fBetags\fP, only \fBctags\fP accepts this option. -.TP .B \-D, \-\-no\-defines Do not create tag entries for C preprocessor constant definitions and enum constants. This may make the tags file much smaller if many header files are tagged. -Since this is the default behavior of \fBctags\fP, only \fBetags\fP -accepts this option. -.TP -.B \-\-globals -Create tag entries for global variables in C, C++, Objective C, Java, -and Perl. -Since this is the default behavior of \fBetags\fP, only \fBctags\fP -accepts this option. .TP .B \-\-no\-globals Do not tag global variables. Typically this reduces the file size by -one fourth. Since this is the default behavior of \fBctags\fP, only -\fBetags\fP accepts this option. +one fourth. .TP \fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP Include a note in the tag file indicating that, when searching for a @@ -135,10 +120,10 @@ regexp matching is done in this case (see the \fB\-\-regex\fP option). .TP .B \-\-members Create tag entries for variables that are members of structure-like -constructs in C++, Objective C, Java. This is the default for etags. +constructs in C++, Objective C, Java. This is the default. .TP .B \-\-no\-members -Do not tag member variables. This is the default for ctags. +Do not tag member variables. .TP .B \-\-packages\-only Only tag packages in Ada files. @@ -149,8 +134,9 @@ May be used (only once) in place of a file name on the command line. as belonging to the file \fBFILE\fP. .TP \fB\-o\fP \fItagfile\fP, \fB\-\-output=\fItagfile\fP -Explicit name of file for tag table; overrides default \fBTAGS\fP or -\fBtags\fP. (But ignored with \fB\-v\fP or \fB\-x\fP.) +Explicit name of file for tag table; for \fBetags\fP only, a file name +of \- means standard output; overrides default \fBTAGS\fP or \fBtags\fP. +(But ignored with \fB\-v\fP or \fB\-x\fP.) .TP \fB\-r\fP \fIregexp\fP, \fB\-\-regex=\fIregexp\fP @@ -241,15 +227,6 @@ reads the regexes contained in the file regex.file. Don't do any more regexp matching on the following files. May be freely intermixed with filenames and the \fB\-\-regex\fP option. .TP -.B \-t, \-\-typedefs -Record typedefs in C code as tags. Since this is the default behavior -of \fBetags\fP, only \fBctags\fP accepts this option. -.TP -.B \-T, \-\-typedefs\-and\-c++ -Generate tag entries for typedefs, struct, enum, and union tags, and -C++ member functions. Since this is the default behavior -of \fBetags\fP, only \fBctags\fP accepts this option. -.TP .B \-u, \-\-update Update tag entries for \fIfiles\fP specified on command line, leaving tag entries for other files in place. Currently, this is implemented diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 63f9a6e596f..61fd28a0622 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,9 +1,125 @@ +2007-12-03 Lars Magne Ingebrigtsen + + * gnus.texi (Other Files): Add the yenc command. + +2007-11-30 Reiner Steib + + * gnus.texi (MIME Commands): Default of gnus-article-loose-mime is t + since 2004-08-06. + +2007-11-28 Katsumi Yamaoka + + * gnus.texi (Fancy Mail Splitting): Fix description of splitting based + on body. + +2007-11-27 Katsumi Yamaoka + + * emacs-mime.texi (rfc2047): Mention rfc2047-encoded-word-regexp-loose + and rfc2047-allow-irregular-q-encoded-words; fix description of + rfc2047-encode-encoded-words. + +2007-11-24 Reiner Steib + + * gnus.texi (Fetching Mail): Remove obsoleted `nnmail-spool-file'. + +2007-12-05 Michael Olson + + * remember.texi (Diary): Remove "require" line for remember-diary.el. + Update documentation for `remember-diary-file'. + +2007-12-04 Michael Albinus + + * dbus.texi (Signals): Precise `dbus-register-signal'. + (Errors and Events): Rework events part, the internal structure of + dbus-event has changed. + +2007-12-03 Juanma Barranquero + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS, clean): Add dbus. + ($(infodir)/dbus, dbus.dvi): New targets. + +2007-12-03 Michael Albinus + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Apply dbus and dbus.dvi + unconditionally. + + * dbus.texi (Synchronous Methods): Show the result of the "lshal" + emulation with @print{}. + +2007-12-02 Richard Stallman + + * dbus.texi (Overview): Minor cleanup. + +2007-12-02 Michael Albinus + + * Makefile.in (INFO_TARGETS): Add dbus. + (DVI_TARGETS): Add dbus.dvi. + (dbus, dbus.dvi): New targets. + + * dbus.texi: New file. + +2007-11-24 Romain Francoise + + * nxml-mode.texi: Add description in @direntry. + Fix file name to match @setfilename. + +2007-11-23 Mark A. Hershberger + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add nxml-mode. + ($(infodir)/nxml-mode): New rule. + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Add nxml-mode. + ($(infodir)/nxml-mode): New rule. + (clean): Add nxml-mode*. + + * nxml-mode.texi: New file with nxml manual. + +2007-11-18 Richard Stallman + + * flymake.texi (Example -- Configuring a tool called directly): + Update example. + +2007-11-18 Michael Albinus + + * tramp.texi (Filename completion): Simplify explanation of + double-slash behaviour. Explain directory contents flushing. + +2007-11-16 Jay Belanger + + * calc.texi (TeX and LaTeX Language Modes): Put in + missing braces. + +2007-11-15 Richard Stallman + + * cl.texi (Equality Predicates): Delete `eql'. + (Predicates, Naming Conventions, Top): Delete `eql'. + (Common Lisp Compatibility): Delete `eql'. + (Porting Common Lisp): Delete obsolete backquote info. + Minor clarification about character constants. + (Sequence Basics): Minor clarification. + +2007-11-15 Juanma Barranquero + + * cc-mode.texi (Electric Keys, Custom Macros): + * tramp.texi (Filename completion): Fix typos. + +2007-11-15 Jay Belanger + + * calc.texi (Basic commands): Mention the menu. + +2007-11-12 Michael Albinus + + * tramp.texi (Connection caching): Tramp flushes connection + properties when remote operating system has been changed. + 2007-11-09 Reiner Steib * gnus-news.texi: Fix spelling. `message-insert-formatted-citation-line', not `message-insert-formated-citation-line'. + * gnus.texi, gnus-faq.texi, message.texi: Bump version to 5.10.9. + 2007-11-07 Michael Albinus * tramp.texi (Overview): Mention also the PuTTY integration under @@ -41,6 +157,11 @@ (Keystrokes): Document C-c C-k. (Introduction): Fix typographical issue with "---". +2007-10-29 Richard Stallman + + * widget.texi (Introduction): Delete discussion of implementation + internals. + 2007-10-29 Michael Albinus * tramp.texi (Connection caching): Host names must be different @@ -504,6 +625,14 @@ * gnus.texi (Top): Add SASL. +2007-10-27 Emanuele Giaquinta (tiny change) + + * gnus-faq.texi ([5.12]): Remove reference to discontinued service. + +2007-10-27 Reiner Steib + + * gnus.texi (Troubleshooting): Adjust Gnus version number. + 2007-10-27 Jay Belanger * calc.texi (Formulas, Composition Basics): Lower the @@ -1621,7 +1750,7 @@ (Custom Filling and Breaking, Custom Braces, Syntactic Symbols) (Line-Up Functions, Custom Macros): * ediff.texi (Window and Frame Configuration) - (Highlighting Difference Regions, Highlighting Difference Regions): + (Highlighting Difference Regions): * emacs-mime.texi (Display Customization): * erc.texi (History): * eshell.texi (Known problems): @@ -1629,7 +1758,7 @@ * gnus.texi (NNTP, IMAP, Advanced Scoring Examples) (The problem of spam, SpamOracle, Extending the Spam package) (Conformity, Terminology): - * idlwave.texi (Routine Info, Routine Info) + * idlwave.texi (Routine Info) (Class and Keyword Inheritance, Padding Operators) (Breakpoints and Stepping, Electric Debug Mode) (Examining Variables, Troubleshooting): diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 93982f419dc..e8ab579c079 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -44,6 +44,7 @@ INFO_TARGETS = \ $(infodir)/calc \ $(infodir)/ccmode \ $(infodir)/cl \ + $(infodir)/dbus \ $(infodir)/dired-x \ $(infodir)/ebrowse \ $(infodir)/ediff \ @@ -60,6 +61,7 @@ INFO_TARGETS = \ $(infodir)/message \ $(infodir)/mh-e \ $(infodir)/newsticker \ + $(infodir)/nxml-mode \ $(infodir)/org \ $(infodir)/pcl-cvs \ $(infodir)/pgg \ @@ -84,6 +86,7 @@ DVI_TARGETS = \ calc.dvi \ cc-mode.dvi \ cl.dvi \ + dbus.dvi \ dired-x.dvi \ ebrowse.dvi \ ediff.dvi \ @@ -100,6 +103,7 @@ DVI_TARGETS = \ message.dvi \ mh-e.dvi \ newsticker.dvi \ + nxml-mode.dvi \ org.dvi \ pcl-cvs.dvi \ pgg.dvi \ @@ -173,6 +177,12 @@ $(infodir)/cl: cl.texi cl.dvi: cl.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi +dbus : $(infodir)/dbus +$(infodir)/dbus: dbus.texi + cd $(srcdir); $(MAKEINFO) dbus.texi +dbus.dvi: dbus.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/dbus.texi + dired-x : $(infodir)/dired-x $(infodir)/dired-x: dired-x.texi cd $(srcdir); $(MAKEINFO) dired-x.texi @@ -278,6 +288,12 @@ $(infodir)/newsticker: newsticker.texi newsticker.dvi: newsticker.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi +nxml-mode : $(infodir)/nxml-mode +$(infodir)/nxml-mode: nxml-mode.texi + cd $(srcdir); $(MAKEINFO) nxml-mode.texi +nxml-mode.dvi: nxml-mode.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/nxml-mode.texi + org : $(infodir)/org $(infodir)/org: org.texi cd $(srcdir); $(MAKEINFO) org.texi diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index 2441f0c1166..b8a42f3c746 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -9667,6 +9667,11 @@ is like @kbd{M-x} except that it enters the initial string @samp{calc-} for you. For example, the following key sequences are equivalent: @kbd{S}, @kbd{M-x calc-sin @key{RET}}, @kbd{x sin @key{RET}}. +Although Calc is designed to be used from the keyboard, some of +Calc's more common commands are available from a menu. In the menu, the +arguments to the functions are given by referring to their stack level +numbers. + @cindex Extensions module @cindex @file{calc-ext} module The Calculator exists in many parts. When you type @kbd{C-x * c}, the @@ -14001,7 +14006,7 @@ mode may display it differently. Formulas are entered and displayed in the appropriate notation; @texline @math{\sin(a/b)} @infoline @expr{sin(a/b)} -will appear as @samp{\sin\left( a \over b \right)} in @TeX{} mode and +will appear as @samp{\sin\left( @{a \over b@} \right)} in @TeX{} mode and @samp{\sin\left(\frac@{a@}@{b@}\right)} in La@TeX{} mode. Math formulas are often enclosed by @samp{$ $} signs in @TeX{} and La@TeX{}; these should be omitted when interfacing with Calc. To Calc, diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index f4d65ed07aa..7c9a2ac1f1b 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -1228,7 +1228,7 @@ reindenting the line. This reindentation saves you from having to reindent a line manually after typing, say, a @samp{@}}. A few keywords, such as @code{else}, also trigger electric action. -You can inhibit the electric behaviour described here by disabling +You can inhibit the electric behavior described here by disabling electric minor mode (@pxref{Minor Modes}). Common to all these keys is that they only behave electrically when @@ -1281,7 +1281,7 @@ whitespace before it). Additionally, you can configure @ccmode{} so that typing a slash at the start of a line within a block comment will terminate the comment. You don't need to have electric minor mode enabled to get -this behaviour. @xref{Clean-ups}. +this behavior. @xref{Clean-ups}. In AWK mode, @samp{*} and @samp{/} do not delimit comments and are not electric. @@ -6458,7 +6458,7 @@ functions to this hook, not remove them. @xref{Style Variables}. @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Normally, the lines in a multi-line macro are indented relative to -each other as though they were code. You can suppress this behaviour +each other as though they were code. You can suppress this behavior by setting the following user option: @defopt c-syntactic-indentation-in-macros diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index c27021cb325..ea485ef84f8 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -62,14 +62,14 @@ does assume a basic familiarity with Emacs Lisp. @menu * Overview:: Installation, usage, etc. * Program Structure:: Arglists, `eval-when', `defalias' -* Predicates:: `typep', `eql', and `equalp' +* Predicates:: `typep' and `equalp' * Control Structure:: `setf', `do', `loop', etc. * Macros:: Destructuring, `define-compiler-macro' * Declarations:: `proclaim', `declare', etc. * Symbols:: Property lists, `gensym' * Numbers:: Predicates, functions, random numbers * Sequences:: Mapping, functions, searching, sorting -* Lists:: `cadr', `sublis', `member*', `assoc*', etc. +* Lists:: `caddr', `sublis', `member*', `assoc*', etc. * Structures:: `defstruct' * Assertions:: `check-type', `assert', `ignore-errors'. @@ -287,7 +287,7 @@ The following simple functions and macros are defined in @file{cl.el}; they do not cause other components like @file{cl-extra} to be loaded. @example -eql floatp-safe endp +floatp-safe endp evenp oddp plusp minusp caaar .. cddddr list* ldiff rest first .. tenth @@ -700,7 +700,7 @@ facts are true or false. @menu * Type Predicates:: `typep', `deftype', and `coerce' -* Equality Predicates:: `eql' and `equalp' +* Equality Predicates:: `equalp' @end menu @node Type Predicates, Equality Predicates, Predicates, Predicates @@ -840,40 +840,7 @@ arguments to specify the type of sequence to return. @xref{Sequences}. @section Equality Predicates @noindent -This package defines two Common Lisp predicates, @code{eql} and -@code{equalp}. - -@defun eql a b -This function is almost the same as @code{eq}, except that if @var{a} -and @var{b} are numbers of the same type, it compares them for numeric -equality (as if by @code{equal} instead of @code{eq}). This makes a -difference only for versions of Emacs that are compiled with -floating-point support. Emacs floats are allocated -objects just like cons cells, which means that @code{(eq 3.0 3.0)} -will not necessarily be true---if the two @code{3.0}s were allocated -separately, the pointers will be different even though the numbers are -the same. But @code{(eql 3.0 3.0)} will always be true. - -The types of the arguments must match, so @code{(eql 3 3.0)} is -still false. - -Note that Emacs integers are ``direct'' rather than allocated, which -basically means @code{(eq 3 3)} will always be true. Thus @code{eq} -and @code{eql} behave differently only if floating-point numbers are -involved, and are indistinguishable on Emacs versions that don't -support floats. - -There is a slight inconsistency with Common Lisp in the treatment of -positive and negative zeros. Some machines, notably those with IEEE -standard arithmetic, represent @code{+0} and @code{-0} as distinct -values. Normally this doesn't matter because the standard specifies -that @code{(= 0.0 -0.0)} should always be true, and this is indeed -what Emacs Lisp and Common Lisp do. But the Common Lisp standard -states that @code{(eql 0.0 -0.0)} and @code{(equal 0.0 -0.0)} should -be false on IEEE-like machines; Emacs Lisp does not do this, and in -fact the only known way to distinguish between the two zeros in Emacs -Lisp is to @code{format} them and check for a minus sign. -@end defun +This package defines the Common Lisp predicate @code{equalp}. @defun equalp a b This function is a more flexible version of @code{equal}. In @@ -3685,7 +3652,7 @@ the same sequence, in the same order as they appear in that sequence.) The @code{:test} argument specifies a function which must return true (non-@code{nil}) to indicate a match; instead, you may use @code{:test-not} to give a function which returns @emph{false} to -indicate a match. The default test function is @code{:test 'eql}. +indicate a match. The default test function is @code{eql}. Many functions which take @var{item} and @code{:test} or @code{:test-not} arguments also come in @code{-if} and @code{-if-not} varieties, @@ -4998,7 +4965,7 @@ which understand full-featured argument lists. The @code{&whole} keyword does not work in @code{defmacro} argument lists (except inside recursive argument lists). -The @code{eql} and @code{equal} predicates do not distinguish +The @code{equal} predicate does not distinguish between IEEE floating-point plus and minus zero. The @code{equalp} predicate has several differences with Common Lisp; @pxref{Predicates}. @@ -5218,12 +5185,6 @@ whereas Emacs Lisp's parser just treats quote as a special case. Some Lisp packages use reader macros to create special syntaxes for themselves, which the Emacs parser is incapable of reading. -The lack of reader macros, incidentally, is the reason behind -Emacs Lisp's unusual backquote syntax. Since backquotes are -implemented as a Lisp package and not built-in to the Emacs -parser, they are forced to use a regular macro named @code{`} -which is used with the standard function/macro call notation. - @item Other syntactic features. Common Lisp provides a number of notations beginning with @code{#} that the Emacs Lisp parser @@ -5287,11 +5248,11 @@ matters, Emacs has its own @code{#(} notation for something entirely different---strings with properties. @item -Characters are distinct from integers in Common Lisp. The -notation for character constants is also different: @code{#\A} -instead of @code{?A}. Also, @code{string=} and @code{string-equal} -are synonyms in Emacs Lisp whereas the latter is case-insensitive -in Common Lisp. +Characters are distinct from integers in Common Lisp. The notation +for character constants is also different: @code{#\A} in Common Lisp +where Emacs Lisp uses @code{?A}. Also, @code{string=} and +@code{string-equal} are synonyms in Emacs Lisp, whereas the latter is +case-insensitive in Common Lisp. @item Data types. Some Common Lisp data types do not exist in Emacs diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi new file mode 100644 index 00000000000..14ceea37d1d --- /dev/null +++ b/doc/misc/dbus.texi @@ -0,0 +1,564 @@ +\input texinfo @c -*-texinfo-*- +@setfilename ../../info/dbus +@c %**start of header +@settitle Using of D-Bus +@c @setchapternewpage odd +@c %**end of header + +@copying +Copyright @copyright{} 2007 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual'', and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license to the document, as described in section 6 of the license. +@end quotation +@end copying + +@dircategory Emacs +@direntry +* D-Bus: (dbus). Using D-Bus in Emacs. +@end direntry + +@node Top, Overview, (dir), (dir) +@top D-Bus integration in Emacs + +This manual documents an API for usage of D-Bus in +Emacs.@footnote{D-Bus is not enabled by default. You must run +@command{./configure --with-dbus} in Emacs' top level directory, +before you compile Emacs.} D-Bus is a message bus system, a simple +way for applications to talk to one another. An overview of D-Bus can +be found at @uref{http://dbus.freedesktop.org/}. + +@insertcopying + +@menu +* Overview:: An overview of D-Bus. +* Inspection:: Inspection of the bus names. +* Type Conversion:: Mapping Lisp types and D-Bus types. +* Synchronous Methods:: Calling methods in a blocking way. +* Signals:: Sending and receiving signals. +* Errors and Events:: Errors and events. +* GNU Free Documentation License:: The license for this documentation. +@end menu + +@node Overview +@chapter An overview of D-Bus +@cindex overview + +D-Bus is an inter-process communication mechanism for applications +residing on the same host. The communication is based on +@dfn{messages}. Data in the messages is carried in a structured way, +it is not just a byte stream. + +The communication is connection oriented to two kinds of message +buses: a so called @dfn{system bus}, and a @dfn{session bus}. On a +given machine, there is always one single system bus for miscellaneous +system-wide communication, like changing of hardware configuration. +On the other hand, the session bus is always related to a single +user's session. + +Every client application, which is connected to a bus, registers under +a @dfn{unique name} at the bus. This name is used for identifying the +client application. Such a unique name starts always with a colon, +and looks like @samp{:1.42}. + +Additionally, a client application can register itself to a so called +@dfn{known name}, which is a series of identifiers separated by dots, +as in @samp{org.gnu.Emacs}. If several applications register to the +same known name, these registrations are queued, and only the first +application which has registered for the known name is reachable via +this name. If this application disconnects from the bus, the next +queued unique name becomes the owner of this known name. + +An application can install one or several objects under its name. +Such objects are identified by an @dfn{object path}, which looks +similar to paths in a filesystem. An example of such an object path +could be @samp{/org/gnu/Emacs/}. + +Applications might send a request to an object, that means sending a +message with some data as input parameters, and receiving a message +from that object with the result of this message, the output +parameters. Such a request is called @dfn{method} in D-Bus. + +The other form of communication are @dfn{signals}. The underlying +message is emitted from an object and will be received by all other +applications which have registered for such a signal. + +All methods and signals an object supports are called @dfn{interface} +of the object. Interfaces are specified under a hierarchical name in +D-Bus; an object can support several interfaces. Such an interface +name could be @samp{org.gnu.Emacs.TextEditor} or +@samp{org.gnu.Emacs.FileManager}. + + +@node Inspection +@chapter Inspection of the bus names. +@cindex inspection + +There are several basic functions which inspect the buses for +registered names. Internally they use the basic interface +@samp{org.freedesktop.DBus}, which is supported by all objects of a bus. + +@defun dbus-list-activatable-names +This function returns the D-Bus service names, which can be activated. +An activatable service is described in a service registration file. +Under GNU/Linux, such files are located at +@file{/usr/share/dbus-1/services/}. + +The result is a list of strings, which is @code{nil} when there are no +activatable service names at all. +@end defun + +@defun dbus-list-names bus +All service names, which are registered at D-Bus @var{bus}, are +returned. The result is a list of strings, which is @code{nil} when +there are no registered service names at all. Well known names are +strings like @samp{org.freedesktop.DBus}. Names starting with +@samp{:} are unique names for services. + +@var{bus} must be either the symbol @code{:system} or the symbol +@code{:session}. +@end defun + +@defun dbus-list-known-names bus +Retrieves all services which correspond to a known name in @var{bus}. +A service has a known name if it doesn't start with @samp{:}. The +result is a list of strings, which is @code{nil} when there are no +known names at all. + +@var{bus} must be either the symbol @code{:system} or the symbol +@code{:session}. +@end defun + +@defun dbus-list-queued-owners bus service +For a given service, registered at D-Bus @var{bus} under the name +@var{service}, all queued unique names are returned. The result is a +list of strings, or @code{nil} when there are no queued names for +@var{service} at all. + +@var{bus} must be either the symbol @code{:system} or the symbol +@code{:session}. @var{service} must be a known service name as +string. +@end defun + +@defun dbus-get-name-owner bus service +For a given service, registered at D-Bus @var{bus} under the name +@var{service}, the unique name of the name owner is returned. The result is a +string, or @code{nil} when there exist no name owner of @var{service}. + +@var{bus} must be either the symbol @code{:system} or the symbol +@code{:session}. @var{service} must be a known service name as +string. +@end defun + +@defun dbus-get-unique-name bus +The unique name, under which Emacs is registered at D-Bus @var{bus}, +is returned as string. + +@var{bus} must be either the symbol @code{:system} or the symbol +@code{:session}. +@end defun + +@defun dbus-introspect bus service path +Objects can publish there interfaces to the D-Bus. This function +returns all interfaces of @var{service}, registered at object path +@var{path} at bus @var{bus}. + +@var{bus} must be either the symbol @code{:system} or the symbol +@code{:session}. @var{service} must be a known service name, and +@var{path} must be a valid object path. The last two parameters are +strings. The result, the introspection data, is a string in XML +format. Example: + +@example +(dbus-introspect + :system "org.freedesktop.Hal" + "/org/freedesktop/Hal/devices/computer") + +@result{} " + + + + + + ... + + + + + + ... + " +@end example + +This example informs us, that the service @code{org.freedesktop.Hal} +at object path @code{/org/freedesktop/Hal/devices/computer} offers the +interface @code{org.freedesktop.Hal.Device} (and 2 other interfaces +not documented here). This interface contains the method +@code{GetAllProperties}, which needs no input parameters, but returns +as output parameter an array of dictionary entries (key-value pairs). +Every dictionary entry has a string as key, and a variant as value. + +The interface offers also a signal, which returns 2 parameters: an +integer, and an array consisting of elements which are a struct of a +string and 2 boolean values. + +Such type descriptions are called @dfn{signature} in D-Bus. For a +discussion of D-Bus types and their Lisp representation see @ref{Type +Conversion}.@footnote{D-Bus signatures are explained in the D-Bus +specification +@uref{http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-signatures}. +The interfaces of the service @code{org.freedesktop.Hal} are described +at +@uref{http://people.freedesktop.org/~david/hal-spec/hal-spec.html#interfaces}.} +@end defun + + +@node Type Conversion +@chapter Mapping Lisp types and D-Bus types. +@cindex type conversion + +D-Bus method calls and signals accept usually several arguments as +parameters, either as input parameter, or as output parameter. Every +argument belongs to a D-Bus type. + +Such arguments must be mapped between the the value encoded as a D-Bus +type, and the corresponding type of Lisp objects. The mapping is +applied Lisp object @expansion{} D-Bus type for input parameters, and +D-Bus type @expansion{} Lisp object for output parameters. + + +@section Input parameters. + +Input parameters for D-Bus methods and signals occur as arguments of a +Lisp function call. Only some primitive Lisp types are supported in +the current implementation. The following mapping to D-Bus types is +applied, when the corresponding D-Bus message is created: + +@example +@multitable {@code{t} and @code{nil}} {@expansion{}} {DBUS_TYPE_BOOLEAN} +@item Lisp type @tab @tab D-Bus type +@item +@item @code{t} and @code{nil} @tab @expansion{} @tab DBUS_TYPE_BOOLEAN +@item number @tab @expansion{} @tab DBUS_TYPE_UINT32 +@item integer @tab @expansion{} @tab DBUS_TYPE_INT32 +@item float @tab @expansion{} @tab DBUS_TYPE_DOUBLE +@item string @tab @expansion{} @tab DBUS_TYPE_STRING +@end multitable +@end example + +@noindent +Other Lisp types, especially lists, are not supported (yet). + + +@section Output parameters. + +Output parameters of D-Bus methods and signals are mapped to Lisp +objects. This mapping is more powerful than the one for input +parameters, i.e., more D-Bus types are supported by the current +implementation. + +@example +@multitable {DBUS_TYPE_OBJECT_PATH} {@expansion{}} {@code{t} or @code{nil}} +@item D-Bus type @tab @tab Lisp type +@item +@item DBUS_TYPE_BOOLEAN @tab @expansion{} @tab @code{t} or @code{nil} +@item DBUS_TYPE_UINT32 @tab @expansion{} @tab number +@item DBUS_TYPE_INT32 @tab @expansion{} @tab number +@item DBUS_TYPE_DOUBLE @tab @expansion{} @tab float +@item DBUS_TYPE_STRING @tab @expansion{} @tab string +@item DBUS_TYPE_OBJECT_PATH @tab @expansion{} @tab string +@item DBUS_TYPE_ARRAY @tab @expansion{} @tab list +@item DBUS_TYPE_VARIANT @tab @expansion{} @tab list +@item DBUS_TYPE_STRUCT @tab @expansion{} @tab list +@item DBUS_TYPE_DICT_ENTRY @tab @expansion{} @tab list +@end multitable +@end example + +The resulting list of the last 4 D-Bus compound types contains as +elements the elements of the D-Bus container, mapped according to the +same rules. + +The signal @code{PropertyModified}, discussed as example in +@ref{Inspection}, would offer as Lisp data the following object +(@var{BOOL} stands here for either @code{nil} or @code{t}): + +@lisp +(@var{NUMBER} ((@var{STRING} @var{BOOL} @var{BOOL}) (@var{STRING} @var{BOOL} @var{BOOL}) ...)) +@end lisp + + +@node Synchronous Methods +@chapter Calling methods in a blocking way. +@cindex method calls, synchronous +@cindex synchronous method calls + +Methods can be called synchronously (@dfn{blocking}) or asynchronously +(@dfn{non-blocking}). Currently, just synchronous methods are +implemented. + +At D-Bus level, a method call consist of two messages: one message +which carries the input parameters to the object owning the method to +be called, and a reply message returning the resulting output +parameters from the object. + +@defun dbus-call-method bus method service path interface &rest args +This function calls @var{method} on the D-Bus @var{bus}. @var{bus} is +either the symbol @code{:system} or the symbol @code{:session}. + +@var{service} is the D-Bus service name to be used. @var{path} is the +D-Bus object path, @var{service} is registered at. @var{interface} is +an interface offered by @var{service}. It must provide @var{method}. + +All other arguments args are passed to @var{method} as arguments. +They are converted into D-Bus types as described in @ref{Type +Conversion}. + +The function returns the resulting values of @var{method} as a list of +Lisp objects, according to the type conversion rules described in +@ref{Type Conversion}. Example: + +@example +(dbus-call-method + :session "GetKeyField" "org.gnome.seahorse" + "/org/gnome/seahorse/keys/openpgp" "org.gnome.seahorse.Keys" + "openpgp:657984B8C7A966DD" "simple-name") + +@result{} (t ("Philip R. Zimmermann")) +@end example + +If the result of the method call is just one value, the converted Lisp +object is returned instead of a list containing this single Lisp +object. Example: + +@example +(dbus-call-method + :system "GetPropertyString" "org.freedesktop.Hal" + "/org/freedesktop/Hal/devices/computer" "org.freedesktop.Hal.Device" + "system.kernel.machine") + +@result{} "i686" +@end example + +With the @code{dbus-introspect} function it is possible to explore the +interfaces of @samp{org.freedesktop.Hal} service. It offers the +interfaces @samp{org.freedesktop.Hal.Manager} for the object at the +path @samp{/org/freedesktop/Hal/Manager} as well as the interface +@samp{org.freedesktop.Hal.Device} for all objects prefixed with the +path @samp{/org/freedesktop/Hal/devices}. With the methods +@samp{GetAllDevices} and @samp{GetAllProperties}, it is simple to +emulate the @code{lshal} command on GNU/Linux systems: + +@example +(dolist (device + (dbus-call-method + :system "GetAllDevices" "org.freedesktop.Hal" + "/org/freedesktop/Hal/Manager" + "org.freedesktop.Hal.Manager")) + (message "\nudi = %s" device) + (dolist (properties + (dbus-call-method + :system "GetAllProperties" "org.freedesktop.Hal" + device "org.freedesktop.Hal.Device")) + (message " %s = %S" + (car properties) (or (caar (cdr properties)) "")))) + +@print{} "udi = /org/freedesktop/Hal/devices/computer + info.addons = (\"hald-addon-acpi\") + info.bus = \"unknown\" + info.product = \"Computer\" + info.subsystem = \"unknown\" + info.udi = \"/org/freedesktop/Hal/devices/computer\" + linux.sysfs_path_device = \"(none)\" + power_management.acpi.linux.version = \"20051216\" + power_management.can_suspend_to_disk = t + power_management.can_suspend_to_ram = \"\" + power_management.type = \"acpi\" + smbios.bios.release_date = \"11/07/2001\" + system.chassis.manufacturer = \"COMPAL\" + system.chassis.type = \"Notebook\" + system.firmware.release_date = \"03/19/2005\" + ..." +@end example +@end defun + + +@node Signals +@chapter Sending and receiving signals. +@cindex signals + +Signals are broadcast messages. They carry input parameters, which +are received by all objects which have registered for such a signal. + +@defun dbus-send-signal bus signal service path interface &rest args +This function is similar to @code{dbus-call-method}. The difference +is, that there are no returning output parameters. + +The function emits @var{signal} on the D-Bus @var{bus}. @var{bus} is +either the symbol @code{:system} or the symbol @code{:session}. It +doesn't matter whether another object has registered for @var{signal}. + +@var{service} is the D-Bus service name of the object the signal is +emitted from. @var{path} is the corresponding D-Bus object path, +@var{service} is registered at. @var{interface} is an interface +offered by @var{service}. It must provide @var{signal}. + +All other arguments args are passed to @var{signal} as arguments. +They are converted into D-Bus types as described in @ref{Type +Conversion}. Example: + +@example +(dbus-send-signal + :session "FileModified" "org.gnu.Emacs" "/org/gnu/Emacs" + "org.gnu.Emacs.FileManager" "/home/albinus/.emacs") +@end example +@end defun + +@defun dbus-register-signal bus signal service path interface handler +With this function, an application registers for @var{signal} on the +D-Bus @var{bus}. + +@var{bus} is either the symbol @code{:system} or the symbol +@code{:session}. + +@var{service} is the D-Bus service name used by the sending D-Bus +object. It can be either a known name or the unique name of the D-Bus +object sending the signal. In case of a unique name, signals won't be +received any longer once the object owning this unique name has +disappeared, and a new queued object has replaced it. + +When @var{service} is @code{nil}, related signals from all D-Bus +objects shall be accepted. + +@var{path} is the corresponding D-Bus object path, @var{service} is +registered at. It can also be @code{nil} if the path name of incoming +signals shall not be checked. + +@var{interface} is an interface offered by @var{service}. It must +provide @var{signal}. + +@var{handler} is a Lisp function to be called when the @var{signal} is +received. It must accept as arguments the output parameters +@var{signal} is sending. Example: + +@example +(defun my-dbus-signal-handler (device) + (message "Device %s added" device)) + +(dbus-register-signal + :system "DeviceAdded" + (dbus-get-name-owner :system "org.freedesktop.Hal") + "/org/freedesktop/Hal/Manager" "org.freedesktop.Hal.Manager" + 'my-dbus-signal-handler) + +@result{} (:system "org.freedesktop.Hal.Manager" "DeviceAdded") +@end example + +As we know from the inspection data of interface +@code{org.freedesktop.Hal.Manager}, the signal @code{DeviceAdded} +provides one single parameter, which is mapped into a Lisp string. +The callback function @code{my-dbus-signal-handler} must define one +single string argument therefore. Plugging an USB device to your +machine, when registered for signal @code{DeviceAdded}, will show you +which objects the GNU/Linux @code{hal} daemon adds. + +@code{dbus-register-signal} returns a Lisp symbol, which can be used +as argument in @code{dbus-unregister-signal} for removing the +registration for @var{signal}. +@end defun + +@defun dbus-unregister-signal object +Unregister @var{object} from the the D-Bus. @var{object} must be the +result of a preceding @code{dbus-register-signal} call. +@end defun + + +@node Errors and Events +@chapter Errors and events. +@cindex errors +@cindex events + +All errors raised by D-Bus are signaled with the error symbol +@code{dbus-error}. As usual, such an error can be trapped with a +@code{condition-case} form. If possible, error messages from D-Bus +are appended to the @code{dbus-error}. + +Incoming D-Bus messages are handled as Emacs events (see @pxref{Misc +Events, , , elisp}). The generated event has this form: + +@example +(dbus-event @var{handler} @var{bus} @var{service} @var{path} @var{interface} @var{member} &rest @var{args}) +@end example + +@var{handler} is the callback function which has been registered for +this signal (see @pxref{Signals}). When a @code{dbus-event} event +arrives, @var{handler} is called with @var{args} as arguments. + +@var{bus} identifies the D-Bus the signal is coming from. It is +either the symbol @code{:system} or the symbol @code{:session}. + +@var{service} and @var{path} are the unique name and the object path +of the D-Bus object emitting the signal. @var{interface} and +@var{member} denote the signal which has been sent. + +In order to inspect the @code{dbus-event} data, you could extend the +definition of the callback function in @ref{Signals}: + +@example +(defun my-dbus-signal-handler (&rest args) + (message "my-dbus-signal-handler: %S" last-input-event)) +@end example + +There exist convenience functions which could be called inside a +callback function in order to retrieve the information from the event. + +@defun dbus-event-bus-name event +Returns the bus name @var{event} is coming from. +The result is either the symbol @code{:system} or the symbol @code{:session}. +@end defun + +@defun dbus-event-service-name event +Returns the unique name of the D-Bus object @var{event} is coming from. +@end defun + +@defun dbus-event-path-name event +Returns the object path of the D-Bus object @var{event} is coming from. +@end defun + +@defun dbus-event-interface-name event +Returns the interface name of of the D-Bus object @var{event} is coming from. +@end defun + +@defun dbus-event-member-name event +Returns the member name of of the D-Bus object @var{event} is coming +from. It is either a signal name or a method name. +@end defun + + +@node GNU Free Documentation License +@appendix GNU Free Documentation License +@include doclicense.texi + +@contents +@c End of dbus.texi +@bye + +@ignore + arch-tag: 2eeec19d-0caf-44e0-a193-329d7f9951d8 +@end ignore diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index d4cbf8380b6..f8be71ef860 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -1417,10 +1417,23 @@ This is an alist of encoding / function pairs. The encodings are @vindex rfc2047-encoded-word-regexp When decoding words, this library looks for matches to this regexp. +@item rfc2047-encoded-word-regexp-loose +@vindex rfc2047-encoded-word-regexp-loose +This is a version from which the regexp for the Q encoding pattern of +@code{rfc2047-encoded-word-regexp} is made loose. + @item rfc2047-encode-encoded-words @vindex rfc2047-encode-encoded-words The boolean variable specifies whether encoded words -(e.g. @samp{=?hello?=}) should be encoded again. +(e.g. @samp{=?us-ascii?q?hello?=}) should be encoded again. +@code{rfc2047-encoded-word-regexp} is used to look for such words. + +@item rfc2047-allow-irregular-q-encoded-words +@vindex rfc2047-allow-irregular-q-encoded-words +The boolean variable specifies whether irregular Q encoded words +(e.g. @samp{=?us-ascii?q?hello??=}) should be decoded. If it is +non-@code{nil}, @code{rfc2047-encoded-word-regexp-loose} is used instead +of @code{rfc2047-encoded-word-regexp} to look for encoded words. @end table diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 491ee631fe7..6ab4c199de6 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -413,12 +413,9 @@ First, we write the @code{init-function}: (defun flymake-perl-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) - (local-file (concat (flymake-build-relative-filename - (file-name-directory - (buffer-file-name - (current-buffer))) - (file-name-directory temp-file)) - (file-name-nondirectory temp-file)))) + (local-file (file-relative-name + temp-file + (file-name-directory buffer-file-name)))) (list "perl" (list "-wc " local-file)))) @end lisp diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 97e70c1cec2..8ec39ce81fe 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -8175,6 +8175,11 @@ Save the current series @findex gnus-uu-decode-binhex Unbinhex the current series (@code{gnus-uu-decode-binhex}). This doesn't really work yet. + +@item X Y +@kindex X Y (Summary) +@findex gnus-uu-decode-yenc +yEnc-decode the current series and save it (@code{gnus-uu-decode-yenc}). @end table @@ -9740,7 +9745,7 @@ To have all Vcards be ignored, you'd say something like this: If non-@code{nil}, Gnus won't require the @samp{MIME-Version} header before interpreting the message as a @acronym{MIME} message. This helps when reading messages from certain broken mail user agents. The -default is @code{nil}. +default is @code{t}. @item gnus-article-emulate-mime @vindex gnus-article-emulate-mime @@ -14649,14 +14654,12 @@ If non-@code{nil}, name of program for fetching new mail. If @subsubsection Fetching Mail @vindex mail-sources -@vindex nnmail-spool-file The way to actually tell Gnus where to get new mail from is to set @code{mail-sources} to a list of mail source specifiers (@pxref{Mail Source Specifiers}). -If this variable (and the obsolescent @code{nnmail-spool-file}) is -@code{nil}, the mail back ends will never attempt to fetch mail by -themselves. +If this variable is @code{nil}, the mail back ends will never attempt to +fetch mail by themselves. If you want to fetch mail both from your local spool as well as a @acronym{POP} mail server, you'd say something like: @@ -14865,10 +14868,10 @@ body of the messages: "string.group")))) @end lisp -The buffer is narrowed to the message in question when @var{function} -is run. That's why @code{(widen)} needs to be called after -@code{save-excursion} and @code{save-restriction} in the example -above. Also note that with the nnimap back end, message bodies will +The buffer is narrowed to the header of the message in question when +@var{function} is run. That's why @code{(widen)} needs to be called +after @code{save-excursion} and @code{save-restriction} in the example +above. Also note that with the nnimap backend, message bodies will not be downloaded by default. You need to set @code{nnimap-split-download-body} to @code{t} to do that (@pxref{Splitting in IMAP}). diff --git a/doc/misc/makefile.w32-in b/doc/misc/makefile.w32-in index 4d8d44765d4..a676da55e26 100644 --- a/doc/misc/makefile.w32-in +++ b/doc/misc/makefile.w32-in @@ -31,27 +31,27 @@ infodir = $(srcdir)/../../info MAKEINFO = makeinfo --force MULTI_INSTALL_INFO = $(srcdir)\..\..\nt\multi-install-info.bat INFO_TARGETS = $(infodir)/ccmode \ - $(infodir)/cl $(infodir)/dired-x $(infodir)/ediff \ - $(infodir)/forms $(infodir)/gnus $(infodir)/message \ - $(infodir)/sieve $(infodir)/pgg $(infodir)/emacs-mime \ - $(infodir)/info $(infodir)/mh-e $(infodir)/reftex \ - $(infodir)/sc $(infodir)/vip $(infodir)/viper \ - $(infodir)/widget $(infodir)/efaq $(infodir)/ada-mode \ - $(infodir)/autotype $(infodir)/calc $(infodir)/idlwave \ - $(infodir)/eudc $(infodir)/ebrowse $(infodir)/pcl-cvs \ - $(infodir)/woman $(infodir)/eshell $(infodir)/org \ - $(infodir)/url $(infodir)/speedbar $(infodir)/tramp \ - $(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake \ - $(infodir)/newsticker $(infodir)/rcirc $(infodir)/erc \ - $(infodir)/remember -DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \ - ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \ - gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \ - reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ - ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ - pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \ - speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \ - newsticker.dvi rcirc.dvi erc.dvi remember.dvi + $(infodir)/cl $(infodir)/dbus $(infodir)/dired-x \ + $(infodir)/ediff $(infodir)/forms $(infodir)/gnus \ + $(infodir)/message $(infodir)/sieve $(infodir)/pgg \ + $(infodir)/emacs-mime $(infodir)/info $(infodir)/mh-e \ + $(infodir)/reftex $(infodir)/sc $(infodir)/vip \ + $(infodir)/viper $(infodir)/widget $(infodir)/efaq \ + $(infodir)/ada-mode $(infodir)/autotype $(infodir)/calc \ + $(infodir)/idlwave $(infodir)/eudc $(infodir)/ebrowse \ + $(infodir)/pcl-cvs $(infodir)/woman $(infodir)/eshell \ + $(infodir)/org $(infodir)/url $(infodir)/speedbar \ + $(infodir)/tramp $(infodir)/ses $(infodir)/smtpmail \ + $(infodir)/flymake $(infodir)/newsticker $(infodir)/rcirc \ + $(infodir)/erc $(infodir)/remember $(infodir)/nxml-mode +DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dbus.dvi dired-x.dvi \ + ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \ + gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \ + reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ + ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ + pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \ + speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \ + newsticker.dvi rcirc.dvi erc.dvi remember.dvi nxml-mode.dvi INFOSOURCES = info.texi # The following rule does not work with all versions of `make'. @@ -114,6 +114,11 @@ $(infodir)/cl: cl.texi cl.dvi: cl.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/cl.texi +$(infodir)/dbus: dbus.texi + $(MAKEINFO) dbus.texi +dbus.dvi: dbus.texi + $(ENVADD) $(TEXI2DVI) $(srcdir)/dbus.texi + $(infodir)/dired-x: dired-x.texi $(MAKEINFO) dired-x.texi dired-x.dvi: dired-x.texi @@ -271,6 +276,11 @@ $(infodir)/newsticker: newsticker.texi newsticker.dvi: newsticker.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/newsticker.texi +$(infodir)/nxml-mode: nxml-mode.texi + $(MAKEINFO) nxml-mode.texi +nxml-mod.dvi: nxml-mode.texi + $(ENVADD) $(TEXI2DVI) $(srcdir)/nxml-mode.texi + $(infodir)/rcirc: rcirc.texi $(MAKEINFO) rcirc.texi rcirc.dvi: rcirc.texi @@ -286,8 +296,8 @@ mostlyclean: clean: mostlyclean - $(DEL) *.dvi - - $(DEL) $(infodir)/ccmode* \ - $(infodir)/cl* $(infodir)/dired-x* \ + - $(DEL) $(infodir)/ccmode* $(infodir)/cl* \ + $(infodir)/dbus* $(infodir)/dired-x* \ $(infodir)/ediff* $(infodir)/forms* \ $(infodir)/gnus* $(infodir)/info* \ $(infodir)/message* $(infodir)/mh-e* \ @@ -304,7 +314,7 @@ clean: mostlyclean $(infodir)/flymake* $(infodir)/newsticker* \ $(infodir)/sieve* $(infodir)/pgg* \ $(infodir)/erc* $(infodir)/rcirc* \ - $(infodir)/remember* + $(infodir)/remember* $(infodir)/nxml-mode* distclean: clean diff --git a/doc/misc/nxml-mode.texi b/doc/misc/nxml-mode.texi new file mode 100644 index 00000000000..c79a552959f --- /dev/null +++ b/doc/misc/nxml-mode.texi @@ -0,0 +1,838 @@ +\input texinfo @c -*- texinfo -*- +@c %**start of header +@setfilename ../../info/nxml-mode +@settitle nXML Mode +@c %**end of header + +@dircategory Emacs +@direntry +* nXML Mode: (nxml-mode). XML editing mode with RELAX NG support. +@end direntry + +@node Top +@top nXML Mode + +This manual documents nxml-mode, an Emacs major mode for editing +XML with RELAX NG support. This manual is not yet complete. + +@menu +* Completion:: +* Inserting end-tags:: +* Paragraphs:: +* Outlining:: +* Locating a schema:: +* DTDs:: +* Limitations:: +@end menu + +@node Completion +@chapter Completion + +Apart from real-time validation, the most important feature that +nxml-mode provides for assisting in document creation is "completion". +Completion assists the user in inserting characters at point, based on +knowledge of the schema and on the contents of the buffer before +point. + +The traditional GNU Emacs key combination for completion in a +buffer is @kbd{M-@key{TAB}}. However, many window systems +and window managers use this key combination themselves (typically for +switching between windows) and do not pass it to applications. It's +hard to find key combinations in GNU Emacs that are both easy to type +and not taken by something else. @kbd{C-@key{RET}} (i.e. +pressing the Enter or Return key, while the Ctrl key is held down) is +available. It won't be available on a traditional terminal (because +it is indistinguishable from Return), but it will work with a window +system. Therefore we adopt the following solution by default: use +@kbd{C-@key{RET}} when there's a window system and +@kbd{M-@key{TAB}} when there's not. In the following, I +will assume that a window system is being used and will therefore +refer to @kbd{C-@key{RET}}. + +Completion works by examining the symbol preceding point. This +is the symbol to be completed. The symbol to be completed may be the +empty. Completion considers what symbols starting with the symbol to +be completed would be valid replacements for the symbol to be +completed, given the schema and the contents of the buffer before +point. These symbols are the possible completions. An example may +make this clearer. Suppose the buffer looks like this (where @point{} +indicates point): + +@example + + + +<@point{} +@end example + +@noindent +In this case, the symbol to be completed is empty, and the possible +completions are @samp{base}, @samp{isindex}, +@samp{link}, @samp{meta}, @samp{script}, +@samp{style}, @samp{title}. Another example is: + +@example + +<@point{} +@end example + +@noindent +@kbd{C-@key{RET}} will yield + +@example + + + + + + +@end example + +@noindent +This says to use the schema @samp{xhtml.rnc} for a document with +namespace @samp{http://www.w3.org/1999/xhtml}, and to use the +schema @samp{docbook.rnc} for a document whose local name is +@samp{book}. If the document element had both a namespace URI +of @samp{http://www.w3.org/1999/xhtml} and a local name of +@samp{book}, then the matching rule that comes first will be +used and so the schema @samp{xhtml.rnc} would be used. There is +no precedence between different types of rule; the first matching rule +of any type is used. + +As usual with XML-related technologies, resources are identified +by URIs. The @samp{uri} attribute identifies the schema by +specifying the URI. The URI may be relative. If so, it is resolved +relative to the URI of the schema locating file that contains +attribute. This means that if the value of @samp{uri} attribute +does not contain a @samp{/}, then it will refer to a filename in +the same directory as the schema locating file. + +@node Using the document's URI to locate a schema +@subsection Using the document's URI to locate a schema + +A @samp{uri} rule locates a schema based on the URI of the +document. The @samp{uri} attribute specifies the URI of the +schema. The @samp{resource} attribute can be used to specify +the schema for a particular document. For example, + +@example + +@end example + +@noindent +specifies that that the schema for @samp{spec.xml} is +@samp{docbook.rnc}. + +The @samp{pattern} attribute can be used instead of the +@samp{resource} attribute to specify the schema for any document +whose URI matches a pattern. The pattern has the same syntax as an +absolute or relative URI except that the path component of the URI can +use a @samp{*} character to stand for zero or more characters +within a path segment (i.e. any character other @samp{/}). +Typically, the URI pattern looks like a relative URI, but, whereas a +relative URI in the @samp{resource} attribute is resolved into a +particular absolute URI using the base URI of the schema locating +file, a relative URI pattern matches if it matches some number of +complete path segments of the document's URI ending with the last path +segment of the document's URI. For example, + +@example + +@end example + +@noindent +specifies that the schema for documents with a URI whose path ends +with @samp{.xsl} is @samp{xslt.rnc}. + +A @samp{transformURI} rule locates a schema by +transforming the URI of the document. The @samp{fromPattern} +attribute specifies a URI pattern with the same meaning as the +@samp{pattern} attribute of the @samp{uri} element. The +@samp{toPattern} attribute is a URI pattern that is used to +generate the URI of the schema. Each @samp{*} in the +@samp{toPattern} is replaced by the string that matched the +corresponding @samp{*} in the @samp{fromPattern}. The +resulting string is appended to the initial part of the document's URI +that was not explicitly matched by the @samp{fromPattern}. The +rule matches only if the transformed URI identifies an existing +resource. For example, the rule + +@example + +@end example + +@noindent +would transform the URI @samp{file:///home/jjc/docs/spec.xml} +into the URI @samp{file:///home/jjc/docs/spec.rnc}. Thus, this +rule specifies that to locate a schema for a document +@samp{@var{foo}.xml}, Emacs should test whether a file +@samp{@var{foo}.rnc} exists in the same directory as +@samp{@var{foo}.xml}, and, if so, should use it as the +schema. + +@node Using the document element to locate a schema +@subsection Using the document element to locate a schema + +A @samp{documentElement} rule locates a schema based on +the local name and prefix of the document element. For example, a rule + +@example + +@end example + +@noindent +specifies that when the name of the document element is +@samp{xsl:stylesheet}, then @samp{xslt.rnc} should be used +as the schema. Either the @samp{prefix} or +@samp{localName} attribute may be omitted to allow any prefix or +local name. + +A @samp{namespace} rule locates a schema based on the +namespace URI of the document element. For example, a rule + +@example + +@end example + +@noindent +specifies that when the namespace URI of the document is +@samp{http://www.w3.org/1999/XSL/Transform}, then +@samp{xslt.rnc} should be used as the schema. + +@node Using type identifiers in schema locating files +@subsection Using type identifiers in schema locating files + +Type identifiers allow a level of indirection in locating the +schema for a document. Instead of associating the document directly +with a schema URI, the document is associated with a type identifier, +which is in turn associated with a schema URI. nXML mode does not +constrain the format of type identifiers. They can be simply strings +without any formal structure or they can be public identifiers or +URIs. Note that these type identifiers have nothing to do with the +DOCTYPE declaration. When comparing type identifiers, whitespace is +normalized in the same way as with the @samp{xsd:token} +datatype: leading and trailing whitespace is stripped; other sequences +of whitespace are normalized to a single space character. + +Each of the rules described in previous sections that uses a +@samp{uri} attribute to specify a schema, can instead use a +@samp{typeId} attribute to specify a type identifier. The type +identifier can be associated with a URI using a @samp{typeId} +element. For example, + +@example + + + + + + +@end example + +@noindent +declares three type identifiers @samp{XHTML} (representing the +default variant of XHTML to be used), @samp{XHTML Strict} and +@samp{XHTML Transitional}. Such a schema locating file would +use @samp{xhtml-strict.rnc} for a document whose namespace is +@samp{http://www.w3.org/1999/xhtml}. But it is considerably +more flexible than a schema locating file that simply specified + +@example + +@end example + +@noindent +A user can easily use @kbd{C-c C-s C-t} to select between XHTML +Strict and XHTML Transitional. Also, a user can easily add a catalog + +@example + + + +@end example + +@noindent +that makes the default variant of XHTML be XHTML Transitional. + +@node Using multiple schema locating files +@subsection Using multiple schema locating files + +The @samp{include} element includes rules from another +schema locating file. The behavior is exactly as if the rules from +that file were included in place of the @samp{include} element. +Relative URIs are resolved into absolute URIs before the inclusion is +performed. For example, + +@example + +@end example + +@noindent +includes the rules from @samp{rules.xml}. + +The process of locating a schema takes as input a list of schema +locating files. The rules in all these files and in the files they +include are resolved into a single list of rules, which are applied +strictly in order. Sometimes this order is not what is needed. +For example, suppose you have two schema locating files, a private +file + +@example + + + +@end example + +@noindent +followed by a public file + +@example + + + + +@end example + +@noindent +The effect of these two files is that the XHTML @samp{namespace} +rule takes precedence over the @samp{transformURI} rule, which +is almost certainly not what is needed. This can be solved by adding +an @samp{applyFollowingRules} to the private file. + +@example + + + + +@end example + +@node DTDs +@chapter DTDs + +nxml-mode is designed to support the creation of standalone XML +documents that do not depend on a DTD. Although it is common practice +to insert a DOCTYPE declaration referencing an external DTD, this has +undesirable side-effects. It means that the document is no longer +self-contained. It also means that different XML parsers may interpret +the document in different ways, since the XML Recommendation does not +require XML parsers to read the DTD. With DTDs, it was impractical to +get validation without using an external DTD or reference to an +parameter entity. With RELAX NG and other schema languages, you can +simulataneously get the benefits of validation and standalone XML +documents. Therefore, I recommend that you do not reference an +external DOCTYPE in your XML documents. + +One problem is entities for characters. Typically, as well as +providing validation, DTDs also provide a set of character entities +for documents to use. Schemas cannot provide this functionality, +because schema validation happens after XML parsing. The recommended +solution is to either use the Unicode characters directly, or, if this +is impractical, use character references. nXML mode supports this by +providing commands for entering characters and character references +using the Unicode names, and can display the glyph corresponding to a +character reference. + +@node Limitations +@chapter Limitations + +nXML mode has some limitations: + +@itemize @bullet +@item +DTD support is limited. Internal parsed general entities declared +in the internal subset are supported provided they do not contain +elements. Other usage of DTDs is ignored. +@item +The restrictions on RELAX NG schemas in section 7 of the RELAX NG +specification are not enforced. +@item +Unicode support has problems. This stems mostly from the fact that +the XML (and RELAX NG) character model is based squarely on Unicode, +whereas the Emacs character model is not. Emacs 22 is slated to have +full Unicode support, which should improve the situation here. +@end itemize + +@bye + +@ignore + arch-tag: 3b6e8ac2-ae8d-4f38-bd43-ce9f80be04d6 +@end ignore diff --git a/doc/misc/remember.texi b/doc/misc/remember.texi index 41d1777bf5a..d93774c5850 100644 --- a/doc/misc/remember.texi +++ b/doc/misc/remember.texi @@ -350,7 +350,6 @@ The text used to begin each remember item. @subheading Insinuation @lisp -(require 'remember-diary) (add-to-list 'remember-handler-functions 'remember-diary-extract-entries) @end lisp @@ -358,6 +357,7 @@ The text used to begin each remember item. @defopt remember-diary-file File for extracted diary entries. +If this is nil, then @code{diary-file} will be used instead." @end defopt @node Mailbox, Org, Diary, Backends diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 591122640fe..d1acafefa03 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -327,9 +327,10 @@ host, followed by a newline. @value{tramp} now waits for the shell prompt or for a message that the login failed. -If @value{tramp} sees neither of them after a certain period of time (a minute, -say), then it issues an error message saying that it couldn't find the -remote shell prompt and shows you what the remote host has sent. +If @value{tramp} sees neither of them after a certain period of time +(a minute, say), then it issues an error message saying that it +couldn't find the remote shell prompt and shows you what the remote +host has sent. If @value{tramp} sees a @samp{login failed} message, it tells you so, aborts the login attempt and allows you to try again. @@ -1602,6 +1603,19 @@ the connections, like introducing a @option{Host} section in @file{~/.ssh/config} (@pxref{Frequently Asked Questions}) or applying multiple hops (@pxref{Multi-hops}). +When @value{tramp} detects a changed operating system version on a +remote host (via the command @command{uname -sr}), it flushes all +connection related information for this host, quits the execution, and +displays a message like this: + +@example +Quit: "Connection reset, because remote host changed from `Linux +2.6.22-13-generic' to `Linux 2.6.22-14-generic'" +@end example + +@noindent +You can simply open the remote file again in such a case. + @node Remote Programs @section How @value{tramp} finds and uses programs on the remote machine. @@ -2253,27 +2267,49 @@ filename completion on the remote host. This works pretty much like for files on the local host, with the exception that minibuffer killing via a double-slash works only on the filename part, except that filename part starts with @file{//}. +@ifset emacs +A triple-slash stands for the default behaviour. +@end ifset @ifinfo @xref{Minibuffer File, , , @value{emacsdir}}. @end ifinfo +@noindent +Example: + +@example @ifset emacs -As example, @kbd{@trampfn{telnet, , melancholia, /usr/local/bin//etc} -@key{TAB}} would result in -@file{@trampfn{telnet, , melancholia, /etc}}, whereas -@kbd{@trampfn{telnet, , melancholia, //etc} @key{TAB}} reduces the -minibuffer contents to @file{/etc}. A triple-slash stands for the -default behaviour, -i.e. @kbd{@trampfn{telnet, , melancholia, /usr/local/bin///etc} -@key{TAB}} expands directly to @file{/etc}. +@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//etc} @key{TAB}} + @print{} @trampfn{telnet, , melancholia, /etc} + +@kbd{C-x C-f @trampfn{telnet, , melancholia, //etc} @key{TAB}} + @print{} /etc + +@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin///etc} @key{TAB}} + @print{} /etc @end ifset @ifset xemacs -As example, @kbd{@trampfn{telnet, , melancholia, /usr/local/bin//}} -would result in @file{@trampfn{telnet, , melancholia, /}}, whereas -@kbd{@trampfn{telnet, , melancholia, //}} expands the minibuffer -contents to @file{/}. +@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//}} + @print{} @trampfn{telnet, , melancholia, /} + +@kbd{C-x C-f @trampfn{telnet, , melancholia, //}} + @print{} / @end ifset +@end example + +A remote directory might have changed its contents out of +@value{emacsname} control, for example by creation or deletion of +files by other processes. Therefore, during filename completion the +remote directory contents is reread regularly in order to detect such +changes, which would be invisible otherwise (@pxref{Connection caching}). + +@defopt tramp-completion-reread-directory-timeout +This variable defines the number of seconds since last remote command +before rereading a directory contents. A value of 0 would require an +immediate reread during filename completion, @code{nil} means to use +always cached values for the directory contents. +@end defopt @node Remote processes diff --git a/etc/ChangeLog b/etc/ChangeLog index 589e5365474..0cd4f718b1a 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,40 @@ +2007-11-30 Kentaro Ohkouchi + + * images/icons/macemacs_16.png, images/icons/macemacs_24.png: + * images/icons/macemacs_32.png, images/icons/macemacs_48.png: + * images/icons/macemacs_256.png, images/icons/macemacs_512.png: + New files. + +2007-11-28 Glenn Morris + + * nxml/: New directory, moved here from lisp/nxml/char-name/unicode. + * nxml/README: New file. + +2007-11-24 Glenn Morris + + * images/gnus/mail_send.xpm: Rename to mail-send.xpm. + +2007-11-23 Mark A. Hershberger + + * NXML-NEWS: New File. + + * schema: Initial merge of nxml. + +2007-11-22 Francesco Potort,Al(B + + * NEWS: etags: the --members option is now the default. + +2007-11-22 Glenn Morris + + * images/smilies/grayscale/README, images/smilies/medium/README: + New files. + +2007-11-12 Vinicius Jose Latorre + + * compilation.txt: Add new entries: compilation-perl--Pod::Checker, + compilation-perl--Test, compilation-perl--Test::Harness and + compilation-weblint. + 2007-11-01 Dan Nicolaescu * MACHINES: Remove Sun windows info. @@ -11,6 +48,12 @@ * refcards/gnus-refcard.tex: Restore Feb 2007 copyright clarifications lost in update to Gnus trunk. +2007-10-28 Adam Sj,Ax(Bgren + + * images/smilies/grayscale/*.xpm: New larger grayscale smileys. + + * images/smilies/medium/*.xpm: New colorful smileys. + 2007-10-29 Michael Olson * ERC-NEWS: Update for recent change. diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS index 585f62087d0..f7817bafb6a 100644 --- a/etc/GNUS-NEWS +++ b/etc/GNUS-NEWS @@ -58,7 +58,7 @@ Articles::. ** International host names (IDNA) can now be decoded inside article bodies using `W i' (`gnus-summary-idna-message'). This requires that GNU Libidn -(`http://www.gnu.org/software/libidn/') has been installed. +() has been installed. ** The non-ASCII group names handling has been much improved. The back ends that fully support non-ASCII group names are now `nntp', `nnml', @@ -106,7 +106,7 @@ From Newsgroups::. ** You can replace MIME parts with external bodies. See `gnus-mime-replace-part' and `gnus-article-replace-part'. *Note MIME -Commands::, *note Using MIME::. +Commands::, *Note Using MIME::. ** The option `mm-fill-flowed' can be used to disable treatment of format=flowed messages. Also, flowed text is disabled when sending @@ -146,7 +146,7 @@ Variables. ** The option `message-citation-line-format' controls the format of the "Whomever writes:" line. You need to set `message-citation-line-function' to -`message-insert-formated-citation-line' as well. +`message-insert-formatted-citation-line' as well. * Changes in back ends diff --git a/etc/NEWS b/etc/NEWS index 581547fe116..5af239c8f4c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -40,6 +40,8 @@ a GIF library. ** The `emacstool' utility has been removed. +** The new configuration option "--with-dbus" enables D-Bus language +bindings for Emacs. * Changes in Emacs 23.1 @@ -53,6 +55,7 @@ testing for the `multi-tty' feature. OS-X-style icons (an application icon and a relevant document icon) were contributed by Kentaro Ohkouchi. Source files for these icons can be found in Emacs.app/Contents/Resources. +PNG versions are available as etc/images/icons/macemacs_*.png. ** Built-in functions (subr) can now have an interactive specification that is not a prompt string. If the `intspec' parameter of a `DEFUN' @@ -120,6 +123,11 @@ following arguments. * Incompatible Editing Changes in Emacs 23.1 ++++ +** In Dired-x, all command guesses for ! are now added to the default +list accessible by M-n instead of pushing all guesses temporarily into +the history list. + * Editing Changes in Emacs 23.1 @@ -152,6 +160,17 @@ strings on the kill ring. ** Minibuffer changes: +*** In C-x d, if you type M-n you get the visited file name of the +current buffer. + +*** In Dired, a list of commands for ! extracted from mailcap according to +file extensions are added to the default list accessible by M-n. + +*** A list of regexp default values is available via M-n for `occur', +`keep-lines', `flush-lines' and `how-many'. This list includes the active +region in transient-mark-mode, the word under the cursor, the last isearch +regexp, the last isearch string and the last replacement regexp. + *** isearch started in the minibuffer searches in the minibuffer history. Reverse isearch commands (C-r, C-M-r) search in previous minibuffer history elements, and forward isearch commands (C-s, C-M-s) search in @@ -163,12 +182,17 @@ history element containing the search string becomes the current. * New Modes and Packages in Emacs 23.1 +** FIXME add details of new packages imported from lisp/gnus. + ** The package doc-view.el has been added. It supports viewing of PDF, PostScript and DVI documents inside an Emacs buffer by converting the document to a set of PNG images first. One can also search for a regular expression in the document. The commentary of the file explains its usage. +** The nXML package has been added. +[FIXME someone who uses this, please write a brief description.] + ** A new game called `bubbles' has been added. ** minibuffer-indicate-depth-mode shows the minibuffer depth in the prompt. @@ -178,6 +202,10 @@ mode for quickly jotting down things to remember. Included with remember.el is a backend that can save notes to a Diary file. Please consult the Remember Manual for usage details. +** D-Bus language bindings for Elisp are provided by the package +dbus.el and by extensions to the C modules of Emacs. D-Bus is an +inter-process communication mechanism for applications residing on the +same host, based on messages. See the manual for further details. * Changes in Specialized Modes and Packages in Emacs 23.1 @@ -201,10 +229,10 @@ than `with-output-to-temp-buffer' with `print-help-return-message'. *** New option `help-window-select' permits to customize whether help window shall be automatically selected when invoking help. *** New variable `help-window-point-marker' permits to specify new -position of point in help window (for example in `view-lossage'). +position of point in help window (for example in `view-lossage'). ** view-remove-frame-by-deleting is now by default t -since users found iconification of view-mode frames distracting. +since users found iconification of view-mode frames distracting. ** isearch can now search through multiple ChangeLog files. When running isearch in a ChangeLog file, if the search fails, @@ -213,11 +241,6 @@ if there is one (e.g. go from ChangeLog to ChangeLog.12). This is enabled if isearch-buffers-multi is non-nil. -+++ -** In Dired-x, all command guesses for ! are now added to the default -list accessible by M-n instead of pushing all guesses temporarily into -the history list. - ** smerge-refine highlights word-level details of changes in conflict. It's used automatically as you move through conflicts, see smerge-auto-refine. @@ -242,6 +265,12 @@ with the face `eldoc-highlight-function-argument'. ** defcustom accepts new keyword arguments, `:safe' and `:risky', which set a variable's `safe-local-variable' and `risky-local-variable' property. +** Etags changes. +*** The --members option is now the default. + +Use --no-members if you want the old default behaviour of not tagging +struct members in C, members variables in C++ and variables in PHP. + ** VC *** Clicking on the VC mode-line entry now pops the VC menu. @@ -254,6 +283,11 @@ version-control systems such as Subversion, GNU Arch, Mercurial, and Bzr. VC will now pass a multiple-file commit to these systems as a single changeset. +*** In VC Annotate mode, you can type V to toggle the annotation visibility. + +** log-edit now has a command bound to C-c C-d to show the diff for +the files involved. + ** sgml-electric-tag-pair-mode lets you simultaneously edit matched tag pairs. ** The appearance of superscript and subscript in TeX is more customizable. @@ -369,6 +403,12 @@ because they clash with commands provided by dirtrack.el. Use * Lisp Changes in Emacs 23.1 +** `beginning-of-defun-function' now takes one argument, the count + given to `beginning-of-defun'. + +** The variable `inhibit-changing-match-data', if non-nil, prevents the +search and match primitives from changing the match data. + +++ ** New function `match-substitute-replacement' returns the result of `replace-match' without actually using it in the buffer. @@ -391,6 +431,11 @@ applies before function-key-map. Also it is terminal-local contrary to key-translation-map. Terminal-specific key-sequences are generally added to this map rather than to function-key-map now. +** The new macro `declare-function' suppresses compiler warnings about +undefined functions. The new `check-declare' package verifies that such +statements are accurate (i.e. the functions are actually defined in +the specified files). + ** The new function `read-color' reads a color name using the minibuffer. ** Changes related to multiple tty support. @@ -486,6 +531,9 @@ but obeys file handlers. The file handler is chosen based on and `process-file-shell-command' are also new; they call internally `start-file-process' and `process-file', respectively. +** The new function `process-lines' executes an external program and +returns its output as a list of lines. + +++ ** `file-remote-p' has new optional parameters IDENTIFICATION and CONNECTED. IDENTIFICATION specifies which part of the remote identifier has to be diff --git a/etc/NEWS.22 b/etc/NEWS.22 index a8e8b3fbb8c..d7368ac6f38 100644 --- a/etc/NEWS.22 +++ b/etc/NEWS.22 @@ -40,6 +40,8 @@ below. Emacs tries to warn you about these through `bad-packages-alist'. ** Emacs is now licensed under the GNU GPL version 3 (or later). +** Support for GNU/kFreeBSD (GNU userland and FreeBSD kernel) was added. + * Changes in Emacs 22.2 ** In Image mode, whenever the displayed image is wider and/or higher @@ -3136,11 +3138,6 @@ be used (only once) in place of a file name on the command line. Etags reads from standard input and marks the produced tags as belonging to the file FILE. -*** The --members option is now the default. - -Use --no-members if you want the old default behaviour of not tagging -struct members in C, members variables in C++ and variables in PHP. - ** Ctags changes. *** Ctags now allows duplicate tags diff --git a/etc/NXML-NEWS b/etc/NXML-NEWS new file mode 100644 index 00000000000..cebbab82fda --- /dev/null +++ b/etc/NXML-NEWS @@ -0,0 +1,199 @@ +20041004 +-------- + +Support for outlining has been added. See the manual for more details. + +C-u C-c C-n goes to the first error. + +20040910 +-------- + +C-c RET splits the current element as in PSGML. + +20040908 +-------- + +Indentation has been rewritten. Indentation of attribute names and +values should work better. The default value of +`nxml-attribute-indent' has been changed to 4. + +Syntax highlighting with a dark background should now work. + +20040726 +-------- + +The attribute pathSuffix on the uri element in schema locating files +has been replaced by a more general pattern attribute. The +transformURI element now has required fromPattern and toPattern +attributes. + +The schema related bindings have been changed to use C-c C-s as a prefix +as follows: + + C-c C-s => C-c C-s C-f (f for file) + C-c C-a => C-c C-s C-a + C-c C-t => C-c C-s C-t + C-c C-l => C-c C-s C-l + C-c C-w => C-c C-s C-w + +There's now an XML menu on the menu-bar. + +20031031 +-------- + +C-c C-d "dynamically" chooses a tag to put around the word before +point, rather like M-/. + +The mechanism for locating the schema has changed completely. The new +mechanism is described in the manual. Any existing customizations of +`rng-auto-element-alist' or `rng-auto-file-name-alist' will no longer +be effective. + +C-c C-a is now bound to rng-auto-set-schema. + +20031018 +-------- + +Unicode names can be used to insert characters with the new command +C-c C-u. Normally, this inserts a character reference. With a prefix +arg (i.e. C-u C-c C-u), it inserts the character directly. You can +customize `nxml-enabled-unicode-blocks' to control what Unicode blocks +are used for completing names. + +Extra information is displayed for character references. The Unicode +name is displayed in a tooltip. A glyph for the referenced character +is displayed in a distinguished face following the character +reference; this can be disabled by customizing +`nxml-char-ref-display-glyph-flag'. The command +`nxml-toggle-char-ref-extra-display' dynamically toggles the display +of extra information for character references for a particular buffer. +This can be used if the display of extra information is causing +performance problems. nXML mode tries to figure out which glyphs can +be displayed. Unfortunately Emacs doesn't provide the primitives +necessary to do this properly, so nXML mode has to guess and will +sometimes guess wrong. The hook `nxml-glyph-set-hook' can be used to +change nXML mode's guess. + +New command C-c C-w says what schema is being used. + +C-c C-s now turns on validation if it is not already on. + +20030928 +-------- + +M-q has been implemented so that it works reasonably with XML. Other +paragraph-related commands (M-{, M-}, M-h) have also been implemented. + +New command M-x rng-auto-set-schema to set the schema based on the +buffer's current contents and file-name. This is called automatically +when rng-validate-mode is first enabled. + +There's now a C-M-d to go with C-M-u. C-M-d moves forward down into +the content of an element. C-M-n and C-M-p move to the next or +previous element. + +By default, the sexp commands (C-M-f, C-M-b, C-M-k, C-M-SPC) operate +on tags rather than elements. To restore the old behaviour, +customize nxml-sexp-element-flag. + +The file TUTORIAL has been replaced by nxml-mode.info; this is in info +format and can be read using Emacs. The source is maintained in a +simple, ad-hoc XML format. + +20030915 +-------- + +XML encodings should now work properly. When saving a buffer, +nxml-mode arranges to use the encoding declared in the XML +declaration. If there is no encoding declared, then nxml-mode will +use utf-8 or utf-16 according to the user options +`nxml-prefer-utf-16-to-utf-8-flag' and +`nxml-prefer-utf-16-little-to-big-endian-flag'. If the chosen encoding +cannot encode all the characters in the buffer, nxml-mode will +complain and give the user an opportunity to use an encoding that can. + +A new command C-c C-x inserts an XML declaration. + +The option `nxml-auto-insert-xml-declaration-flag' automatically +inserts an XML declaration in new files. + +The `nxml-default-buffer-file-coding-system' option allows a different +default buffer-file-coding-system for nXML mode buffers. This affects +what XML declaration is inserted. + +Encoding names in XML declarations are now validated by +rng-validate-mode. + +RDF/XML schema was updated to version in 05 September 2003 WD. + +20030912 +-------- + +The tutorial has a new section on inserting end-tags. + +By default to close the start-tag of an +inline-level element. After inserting the >, it will insert the +end-tag and leave point before the end-tag. The `i' is supposed to be +mnemonic for `inline'. C-c C-b is similar, but for block elements: the +start-tag, point and the end-tag will all be on separate lines. + +The binding for inserting an end-tag has changed from C-c / to C-c C-f +to comply with Emacs guidelines about what keys major modes should +bind. The `f' is supposed to be mnemonic for `finish'. + +Completion always puts point after all the characters it inserts. It +doesn't insert a `>' after completing a start-tag name. + +Completion no longer completes CDATA section and comment delimiters. + +The nxml-start-auto-coding command enables auto-detection of a file's +encoding as specified in the XML Recommendation for files that use +nxml-mode; rng-auto.el calls this. + +20030906 +-------- + +Validation messages applicable to point are displayed automatically. + +Completion can deal with prefixes that haven't yet been declared. + +rng-preferred-prefix-alist variable added. + +Namespace URIs can be completed. + +xmlns and xmlns:* attributes can be completed. + +CDATA section and comment delimiters can be completed. + +Each kind of completion has its own history. + +Completion function moved to nxml-mode; uses a hook to allow +schema-sensitive completion. Completion function bound to C-return. +Also bound to M-TAB as before, unless +nxml-bind-meta-tab-to-complete-flag is nil. When there is a window +system, nxml-bind-meta-tab-to-complete-flag is nil by default, This +avoid problems with M-TAB, which is not passed through by several +window systems/managers. + +TUTORIAL file added. + +NEWS file added. + +Bug fixes. + +20030901 +-------- + +Initial release. diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 049c8c8bb6d..45202e7e057 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -2222,7 +2222,11 @@ This combination of keys is a command to change keyboard layout. If you proceed to type another non-modifier key before you let go of Alt and Shift, the Alt and Shift act as modifiers in the usual way. A more permanent work around is to change it to another key combination, -or disable it in the keyboard control panel. +or disable it in the "Regional and Language Options" applet of the +Control Panel. (The exact sequence of mouse clicks in the "Regional +and Language Options" applet needed to find the key combination that +changes the keyboard layout depends on your Windows version; for XP, +in the Languages tab, click "Details" and then "Key Settings".) ** Cygwin build of Emacs hangs after rebasing Cygwin DLLs diff --git a/etc/TODO b/etc/TODO index c702f8997c3..a1b8659dfa3 100644 --- a/etc/TODO +++ b/etc/TODO @@ -29,10 +29,6 @@ I.e. mouse-set-font should use customize-face. the mouse is put to rest or after a delay or both, so that moving over a window doesn't select it. -** In C-x d, the default if you type RET should be the directory name, -but if you type M-n you should get the visited file name of the -current buffer. - ** Distribute a bar cursor of width > 1 evenly between the two glyphs on each side of the bar (what to do at the edges?). @@ -113,6 +109,9 @@ and HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\\ where is the network device found under the first key. +** Check for any included packages that define obsolete bug-reporting commands. +Change them to use report-emacs-bug. + * Important features: ** Provide user-friendly ways to list all available font families, @@ -322,9 +321,7 @@ typically due to pilot errors and should thus be in debug-ignored-errors. the whole menu bar. In the mean time, it should process other messages. ** Get some major packages installed: W3 (development version needs - significant work), PSGML, nXML [Mark Hershberger is looking at this - http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01699.html], - _possibly_ Cedet and ECB. + significant work), PSGML, _possibly_ Cedet and ECB. http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg01493.html Check the assignments file for other packages which might go in and have been missed. diff --git a/etc/compilation.txt b/etc/compilation.txt index 2b30b17abdc..426cb19ade9 100644 --- a/etc/compilation.txt +++ b/etc/compilation.txt @@ -370,6 +370,36 @@ symbol: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line -: 18:} +* Podchecker error messages, per Pod::Checker + +symbol: compilation-perl--Pod::Checker + +*** ERROR: Spurious text after =cut at line 193 in file foo.pm +*** ERROR: =over on line 37 without closing =back at line EOF in file bar.pm +*** ERROR: =over on line 1 without closing =back (at head1) at line 3 in file x.pod + + +* Perl Test module error messages + +symbol: compilation-perl--Test + +# Failed test 1 in foo.t at line 6 + + +* Perl Test::Harness output + +symbol: compilation-perl--Test::Harness + +NOK 1# Test 1 got: "1234" (t/foo.t at line 46) + + +* Perl HTML::Lint::Error::as_string() + +symbol: compilation-weblint + +index.html (13:1) Unknown element + + * Directory tracking Directories are matched via `compilation-directory-matcher'. Files which are diff --git a/etc/images/gnus/README b/etc/images/gnus/README index 09208d3d11d..e4e7d523772 100644 --- a/etc/images/gnus/README +++ b/etc/images/gnus/README @@ -35,3 +35,4 @@ but distributed and used by Emacs. toggle-subscription.xpm (GNOME stock/document/stock_task-recurring) kill-group.pbm and kill-group.xpm are converted from close.xpm rot13.pbm and rot13.xpm are converted from lock.xpm +mail-send.xpm ? diff --git a/etc/images/gnus/mail_send.xpm b/etc/images/gnus/mail-send.xpm similarity index 100% rename from etc/images/gnus/mail_send.xpm rename to etc/images/gnus/mail-send.xpm diff --git a/etc/images/icons/README b/etc/images/icons/README index ff53516acce..056d6baf57b 100644 --- a/etc/images/icons/README +++ b/etc/images/icons/README @@ -4,3 +4,9 @@ Files: emacs_16.png emacs_24.png emacs_32.png emacs_48.png Author: Andrew Zhilin Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) + +Files: macemacs_16.png macemacs_24.png macemacs_32.png macemacs_48.png + macemacs_256.png macemacs_512.png +Author: Kentaro Ohkouchi +Copyright (C) 2007 Free Software Foundation, Inc. +License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/images/icons/macemacs_16.png b/etc/images/icons/macemacs_16.png new file mode 100644 index 00000000000..0f112d87185 Binary files /dev/null and b/etc/images/icons/macemacs_16.png differ diff --git a/etc/images/icons/macemacs_24.png b/etc/images/icons/macemacs_24.png new file mode 100644 index 00000000000..7666a1d1dea Binary files /dev/null and b/etc/images/icons/macemacs_24.png differ diff --git a/etc/images/icons/macemacs_256.png b/etc/images/icons/macemacs_256.png new file mode 100644 index 00000000000..5529c75a4ee Binary files /dev/null and b/etc/images/icons/macemacs_256.png differ diff --git a/etc/images/icons/macemacs_32.png b/etc/images/icons/macemacs_32.png new file mode 100644 index 00000000000..94bfe8893b6 Binary files /dev/null and b/etc/images/icons/macemacs_32.png differ diff --git a/etc/images/icons/macemacs_48.png b/etc/images/icons/macemacs_48.png new file mode 100644 index 00000000000..ac3e703f820 Binary files /dev/null and b/etc/images/icons/macemacs_48.png differ diff --git a/etc/images/icons/macemacs_512.png b/etc/images/icons/macemacs_512.png new file mode 100644 index 00000000000..b817081ad12 Binary files /dev/null and b/etc/images/icons/macemacs_512.png differ diff --git a/etc/images/smilies/grayscale/README b/etc/images/smilies/grayscale/README new file mode 100644 index 00000000000..10c3e3cc272 --- /dev/null +++ b/etc/images/smilies/grayscale/README @@ -0,0 +1,6 @@ +Files: blink.xpm braindamaged.xpm cry.xpm dead.xpm evil.xpm forced.xpm + frown.xpm grin.xpm indifferent.xpm reverse-smile.xpm sad.xpm + smile.xpm wry.xpm +Author: Adam Sjøgren +Copyright (C) 2007 Free Software Foundation, Inc. +License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/images/smilies/medium/README b/etc/images/smilies/medium/README new file mode 100644 index 00000000000..10c3e3cc272 --- /dev/null +++ b/etc/images/smilies/medium/README @@ -0,0 +1,6 @@ +Files: blink.xpm braindamaged.xpm cry.xpm dead.xpm evil.xpm forced.xpm + frown.xpm grin.xpm indifferent.xpm reverse-smile.xpm sad.xpm + smile.xpm wry.xpm +Author: Adam Sjøgren +Copyright (C) 2007 Free Software Foundation, Inc. +License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/nxml/00000-0007F.el b/etc/nxml/00000-0007F.el new file mode 100644 index 00000000000..da2be08938c --- /dev/null +++ b/etc/nxml/00000-0007F.el @@ -0,0 +1,99 @@ +(nxml-define-char-name-set 'basic-latin + '(("SPACE" #x0020) + ("EXCLAMATION MARK" #x0021) + ("QUOTATION MARK" #x0022) + ("NUMBER SIGN" #x0023) + ("DOLLAR SIGN" #x0024) + ("PERCENT SIGN" #x0025) + ("AMPERSAND" #x0026) + ("APOSTROPHE" #x0027) + ("LEFT PARENTHESIS" #x0028) + ("RIGHT PARENTHESIS" #x0029) + ("ASTERISK" #x002A) + ("PLUS SIGN" #x002B) + ("COMMA" #x002C) + ("HYPHEN-MINUS" #x002D) + ("FULL STOP" #x002E) + ("SOLIDUS" #x002F) + ("DIGIT ZERO" #x0030) + ("DIGIT ONE" #x0031) + ("DIGIT TWO" #x0032) + ("DIGIT THREE" #x0033) + ("DIGIT FOUR" #x0034) + ("DIGIT FIVE" #x0035) + ("DIGIT SIX" #x0036) + ("DIGIT SEVEN" #x0037) + ("DIGIT EIGHT" #x0038) + ("DIGIT NINE" #x0039) + ("COLON" #x003A) + ("SEMICOLON" #x003B) + ("LESS-THAN SIGN" #x003C) + ("EQUALS SIGN" #x003D) + ("GREATER-THAN SIGN" #x003E) + ("QUESTION MARK" #x003F) + ("COMMERCIAL AT" #x0040) + ("LATIN CAPITAL LETTER A" #x0041) + ("LATIN CAPITAL LETTER B" #x0042) + ("LATIN CAPITAL LETTER C" #x0043) + ("LATIN CAPITAL LETTER D" #x0044) + ("LATIN CAPITAL LETTER E" #x0045) + ("LATIN CAPITAL LETTER F" #x0046) + ("LATIN CAPITAL LETTER G" #x0047) + ("LATIN CAPITAL LETTER H" #x0048) + ("LATIN CAPITAL LETTER I" #x0049) + ("LATIN CAPITAL LETTER J" #x004A) + ("LATIN CAPITAL LETTER K" #x004B) + ("LATIN CAPITAL LETTER L" #x004C) + ("LATIN CAPITAL LETTER M" #x004D) + ("LATIN CAPITAL LETTER N" #x004E) + ("LATIN CAPITAL LETTER O" #x004F) + ("LATIN CAPITAL LETTER P" #x0050) + ("LATIN CAPITAL LETTER Q" #x0051) + ("LATIN CAPITAL LETTER R" #x0052) + ("LATIN CAPITAL LETTER S" #x0053) + ("LATIN CAPITAL LETTER T" #x0054) + ("LATIN CAPITAL LETTER U" #x0055) + ("LATIN CAPITAL LETTER V" #x0056) + ("LATIN CAPITAL LETTER W" #x0057) + ("LATIN CAPITAL LETTER X" #x0058) + ("LATIN CAPITAL LETTER Y" #x0059) + ("LATIN CAPITAL LETTER Z" #x005A) + ("LEFT SQUARE BRACKET" #x005B) + ("REVERSE SOLIDUS" #x005C) + ("RIGHT SQUARE BRACKET" #x005D) + ("CIRCUMFLEX ACCENT" #x005E) + ("LOW LINE" #x005F) + ("GRAVE ACCENT" #x0060) + ("LATIN SMALL LETTER A" #x0061) + ("LATIN SMALL LETTER B" #x0062) + ("LATIN SMALL LETTER C" #x0063) + ("LATIN SMALL LETTER D" #x0064) + ("LATIN SMALL LETTER E" #x0065) + ("LATIN SMALL LETTER F" #x0066) + ("LATIN SMALL LETTER G" #x0067) + ("LATIN SMALL LETTER H" #x0068) + ("LATIN SMALL LETTER I" #x0069) + ("LATIN SMALL LETTER J" #x006A) + ("LATIN SMALL LETTER K" #x006B) + ("LATIN SMALL LETTER L" #x006C) + ("LATIN SMALL LETTER M" #x006D) + ("LATIN SMALL LETTER N" #x006E) + ("LATIN SMALL LETTER O" #x006F) + ("LATIN SMALL LETTER P" #x0070) + ("LATIN SMALL LETTER Q" #x0071) + ("LATIN SMALL LETTER R" #x0072) + ("LATIN SMALL LETTER S" #x0073) + ("LATIN SMALL LETTER T" #x0074) + ("LATIN SMALL LETTER U" #x0075) + ("LATIN SMALL LETTER V" #x0076) + ("LATIN SMALL LETTER W" #x0077) + ("LATIN SMALL LETTER X" #x0078) + ("LATIN SMALL LETTER Y" #x0079) + ("LATIN SMALL LETTER Z" #x007A) + ("LEFT CURLY BRACKET" #x007B) + ("VERTICAL LINE" #x007C) + ("RIGHT CURLY BRACKET" #x007D) + ("TILDE" #x007E) + )) + +;; arch-tag: c46ffe15-ef5b-46f6-837f-d6bcf56db5b2 diff --git a/etc/nxml/00080-000FF.el b/etc/nxml/00080-000FF.el new file mode 100644 index 00000000000..61fd8e0a4b0 --- /dev/null +++ b/etc/nxml/00080-000FF.el @@ -0,0 +1,100 @@ +(nxml-define-char-name-set 'latin-1-supplement + '(("NO-BREAK SPACE" #x00A0) + ("INVERTED EXCLAMATION MARK" #x00A1) + ("CENT SIGN" #x00A2) + ("POUND SIGN" #x00A3) + ("CURRENCY SIGN" #x00A4) + ("YEN SIGN" #x00A5) + ("BROKEN BAR" #x00A6) + ("SECTION SIGN" #x00A7) + ("DIAERESIS" #x00A8) + ("COPYRIGHT SIGN" #x00A9) + ("FEMININE ORDINAL INDICATOR" #x00AA) + ("LEFT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00AB) + ("NOT SIGN" #x00AC) + ("SOFT HYPHEN" #x00AD) + ("REGISTERED SIGN" #x00AE) + ("MACRON" #x00AF) + ("DEGREE SIGN" #x00B0) + ("PLUS-MINUS SIGN" #x00B1) + ("SUPERSCRIPT TWO" #x00B2) + ("SUPERSCRIPT THREE" #x00B3) + ("ACUTE ACCENT" #x00B4) + ("MICRO SIGN" #x00B5) + ("PILCROW SIGN" #x00B6) + ("MIDDLE DOT" #x00B7) + ("CEDILLA" #x00B8) + ("SUPERSCRIPT ONE" #x00B9) + ("MASCULINE ORDINAL INDICATOR" #x00BA) + ("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00BB) + ("VULGAR FRACTION ONE QUARTER" #x00BC) + ("VULGAR FRACTION ONE HALF" #x00BD) + ("VULGAR FRACTION THREE QUARTERS" #x00BE) + ("INVERTED QUESTION MARK" #x00BF) + ("LATIN CAPITAL LETTER A WITH GRAVE" #x00C0) + ("LATIN CAPITAL LETTER A WITH ACUTE" #x00C1) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX" #x00C2) + ("LATIN CAPITAL LETTER A WITH TILDE" #x00C3) + ("LATIN CAPITAL LETTER A WITH DIAERESIS" #x00C4) + ("LATIN CAPITAL LETTER A WITH RING ABOVE" #x00C5) + ("LATIN CAPITAL LETTER AE" #x00C6) + ("LATIN CAPITAL LETTER C WITH CEDILLA" #x00C7) + ("LATIN CAPITAL LETTER E WITH GRAVE" #x00C8) + ("LATIN CAPITAL LETTER E WITH ACUTE" #x00C9) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX" #x00CA) + ("LATIN CAPITAL LETTER E WITH DIAERESIS" #x00CB) + ("LATIN CAPITAL LETTER I WITH GRAVE" #x00CC) + ("LATIN CAPITAL LETTER I WITH ACUTE" #x00CD) + ("LATIN CAPITAL LETTER I WITH CIRCUMFLEX" #x00CE) + ("LATIN CAPITAL LETTER I WITH DIAERESIS" #x00CF) + ("LATIN CAPITAL LETTER ETH" #x00D0) + ("LATIN CAPITAL LETTER N WITH TILDE" #x00D1) + ("LATIN CAPITAL LETTER O WITH GRAVE" #x00D2) + ("LATIN CAPITAL LETTER O WITH ACUTE" #x00D3) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX" #x00D4) + ("LATIN CAPITAL LETTER O WITH TILDE" #x00D5) + ("LATIN CAPITAL LETTER O WITH DIAERESIS" #x00D6) + ("MULTIPLICATION SIGN" #x00D7) + ("LATIN CAPITAL LETTER O WITH STROKE" #x00D8) + ("LATIN CAPITAL LETTER U WITH GRAVE" #x00D9) + ("LATIN CAPITAL LETTER U WITH ACUTE" #x00DA) + ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX" #x00DB) + ("LATIN CAPITAL LETTER U WITH DIAERESIS" #x00DC) + ("LATIN CAPITAL LETTER Y WITH ACUTE" #x00DD) + ("LATIN CAPITAL LETTER THORN" #x00DE) + ("LATIN SMALL LETTER SHARP S" #x00DF) + ("LATIN SMALL LETTER A WITH GRAVE" #x00E0) + ("LATIN SMALL LETTER A WITH ACUTE" #x00E1) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX" #x00E2) + ("LATIN SMALL LETTER A WITH TILDE" #x00E3) + ("LATIN SMALL LETTER A WITH DIAERESIS" #x00E4) + ("LATIN SMALL LETTER A WITH RING ABOVE" #x00E5) + ("LATIN SMALL LETTER AE" #x00E6) + ("LATIN SMALL LETTER C WITH CEDILLA" #x00E7) + ("LATIN SMALL LETTER E WITH GRAVE" #x00E8) + ("LATIN SMALL LETTER E WITH ACUTE" #x00E9) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX" #x00EA) + ("LATIN SMALL LETTER E WITH DIAERESIS" #x00EB) + ("LATIN SMALL LETTER I WITH GRAVE" #x00EC) + ("LATIN SMALL LETTER I WITH ACUTE" #x00ED) + ("LATIN SMALL LETTER I WITH CIRCUMFLEX" #x00EE) + ("LATIN SMALL LETTER I WITH DIAERESIS" #x00EF) + ("LATIN SMALL LETTER ETH" #x00F0) + ("LATIN SMALL LETTER N WITH TILDE" #x00F1) + ("LATIN SMALL LETTER O WITH GRAVE" #x00F2) + ("LATIN SMALL LETTER O WITH ACUTE" #x00F3) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX" #x00F4) + ("LATIN SMALL LETTER O WITH TILDE" #x00F5) + ("LATIN SMALL LETTER O WITH DIAERESIS" #x00F6) + ("DIVISION SIGN" #x00F7) + ("LATIN SMALL LETTER O WITH STROKE" #x00F8) + ("LATIN SMALL LETTER U WITH GRAVE" #x00F9) + ("LATIN SMALL LETTER U WITH ACUTE" #x00FA) + ("LATIN SMALL LETTER U WITH CIRCUMFLEX" #x00FB) + ("LATIN SMALL LETTER U WITH DIAERESIS" #x00FC) + ("LATIN SMALL LETTER Y WITH ACUTE" #x00FD) + ("LATIN SMALL LETTER THORN" #x00FE) + ("LATIN SMALL LETTER Y WITH DIAERESIS" #x00FF) + )) + +;; arch-tag: f7ca0f06-9eb7-4b7a-b014-795af10f23ac diff --git a/etc/nxml/00100-0017F.el b/etc/nxml/00100-0017F.el new file mode 100644 index 00000000000..5c15ef91dfb --- /dev/null +++ b/etc/nxml/00100-0017F.el @@ -0,0 +1,132 @@ +(nxml-define-char-name-set 'latin-extended-a + '(("LATIN CAPITAL LETTER A WITH MACRON" #x0100) + ("LATIN SMALL LETTER A WITH MACRON" #x0101) + ("LATIN CAPITAL LETTER A WITH BREVE" #x0102) + ("LATIN SMALL LETTER A WITH BREVE" #x0103) + ("LATIN CAPITAL LETTER A WITH OGONEK" #x0104) + ("LATIN SMALL LETTER A WITH OGONEK" #x0105) + ("LATIN CAPITAL LETTER C WITH ACUTE" #x0106) + ("LATIN SMALL LETTER C WITH ACUTE" #x0107) + ("LATIN CAPITAL LETTER C WITH CIRCUMFLEX" #x0108) + ("LATIN SMALL LETTER C WITH CIRCUMFLEX" #x0109) + ("LATIN CAPITAL LETTER C WITH DOT ABOVE" #x010A) + ("LATIN SMALL LETTER C WITH DOT ABOVE" #x010B) + ("LATIN CAPITAL LETTER C WITH CARON" #x010C) + ("LATIN SMALL LETTER C WITH CARON" #x010D) + ("LATIN CAPITAL LETTER D WITH CARON" #x010E) + ("LATIN SMALL LETTER D WITH CARON" #x010F) + ("LATIN CAPITAL LETTER D WITH STROKE" #x0110) + ("LATIN SMALL LETTER D WITH STROKE" #x0111) + ("LATIN CAPITAL LETTER E WITH MACRON" #x0112) + ("LATIN SMALL LETTER E WITH MACRON" #x0113) + ("LATIN CAPITAL LETTER E WITH BREVE" #x0114) + ("LATIN SMALL LETTER E WITH BREVE" #x0115) + ("LATIN CAPITAL LETTER E WITH DOT ABOVE" #x0116) + ("LATIN SMALL LETTER E WITH DOT ABOVE" #x0117) + ("LATIN CAPITAL LETTER E WITH OGONEK" #x0118) + ("LATIN SMALL LETTER E WITH OGONEK" #x0119) + ("LATIN CAPITAL LETTER E WITH CARON" #x011A) + ("LATIN SMALL LETTER E WITH CARON" #x011B) + ("LATIN CAPITAL LETTER G WITH CIRCUMFLEX" #x011C) + ("LATIN SMALL LETTER G WITH CIRCUMFLEX" #x011D) + ("LATIN CAPITAL LETTER G WITH BREVE" #x011E) + ("LATIN SMALL LETTER G WITH BREVE" #x011F) + ("LATIN CAPITAL LETTER G WITH DOT ABOVE" #x0120) + ("LATIN SMALL LETTER G WITH DOT ABOVE" #x0121) + ("LATIN CAPITAL LETTER G WITH CEDILLA" #x0122) + ("LATIN SMALL LETTER G WITH CEDILLA" #x0123) + ("LATIN CAPITAL LETTER H WITH CIRCUMFLEX" #x0124) + ("LATIN SMALL LETTER H WITH CIRCUMFLEX" #x0125) + ("LATIN CAPITAL LETTER H WITH STROKE" #x0126) + ("LATIN SMALL LETTER H WITH STROKE" #x0127) + ("LATIN CAPITAL LETTER I WITH TILDE" #x0128) + ("LATIN SMALL LETTER I WITH TILDE" #x0129) + ("LATIN CAPITAL LETTER I WITH MACRON" #x012A) + ("LATIN SMALL LETTER I WITH MACRON" #x012B) + ("LATIN CAPITAL LETTER I WITH BREVE" #x012C) + ("LATIN SMALL LETTER I WITH BREVE" #x012D) + ("LATIN CAPITAL LETTER I WITH OGONEK" #x012E) + ("LATIN SMALL LETTER I WITH OGONEK" #x012F) + ("LATIN CAPITAL LETTER I WITH DOT ABOVE" #x0130) + ("LATIN SMALL LETTER DOTLESS I" #x0131) + ("LATIN CAPITAL LIGATURE IJ" #x0132) + ("LATIN SMALL LIGATURE IJ" #x0133) + ("LATIN CAPITAL LETTER J WITH CIRCUMFLEX" #x0134) + ("LATIN SMALL LETTER J WITH CIRCUMFLEX" #x0135) + ("LATIN CAPITAL LETTER K WITH CEDILLA" #x0136) + ("LATIN SMALL LETTER K WITH CEDILLA" #x0137) + ("LATIN SMALL LETTER KRA" #x0138) + ("LATIN CAPITAL LETTER L WITH ACUTE" #x0139) + ("LATIN SMALL LETTER L WITH ACUTE" #x013A) + ("LATIN CAPITAL LETTER L WITH CEDILLA" #x013B) + ("LATIN SMALL LETTER L WITH CEDILLA" #x013C) + ("LATIN CAPITAL LETTER L WITH CARON" #x013D) + ("LATIN SMALL LETTER L WITH CARON" #x013E) + ("LATIN CAPITAL LETTER L WITH MIDDLE DOT" #x013F) + ("LATIN SMALL LETTER L WITH MIDDLE DOT" #x0140) + ("LATIN CAPITAL LETTER L WITH STROKE" #x0141) + ("LATIN SMALL LETTER L WITH STROKE" #x0142) + ("LATIN CAPITAL LETTER N WITH ACUTE" #x0143) + ("LATIN SMALL LETTER N WITH ACUTE" #x0144) + ("LATIN CAPITAL LETTER N WITH CEDILLA" #x0145) + ("LATIN SMALL LETTER N WITH CEDILLA" #x0146) + ("LATIN CAPITAL LETTER N WITH CARON" #x0147) + ("LATIN SMALL LETTER N WITH CARON" #x0148) + ("LATIN SMALL LETTER N PRECEDED BY APOSTROPHE" #x0149) + ("LATIN CAPITAL LETTER ENG" #x014A) + ("LATIN SMALL LETTER ENG" #x014B) + ("LATIN CAPITAL LETTER O WITH MACRON" #x014C) + ("LATIN SMALL LETTER O WITH MACRON" #x014D) + ("LATIN CAPITAL LETTER O WITH BREVE" #x014E) + ("LATIN SMALL LETTER O WITH BREVE" #x014F) + ("LATIN CAPITAL LETTER O WITH DOUBLE ACUTE" #x0150) + ("LATIN SMALL LETTER O WITH DOUBLE ACUTE" #x0151) + ("LATIN CAPITAL LIGATURE OE" #x0152) + ("LATIN SMALL LIGATURE OE" #x0153) + ("LATIN CAPITAL LETTER R WITH ACUTE" #x0154) + ("LATIN SMALL LETTER R WITH ACUTE" #x0155) + ("LATIN CAPITAL LETTER R WITH CEDILLA" #x0156) + ("LATIN SMALL LETTER R WITH CEDILLA" #x0157) + ("LATIN CAPITAL LETTER R WITH CARON" #x0158) + ("LATIN SMALL LETTER R WITH CARON" #x0159) + ("LATIN CAPITAL LETTER S WITH ACUTE" #x015A) + ("LATIN SMALL LETTER S WITH ACUTE" #x015B) + ("LATIN CAPITAL LETTER S WITH CIRCUMFLEX" #x015C) + ("LATIN SMALL LETTER S WITH CIRCUMFLEX" #x015D) + ("LATIN CAPITAL LETTER S WITH CEDILLA" #x015E) + ("LATIN SMALL LETTER S WITH CEDILLA" #x015F) + ("LATIN CAPITAL LETTER S WITH CARON" #x0160) + ("LATIN SMALL LETTER S WITH CARON" #x0161) + ("LATIN CAPITAL LETTER T WITH CEDILLA" #x0162) + ("LATIN SMALL LETTER T WITH CEDILLA" #x0163) + ("LATIN CAPITAL LETTER T WITH CARON" #x0164) + ("LATIN SMALL LETTER T WITH CARON" #x0165) + ("LATIN CAPITAL LETTER T WITH STROKE" #x0166) + ("LATIN SMALL LETTER T WITH STROKE" #x0167) + ("LATIN CAPITAL LETTER U WITH TILDE" #x0168) + ("LATIN SMALL LETTER U WITH TILDE" #x0169) + ("LATIN CAPITAL LETTER U WITH MACRON" #x016A) + ("LATIN SMALL LETTER U WITH MACRON" #x016B) + ("LATIN CAPITAL LETTER U WITH BREVE" #x016C) + ("LATIN SMALL LETTER U WITH BREVE" #x016D) + ("LATIN CAPITAL LETTER U WITH RING ABOVE" #x016E) + ("LATIN SMALL LETTER U WITH RING ABOVE" #x016F) + ("LATIN CAPITAL LETTER U WITH DOUBLE ACUTE" #x0170) + ("LATIN SMALL LETTER U WITH DOUBLE ACUTE" #x0171) + ("LATIN CAPITAL LETTER U WITH OGONEK" #x0172) + ("LATIN SMALL LETTER U WITH OGONEK" #x0173) + ("LATIN CAPITAL LETTER W WITH CIRCUMFLEX" #x0174) + ("LATIN SMALL LETTER W WITH CIRCUMFLEX" #x0175) + ("LATIN CAPITAL LETTER Y WITH CIRCUMFLEX" #x0176) + ("LATIN SMALL LETTER Y WITH CIRCUMFLEX" #x0177) + ("LATIN CAPITAL LETTER Y WITH DIAERESIS" #x0178) + ("LATIN CAPITAL LETTER Z WITH ACUTE" #x0179) + ("LATIN SMALL LETTER Z WITH ACUTE" #x017A) + ("LATIN CAPITAL LETTER Z WITH DOT ABOVE" #x017B) + ("LATIN SMALL LETTER Z WITH DOT ABOVE" #x017C) + ("LATIN CAPITAL LETTER Z WITH CARON" #x017D) + ("LATIN SMALL LETTER Z WITH CARON" #x017E) + ("LATIN SMALL LETTER LONG S" #x017F) + )) + +;; arch-tag: 30e6e868-1bc7-4cd1-b75b-7fd4354cf8fe diff --git a/etc/nxml/00180-0024F.el b/etc/nxml/00180-0024F.el new file mode 100644 index 00000000000..5bc138be499 --- /dev/null +++ b/etc/nxml/00180-0024F.el @@ -0,0 +1,183 @@ +(nxml-define-char-name-set 'latin-extended-b + '(("LATIN SMALL LETTER B WITH STROKE" #x0180) + ("LATIN CAPITAL LETTER B WITH HOOK" #x0181) + ("LATIN CAPITAL LETTER B WITH TOPBAR" #x0182) + ("LATIN SMALL LETTER B WITH TOPBAR" #x0183) + ("LATIN CAPITAL LETTER TONE SIX" #x0184) + ("LATIN SMALL LETTER TONE SIX" #x0185) + ("LATIN CAPITAL LETTER OPEN O" #x0186) + ("LATIN CAPITAL LETTER C WITH HOOK" #x0187) + ("LATIN SMALL LETTER C WITH HOOK" #x0188) + ("LATIN CAPITAL LETTER AFRICAN D" #x0189) + ("LATIN CAPITAL LETTER D WITH HOOK" #x018A) + ("LATIN CAPITAL LETTER D WITH TOPBAR" #x018B) + ("LATIN SMALL LETTER D WITH TOPBAR" #x018C) + ("LATIN SMALL LETTER TURNED DELTA" #x018D) + ("LATIN CAPITAL LETTER REVERSED E" #x018E) + ("LATIN CAPITAL LETTER SCHWA" #x018F) + ("LATIN CAPITAL LETTER OPEN E" #x0190) + ("LATIN CAPITAL LETTER F WITH HOOK" #x0191) + ("LATIN SMALL LETTER F WITH HOOK" #x0192) + ("LATIN CAPITAL LETTER G WITH HOOK" #x0193) + ("LATIN CAPITAL LETTER GAMMA" #x0194) + ("LATIN SMALL LETTER HV" #x0195) + ("LATIN CAPITAL LETTER IOTA" #x0196) + ("LATIN CAPITAL LETTER I WITH STROKE" #x0197) + ("LATIN CAPITAL LETTER K WITH HOOK" #x0198) + ("LATIN SMALL LETTER K WITH HOOK" #x0199) + ("LATIN SMALL LETTER L WITH BAR" #x019A) + ("LATIN SMALL LETTER LAMBDA WITH STROKE" #x019B) + ("LATIN CAPITAL LETTER TURNED M" #x019C) + ("LATIN CAPITAL LETTER N WITH LEFT HOOK" #x019D) + ("LATIN SMALL LETTER N WITH LONG RIGHT LEG" #x019E) + ("LATIN CAPITAL LETTER O WITH MIDDLE TILDE" #x019F) + ("LATIN CAPITAL LETTER O WITH HORN" #x01A0) + ("LATIN SMALL LETTER O WITH HORN" #x01A1) + ("LATIN CAPITAL LETTER OI" #x01A2) + ("LATIN SMALL LETTER OI" #x01A3) + ("LATIN CAPITAL LETTER P WITH HOOK" #x01A4) + ("LATIN SMALL LETTER P WITH HOOK" #x01A5) + ("LATIN LETTER YR" #x01A6) + ("LATIN CAPITAL LETTER TONE TWO" #x01A7) + ("LATIN SMALL LETTER TONE TWO" #x01A8) + ("LATIN CAPITAL LETTER ESH" #x01A9) + ("LATIN LETTER REVERSED ESH LOOP" #x01AA) + ("LATIN SMALL LETTER T WITH PALATAL HOOK" #x01AB) + ("LATIN CAPITAL LETTER T WITH HOOK" #x01AC) + ("LATIN SMALL LETTER T WITH HOOK" #x01AD) + ("LATIN CAPITAL LETTER T WITH RETROFLEX HOOK" #x01AE) + ("LATIN CAPITAL LETTER U WITH HORN" #x01AF) + ("LATIN SMALL LETTER U WITH HORN" #x01B0) + ("LATIN CAPITAL LETTER UPSILON" #x01B1) + ("LATIN CAPITAL LETTER V WITH HOOK" #x01B2) + ("LATIN CAPITAL LETTER Y WITH HOOK" #x01B3) + ("LATIN SMALL LETTER Y WITH HOOK" #x01B4) + ("LATIN CAPITAL LETTER Z WITH STROKE" #x01B5) + ("LATIN SMALL LETTER Z WITH STROKE" #x01B6) + ("LATIN CAPITAL LETTER EZH" #x01B7) + ("LATIN CAPITAL LETTER EZH REVERSED" #x01B8) + ("LATIN SMALL LETTER EZH REVERSED" #x01B9) + ("LATIN SMALL LETTER EZH WITH TAIL" #x01BA) + ("LATIN LETTER TWO WITH STROKE" #x01BB) + ("LATIN CAPITAL LETTER TONE FIVE" #x01BC) + ("LATIN SMALL LETTER TONE FIVE" #x01BD) + ("LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE" #x01BE) + ("LATIN LETTER WYNN" #x01BF) + ("LATIN LETTER DENTAL CLICK" #x01C0) + ("LATIN LETTER LATERAL CLICK" #x01C1) + ("LATIN LETTER ALVEOLAR CLICK" #x01C2) + ("LATIN LETTER RETROFLEX CLICK" #x01C3) + ("LATIN CAPITAL LETTER DZ WITH CARON" #x01C4) + ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON" #x01C5) + ("LATIN SMALL LETTER DZ WITH CARON" #x01C6) + ("LATIN CAPITAL LETTER LJ" #x01C7) + ("LATIN CAPITAL LETTER L WITH SMALL LETTER J" #x01C8) + ("LATIN SMALL LETTER LJ" #x01C9) + ("LATIN CAPITAL LETTER NJ" #x01CA) + ("LATIN CAPITAL LETTER N WITH SMALL LETTER J" #x01CB) + ("LATIN SMALL LETTER NJ" #x01CC) + ("LATIN CAPITAL LETTER A WITH CARON" #x01CD) + ("LATIN SMALL LETTER A WITH CARON" #x01CE) + ("LATIN CAPITAL LETTER I WITH CARON" #x01CF) + ("LATIN SMALL LETTER I WITH CARON" #x01D0) + ("LATIN CAPITAL LETTER O WITH CARON" #x01D1) + ("LATIN SMALL LETTER O WITH CARON" #x01D2) + ("LATIN CAPITAL LETTER U WITH CARON" #x01D3) + ("LATIN SMALL LETTER U WITH CARON" #x01D4) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON" #x01D5) + ("LATIN SMALL LETTER U WITH DIAERESIS AND MACRON" #x01D6) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE" #x01D7) + ("LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE" #x01D8) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON" #x01D9) + ("LATIN SMALL LETTER U WITH DIAERESIS AND CARON" #x01DA) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE" #x01DB) + ("LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE" #x01DC) + ("LATIN SMALL LETTER TURNED E" #x01DD) + ("LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON" #x01DE) + ("LATIN SMALL LETTER A WITH DIAERESIS AND MACRON" #x01DF) + ("LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON" #x01E0) + ("LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON" #x01E1) + ("LATIN CAPITAL LETTER AE WITH MACRON" #x01E2) + ("LATIN SMALL LETTER AE WITH MACRON" #x01E3) + ("LATIN CAPITAL LETTER G WITH STROKE" #x01E4) + ("LATIN SMALL LETTER G WITH STROKE" #x01E5) + ("LATIN CAPITAL LETTER G WITH CARON" #x01E6) + ("LATIN SMALL LETTER G WITH CARON" #x01E7) + ("LATIN CAPITAL LETTER K WITH CARON" #x01E8) + ("LATIN SMALL LETTER K WITH CARON" #x01E9) + ("LATIN CAPITAL LETTER O WITH OGONEK" #x01EA) + ("LATIN SMALL LETTER O WITH OGONEK" #x01EB) + ("LATIN CAPITAL LETTER O WITH OGONEK AND MACRON" #x01EC) + ("LATIN SMALL LETTER O WITH OGONEK AND MACRON" #x01ED) + ("LATIN CAPITAL LETTER EZH WITH CARON" #x01EE) + ("LATIN SMALL LETTER EZH WITH CARON" #x01EF) + ("LATIN SMALL LETTER J WITH CARON" #x01F0) + ("LATIN CAPITAL LETTER DZ" #x01F1) + ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z" #x01F2) + ("LATIN SMALL LETTER DZ" #x01F3) + ("LATIN CAPITAL LETTER G WITH ACUTE" #x01F4) + ("LATIN SMALL LETTER G WITH ACUTE" #x01F5) + ("LATIN CAPITAL LETTER HWAIR" #x01F6) + ("LATIN CAPITAL LETTER WYNN" #x01F7) + ("LATIN CAPITAL LETTER N WITH GRAVE" #x01F8) + ("LATIN SMALL LETTER N WITH GRAVE" #x01F9) + ("LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE" #x01FA) + ("LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE" #x01FB) + ("LATIN CAPITAL LETTER AE WITH ACUTE" #x01FC) + ("LATIN SMALL LETTER AE WITH ACUTE" #x01FD) + ("LATIN CAPITAL LETTER O WITH STROKE AND ACUTE" #x01FE) + ("LATIN SMALL LETTER O WITH STROKE AND ACUTE" #x01FF) + ("LATIN CAPITAL LETTER A WITH DOUBLE GRAVE" #x0200) + ("LATIN SMALL LETTER A WITH DOUBLE GRAVE" #x0201) + ("LATIN CAPITAL LETTER A WITH INVERTED BREVE" #x0202) + ("LATIN SMALL LETTER A WITH INVERTED BREVE" #x0203) + ("LATIN CAPITAL LETTER E WITH DOUBLE GRAVE" #x0204) + ("LATIN SMALL LETTER E WITH DOUBLE GRAVE" #x0205) + ("LATIN CAPITAL LETTER E WITH INVERTED BREVE" #x0206) + ("LATIN SMALL LETTER E WITH INVERTED BREVE" #x0207) + ("LATIN CAPITAL LETTER I WITH DOUBLE GRAVE" #x0208) + ("LATIN SMALL LETTER I WITH DOUBLE GRAVE" #x0209) + ("LATIN CAPITAL LETTER I WITH INVERTED BREVE" #x020A) + ("LATIN SMALL LETTER I WITH INVERTED BREVE" #x020B) + ("LATIN CAPITAL LETTER O WITH DOUBLE GRAVE" #x020C) + ("LATIN SMALL LETTER O WITH DOUBLE GRAVE" #x020D) + ("LATIN CAPITAL LETTER O WITH INVERTED BREVE" #x020E) + ("LATIN SMALL LETTER O WITH INVERTED BREVE" #x020F) + ("LATIN CAPITAL LETTER R WITH DOUBLE GRAVE" #x0210) + ("LATIN SMALL LETTER R WITH DOUBLE GRAVE" #x0211) + ("LATIN CAPITAL LETTER R WITH INVERTED BREVE" #x0212) + ("LATIN SMALL LETTER R WITH INVERTED BREVE" #x0213) + ("LATIN CAPITAL LETTER U WITH DOUBLE GRAVE" #x0214) + ("LATIN SMALL LETTER U WITH DOUBLE GRAVE" #x0215) + ("LATIN CAPITAL LETTER U WITH INVERTED BREVE" #x0216) + ("LATIN SMALL LETTER U WITH INVERTED BREVE" #x0217) + ("LATIN CAPITAL LETTER S WITH COMMA BELOW" #x0218) + ("LATIN SMALL LETTER S WITH COMMA BELOW" #x0219) + ("LATIN CAPITAL LETTER T WITH COMMA BELOW" #x021A) + ("LATIN SMALL LETTER T WITH COMMA BELOW" #x021B) + ("LATIN CAPITAL LETTER YOGH" #x021C) + ("LATIN SMALL LETTER YOGH" #x021D) + ("LATIN CAPITAL LETTER H WITH CARON" #x021E) + ("LATIN SMALL LETTER H WITH CARON" #x021F) + ("LATIN CAPITAL LETTER N WITH LONG RIGHT LEG" #x0220) + ("LATIN CAPITAL LETTER OU" #x0222) + ("LATIN SMALL LETTER OU" #x0223) + ("LATIN CAPITAL LETTER Z WITH HOOK" #x0224) + ("LATIN SMALL LETTER Z WITH HOOK" #x0225) + ("LATIN CAPITAL LETTER A WITH DOT ABOVE" #x0226) + ("LATIN SMALL LETTER A WITH DOT ABOVE" #x0227) + ("LATIN CAPITAL LETTER E WITH CEDILLA" #x0228) + ("LATIN SMALL LETTER E WITH CEDILLA" #x0229) + ("LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON" #x022A) + ("LATIN SMALL LETTER O WITH DIAERESIS AND MACRON" #x022B) + ("LATIN CAPITAL LETTER O WITH TILDE AND MACRON" #x022C) + ("LATIN SMALL LETTER O WITH TILDE AND MACRON" #x022D) + ("LATIN CAPITAL LETTER O WITH DOT ABOVE" #x022E) + ("LATIN SMALL LETTER O WITH DOT ABOVE" #x022F) + ("LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON" #x0230) + ("LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON" #x0231) + ("LATIN CAPITAL LETTER Y WITH MACRON" #x0232) + ("LATIN SMALL LETTER Y WITH MACRON" #x0233) + )) + +;; arch-tag: d2a4e7e0-0d3a-4a29-994e-f5d0ed62cea2 diff --git a/etc/nxml/00250-002AF.el b/etc/nxml/00250-002AF.el new file mode 100644 index 00000000000..62ffa630e96 --- /dev/null +++ b/etc/nxml/00250-002AF.el @@ -0,0 +1,98 @@ +(nxml-define-char-name-set 'ipa-extensions + '(("LATIN SMALL LETTER TURNED A" #x0250) + ("LATIN SMALL LETTER ALPHA" #x0251) + ("LATIN SMALL LETTER TURNED ALPHA" #x0252) + ("LATIN SMALL LETTER B WITH HOOK" #x0253) + ("LATIN SMALL LETTER OPEN O" #x0254) + ("LATIN SMALL LETTER C WITH CURL" #x0255) + ("LATIN SMALL LETTER D WITH TAIL" #x0256) + ("LATIN SMALL LETTER D WITH HOOK" #x0257) + ("LATIN SMALL LETTER REVERSED E" #x0258) + ("LATIN SMALL LETTER SCHWA" #x0259) + ("LATIN SMALL LETTER SCHWA WITH HOOK" #x025A) + ("LATIN SMALL LETTER OPEN E" #x025B) + ("LATIN SMALL LETTER REVERSED OPEN E" #x025C) + ("LATIN SMALL LETTER REVERSED OPEN E WITH HOOK" #x025D) + ("LATIN SMALL LETTER CLOSED REVERSED OPEN E" #x025E) + ("LATIN SMALL LETTER DOTLESS J WITH STROKE" #x025F) + ("LATIN SMALL LETTER G WITH HOOK" #x0260) + ("LATIN SMALL LETTER SCRIPT G" #x0261) + ("LATIN LETTER SMALL CAPITAL G" #x0262) + ("LATIN SMALL LETTER GAMMA" #x0263) + ("LATIN SMALL LETTER RAMS HORN" #x0264) + ("LATIN SMALL LETTER TURNED H" #x0265) + ("LATIN SMALL LETTER H WITH HOOK" #x0266) + ("LATIN SMALL LETTER HENG WITH HOOK" #x0267) + ("LATIN SMALL LETTER I WITH STROKE" #x0268) + ("LATIN SMALL LETTER IOTA" #x0269) + ("LATIN LETTER SMALL CAPITAL I" #x026A) + ("LATIN SMALL LETTER L WITH MIDDLE TILDE" #x026B) + ("LATIN SMALL LETTER L WITH BELT" #x026C) + ("LATIN SMALL LETTER L WITH RETROFLEX HOOK" #x026D) + ("LATIN SMALL LETTER LEZH" #x026E) + ("LATIN SMALL LETTER TURNED M" #x026F) + ("LATIN SMALL LETTER TURNED M WITH LONG LEG" #x0270) + ("LATIN SMALL LETTER M WITH HOOK" #x0271) + ("LATIN SMALL LETTER N WITH LEFT HOOK" #x0272) + ("LATIN SMALL LETTER N WITH RETROFLEX HOOK" #x0273) + ("LATIN LETTER SMALL CAPITAL N" #x0274) + ("LATIN SMALL LETTER BARRED O" #x0275) + ("LATIN LETTER SMALL CAPITAL OE" #x0276) + ("LATIN SMALL LETTER CLOSED OMEGA" #x0277) + ("LATIN SMALL LETTER PHI" #x0278) + ("LATIN SMALL LETTER TURNED R" #x0279) + ("LATIN SMALL LETTER TURNED R WITH LONG LEG" #x027A) + ("LATIN SMALL LETTER TURNED R WITH HOOK" #x027B) + ("LATIN SMALL LETTER R WITH LONG LEG" #x027C) + ("LATIN SMALL LETTER R WITH TAIL" #x027D) + ("LATIN SMALL LETTER R WITH FISHHOOK" #x027E) + ("LATIN SMALL LETTER REVERSED R WITH FISHHOOK" #x027F) + ("LATIN LETTER SMALL CAPITAL R" #x0280) + ("LATIN LETTER SMALL CAPITAL INVERTED R" #x0281) + ("LATIN SMALL LETTER S WITH HOOK" #x0282) + ("LATIN SMALL LETTER ESH" #x0283) + ("LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK" #x0284) + ("LATIN SMALL LETTER SQUAT REVERSED ESH" #x0285) + ("LATIN SMALL LETTER ESH WITH CURL" #x0286) + ("LATIN SMALL LETTER TURNED T" #x0287) + ("LATIN SMALL LETTER T WITH RETROFLEX HOOK" #x0288) + ("LATIN SMALL LETTER U BAR" #x0289) + ("LATIN SMALL LETTER UPSILON" #x028A) + ("LATIN SMALL LETTER V WITH HOOK" #x028B) + ("LATIN SMALL LETTER TURNED V" #x028C) + ("LATIN SMALL LETTER TURNED W" #x028D) + ("LATIN SMALL LETTER TURNED Y" #x028E) + ("LATIN LETTER SMALL CAPITAL Y" #x028F) + ("LATIN SMALL LETTER Z WITH RETROFLEX HOOK" #x0290) + ("LATIN SMALL LETTER Z WITH CURL" #x0291) + ("LATIN SMALL LETTER EZH" #x0292) + ("LATIN SMALL LETTER EZH WITH CURL" #x0293) + ("LATIN LETTER GLOTTAL STOP" #x0294) + ("LATIN LETTER PHARYNGEAL VOICED FRICATIVE" #x0295) + ("LATIN LETTER INVERTED GLOTTAL STOP" #x0296) + ("LATIN LETTER STRETCHED C" #x0297) + ("LATIN LETTER BILABIAL CLICK" #x0298) + ("LATIN LETTER SMALL CAPITAL B" #x0299) + ("LATIN SMALL LETTER CLOSED OPEN E" #x029A) + ("LATIN LETTER SMALL CAPITAL G WITH HOOK" #x029B) + ("LATIN LETTER SMALL CAPITAL H" #x029C) + ("LATIN SMALL LETTER J WITH CROSSED-TAIL" #x029D) + ("LATIN SMALL LETTER TURNED K" #x029E) + ("LATIN LETTER SMALL CAPITAL L" #x029F) + ("LATIN SMALL LETTER Q WITH HOOK" #x02A0) + ("LATIN LETTER GLOTTAL STOP WITH STROKE" #x02A1) + ("LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE" #x02A2) + ("LATIN SMALL LETTER DZ DIGRAPH" #x02A3) + ("LATIN SMALL LETTER DEZH DIGRAPH" #x02A4) + ("LATIN SMALL LETTER DZ DIGRAPH WITH CURL" #x02A5) + ("LATIN SMALL LETTER TS DIGRAPH" #x02A6) + ("LATIN SMALL LETTER TESH DIGRAPH" #x02A7) + ("LATIN SMALL LETTER TC DIGRAPH WITH CURL" #x02A8) + ("LATIN SMALL LETTER FENG DIGRAPH" #x02A9) + ("LATIN SMALL LETTER LS DIGRAPH" #x02AA) + ("LATIN SMALL LETTER LZ DIGRAPH" #x02AB) + ("LATIN LETTER BILABIAL PERCUSSIVE" #x02AC) + ("LATIN LETTER BIDENTAL PERCUSSIVE" #x02AD) + )) + +;; arch-tag: edc50b43-a94e-48db-91c5-0f9ea113c93c diff --git a/etc/nxml/002B0-002FF.el b/etc/nxml/002B0-002FF.el new file mode 100644 index 00000000000..e94f58cc186 --- /dev/null +++ b/etc/nxml/002B0-002FF.el @@ -0,0 +1,67 @@ +(nxml-define-char-name-set 'spacing-modifier-letters + '(("MODIFIER LETTER SMALL H" #x02B0) + ("MODIFIER LETTER SMALL H WITH HOOK" #x02B1) + ("MODIFIER LETTER SMALL J" #x02B2) + ("MODIFIER LETTER SMALL R" #x02B3) + ("MODIFIER LETTER SMALL TURNED R" #x02B4) + ("MODIFIER LETTER SMALL TURNED R WITH HOOK" #x02B5) + ("MODIFIER LETTER SMALL CAPITAL INVERTED R" #x02B6) + ("MODIFIER LETTER SMALL W" #x02B7) + ("MODIFIER LETTER SMALL Y" #x02B8) + ("MODIFIER LETTER PRIME" #x02B9) + ("MODIFIER LETTER DOUBLE PRIME" #x02BA) + ("MODIFIER LETTER TURNED COMMA" #x02BB) + ("MODIFIER LETTER APOSTROPHE" #x02BC) + ("MODIFIER LETTER REVERSED COMMA" #x02BD) + ("MODIFIER LETTER RIGHT HALF RING" #x02BE) + ("MODIFIER LETTER LEFT HALF RING" #x02BF) + ("MODIFIER LETTER GLOTTAL STOP" #x02C0) + ("MODIFIER LETTER REVERSED GLOTTAL STOP" #x02C1) + ("MODIFIER LETTER LEFT ARROWHEAD" #x02C2) + ("MODIFIER LETTER RIGHT ARROWHEAD" #x02C3) + ("MODIFIER LETTER UP ARROWHEAD" #x02C4) + ("MODIFIER LETTER DOWN ARROWHEAD" #x02C5) + ("MODIFIER LETTER CIRCUMFLEX ACCENT" #x02C6) + ("CARON" #x02C7) + ("MODIFIER LETTER VERTICAL LINE" #x02C8) + ("MODIFIER LETTER MACRON" #x02C9) + ("MODIFIER LETTER ACUTE ACCENT" #x02CA) + ("MODIFIER LETTER GRAVE ACCENT" #x02CB) + ("MODIFIER LETTER LOW VERTICAL LINE" #x02CC) + ("MODIFIER LETTER LOW MACRON" #x02CD) + ("MODIFIER LETTER LOW GRAVE ACCENT" #x02CE) + ("MODIFIER LETTER LOW ACUTE ACCENT" #x02CF) + ("MODIFIER LETTER TRIANGULAR COLON" #x02D0) + ("MODIFIER LETTER HALF TRIANGULAR COLON" #x02D1) + ("MODIFIER LETTER CENTRED RIGHT HALF RING" #x02D2) + ("MODIFIER LETTER CENTRED LEFT HALF RING" #x02D3) + ("MODIFIER LETTER UP TACK" #x02D4) + ("MODIFIER LETTER DOWN TACK" #x02D5) + ("MODIFIER LETTER PLUS SIGN" #x02D6) + ("MODIFIER LETTER MINUS SIGN" #x02D7) + ("BREVE" #x02D8) + ("DOT ABOVE" #x02D9) + ("RING ABOVE" #x02DA) + ("OGONEK" #x02DB) + ("SMALL TILDE" #x02DC) + ("DOUBLE ACUTE ACCENT" #x02DD) + ("MODIFIER LETTER RHOTIC HOOK" #x02DE) + ("MODIFIER LETTER CROSS ACCENT" #x02DF) + ("MODIFIER LETTER SMALL GAMMA" #x02E0) + ("MODIFIER LETTER SMALL L" #x02E1) + ("MODIFIER LETTER SMALL S" #x02E2) + ("MODIFIER LETTER SMALL X" #x02E3) + ("MODIFIER LETTER SMALL REVERSED GLOTTAL STOP" #x02E4) + ("MODIFIER LETTER EXTRA-HIGH TONE BAR" #x02E5) + ("MODIFIER LETTER HIGH TONE BAR" #x02E6) + ("MODIFIER LETTER MID TONE BAR" #x02E7) + ("MODIFIER LETTER LOW TONE BAR" #x02E8) + ("MODIFIER LETTER EXTRA-LOW TONE BAR" #x02E9) + ("MODIFIER LETTER YIN DEPARTING TONE MARK" #x02EA) + ("MODIFIER LETTER YANG DEPARTING TONE MARK" #x02EB) + ("MODIFIER LETTER VOICING" #x02EC) + ("MODIFIER LETTER UNASPIRATED" #x02ED) + ("MODIFIER LETTER DOUBLE APOSTROPHE" #x02EE) + )) + +;; arch-tag: 5fa09061-850e-4bbe-ad44-54c57a81a461 diff --git a/etc/nxml/00300-0036F.el b/etc/nxml/00300-0036F.el new file mode 100644 index 00000000000..d82fa0b2faf --- /dev/null +++ b/etc/nxml/00300-0036F.el @@ -0,0 +1,100 @@ +(nxml-define-char-name-set 'combining-diacritical-marks + '(("COMBINING GRAVE ACCENT" #x0300) + ("COMBINING ACUTE ACCENT" #x0301) + ("COMBINING CIRCUMFLEX ACCENT" #x0302) + ("COMBINING TILDE" #x0303) + ("COMBINING MACRON" #x0304) + ("COMBINING OVERLINE" #x0305) + ("COMBINING BREVE" #x0306) + ("COMBINING DOT ABOVE" #x0307) + ("COMBINING DIAERESIS" #x0308) + ("COMBINING HOOK ABOVE" #x0309) + ("COMBINING RING ABOVE" #x030A) + ("COMBINING DOUBLE ACUTE ACCENT" #x030B) + ("COMBINING CARON" #x030C) + ("COMBINING VERTICAL LINE ABOVE" #x030D) + ("COMBINING DOUBLE VERTICAL LINE ABOVE" #x030E) + ("COMBINING DOUBLE GRAVE ACCENT" #x030F) + ("COMBINING CANDRABINDU" #x0310) + ("COMBINING INVERTED BREVE" #x0311) + ("COMBINING TURNED COMMA ABOVE" #x0312) + ("COMBINING COMMA ABOVE" #x0313) + ("COMBINING REVERSED COMMA ABOVE" #x0314) + ("COMBINING COMMA ABOVE RIGHT" #x0315) + ("COMBINING GRAVE ACCENT BELOW" #x0316) + ("COMBINING ACUTE ACCENT BELOW" #x0317) + ("COMBINING LEFT TACK BELOW" #x0318) + ("COMBINING RIGHT TACK BELOW" #x0319) + ("COMBINING LEFT ANGLE ABOVE" #x031A) + ("COMBINING HORN" #x031B) + ("COMBINING LEFT HALF RING BELOW" #x031C) + ("COMBINING UP TACK BELOW" #x031D) + ("COMBINING DOWN TACK BELOW" #x031E) + ("COMBINING PLUS SIGN BELOW" #x031F) + ("COMBINING MINUS SIGN BELOW" #x0320) + ("COMBINING PALATALIZED HOOK BELOW" #x0321) + ("COMBINING RETROFLEX HOOK BELOW" #x0322) + ("COMBINING DOT BELOW" #x0323) + ("COMBINING DIAERESIS BELOW" #x0324) + ("COMBINING RING BELOW" #x0325) + ("COMBINING COMMA BELOW" #x0326) + ("COMBINING CEDILLA" #x0327) + ("COMBINING OGONEK" #x0328) + ("COMBINING VERTICAL LINE BELOW" #x0329) + ("COMBINING BRIDGE BELOW" #x032A) + ("COMBINING INVERTED DOUBLE ARCH BELOW" #x032B) + ("COMBINING CARON BELOW" #x032C) + ("COMBINING CIRCUMFLEX ACCENT BELOW" #x032D) + ("COMBINING BREVE BELOW" #x032E) + ("COMBINING INVERTED BREVE BELOW" #x032F) + ("COMBINING TILDE BELOW" #x0330) + ("COMBINING MACRON BELOW" #x0331) + ("COMBINING LOW LINE" #x0332) + ("COMBINING DOUBLE LOW LINE" #x0333) + ("COMBINING TILDE OVERLAY" #x0334) + ("COMBINING SHORT STROKE OVERLAY" #x0335) + ("COMBINING LONG STROKE OVERLAY" #x0336) + ("COMBINING SHORT SOLIDUS OVERLAY" #x0337) + ("COMBINING LONG SOLIDUS OVERLAY" #x0338) + ("COMBINING RIGHT HALF RING BELOW" #x0339) + ("COMBINING INVERTED BRIDGE BELOW" #x033A) + ("COMBINING SQUARE BELOW" #x033B) + ("COMBINING SEAGULL BELOW" #x033C) + ("COMBINING X ABOVE" #x033D) + ("COMBINING VERTICAL TILDE" #x033E) + ("COMBINING DOUBLE OVERLINE" #x033F) + ("COMBINING GRAVE TONE MARK" #x0340) + ("COMBINING ACUTE TONE MARK" #x0341) + ("COMBINING GREEK PERISPOMENI" #x0342) + ("COMBINING GREEK KORONIS" #x0343) + ("COMBINING GREEK DIALYTIKA TONOS" #x0344) + ("COMBINING GREEK YPOGEGRAMMENI" #x0345) + ("COMBINING BRIDGE ABOVE" #x0346) + ("COMBINING EQUALS SIGN BELOW" #x0347) + ("COMBINING DOUBLE VERTICAL LINE BELOW" #x0348) + ("COMBINING LEFT ANGLE BELOW" #x0349) + ("COMBINING NOT TILDE ABOVE" #x034A) + ("COMBINING HOMOTHETIC ABOVE" #x034B) + ("COMBINING ALMOST EQUAL TO ABOVE" #x034C) + ("COMBINING LEFT RIGHT ARROW BELOW" #x034D) + ("COMBINING UPWARDS ARROW BELOW" #x034E) + ("COMBINING GRAPHEME JOINER" #x034F) + ("COMBINING DOUBLE TILDE" #x0360) + ("COMBINING DOUBLE INVERTED BREVE" #x0361) + ("COMBINING DOUBLE RIGHTWARDS ARROW BELOW" #x0362) + ("COMBINING LATIN SMALL LETTER A" #x0363) + ("COMBINING LATIN SMALL LETTER E" #x0364) + ("COMBINING LATIN SMALL LETTER I" #x0365) + ("COMBINING LATIN SMALL LETTER O" #x0366) + ("COMBINING LATIN SMALL LETTER U" #x0367) + ("COMBINING LATIN SMALL LETTER C" #x0368) + ("COMBINING LATIN SMALL LETTER D" #x0369) + ("COMBINING LATIN SMALL LETTER H" #x036A) + ("COMBINING LATIN SMALL LETTER M" #x036B) + ("COMBINING LATIN SMALL LETTER R" #x036C) + ("COMBINING LATIN SMALL LETTER T" #x036D) + ("COMBINING LATIN SMALL LETTER V" #x036E) + ("COMBINING LATIN SMALL LETTER X" #x036F) + )) + +;; arch-tag: a3b46b6e-38fc-4043-b7f5-92a3591e2e47 diff --git a/etc/nxml/00370-003FF.el b/etc/nxml/00370-003FF.el new file mode 100644 index 00000000000..780653b57b9 --- /dev/null +++ b/etc/nxml/00370-003FF.el @@ -0,0 +1,119 @@ +(nxml-define-char-name-set 'greek-and-coptic + '(("GREEK NUMERAL SIGN" #x0374) + ("GREEK LOWER NUMERAL SIGN" #x0375) + ("GREEK YPOGEGRAMMENI" #x037A) + ("GREEK QUESTION MARK" #x037E) + ("GREEK TONOS" #x0384) + ("GREEK DIALYTIKA TONOS" #x0385) + ("GREEK CAPITAL LETTER ALPHA WITH TONOS" #x0386) + ("GREEK ANO TELEIA" #x0387) + ("GREEK CAPITAL LETTER EPSILON WITH TONOS" #x0388) + ("GREEK CAPITAL LETTER ETA WITH TONOS" #x0389) + ("GREEK CAPITAL LETTER IOTA WITH TONOS" #x038A) + ("GREEK CAPITAL LETTER OMICRON WITH TONOS" #x038C) + ("GREEK CAPITAL LETTER UPSILON WITH TONOS" #x038E) + ("GREEK CAPITAL LETTER OMEGA WITH TONOS" #x038F) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" #x0390) + ("GREEK CAPITAL LETTER ALPHA" #x0391) + ("GREEK CAPITAL LETTER BETA" #x0392) + ("GREEK CAPITAL LETTER GAMMA" #x0393) + ("GREEK CAPITAL LETTER DELTA" #x0394) + ("GREEK CAPITAL LETTER EPSILON" #x0395) + ("GREEK CAPITAL LETTER ZETA" #x0396) + ("GREEK CAPITAL LETTER ETA" #x0397) + ("GREEK CAPITAL LETTER THETA" #x0398) + ("GREEK CAPITAL LETTER IOTA" #x0399) + ("GREEK CAPITAL LETTER KAPPA" #x039A) + ("GREEK CAPITAL LETTER LAMDA" #x039B) + ("GREEK CAPITAL LETTER MU" #x039C) + ("GREEK CAPITAL LETTER NU" #x039D) + ("GREEK CAPITAL LETTER XI" #x039E) + ("GREEK CAPITAL LETTER OMICRON" #x039F) + ("GREEK CAPITAL LETTER PI" #x03A0) + ("GREEK CAPITAL LETTER RHO" #x03A1) + ("GREEK CAPITAL LETTER SIGMA" #x03A3) + ("GREEK CAPITAL LETTER TAU" #x03A4) + ("GREEK CAPITAL LETTER UPSILON" #x03A5) + ("GREEK CAPITAL LETTER PHI" #x03A6) + ("GREEK CAPITAL LETTER CHI" #x03A7) + ("GREEK CAPITAL LETTER PSI" #x03A8) + ("GREEK CAPITAL LETTER OMEGA" #x03A9) + ("GREEK CAPITAL LETTER IOTA WITH DIALYTIKA" #x03AA) + ("GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA" #x03AB) + ("GREEK SMALL LETTER ALPHA WITH TONOS" #x03AC) + ("GREEK SMALL LETTER EPSILON WITH TONOS" #x03AD) + ("GREEK SMALL LETTER ETA WITH TONOS" #x03AE) + ("GREEK SMALL LETTER IOTA WITH TONOS" #x03AF) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS" #x03B0) + ("GREEK SMALL LETTER ALPHA" #x03B1) + ("GREEK SMALL LETTER BETA" #x03B2) + ("GREEK SMALL LETTER GAMMA" #x03B3) + ("GREEK SMALL LETTER DELTA" #x03B4) + ("GREEK SMALL LETTER EPSILON" #x03B5) + ("GREEK SMALL LETTER ZETA" #x03B6) + ("GREEK SMALL LETTER ETA" #x03B7) + ("GREEK SMALL LETTER THETA" #x03B8) + ("GREEK SMALL LETTER IOTA" #x03B9) + ("GREEK SMALL LETTER KAPPA" #x03BA) + ("GREEK SMALL LETTER LAMDA" #x03BB) + ("GREEK SMALL LETTER MU" #x03BC) + ("GREEK SMALL LETTER NU" #x03BD) + ("GREEK SMALL LETTER XI" #x03BE) + ("GREEK SMALL LETTER OMICRON" #x03BF) + ("GREEK SMALL LETTER PI" #x03C0) + ("GREEK SMALL LETTER RHO" #x03C1) + ("GREEK SMALL LETTER FINAL SIGMA" #x03C2) + ("GREEK SMALL LETTER SIGMA" #x03C3) + ("GREEK SMALL LETTER TAU" #x03C4) + ("GREEK SMALL LETTER UPSILON" #x03C5) + ("GREEK SMALL LETTER PHI" #x03C6) + ("GREEK SMALL LETTER CHI" #x03C7) + ("GREEK SMALL LETTER PSI" #x03C8) + ("GREEK SMALL LETTER OMEGA" #x03C9) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA" #x03CA) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA" #x03CB) + ("GREEK SMALL LETTER OMICRON WITH TONOS" #x03CC) + ("GREEK SMALL LETTER UPSILON WITH TONOS" #x03CD) + ("GREEK SMALL LETTER OMEGA WITH TONOS" #x03CE) + ("GREEK BETA SYMBOL" #x03D0) + ("GREEK THETA SYMBOL" #x03D1) + ("GREEK UPSILON WITH HOOK SYMBOL" #x03D2) + ("GREEK UPSILON WITH ACUTE AND HOOK SYMBOL" #x03D3) + ("GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL" #x03D4) + ("GREEK PHI SYMBOL" #x03D5) + ("GREEK PI SYMBOL" #x03D6) + ("GREEK KAI SYMBOL" #x03D7) + ("GREEK LETTER ARCHAIC KOPPA" #x03D8) + ("GREEK SMALL LETTER ARCHAIC KOPPA" #x03D9) + ("GREEK LETTER STIGMA" #x03DA) + ("GREEK SMALL LETTER STIGMA" #x03DB) + ("GREEK LETTER DIGAMMA" #x03DC) + ("GREEK SMALL LETTER DIGAMMA" #x03DD) + ("GREEK LETTER KOPPA" #x03DE) + ("GREEK SMALL LETTER KOPPA" #x03DF) + ("GREEK LETTER SAMPI" #x03E0) + ("GREEK SMALL LETTER SAMPI" #x03E1) + ("COPTIC CAPITAL LETTER SHEI" #x03E2) + ("COPTIC SMALL LETTER SHEI" #x03E3) + ("COPTIC CAPITAL LETTER FEI" #x03E4) + ("COPTIC SMALL LETTER FEI" #x03E5) + ("COPTIC CAPITAL LETTER KHEI" #x03E6) + ("COPTIC SMALL LETTER KHEI" #x03E7) + ("COPTIC CAPITAL LETTER HORI" #x03E8) + ("COPTIC SMALL LETTER HORI" #x03E9) + ("COPTIC CAPITAL LETTER GANGIA" #x03EA) + ("COPTIC SMALL LETTER GANGIA" #x03EB) + ("COPTIC CAPITAL LETTER SHIMA" #x03EC) + ("COPTIC SMALL LETTER SHIMA" #x03ED) + ("COPTIC CAPITAL LETTER DEI" #x03EE) + ("COPTIC SMALL LETTER DEI" #x03EF) + ("GREEK KAPPA SYMBOL" #x03F0) + ("GREEK RHO SYMBOL" #x03F1) + ("GREEK LUNATE SIGMA SYMBOL" #x03F2) + ("GREEK LETTER YOT" #x03F3) + ("GREEK CAPITAL THETA SYMBOL" #x03F4) + ("GREEK LUNATE EPSILON SYMBOL" #x03F5) + ("GREEK REVERSED LUNATE EPSILON SYMBOL" #x03F6) + )) + +;; arch-tag: 033e25a2-6f9c-4e9f-b517-be5ed38829af diff --git a/etc/nxml/00400-004FF.el b/etc/nxml/00400-004FF.el new file mode 100644 index 00000000000..b041b437cc9 --- /dev/null +++ b/etc/nxml/00400-004FF.el @@ -0,0 +1,250 @@ +(nxml-define-char-name-set 'cyrillic + '(("CYRILLIC CAPITAL LETTER IE WITH GRAVE" #x0400) + ("CYRILLIC CAPITAL LETTER IO" #x0401) + ("CYRILLIC CAPITAL LETTER DJE" #x0402) + ("CYRILLIC CAPITAL LETTER GJE" #x0403) + ("CYRILLIC CAPITAL LETTER UKRAINIAN IE" #x0404) + ("CYRILLIC CAPITAL LETTER DZE" #x0405) + ("CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I" #x0406) + ("CYRILLIC CAPITAL LETTER YI" #x0407) + ("CYRILLIC CAPITAL LETTER JE" #x0408) + ("CYRILLIC CAPITAL LETTER LJE" #x0409) + ("CYRILLIC CAPITAL LETTER NJE" #x040A) + ("CYRILLIC CAPITAL LETTER TSHE" #x040B) + ("CYRILLIC CAPITAL LETTER KJE" #x040C) + ("CYRILLIC CAPITAL LETTER I WITH GRAVE" #x040D) + ("CYRILLIC CAPITAL LETTER SHORT U" #x040E) + ("CYRILLIC CAPITAL LETTER DZHE" #x040F) + ("CYRILLIC CAPITAL LETTER A" #x0410) + ("CYRILLIC CAPITAL LETTER BE" #x0411) + ("CYRILLIC CAPITAL LETTER VE" #x0412) + ("CYRILLIC CAPITAL LETTER GHE" #x0413) + ("CYRILLIC CAPITAL LETTER DE" #x0414) + ("CYRILLIC CAPITAL LETTER IE" #x0415) + ("CYRILLIC CAPITAL LETTER ZHE" #x0416) + ("CYRILLIC CAPITAL LETTER ZE" #x0417) + ("CYRILLIC CAPITAL LETTER I" #x0418) + ("CYRILLIC CAPITAL LETTER SHORT I" #x0419) + ("CYRILLIC CAPITAL LETTER KA" #x041A) + ("CYRILLIC CAPITAL LETTER EL" #x041B) + ("CYRILLIC CAPITAL LETTER EM" #x041C) + ("CYRILLIC CAPITAL LETTER EN" #x041D) + ("CYRILLIC CAPITAL LETTER O" #x041E) + ("CYRILLIC CAPITAL LETTER PE" #x041F) + ("CYRILLIC CAPITAL LETTER ER" #x0420) + ("CYRILLIC CAPITAL LETTER ES" #x0421) + ("CYRILLIC CAPITAL LETTER TE" #x0422) + ("CYRILLIC CAPITAL LETTER U" #x0423) + ("CYRILLIC CAPITAL LETTER EF" #x0424) + ("CYRILLIC CAPITAL LETTER HA" #x0425) + ("CYRILLIC CAPITAL LETTER TSE" #x0426) + ("CYRILLIC CAPITAL LETTER CHE" #x0427) + ("CYRILLIC CAPITAL LETTER SHA" #x0428) + ("CYRILLIC CAPITAL LETTER SHCHA" #x0429) + ("CYRILLIC CAPITAL LETTER HARD SIGN" #x042A) + ("CYRILLIC CAPITAL LETTER YERU" #x042B) + ("CYRILLIC CAPITAL LETTER SOFT SIGN" #x042C) + ("CYRILLIC CAPITAL LETTER E" #x042D) + ("CYRILLIC CAPITAL LETTER YU" #x042E) + ("CYRILLIC CAPITAL LETTER YA" #x042F) + ("CYRILLIC SMALL LETTER A" #x0430) + ("CYRILLIC SMALL LETTER BE" #x0431) + ("CYRILLIC SMALL LETTER VE" #x0432) + ("CYRILLIC SMALL LETTER GHE" #x0433) + ("CYRILLIC SMALL LETTER DE" #x0434) + ("CYRILLIC SMALL LETTER IE" #x0435) + ("CYRILLIC SMALL LETTER ZHE" #x0436) + ("CYRILLIC SMALL LETTER ZE" #x0437) + ("CYRILLIC SMALL LETTER I" #x0438) + ("CYRILLIC SMALL LETTER SHORT I" #x0439) + ("CYRILLIC SMALL LETTER KA" #x043A) + ("CYRILLIC SMALL LETTER EL" #x043B) + ("CYRILLIC SMALL LETTER EM" #x043C) + ("CYRILLIC SMALL LETTER EN" #x043D) + ("CYRILLIC SMALL LETTER O" #x043E) + ("CYRILLIC SMALL LETTER PE" #x043F) + ("CYRILLIC SMALL LETTER ER" #x0440) + ("CYRILLIC SMALL LETTER ES" #x0441) + ("CYRILLIC SMALL LETTER TE" #x0442) + ("CYRILLIC SMALL LETTER U" #x0443) + ("CYRILLIC SMALL LETTER EF" #x0444) + ("CYRILLIC SMALL LETTER HA" #x0445) + ("CYRILLIC SMALL LETTER TSE" #x0446) + ("CYRILLIC SMALL LETTER CHE" #x0447) + ("CYRILLIC SMALL LETTER SHA" #x0448) + ("CYRILLIC SMALL LETTER SHCHA" #x0449) + ("CYRILLIC SMALL LETTER HARD SIGN" #x044A) + ("CYRILLIC SMALL LETTER YERU" #x044B) + ("CYRILLIC SMALL LETTER SOFT SIGN" #x044C) + ("CYRILLIC SMALL LETTER E" #x044D) + ("CYRILLIC SMALL LETTER YU" #x044E) + ("CYRILLIC SMALL LETTER YA" #x044F) + ("CYRILLIC SMALL LETTER IE WITH GRAVE" #x0450) + ("CYRILLIC SMALL LETTER IO" #x0451) + ("CYRILLIC SMALL LETTER DJE" #x0452) + ("CYRILLIC SMALL LETTER GJE" #x0453) + ("CYRILLIC SMALL LETTER UKRAINIAN IE" #x0454) + ("CYRILLIC SMALL LETTER DZE" #x0455) + ("CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I" #x0456) + ("CYRILLIC SMALL LETTER YI" #x0457) + ("CYRILLIC SMALL LETTER JE" #x0458) + ("CYRILLIC SMALL LETTER LJE" #x0459) + ("CYRILLIC SMALL LETTER NJE" #x045A) + ("CYRILLIC SMALL LETTER TSHE" #x045B) + ("CYRILLIC SMALL LETTER KJE" #x045C) + ("CYRILLIC SMALL LETTER I WITH GRAVE" #x045D) + ("CYRILLIC SMALL LETTER SHORT U" #x045E) + ("CYRILLIC SMALL LETTER DZHE" #x045F) + ("CYRILLIC CAPITAL LETTER OMEGA" #x0460) + ("CYRILLIC SMALL LETTER OMEGA" #x0461) + ("CYRILLIC CAPITAL LETTER YAT" #x0462) + ("CYRILLIC SMALL LETTER YAT" #x0463) + ("CYRILLIC CAPITAL LETTER IOTIFIED E" #x0464) + ("CYRILLIC SMALL LETTER IOTIFIED E" #x0465) + ("CYRILLIC CAPITAL LETTER LITTLE YUS" #x0466) + ("CYRILLIC SMALL LETTER LITTLE YUS" #x0467) + ("CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS" #x0468) + ("CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS" #x0469) + ("CYRILLIC CAPITAL LETTER BIG YUS" #x046A) + ("CYRILLIC SMALL LETTER BIG YUS" #x046B) + ("CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS" #x046C) + ("CYRILLIC SMALL LETTER IOTIFIED BIG YUS" #x046D) + ("CYRILLIC CAPITAL LETTER KSI" #x046E) + ("CYRILLIC SMALL LETTER KSI" #x046F) + ("CYRILLIC CAPITAL LETTER PSI" #x0470) + ("CYRILLIC SMALL LETTER PSI" #x0471) + ("CYRILLIC CAPITAL LETTER FITA" #x0472) + ("CYRILLIC SMALL LETTER FITA" #x0473) + ("CYRILLIC CAPITAL LETTER IZHITSA" #x0474) + ("CYRILLIC SMALL LETTER IZHITSA" #x0475) + ("CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0476) + ("CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0477) + ("CYRILLIC CAPITAL LETTER UK" #x0478) + ("CYRILLIC SMALL LETTER UK" #x0479) + ("CYRILLIC CAPITAL LETTER ROUND OMEGA" #x047A) + ("CYRILLIC SMALL LETTER ROUND OMEGA" #x047B) + ("CYRILLIC CAPITAL LETTER OMEGA WITH TITLO" #x047C) + ("CYRILLIC SMALL LETTER OMEGA WITH TITLO" #x047D) + ("CYRILLIC CAPITAL LETTER OT" #x047E) + ("CYRILLIC SMALL LETTER OT" #x047F) + ("CYRILLIC CAPITAL LETTER KOPPA" #x0480) + ("CYRILLIC SMALL LETTER KOPPA" #x0481) + ("CYRILLIC THOUSANDS SIGN" #x0482) + ("COMBINING CYRILLIC TITLO" #x0483) + ("COMBINING CYRILLIC PALATALIZATION" #x0484) + ("COMBINING CYRILLIC DASIA PNEUMATA" #x0485) + ("COMBINING CYRILLIC PSILI PNEUMATA" #x0486) + ("COMBINING CYRILLIC HUNDRED THOUSANDS SIGN" #x0488) + ("COMBINING CYRILLIC MILLIONS SIGN" #x0489) + ("CYRILLIC CAPITAL LETTER SHORT I WITH TAIL" #x048A) + ("CYRILLIC SMALL LETTER SHORT I WITH TAIL" #x048B) + ("CYRILLIC CAPITAL LETTER SEMISOFT SIGN" #x048C) + ("CYRILLIC SMALL LETTER SEMISOFT SIGN" #x048D) + ("CYRILLIC CAPITAL LETTER ER WITH TICK" #x048E) + ("CYRILLIC SMALL LETTER ER WITH TICK" #x048F) + ("CYRILLIC CAPITAL LETTER GHE WITH UPTURN" #x0490) + ("CYRILLIC SMALL LETTER GHE WITH UPTURN" #x0491) + ("CYRILLIC CAPITAL LETTER GHE WITH STROKE" #x0492) + ("CYRILLIC SMALL LETTER GHE WITH STROKE" #x0493) + ("CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK" #x0494) + ("CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK" #x0495) + ("CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER" #x0496) + ("CYRILLIC SMALL LETTER ZHE WITH DESCENDER" #x0497) + ("CYRILLIC CAPITAL LETTER ZE WITH DESCENDER" #x0498) + ("CYRILLIC SMALL LETTER ZE WITH DESCENDER" #x0499) + ("CYRILLIC CAPITAL LETTER KA WITH DESCENDER" #x049A) + ("CYRILLIC SMALL LETTER KA WITH DESCENDER" #x049B) + ("CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE" #x049C) + ("CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE" #x049D) + ("CYRILLIC CAPITAL LETTER KA WITH STROKE" #x049E) + ("CYRILLIC SMALL LETTER KA WITH STROKE" #x049F) + ("CYRILLIC CAPITAL LETTER BASHKIR KA" #x04A0) + ("CYRILLIC SMALL LETTER BASHKIR KA" #x04A1) + ("CYRILLIC CAPITAL LETTER EN WITH DESCENDER" #x04A2) + ("CYRILLIC SMALL LETTER EN WITH DESCENDER" #x04A3) + ("CYRILLIC CAPITAL LIGATURE EN GHE" #x04A4) + ("CYRILLIC SMALL LIGATURE EN GHE" #x04A5) + ("CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK" #x04A6) + ("CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK" #x04A7) + ("CYRILLIC CAPITAL LETTER ABKHASIAN HA" #x04A8) + ("CYRILLIC SMALL LETTER ABKHASIAN HA" #x04A9) + ("CYRILLIC CAPITAL LETTER ES WITH DESCENDER" #x04AA) + ("CYRILLIC SMALL LETTER ES WITH DESCENDER" #x04AB) + ("CYRILLIC CAPITAL LETTER TE WITH DESCENDER" #x04AC) + ("CYRILLIC SMALL LETTER TE WITH DESCENDER" #x04AD) + ("CYRILLIC CAPITAL LETTER STRAIGHT U" #x04AE) + ("CYRILLIC SMALL LETTER STRAIGHT U" #x04AF) + ("CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE" #x04B0) + ("CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE" #x04B1) + ("CYRILLIC CAPITAL LETTER HA WITH DESCENDER" #x04B2) + ("CYRILLIC SMALL LETTER HA WITH DESCENDER" #x04B3) + ("CYRILLIC CAPITAL LIGATURE TE TSE" #x04B4) + ("CYRILLIC SMALL LIGATURE TE TSE" #x04B5) + ("CYRILLIC CAPITAL LETTER CHE WITH DESCENDER" #x04B6) + ("CYRILLIC SMALL LETTER CHE WITH DESCENDER" #x04B7) + ("CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE" #x04B8) + ("CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE" #x04B9) + ("CYRILLIC CAPITAL LETTER SHHA" #x04BA) + ("CYRILLIC SMALL LETTER SHHA" #x04BB) + ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE" #x04BC) + ("CYRILLIC SMALL LETTER ABKHASIAN CHE" #x04BD) + ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BE) + ("CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BF) + ("CYRILLIC LETTER PALOCHKA" #x04C0) + ("CYRILLIC CAPITAL LETTER ZHE WITH BREVE" #x04C1) + ("CYRILLIC SMALL LETTER ZHE WITH BREVE" #x04C2) + ("CYRILLIC CAPITAL LETTER KA WITH HOOK" #x04C3) + ("CYRILLIC SMALL LETTER KA WITH HOOK" #x04C4) + ("CYRILLIC CAPITAL LETTER EL WITH TAIL" #x04C5) + ("CYRILLIC SMALL LETTER EL WITH TAIL" #x04C6) + ("CYRILLIC CAPITAL LETTER EN WITH HOOK" #x04C7) + ("CYRILLIC SMALL LETTER EN WITH HOOK" #x04C8) + ("CYRILLIC CAPITAL LETTER EN WITH TAIL" #x04C9) + ("CYRILLIC SMALL LETTER EN WITH TAIL" #x04CA) + ("CYRILLIC CAPITAL LETTER KHAKASSIAN CHE" #x04CB) + ("CYRILLIC SMALL LETTER KHAKASSIAN CHE" #x04CC) + ("CYRILLIC CAPITAL LETTER EM WITH TAIL" #x04CD) + ("CYRILLIC SMALL LETTER EM WITH TAIL" #x04CE) + ("CYRILLIC CAPITAL LETTER A WITH BREVE" #x04D0) + ("CYRILLIC SMALL LETTER A WITH BREVE" #x04D1) + ("CYRILLIC CAPITAL LETTER A WITH DIAERESIS" #x04D2) + ("CYRILLIC SMALL LETTER A WITH DIAERESIS" #x04D3) + ("CYRILLIC CAPITAL LIGATURE A IE" #x04D4) + ("CYRILLIC SMALL LIGATURE A IE" #x04D5) + ("CYRILLIC CAPITAL LETTER IE WITH BREVE" #x04D6) + ("CYRILLIC SMALL LETTER IE WITH BREVE" #x04D7) + ("CYRILLIC CAPITAL LETTER SCHWA" #x04D8) + ("CYRILLIC SMALL LETTER SCHWA" #x04D9) + ("CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS" #x04DA) + ("CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS" #x04DB) + ("CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS" #x04DC) + ("CYRILLIC SMALL LETTER ZHE WITH DIAERESIS" #x04DD) + ("CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS" #x04DE) + ("CYRILLIC SMALL LETTER ZE WITH DIAERESIS" #x04DF) + ("CYRILLIC CAPITAL LETTER ABKHASIAN DZE" #x04E0) + ("CYRILLIC SMALL LETTER ABKHASIAN DZE" #x04E1) + ("CYRILLIC CAPITAL LETTER I WITH MACRON" #x04E2) + ("CYRILLIC SMALL LETTER I WITH MACRON" #x04E3) + ("CYRILLIC CAPITAL LETTER I WITH DIAERESIS" #x04E4) + ("CYRILLIC SMALL LETTER I WITH DIAERESIS" #x04E5) + ("CYRILLIC CAPITAL LETTER O WITH DIAERESIS" #x04E6) + ("CYRILLIC SMALL LETTER O WITH DIAERESIS" #x04E7) + ("CYRILLIC CAPITAL LETTER BARRED O" #x04E8) + ("CYRILLIC SMALL LETTER BARRED O" #x04E9) + ("CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS" #x04EA) + ("CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS" #x04EB) + ("CYRILLIC CAPITAL LETTER E WITH DIAERESIS" #x04EC) + ("CYRILLIC SMALL LETTER E WITH DIAERESIS" #x04ED) + ("CYRILLIC CAPITAL LETTER U WITH MACRON" #x04EE) + ("CYRILLIC SMALL LETTER U WITH MACRON" #x04EF) + ("CYRILLIC CAPITAL LETTER U WITH DIAERESIS" #x04F0) + ("CYRILLIC SMALL LETTER U WITH DIAERESIS" #x04F1) + ("CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE" #x04F2) + ("CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE" #x04F3) + ("CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS" #x04F4) + ("CYRILLIC SMALL LETTER CHE WITH DIAERESIS" #x04F5) + ("CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS" #x04F8) + ("CYRILLIC SMALL LETTER YERU WITH DIAERESIS" #x04F9) + )) + +;; arch-tag: 9cd8c4dd-3386-4c0a-b1dd-984efa12d958 diff --git a/etc/nxml/00500-0052F.el b/etc/nxml/00500-0052F.el new file mode 100644 index 00000000000..c098c898240 --- /dev/null +++ b/etc/nxml/00500-0052F.el @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'cyrillic-supplementary + '(("CYRILLIC CAPITAL LETTER KOMI DE" #x0500) + ("CYRILLIC SMALL LETTER KOMI DE" #x0501) + ("CYRILLIC CAPITAL LETTER KOMI DJE" #x0502) + ("CYRILLIC SMALL LETTER KOMI DJE" #x0503) + ("CYRILLIC CAPITAL LETTER KOMI ZJE" #x0504) + ("CYRILLIC SMALL LETTER KOMI ZJE" #x0505) + ("CYRILLIC CAPITAL LETTER KOMI DZJE" #x0506) + ("CYRILLIC SMALL LETTER KOMI DZJE" #x0507) + ("CYRILLIC CAPITAL LETTER KOMI LJE" #x0508) + ("CYRILLIC SMALL LETTER KOMI LJE" #x0509) + ("CYRILLIC CAPITAL LETTER KOMI NJE" #x050A) + ("CYRILLIC SMALL LETTER KOMI NJE" #x050B) + ("CYRILLIC CAPITAL LETTER KOMI SJE" #x050C) + ("CYRILLIC SMALL LETTER KOMI SJE" #x050D) + ("CYRILLIC CAPITAL LETTER KOMI TJE" #x050E) + ("CYRILLIC SMALL LETTER KOMI TJE" #x050F) + )) + +;; arch-tag: 3ae51d36-3921-4ec5-b6be-3e9c895be9f3 diff --git a/etc/nxml/00530-0058F.el b/etc/nxml/00530-0058F.el new file mode 100644 index 00000000000..2b530a5afe4 --- /dev/null +++ b/etc/nxml/00530-0058F.el @@ -0,0 +1,90 @@ +(nxml-define-char-name-set 'armenian + '(("ARMENIAN CAPITAL LETTER AYB" #x0531) + ("ARMENIAN CAPITAL LETTER BEN" #x0532) + ("ARMENIAN CAPITAL LETTER GIM" #x0533) + ("ARMENIAN CAPITAL LETTER DA" #x0534) + ("ARMENIAN CAPITAL LETTER ECH" #x0535) + ("ARMENIAN CAPITAL LETTER ZA" #x0536) + ("ARMENIAN CAPITAL LETTER EH" #x0537) + ("ARMENIAN CAPITAL LETTER ET" #x0538) + ("ARMENIAN CAPITAL LETTER TO" #x0539) + ("ARMENIAN CAPITAL LETTER ZHE" #x053A) + ("ARMENIAN CAPITAL LETTER INI" #x053B) + ("ARMENIAN CAPITAL LETTER LIWN" #x053C) + ("ARMENIAN CAPITAL LETTER XEH" #x053D) + ("ARMENIAN CAPITAL LETTER CA" #x053E) + ("ARMENIAN CAPITAL LETTER KEN" #x053F) + ("ARMENIAN CAPITAL LETTER HO" #x0540) + ("ARMENIAN CAPITAL LETTER JA" #x0541) + ("ARMENIAN CAPITAL LETTER GHAD" #x0542) + ("ARMENIAN CAPITAL LETTER CHEH" #x0543) + ("ARMENIAN CAPITAL LETTER MEN" #x0544) + ("ARMENIAN CAPITAL LETTER YI" #x0545) + ("ARMENIAN CAPITAL LETTER NOW" #x0546) + ("ARMENIAN CAPITAL LETTER SHA" #x0547) + ("ARMENIAN CAPITAL LETTER VO" #x0548) + ("ARMENIAN CAPITAL LETTER CHA" #x0549) + ("ARMENIAN CAPITAL LETTER PEH" #x054A) + ("ARMENIAN CAPITAL LETTER JHEH" #x054B) + ("ARMENIAN CAPITAL LETTER RA" #x054C) + ("ARMENIAN CAPITAL LETTER SEH" #x054D) + ("ARMENIAN CAPITAL LETTER VEW" #x054E) + ("ARMENIAN CAPITAL LETTER TIWN" #x054F) + ("ARMENIAN CAPITAL LETTER REH" #x0550) + ("ARMENIAN CAPITAL LETTER CO" #x0551) + ("ARMENIAN CAPITAL LETTER YIWN" #x0552) + ("ARMENIAN CAPITAL LETTER PIWR" #x0553) + ("ARMENIAN CAPITAL LETTER KEH" #x0554) + ("ARMENIAN CAPITAL LETTER OH" #x0555) + ("ARMENIAN CAPITAL LETTER FEH" #x0556) + ("ARMENIAN MODIFIER LETTER LEFT HALF RING" #x0559) + ("ARMENIAN APOSTROPHE" #x055A) + ("ARMENIAN EMPHASIS MARK" #x055B) + ("ARMENIAN EXCLAMATION MARK" #x055C) + ("ARMENIAN COMMA" #x055D) + ("ARMENIAN QUESTION MARK" #x055E) + ("ARMENIAN ABBREVIATION MARK" #x055F) + ("ARMENIAN SMALL LETTER AYB" #x0561) + ("ARMENIAN SMALL LETTER BEN" #x0562) + ("ARMENIAN SMALL LETTER GIM" #x0563) + ("ARMENIAN SMALL LETTER DA" #x0564) + ("ARMENIAN SMALL LETTER ECH" #x0565) + ("ARMENIAN SMALL LETTER ZA" #x0566) + ("ARMENIAN SMALL LETTER EH" #x0567) + ("ARMENIAN SMALL LETTER ET" #x0568) + ("ARMENIAN SMALL LETTER TO" #x0569) + ("ARMENIAN SMALL LETTER ZHE" #x056A) + ("ARMENIAN SMALL LETTER INI" #x056B) + ("ARMENIAN SMALL LETTER LIWN" #x056C) + ("ARMENIAN SMALL LETTER XEH" #x056D) + ("ARMENIAN SMALL LETTER CA" #x056E) + ("ARMENIAN SMALL LETTER KEN" #x056F) + ("ARMENIAN SMALL LETTER HO" #x0570) + ("ARMENIAN SMALL LETTER JA" #x0571) + ("ARMENIAN SMALL LETTER GHAD" #x0572) + ("ARMENIAN SMALL LETTER CHEH" #x0573) + ("ARMENIAN SMALL LETTER MEN" #x0574) + ("ARMENIAN SMALL LETTER YI" #x0575) + ("ARMENIAN SMALL LETTER NOW" #x0576) + ("ARMENIAN SMALL LETTER SHA" #x0577) + ("ARMENIAN SMALL LETTER VO" #x0578) + ("ARMENIAN SMALL LETTER CHA" #x0579) + ("ARMENIAN SMALL LETTER PEH" #x057A) + ("ARMENIAN SMALL LETTER JHEH" #x057B) + ("ARMENIAN SMALL LETTER RA" #x057C) + ("ARMENIAN SMALL LETTER SEH" #x057D) + ("ARMENIAN SMALL LETTER VEW" #x057E) + ("ARMENIAN SMALL LETTER TIWN" #x057F) + ("ARMENIAN SMALL LETTER REH" #x0580) + ("ARMENIAN SMALL LETTER CO" #x0581) + ("ARMENIAN SMALL LETTER YIWN" #x0582) + ("ARMENIAN SMALL LETTER PIWR" #x0583) + ("ARMENIAN SMALL LETTER KEH" #x0584) + ("ARMENIAN SMALL LETTER OH" #x0585) + ("ARMENIAN SMALL LETTER FEH" #x0586) + ("ARMENIAN SMALL LIGATURE ECH YIWN" #x0587) + ("ARMENIAN FULL STOP" #x0589) + ("ARMENIAN HYPHEN" #x058A) + )) + +;; arch-tag: 7b3d705a-d060-42de-a918-ff39dbe5d276 diff --git a/etc/nxml/00590-005FF.el b/etc/nxml/00590-005FF.el new file mode 100644 index 00000000000..764022948ea --- /dev/null +++ b/etc/nxml/00590-005FF.el @@ -0,0 +1,86 @@ +(nxml-define-char-name-set 'hebrew + '(("HEBREW ACCENT ETNAHTA" #x0591) + ("HEBREW ACCENT SEGOL" #x0592) + ("HEBREW ACCENT SHALSHELET" #x0593) + ("HEBREW ACCENT ZAQEF QATAN" #x0594) + ("HEBREW ACCENT ZAQEF GADOL" #x0595) + ("HEBREW ACCENT TIPEHA" #x0596) + ("HEBREW ACCENT REVIA" #x0597) + ("HEBREW ACCENT ZARQA" #x0598) + ("HEBREW ACCENT PASHTA" #x0599) + ("HEBREW ACCENT YETIV" #x059A) + ("HEBREW ACCENT TEVIR" #x059B) + ("HEBREW ACCENT GERESH" #x059C) + ("HEBREW ACCENT GERESH MUQDAM" #x059D) + ("HEBREW ACCENT GERSHAYIM" #x059E) + ("HEBREW ACCENT QARNEY PARA" #x059F) + ("HEBREW ACCENT TELISHA GEDOLA" #x05A0) + ("HEBREW ACCENT PAZER" #x05A1) + ("HEBREW ACCENT MUNAH" #x05A3) + ("HEBREW ACCENT MAHAPAKH" #x05A4) + ("HEBREW ACCENT MERKHA" #x05A5) + ("HEBREW ACCENT MERKHA KEFULA" #x05A6) + ("HEBREW ACCENT DARGA" #x05A7) + ("HEBREW ACCENT QADMA" #x05A8) + ("HEBREW ACCENT TELISHA QETANA" #x05A9) + ("HEBREW ACCENT YERAH BEN YOMO" #x05AA) + ("HEBREW ACCENT OLE" #x05AB) + ("HEBREW ACCENT ILUY" #x05AC) + ("HEBREW ACCENT DEHI" #x05AD) + ("HEBREW ACCENT ZINOR" #x05AE) + ("HEBREW MARK MASORA CIRCLE" #x05AF) + ("HEBREW POINT SHEVA" #x05B0) + ("HEBREW POINT HATAF SEGOL" #x05B1) + ("HEBREW POINT HATAF PATAH" #x05B2) + ("HEBREW POINT HATAF QAMATS" #x05B3) + ("HEBREW POINT HIRIQ" #x05B4) + ("HEBREW POINT TSERE" #x05B5) + ("HEBREW POINT SEGOL" #x05B6) + ("HEBREW POINT PATAH" #x05B7) + ("HEBREW POINT QAMATS" #x05B8) + ("HEBREW POINT HOLAM" #x05B9) + ("HEBREW POINT QUBUTS" #x05BB) + ("HEBREW POINT DAGESH OR MAPIQ" #x05BC) + ("HEBREW POINT METEG" #x05BD) + ("HEBREW PUNCTUATION MAQAF" #x05BE) + ("HEBREW POINT RAFE" #x05BF) + ("HEBREW PUNCTUATION PASEQ" #x05C0) + ("HEBREW POINT SHIN DOT" #x05C1) + ("HEBREW POINT SIN DOT" #x05C2) + ("HEBREW PUNCTUATION SOF PASUQ" #x05C3) + ("HEBREW MARK UPPER DOT" #x05C4) + ("HEBREW LETTER ALEF" #x05D0) + ("HEBREW LETTER BET" #x05D1) + ("HEBREW LETTER GIMEL" #x05D2) + ("HEBREW LETTER DALET" #x05D3) + ("HEBREW LETTER HE" #x05D4) + ("HEBREW LETTER VAV" #x05D5) + ("HEBREW LETTER ZAYIN" #x05D6) + ("HEBREW LETTER HET" #x05D7) + ("HEBREW LETTER TET" #x05D8) + ("HEBREW LETTER YOD" #x05D9) + ("HEBREW LETTER FINAL KAF" #x05DA) + ("HEBREW LETTER KAF" #x05DB) + ("HEBREW LETTER LAMED" #x05DC) + ("HEBREW LETTER FINAL MEM" #x05DD) + ("HEBREW LETTER MEM" #x05DE) + ("HEBREW LETTER FINAL NUN" #x05DF) + ("HEBREW LETTER NUN" #x05E0) + ("HEBREW LETTER SAMEKH" #x05E1) + ("HEBREW LETTER AYIN" #x05E2) + ("HEBREW LETTER FINAL PE" #x05E3) + ("HEBREW LETTER PE" #x05E4) + ("HEBREW LETTER FINAL TSADI" #x05E5) + ("HEBREW LETTER TSADI" #x05E6) + ("HEBREW LETTER QOF" #x05E7) + ("HEBREW LETTER RESH" #x05E8) + ("HEBREW LETTER SHIN" #x05E9) + ("HEBREW LETTER TAV" #x05EA) + ("HEBREW LIGATURE YIDDISH DOUBLE VAV" #x05F0) + ("HEBREW LIGATURE YIDDISH VAV YOD" #x05F1) + ("HEBREW LIGATURE YIDDISH DOUBLE YOD" #x05F2) + ("HEBREW PUNCTUATION GERESH" #x05F3) + ("HEBREW PUNCTUATION GERSHAYIM" #x05F4) + )) + +;; arch-tag: 262da37d-1065-4dfd-b6e4-a8259a780caf diff --git a/etc/nxml/00600-006FF.el b/etc/nxml/00600-006FF.el new file mode 100644 index 00000000000..c489a70dcac --- /dev/null +++ b/etc/nxml/00600-006FF.el @@ -0,0 +1,212 @@ +(nxml-define-char-name-set 'arabic + '(("ARABIC COMMA" #x060C) + ("ARABIC SEMICOLON" #x061B) + ("ARABIC QUESTION MARK" #x061F) + ("ARABIC LETTER HAMZA" #x0621) + ("ARABIC LETTER ALEF WITH MADDA ABOVE" #x0622) + ("ARABIC LETTER ALEF WITH HAMZA ABOVE" #x0623) + ("ARABIC LETTER WAW WITH HAMZA ABOVE" #x0624) + ("ARABIC LETTER ALEF WITH HAMZA BELOW" #x0625) + ("ARABIC LETTER YEH WITH HAMZA ABOVE" #x0626) + ("ARABIC LETTER ALEF" #x0627) + ("ARABIC LETTER BEH" #x0628) + ("ARABIC LETTER TEH MARBUTA" #x0629) + ("ARABIC LETTER TEH" #x062A) + ("ARABIC LETTER THEH" #x062B) + ("ARABIC LETTER JEEM" #x062C) + ("ARABIC LETTER HAH" #x062D) + ("ARABIC LETTER KHAH" #x062E) + ("ARABIC LETTER DAL" #x062F) + ("ARABIC LETTER THAL" #x0630) + ("ARABIC LETTER REH" #x0631) + ("ARABIC LETTER ZAIN" #x0632) + ("ARABIC LETTER SEEN" #x0633) + ("ARABIC LETTER SHEEN" #x0634) + ("ARABIC LETTER SAD" #x0635) + ("ARABIC LETTER DAD" #x0636) + ("ARABIC LETTER TAH" #x0637) + ("ARABIC LETTER ZAH" #x0638) + ("ARABIC LETTER AIN" #x0639) + ("ARABIC LETTER GHAIN" #x063A) + ("ARABIC TATWEEL" #x0640) + ("ARABIC LETTER FEH" #x0641) + ("ARABIC LETTER QAF" #x0642) + ("ARABIC LETTER KAF" #x0643) + ("ARABIC LETTER LAM" #x0644) + ("ARABIC LETTER MEEM" #x0645) + ("ARABIC LETTER NOON" #x0646) + ("ARABIC LETTER HEH" #x0647) + ("ARABIC LETTER WAW" #x0648) + ("ARABIC LETTER ALEF MAKSURA" #x0649) + ("ARABIC LETTER YEH" #x064A) + ("ARABIC FATHATAN" #x064B) + ("ARABIC DAMMATAN" #x064C) + ("ARABIC KASRATAN" #x064D) + ("ARABIC FATHA" #x064E) + ("ARABIC DAMMA" #x064F) + ("ARABIC KASRA" #x0650) + ("ARABIC SHADDA" #x0651) + ("ARABIC SUKUN" #x0652) + ("ARABIC MADDAH ABOVE" #x0653) + ("ARABIC HAMZA ABOVE" #x0654) + ("ARABIC HAMZA BELOW" #x0655) + ("ARABIC-INDIC DIGIT ZERO" #x0660) + ("ARABIC-INDIC DIGIT ONE" #x0661) + ("ARABIC-INDIC DIGIT TWO" #x0662) + ("ARABIC-INDIC DIGIT THREE" #x0663) + ("ARABIC-INDIC DIGIT FOUR" #x0664) + ("ARABIC-INDIC DIGIT FIVE" #x0665) + ("ARABIC-INDIC DIGIT SIX" #x0666) + ("ARABIC-INDIC DIGIT SEVEN" #x0667) + ("ARABIC-INDIC DIGIT EIGHT" #x0668) + ("ARABIC-INDIC DIGIT NINE" #x0669) + ("ARABIC PERCENT SIGN" #x066A) + ("ARABIC DECIMAL SEPARATOR" #x066B) + ("ARABIC THOUSANDS SEPARATOR" #x066C) + ("ARABIC FIVE POINTED STAR" #x066D) + ("ARABIC LETTER DOTLESS BEH" #x066E) + ("ARABIC LETTER DOTLESS QAF" #x066F) + ("ARABIC LETTER SUPERSCRIPT ALEF" #x0670) + ("ARABIC LETTER ALEF WASLA" #x0671) + ("ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE" #x0672) + ("ARABIC LETTER ALEF WITH WAVY HAMZA BELOW" #x0673) + ("ARABIC LETTER HIGH HAMZA" #x0674) + ("ARABIC LETTER HIGH HAMZA ALEF" #x0675) + ("ARABIC LETTER HIGH HAMZA WAW" #x0676) + ("ARABIC LETTER U WITH HAMZA ABOVE" #x0677) + ("ARABIC LETTER HIGH HAMZA YEH" #x0678) + ("ARABIC LETTER TTEH" #x0679) + ("ARABIC LETTER TTEHEH" #x067A) + ("ARABIC LETTER BEEH" #x067B) + ("ARABIC LETTER TEH WITH RING" #x067C) + ("ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS" #x067D) + ("ARABIC LETTER PEH" #x067E) + ("ARABIC LETTER TEHEH" #x067F) + ("ARABIC LETTER BEHEH" #x0680) + ("ARABIC LETTER HAH WITH HAMZA ABOVE" #x0681) + ("ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE" #x0682) + ("ARABIC LETTER NYEH" #x0683) + ("ARABIC LETTER DYEH" #x0684) + ("ARABIC LETTER HAH WITH THREE DOTS ABOVE" #x0685) + ("ARABIC LETTER TCHEH" #x0686) + ("ARABIC LETTER TCHEHEH" #x0687) + ("ARABIC LETTER DDAL" #x0688) + ("ARABIC LETTER DAL WITH RING" #x0689) + ("ARABIC LETTER DAL WITH DOT BELOW" #x068A) + ("ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH" #x068B) + ("ARABIC LETTER DAHAL" #x068C) + ("ARABIC LETTER DDAHAL" #x068D) + ("ARABIC LETTER DUL" #x068E) + ("ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS" #x068F) + ("ARABIC LETTER DAL WITH FOUR DOTS ABOVE" #x0690) + ("ARABIC LETTER RREH" #x0691) + ("ARABIC LETTER REH WITH SMALL V" #x0692) + ("ARABIC LETTER REH WITH RING" #x0693) + ("ARABIC LETTER REH WITH DOT BELOW" #x0694) + ("ARABIC LETTER REH WITH SMALL V BELOW" #x0695) + ("ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE" #x0696) + ("ARABIC LETTER REH WITH TWO DOTS ABOVE" #x0697) + ("ARABIC LETTER JEH" #x0698) + ("ARABIC LETTER REH WITH FOUR DOTS ABOVE" #x0699) + ("ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE" #x069A) + ("ARABIC LETTER SEEN WITH THREE DOTS BELOW" #x069B) + ("ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE" #x069C) + ("ARABIC LETTER SAD WITH TWO DOTS BELOW" #x069D) + ("ARABIC LETTER SAD WITH THREE DOTS ABOVE" #x069E) + ("ARABIC LETTER TAH WITH THREE DOTS ABOVE" #x069F) + ("ARABIC LETTER AIN WITH THREE DOTS ABOVE" #x06A0) + ("ARABIC LETTER DOTLESS FEH" #x06A1) + ("ARABIC LETTER FEH WITH DOT MOVED BELOW" #x06A2) + ("ARABIC LETTER FEH WITH DOT BELOW" #x06A3) + ("ARABIC LETTER VEH" #x06A4) + ("ARABIC LETTER FEH WITH THREE DOTS BELOW" #x06A5) + ("ARABIC LETTER PEHEH" #x06A6) + ("ARABIC LETTER QAF WITH DOT ABOVE" #x06A7) + ("ARABIC LETTER QAF WITH THREE DOTS ABOVE" #x06A8) + ("ARABIC LETTER KEHEH" #x06A9) + ("ARABIC LETTER SWASH KAF" #x06AA) + ("ARABIC LETTER KAF WITH RING" #x06AB) + ("ARABIC LETTER KAF WITH DOT ABOVE" #x06AC) + ("ARABIC LETTER NG" #x06AD) + ("ARABIC LETTER KAF WITH THREE DOTS BELOW" #x06AE) + ("ARABIC LETTER GAF" #x06AF) + ("ARABIC LETTER GAF WITH RING" #x06B0) + ("ARABIC LETTER NGOEH" #x06B1) + ("ARABIC LETTER GAF WITH TWO DOTS BELOW" #x06B2) + ("ARABIC LETTER GUEH" #x06B3) + ("ARABIC LETTER GAF WITH THREE DOTS ABOVE" #x06B4) + ("ARABIC LETTER LAM WITH SMALL V" #x06B5) + ("ARABIC LETTER LAM WITH DOT ABOVE" #x06B6) + ("ARABIC LETTER LAM WITH THREE DOTS ABOVE" #x06B7) + ("ARABIC LETTER LAM WITH THREE DOTS BELOW" #x06B8) + ("ARABIC LETTER NOON WITH DOT BELOW" #x06B9) + ("ARABIC LETTER NOON GHUNNA" #x06BA) + ("ARABIC LETTER RNOON" #x06BB) + ("ARABIC LETTER NOON WITH RING" #x06BC) + ("ARABIC LETTER NOON WITH THREE DOTS ABOVE" #x06BD) + ("ARABIC LETTER HEH DOACHASHMEE" #x06BE) + ("ARABIC LETTER TCHEH WITH DOT ABOVE" #x06BF) + ("ARABIC LETTER HEH WITH YEH ABOVE" #x06C0) + ("ARABIC LETTER HEH GOAL" #x06C1) + ("ARABIC LETTER HEH GOAL WITH HAMZA ABOVE" #x06C2) + ("ARABIC LETTER TEH MARBUTA GOAL" #x06C3) + ("ARABIC LETTER WAW WITH RING" #x06C4) + ("ARABIC LETTER KIRGHIZ OE" #x06C5) + ("ARABIC LETTER OE" #x06C6) + ("ARABIC LETTER U" #x06C7) + ("ARABIC LETTER YU" #x06C8) + ("ARABIC LETTER KIRGHIZ YU" #x06C9) + ("ARABIC LETTER WAW WITH TWO DOTS ABOVE" #x06CA) + ("ARABIC LETTER VE" #x06CB) + ("ARABIC LETTER FARSI YEH" #x06CC) + ("ARABIC LETTER YEH WITH TAIL" #x06CD) + ("ARABIC LETTER YEH WITH SMALL V" #x06CE) + ("ARABIC LETTER WAW WITH DOT ABOVE" #x06CF) + ("ARABIC LETTER E" #x06D0) + ("ARABIC LETTER YEH WITH THREE DOTS BELOW" #x06D1) + ("ARABIC LETTER YEH BARREE" #x06D2) + ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE" #x06D3) + ("ARABIC FULL STOP" #x06D4) + ("ARABIC LETTER AE" #x06D5) + ("ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA" #x06D6) + ("ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA" #x06D7) + ("ARABIC SMALL HIGH MEEM INITIAL FORM" #x06D8) + ("ARABIC SMALL HIGH LAM ALEF" #x06D9) + ("ARABIC SMALL HIGH JEEM" #x06DA) + ("ARABIC SMALL HIGH THREE DOTS" #x06DB) + ("ARABIC SMALL HIGH SEEN" #x06DC) + ("ARABIC END OF AYAH" #x06DD) + ("ARABIC START OF RUB EL HIZB" #x06DE) + ("ARABIC SMALL HIGH ROUNDED ZERO" #x06DF) + ("ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO" #x06E0) + ("ARABIC SMALL HIGH DOTLESS HEAD OF KHAH" #x06E1) + ("ARABIC SMALL HIGH MEEM ISOLATED FORM" #x06E2) + ("ARABIC SMALL LOW SEEN" #x06E3) + ("ARABIC SMALL HIGH MADDA" #x06E4) + ("ARABIC SMALL WAW" #x06E5) + ("ARABIC SMALL YEH" #x06E6) + ("ARABIC SMALL HIGH YEH" #x06E7) + ("ARABIC SMALL HIGH NOON" #x06E8) + ("ARABIC PLACE OF SAJDAH" #x06E9) + ("ARABIC EMPTY CENTRE LOW STOP" #x06EA) + ("ARABIC EMPTY CENTRE HIGH STOP" #x06EB) + ("ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE" #x06EC) + ("ARABIC SMALL LOW MEEM" #x06ED) + ("EXTENDED ARABIC-INDIC DIGIT ZERO" #x06F0) + ("EXTENDED ARABIC-INDIC DIGIT ONE" #x06F1) + ("EXTENDED ARABIC-INDIC DIGIT TWO" #x06F2) + ("EXTENDED ARABIC-INDIC DIGIT THREE" #x06F3) + ("EXTENDED ARABIC-INDIC DIGIT FOUR" #x06F4) + ("EXTENDED ARABIC-INDIC DIGIT FIVE" #x06F5) + ("EXTENDED ARABIC-INDIC DIGIT SIX" #x06F6) + ("EXTENDED ARABIC-INDIC DIGIT SEVEN" #x06F7) + ("EXTENDED ARABIC-INDIC DIGIT EIGHT" #x06F8) + ("EXTENDED ARABIC-INDIC DIGIT NINE" #x06F9) + ("ARABIC LETTER SHEEN WITH DOT BELOW" #x06FA) + ("ARABIC LETTER DAD WITH DOT BELOW" #x06FB) + ("ARABIC LETTER GHAIN WITH DOT BELOW" #x06FC) + ("ARABIC SIGN SINDHI AMPERSAND" #x06FD) + ("ARABIC SIGN SINDHI POSTPOSITION MEN" #x06FE) + )) + +;; arch-tag: b20189fa-7cdb-4544-a41c-f4e0477d9e5e diff --git a/etc/nxml/00700-0074F.el b/etc/nxml/00700-0074F.el new file mode 100644 index 00000000000..549387afe89 --- /dev/null +++ b/etc/nxml/00700-0074F.el @@ -0,0 +1,75 @@ +(nxml-define-char-name-set 'syriac + '(("SYRIAC END OF PARAGRAPH" #x0700) + ("SYRIAC SUPRALINEAR FULL STOP" #x0701) + ("SYRIAC SUBLINEAR FULL STOP" #x0702) + ("SYRIAC SUPRALINEAR COLON" #x0703) + ("SYRIAC SUBLINEAR COLON" #x0704) + ("SYRIAC HORIZONTAL COLON" #x0705) + ("SYRIAC COLON SKEWED LEFT" #x0706) + ("SYRIAC COLON SKEWED RIGHT" #x0707) + ("SYRIAC SUPRALINEAR COLON SKEWED LEFT" #x0708) + ("SYRIAC SUBLINEAR COLON SKEWED RIGHT" #x0709) + ("SYRIAC CONTRACTION" #x070A) + ("SYRIAC HARKLEAN OBELUS" #x070B) + ("SYRIAC HARKLEAN METOBELUS" #x070C) + ("SYRIAC HARKLEAN ASTERISCUS" #x070D) + ("SYRIAC ABBREVIATION MARK" #x070F) + ("SYRIAC LETTER ALAPH" #x0710) + ("SYRIAC LETTER SUPERSCRIPT ALAPH" #x0711) + ("SYRIAC LETTER BETH" #x0712) + ("SYRIAC LETTER GAMAL" #x0713) + ("SYRIAC LETTER GAMAL GARSHUNI" #x0714) + ("SYRIAC LETTER DALATH" #x0715) + ("SYRIAC LETTER DOTLESS DALATH RISH" #x0716) + ("SYRIAC LETTER HE" #x0717) + ("SYRIAC LETTER WAW" #x0718) + ("SYRIAC LETTER ZAIN" #x0719) + ("SYRIAC LETTER HETH" #x071A) + ("SYRIAC LETTER TETH" #x071B) + ("SYRIAC LETTER TETH GARSHUNI" #x071C) + ("SYRIAC LETTER YUDH" #x071D) + ("SYRIAC LETTER YUDH HE" #x071E) + ("SYRIAC LETTER KAPH" #x071F) + ("SYRIAC LETTER LAMADH" #x0720) + ("SYRIAC LETTER MIM" #x0721) + ("SYRIAC LETTER NUN" #x0722) + ("SYRIAC LETTER SEMKATH" #x0723) + ("SYRIAC LETTER FINAL SEMKATH" #x0724) + ("SYRIAC LETTER E" #x0725) + ("SYRIAC LETTER PE" #x0726) + ("SYRIAC LETTER REVERSED PE" #x0727) + ("SYRIAC LETTER SADHE" #x0728) + ("SYRIAC LETTER QAPH" #x0729) + ("SYRIAC LETTER RISH" #x072A) + ("SYRIAC LETTER SHIN" #x072B) + ("SYRIAC LETTER TAW" #x072C) + ("SYRIAC PTHAHA ABOVE" #x0730) + ("SYRIAC PTHAHA BELOW" #x0731) + ("SYRIAC PTHAHA DOTTED" #x0732) + ("SYRIAC ZQAPHA ABOVE" #x0733) + ("SYRIAC ZQAPHA BELOW" #x0734) + ("SYRIAC ZQAPHA DOTTED" #x0735) + ("SYRIAC RBASA ABOVE" #x0736) + ("SYRIAC RBASA BELOW" #x0737) + ("SYRIAC DOTTED ZLAMA HORIZONTAL" #x0738) + ("SYRIAC DOTTED ZLAMA ANGULAR" #x0739) + ("SYRIAC HBASA ABOVE" #x073A) + ("SYRIAC HBASA BELOW" #x073B) + ("SYRIAC HBASA-ESASA DOTTED" #x073C) + ("SYRIAC ESASA ABOVE" #x073D) + ("SYRIAC ESASA BELOW" #x073E) + ("SYRIAC RWAHA" #x073F) + ("SYRIAC FEMININE DOT" #x0740) + ("SYRIAC QUSHSHAYA" #x0741) + ("SYRIAC RUKKAKHA" #x0742) + ("SYRIAC TWO VERTICAL DOTS ABOVE" #x0743) + ("SYRIAC TWO VERTICAL DOTS BELOW" #x0744) + ("SYRIAC THREE DOTS ABOVE" #x0745) + ("SYRIAC THREE DOTS BELOW" #x0746) + ("SYRIAC OBLIQUE LINE ABOVE" #x0747) + ("SYRIAC OBLIQUE LINE BELOW" #x0748) + ("SYRIAC MUSIC" #x0749) + ("SYRIAC BARREKH" #x074A) + )) + +;; arch-tag: c008122a-484e-4253-b18f-eb215dbd1ecf diff --git a/etc/nxml/00780-007BF.el b/etc/nxml/00780-007BF.el new file mode 100644 index 00000000000..cda860cfebd --- /dev/null +++ b/etc/nxml/00780-007BF.el @@ -0,0 +1,54 @@ +(nxml-define-char-name-set 'thaana + '(("THAANA LETTER HAA" #x0780) + ("THAANA LETTER SHAVIYANI" #x0781) + ("THAANA LETTER NOONU" #x0782) + ("THAANA LETTER RAA" #x0783) + ("THAANA LETTER BAA" #x0784) + ("THAANA LETTER LHAVIYANI" #x0785) + ("THAANA LETTER KAAFU" #x0786) + ("THAANA LETTER ALIFU" #x0787) + ("THAANA LETTER VAAVU" #x0788) + ("THAANA LETTER MEEMU" #x0789) + ("THAANA LETTER FAAFU" #x078A) + ("THAANA LETTER DHAALU" #x078B) + ("THAANA LETTER THAA" #x078C) + ("THAANA LETTER LAAMU" #x078D) + ("THAANA LETTER GAAFU" #x078E) + ("THAANA LETTER GNAVIYANI" #x078F) + ("THAANA LETTER SEENU" #x0790) + ("THAANA LETTER DAVIYANI" #x0791) + ("THAANA LETTER ZAVIYANI" #x0792) + ("THAANA LETTER TAVIYANI" #x0793) + ("THAANA LETTER YAA" #x0794) + ("THAANA LETTER PAVIYANI" #x0795) + ("THAANA LETTER JAVIYANI" #x0796) + ("THAANA LETTER CHAVIYANI" #x0797) + ("THAANA LETTER TTAA" #x0798) + ("THAANA LETTER HHAA" #x0799) + ("THAANA LETTER KHAA" #x079A) + ("THAANA LETTER THAALU" #x079B) + ("THAANA LETTER ZAA" #x079C) + ("THAANA LETTER SHEENU" #x079D) + ("THAANA LETTER SAADHU" #x079E) + ("THAANA LETTER DAADHU" #x079F) + ("THAANA LETTER TO" #x07A0) + ("THAANA LETTER ZO" #x07A1) + ("THAANA LETTER AINU" #x07A2) + ("THAANA LETTER GHAINU" #x07A3) + ("THAANA LETTER QAAFU" #x07A4) + ("THAANA LETTER WAAVU" #x07A5) + ("THAANA ABAFILI" #x07A6) + ("THAANA AABAAFILI" #x07A7) + ("THAANA IBIFILI" #x07A8) + ("THAANA EEBEEFILI" #x07A9) + ("THAANA UBUFILI" #x07AA) + ("THAANA OOBOOFILI" #x07AB) + ("THAANA EBEFILI" #x07AC) + ("THAANA EYBEYFILI" #x07AD) + ("THAANA OBOFILI" #x07AE) + ("THAANA OABOAFILI" #x07AF) + ("THAANA SUKUN" #x07B0) + ("THAANA LETTER NAA" #x07B1) + )) + +;; arch-tag: e1974c30-0604-412a-af3d-b6e688e0586c diff --git a/etc/nxml/00900-0097F.el b/etc/nxml/00900-0097F.el new file mode 100644 index 00000000000..49bcde867d6 --- /dev/null +++ b/etc/nxml/00900-0097F.el @@ -0,0 +1,108 @@ +(nxml-define-char-name-set 'devanagari + '(("DEVANAGARI SIGN CANDRABINDU" #x0901) + ("DEVANAGARI SIGN ANUSVARA" #x0902) + ("DEVANAGARI SIGN VISARGA" #x0903) + ("DEVANAGARI LETTER A" #x0905) + ("DEVANAGARI LETTER AA" #x0906) + ("DEVANAGARI LETTER I" #x0907) + ("DEVANAGARI LETTER II" #x0908) + ("DEVANAGARI LETTER U" #x0909) + ("DEVANAGARI LETTER UU" #x090A) + ("DEVANAGARI LETTER VOCALIC R" #x090B) + ("DEVANAGARI LETTER VOCALIC L" #x090C) + ("DEVANAGARI LETTER CANDRA E" #x090D) + ("DEVANAGARI LETTER SHORT E" #x090E) + ("DEVANAGARI LETTER E" #x090F) + ("DEVANAGARI LETTER AI" #x0910) + ("DEVANAGARI LETTER CANDRA O" #x0911) + ("DEVANAGARI LETTER SHORT O" #x0912) + ("DEVANAGARI LETTER O" #x0913) + ("DEVANAGARI LETTER AU" #x0914) + ("DEVANAGARI LETTER KA" #x0915) + ("DEVANAGARI LETTER KHA" #x0916) + ("DEVANAGARI LETTER GA" #x0917) + ("DEVANAGARI LETTER GHA" #x0918) + ("DEVANAGARI LETTER NGA" #x0919) + ("DEVANAGARI LETTER CA" #x091A) + ("DEVANAGARI LETTER CHA" #x091B) + ("DEVANAGARI LETTER JA" #x091C) + ("DEVANAGARI LETTER JHA" #x091D) + ("DEVANAGARI LETTER NYA" #x091E) + ("DEVANAGARI LETTER TTA" #x091F) + ("DEVANAGARI LETTER TTHA" #x0920) + ("DEVANAGARI LETTER DDA" #x0921) + ("DEVANAGARI LETTER DDHA" #x0922) + ("DEVANAGARI LETTER NNA" #x0923) + ("DEVANAGARI LETTER TA" #x0924) + ("DEVANAGARI LETTER THA" #x0925) + ("DEVANAGARI LETTER DA" #x0926) + ("DEVANAGARI LETTER DHA" #x0927) + ("DEVANAGARI LETTER NA" #x0928) + ("DEVANAGARI LETTER NNNA" #x0929) + ("DEVANAGARI LETTER PA" #x092A) + ("DEVANAGARI LETTER PHA" #x092B) + ("DEVANAGARI LETTER BA" #x092C) + ("DEVANAGARI LETTER BHA" #x092D) + ("DEVANAGARI LETTER MA" #x092E) + ("DEVANAGARI LETTER YA" #x092F) + ("DEVANAGARI LETTER RA" #x0930) + ("DEVANAGARI LETTER RRA" #x0931) + ("DEVANAGARI LETTER LA" #x0932) + ("DEVANAGARI LETTER LLA" #x0933) + ("DEVANAGARI LETTER LLLA" #x0934) + ("DEVANAGARI LETTER VA" #x0935) + ("DEVANAGARI LETTER SHA" #x0936) + ("DEVANAGARI LETTER SSA" #x0937) + ("DEVANAGARI LETTER SA" #x0938) + ("DEVANAGARI LETTER HA" #x0939) + ("DEVANAGARI SIGN NUKTA" #x093C) + ("DEVANAGARI SIGN AVAGRAHA" #x093D) + ("DEVANAGARI VOWEL SIGN AA" #x093E) + ("DEVANAGARI VOWEL SIGN I" #x093F) + ("DEVANAGARI VOWEL SIGN II" #x0940) + ("DEVANAGARI VOWEL SIGN U" #x0941) + ("DEVANAGARI VOWEL SIGN UU" #x0942) + ("DEVANAGARI VOWEL SIGN VOCALIC R" #x0943) + ("DEVANAGARI VOWEL SIGN VOCALIC RR" #x0944) + ("DEVANAGARI VOWEL SIGN CANDRA E" #x0945) + ("DEVANAGARI VOWEL SIGN SHORT E" #x0946) + ("DEVANAGARI VOWEL SIGN E" #x0947) + ("DEVANAGARI VOWEL SIGN AI" #x0948) + ("DEVANAGARI VOWEL SIGN CANDRA O" #x0949) + ("DEVANAGARI VOWEL SIGN SHORT O" #x094A) + ("DEVANAGARI VOWEL SIGN O" #x094B) + ("DEVANAGARI VOWEL SIGN AU" #x094C) + ("DEVANAGARI SIGN VIRAMA" #x094D) + ("DEVANAGARI OM" #x0950) + ("DEVANAGARI STRESS SIGN UDATTA" #x0951) + ("DEVANAGARI STRESS SIGN ANUDATTA" #x0952) + ("DEVANAGARI GRAVE ACCENT" #x0953) + ("DEVANAGARI ACUTE ACCENT" #x0954) + ("DEVANAGARI LETTER QA" #x0958) + ("DEVANAGARI LETTER KHHA" #x0959) + ("DEVANAGARI LETTER GHHA" #x095A) + ("DEVANAGARI LETTER ZA" #x095B) + ("DEVANAGARI LETTER DDDHA" #x095C) + ("DEVANAGARI LETTER RHA" #x095D) + ("DEVANAGARI LETTER FA" #x095E) + ("DEVANAGARI LETTER YYA" #x095F) + ("DEVANAGARI LETTER VOCALIC RR" #x0960) + ("DEVANAGARI LETTER VOCALIC LL" #x0961) + ("DEVANAGARI VOWEL SIGN VOCALIC L" #x0962) + ("DEVANAGARI VOWEL SIGN VOCALIC LL" #x0963) + ("DEVANAGARI DANDA" #x0964) + ("DEVANAGARI DOUBLE DANDA" #x0965) + ("DEVANAGARI DIGIT ZERO" #x0966) + ("DEVANAGARI DIGIT ONE" #x0967) + ("DEVANAGARI DIGIT TWO" #x0968) + ("DEVANAGARI DIGIT THREE" #x0969) + ("DEVANAGARI DIGIT FOUR" #x096A) + ("DEVANAGARI DIGIT FIVE" #x096B) + ("DEVANAGARI DIGIT SIX" #x096C) + ("DEVANAGARI DIGIT SEVEN" #x096D) + ("DEVANAGARI DIGIT EIGHT" #x096E) + ("DEVANAGARI DIGIT NINE" #x096F) + ("DEVANAGARI ABBREVIATION SIGN" #x0970) + )) + +;; arch-tag: c9d655c5-2ec9-4b64-a13f-d4fafe0cbad7 diff --git a/etc/nxml/00980-009FF.el b/etc/nxml/00980-009FF.el new file mode 100644 index 00000000000..6c6b01e1a82 --- /dev/null +++ b/etc/nxml/00980-009FF.el @@ -0,0 +1,93 @@ +(nxml-define-char-name-set 'bengali + '(("BENGALI SIGN CANDRABINDU" #x0981) + ("BENGALI SIGN ANUSVARA" #x0982) + ("BENGALI SIGN VISARGA" #x0983) + ("BENGALI LETTER A" #x0985) + ("BENGALI LETTER AA" #x0986) + ("BENGALI LETTER I" #x0987) + ("BENGALI LETTER II" #x0988) + ("BENGALI LETTER U" #x0989) + ("BENGALI LETTER UU" #x098A) + ("BENGALI LETTER VOCALIC R" #x098B) + ("BENGALI LETTER VOCALIC L" #x098C) + ("BENGALI LETTER E" #x098F) + ("BENGALI LETTER AI" #x0990) + ("BENGALI LETTER O" #x0993) + ("BENGALI LETTER AU" #x0994) + ("BENGALI LETTER KA" #x0995) + ("BENGALI LETTER KHA" #x0996) + ("BENGALI LETTER GA" #x0997) + ("BENGALI LETTER GHA" #x0998) + ("BENGALI LETTER NGA" #x0999) + ("BENGALI LETTER CA" #x099A) + ("BENGALI LETTER CHA" #x099B) + ("BENGALI LETTER JA" #x099C) + ("BENGALI LETTER JHA" #x099D) + ("BENGALI LETTER NYA" #x099E) + ("BENGALI LETTER TTA" #x099F) + ("BENGALI LETTER TTHA" #x09A0) + ("BENGALI LETTER DDA" #x09A1) + ("BENGALI LETTER DDHA" #x09A2) + ("BENGALI LETTER NNA" #x09A3) + ("BENGALI LETTER TA" #x09A4) + ("BENGALI LETTER THA" #x09A5) + ("BENGALI LETTER DA" #x09A6) + ("BENGALI LETTER DHA" #x09A7) + ("BENGALI LETTER NA" #x09A8) + ("BENGALI LETTER PA" #x09AA) + ("BENGALI LETTER PHA" #x09AB) + ("BENGALI LETTER BA" #x09AC) + ("BENGALI LETTER BHA" #x09AD) + ("BENGALI LETTER MA" #x09AE) + ("BENGALI LETTER YA" #x09AF) + ("BENGALI LETTER RA" #x09B0) + ("BENGALI LETTER LA" #x09B2) + ("BENGALI LETTER SHA" #x09B6) + ("BENGALI LETTER SSA" #x09B7) + ("BENGALI LETTER SA" #x09B8) + ("BENGALI LETTER HA" #x09B9) + ("BENGALI SIGN NUKTA" #x09BC) + ("BENGALI VOWEL SIGN AA" #x09BE) + ("BENGALI VOWEL SIGN I" #x09BF) + ("BENGALI VOWEL SIGN II" #x09C0) + ("BENGALI VOWEL SIGN U" #x09C1) + ("BENGALI VOWEL SIGN UU" #x09C2) + ("BENGALI VOWEL SIGN VOCALIC R" #x09C3) + ("BENGALI VOWEL SIGN VOCALIC RR" #x09C4) + ("BENGALI VOWEL SIGN E" #x09C7) + ("BENGALI VOWEL SIGN AI" #x09C8) + ("BENGALI VOWEL SIGN O" #x09CB) + ("BENGALI VOWEL SIGN AU" #x09CC) + ("BENGALI SIGN VIRAMA" #x09CD) + ("BENGALI AU LENGTH MARK" #x09D7) + ("BENGALI LETTER RRA" #x09DC) + ("BENGALI LETTER RHA" #x09DD) + ("BENGALI LETTER YYA" #x09DF) + ("BENGALI LETTER VOCALIC RR" #x09E0) + ("BENGALI LETTER VOCALIC LL" #x09E1) + ("BENGALI VOWEL SIGN VOCALIC L" #x09E2) + ("BENGALI VOWEL SIGN VOCALIC LL" #x09E3) + ("BENGALI DIGIT ZERO" #x09E6) + ("BENGALI DIGIT ONE" #x09E7) + ("BENGALI DIGIT TWO" #x09E8) + ("BENGALI DIGIT THREE" #x09E9) + ("BENGALI DIGIT FOUR" #x09EA) + ("BENGALI DIGIT FIVE" #x09EB) + ("BENGALI DIGIT SIX" #x09EC) + ("BENGALI DIGIT SEVEN" #x09ED) + ("BENGALI DIGIT EIGHT" #x09EE) + ("BENGALI DIGIT NINE" #x09EF) + ("BENGALI LETTER RA WITH MIDDLE DIAGONAL" #x09F0) + ("BENGALI LETTER RA WITH LOWER DIAGONAL" #x09F1) + ("BENGALI RUPEE MARK" #x09F2) + ("BENGALI RUPEE SIGN" #x09F3) + ("BENGALI CURRENCY NUMERATOR ONE" #x09F4) + ("BENGALI CURRENCY NUMERATOR TWO" #x09F5) + ("BENGALI CURRENCY NUMERATOR THREE" #x09F6) + ("BENGALI CURRENCY NUMERATOR FOUR" #x09F7) + ("BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR" #x09F8) + ("BENGALI CURRENCY DENOMINATOR SIXTEEN" #x09F9) + ("BENGALI ISSHAR" #x09FA) + )) + +;; arch-tag: 66599f15-c2b7-436a-9737-577d4f041abd diff --git a/etc/nxml/00A00-00A7F.el b/etc/nxml/00A00-00A7F.el new file mode 100644 index 00000000000..98f221a2014 --- /dev/null +++ b/etc/nxml/00A00-00A7F.el @@ -0,0 +1,79 @@ +(nxml-define-char-name-set 'gurmukhi + '(("GURMUKHI SIGN BINDI" #x0A02) + ("GURMUKHI LETTER A" #x0A05) + ("GURMUKHI LETTER AA" #x0A06) + ("GURMUKHI LETTER I" #x0A07) + ("GURMUKHI LETTER II" #x0A08) + ("GURMUKHI LETTER U" #x0A09) + ("GURMUKHI LETTER UU" #x0A0A) + ("GURMUKHI LETTER EE" #x0A0F) + ("GURMUKHI LETTER AI" #x0A10) + ("GURMUKHI LETTER OO" #x0A13) + ("GURMUKHI LETTER AU" #x0A14) + ("GURMUKHI LETTER KA" #x0A15) + ("GURMUKHI LETTER KHA" #x0A16) + ("GURMUKHI LETTER GA" #x0A17) + ("GURMUKHI LETTER GHA" #x0A18) + ("GURMUKHI LETTER NGA" #x0A19) + ("GURMUKHI LETTER CA" #x0A1A) + ("GURMUKHI LETTER CHA" #x0A1B) + ("GURMUKHI LETTER JA" #x0A1C) + ("GURMUKHI LETTER JHA" #x0A1D) + ("GURMUKHI LETTER NYA" #x0A1E) + ("GURMUKHI LETTER TTA" #x0A1F) + ("GURMUKHI LETTER TTHA" #x0A20) + ("GURMUKHI LETTER DDA" #x0A21) + ("GURMUKHI LETTER DDHA" #x0A22) + ("GURMUKHI LETTER NNA" #x0A23) + ("GURMUKHI LETTER TA" #x0A24) + ("GURMUKHI LETTER THA" #x0A25) + ("GURMUKHI LETTER DA" #x0A26) + ("GURMUKHI LETTER DHA" #x0A27) + ("GURMUKHI LETTER NA" #x0A28) + ("GURMUKHI LETTER PA" #x0A2A) + ("GURMUKHI LETTER PHA" #x0A2B) + ("GURMUKHI LETTER BA" #x0A2C) + ("GURMUKHI LETTER BHA" #x0A2D) + ("GURMUKHI LETTER MA" #x0A2E) + ("GURMUKHI LETTER YA" #x0A2F) + ("GURMUKHI LETTER RA" #x0A30) + ("GURMUKHI LETTER LA" #x0A32) + ("GURMUKHI LETTER LLA" #x0A33) + ("GURMUKHI LETTER VA" #x0A35) + ("GURMUKHI LETTER SHA" #x0A36) + ("GURMUKHI LETTER SA" #x0A38) + ("GURMUKHI LETTER HA" #x0A39) + ("GURMUKHI SIGN NUKTA" #x0A3C) + ("GURMUKHI VOWEL SIGN AA" #x0A3E) + ("GURMUKHI VOWEL SIGN I" #x0A3F) + ("GURMUKHI VOWEL SIGN II" #x0A40) + ("GURMUKHI VOWEL SIGN U" #x0A41) + ("GURMUKHI VOWEL SIGN UU" #x0A42) + ("GURMUKHI VOWEL SIGN EE" #x0A47) + ("GURMUKHI VOWEL SIGN AI" #x0A48) + ("GURMUKHI VOWEL SIGN OO" #x0A4B) + ("GURMUKHI VOWEL SIGN AU" #x0A4C) + ("GURMUKHI SIGN VIRAMA" #x0A4D) + ("GURMUKHI LETTER KHHA" #x0A59) + ("GURMUKHI LETTER GHHA" #x0A5A) + ("GURMUKHI LETTER ZA" #x0A5B) + ("GURMUKHI LETTER RRA" #x0A5C) + ("GURMUKHI LETTER FA" #x0A5E) + ("GURMUKHI DIGIT ZERO" #x0A66) + ("GURMUKHI DIGIT ONE" #x0A67) + ("GURMUKHI DIGIT TWO" #x0A68) + ("GURMUKHI DIGIT THREE" #x0A69) + ("GURMUKHI DIGIT FOUR" #x0A6A) + ("GURMUKHI DIGIT FIVE" #x0A6B) + ("GURMUKHI DIGIT SIX" #x0A6C) + ("GURMUKHI DIGIT SEVEN" #x0A6D) + ("GURMUKHI DIGIT EIGHT" #x0A6E) + ("GURMUKHI DIGIT NINE" #x0A6F) + ("GURMUKHI TIPPI" #x0A70) + ("GURMUKHI ADDAK" #x0A71) + ("GURMUKHI IRI" #x0A72) + ("GURMUKHI URA" #x0A73) + ("GURMUKHI EK ONKAR" #x0A74) + )) + +;; arch-tag: e97fe67c-79ac-48f8-8274-22436eec2f01 diff --git a/etc/nxml/00A80-00AFF.el b/etc/nxml/00A80-00AFF.el new file mode 100644 index 00000000000..3bbd427271a --- /dev/null +++ b/etc/nxml/00A80-00AFF.el @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'gujarati + '(("GUJARATI SIGN CANDRABINDU" #x0A81) + ("GUJARATI SIGN ANUSVARA" #x0A82) + ("GUJARATI SIGN VISARGA" #x0A83) + ("GUJARATI LETTER A" #x0A85) + ("GUJARATI LETTER AA" #x0A86) + ("GUJARATI LETTER I" #x0A87) + ("GUJARATI LETTER II" #x0A88) + ("GUJARATI LETTER U" #x0A89) + ("GUJARATI LETTER UU" #x0A8A) + ("GUJARATI LETTER VOCALIC R" #x0A8B) + ("GUJARATI VOWEL CANDRA E" #x0A8D) + ("GUJARATI LETTER E" #x0A8F) + ("GUJARATI LETTER AI" #x0A90) + ("GUJARATI VOWEL CANDRA O" #x0A91) + ("GUJARATI LETTER O" #x0A93) + ("GUJARATI LETTER AU" #x0A94) + ("GUJARATI LETTER KA" #x0A95) + ("GUJARATI LETTER KHA" #x0A96) + ("GUJARATI LETTER GA" #x0A97) + ("GUJARATI LETTER GHA" #x0A98) + ("GUJARATI LETTER NGA" #x0A99) + ("GUJARATI LETTER CA" #x0A9A) + ("GUJARATI LETTER CHA" #x0A9B) + ("GUJARATI LETTER JA" #x0A9C) + ("GUJARATI LETTER JHA" #x0A9D) + ("GUJARATI LETTER NYA" #x0A9E) + ("GUJARATI LETTER TTA" #x0A9F) + ("GUJARATI LETTER TTHA" #x0AA0) + ("GUJARATI LETTER DDA" #x0AA1) + ("GUJARATI LETTER DDHA" #x0AA2) + ("GUJARATI LETTER NNA" #x0AA3) + ("GUJARATI LETTER TA" #x0AA4) + ("GUJARATI LETTER THA" #x0AA5) + ("GUJARATI LETTER DA" #x0AA6) + ("GUJARATI LETTER DHA" #x0AA7) + ("GUJARATI LETTER NA" #x0AA8) + ("GUJARATI LETTER PA" #x0AAA) + ("GUJARATI LETTER PHA" #x0AAB) + ("GUJARATI LETTER BA" #x0AAC) + ("GUJARATI LETTER BHA" #x0AAD) + ("GUJARATI LETTER MA" #x0AAE) + ("GUJARATI LETTER YA" #x0AAF) + ("GUJARATI LETTER RA" #x0AB0) + ("GUJARATI LETTER LA" #x0AB2) + ("GUJARATI LETTER LLA" #x0AB3) + ("GUJARATI LETTER VA" #x0AB5) + ("GUJARATI LETTER SHA" #x0AB6) + ("GUJARATI LETTER SSA" #x0AB7) + ("GUJARATI LETTER SA" #x0AB8) + ("GUJARATI LETTER HA" #x0AB9) + ("GUJARATI SIGN NUKTA" #x0ABC) + ("GUJARATI SIGN AVAGRAHA" #x0ABD) + ("GUJARATI VOWEL SIGN AA" #x0ABE) + ("GUJARATI VOWEL SIGN I" #x0ABF) + ("GUJARATI VOWEL SIGN II" #x0AC0) + ("GUJARATI VOWEL SIGN U" #x0AC1) + ("GUJARATI VOWEL SIGN UU" #x0AC2) + ("GUJARATI VOWEL SIGN VOCALIC R" #x0AC3) + ("GUJARATI VOWEL SIGN VOCALIC RR" #x0AC4) + ("GUJARATI VOWEL SIGN CANDRA E" #x0AC5) + ("GUJARATI VOWEL SIGN E" #x0AC7) + ("GUJARATI VOWEL SIGN AI" #x0AC8) + ("GUJARATI VOWEL SIGN CANDRA O" #x0AC9) + ("GUJARATI VOWEL SIGN O" #x0ACB) + ("GUJARATI VOWEL SIGN AU" #x0ACC) + ("GUJARATI SIGN VIRAMA" #x0ACD) + ("GUJARATI OM" #x0AD0) + ("GUJARATI LETTER VOCALIC RR" #x0AE0) + ("GUJARATI DIGIT ZERO" #x0AE6) + ("GUJARATI DIGIT ONE" #x0AE7) + ("GUJARATI DIGIT TWO" #x0AE8) + ("GUJARATI DIGIT THREE" #x0AE9) + ("GUJARATI DIGIT FOUR" #x0AEA) + ("GUJARATI DIGIT FIVE" #x0AEB) + ("GUJARATI DIGIT SIX" #x0AEC) + ("GUJARATI DIGIT SEVEN" #x0AED) + ("GUJARATI DIGIT EIGHT" #x0AEE) + ("GUJARATI DIGIT NINE" #x0AEF) + )) + +;; arch-tag: e11e63c9-1fd7-496b-be1b-4c2bb32bdec4 diff --git a/etc/nxml/00B00-00B7F.el b/etc/nxml/00B00-00B7F.el new file mode 100644 index 00000000000..033d73b41dc --- /dev/null +++ b/etc/nxml/00B00-00B7F.el @@ -0,0 +1,83 @@ +(nxml-define-char-name-set 'oriya + '(("ORIYA SIGN CANDRABINDU" #x0B01) + ("ORIYA SIGN ANUSVARA" #x0B02) + ("ORIYA SIGN VISARGA" #x0B03) + ("ORIYA LETTER A" #x0B05) + ("ORIYA LETTER AA" #x0B06) + ("ORIYA LETTER I" #x0B07) + ("ORIYA LETTER II" #x0B08) + ("ORIYA LETTER U" #x0B09) + ("ORIYA LETTER UU" #x0B0A) + ("ORIYA LETTER VOCALIC R" #x0B0B) + ("ORIYA LETTER VOCALIC L" #x0B0C) + ("ORIYA LETTER E" #x0B0F) + ("ORIYA LETTER AI" #x0B10) + ("ORIYA LETTER O" #x0B13) + ("ORIYA LETTER AU" #x0B14) + ("ORIYA LETTER KA" #x0B15) + ("ORIYA LETTER KHA" #x0B16) + ("ORIYA LETTER GA" #x0B17) + ("ORIYA LETTER GHA" #x0B18) + ("ORIYA LETTER NGA" #x0B19) + ("ORIYA LETTER CA" #x0B1A) + ("ORIYA LETTER CHA" #x0B1B) + ("ORIYA LETTER JA" #x0B1C) + ("ORIYA LETTER JHA" #x0B1D) + ("ORIYA LETTER NYA" #x0B1E) + ("ORIYA LETTER TTA" #x0B1F) + ("ORIYA LETTER TTHA" #x0B20) + ("ORIYA LETTER DDA" #x0B21) + ("ORIYA LETTER DDHA" #x0B22) + ("ORIYA LETTER NNA" #x0B23) + ("ORIYA LETTER TA" #x0B24) + ("ORIYA LETTER THA" #x0B25) + ("ORIYA LETTER DA" #x0B26) + ("ORIYA LETTER DHA" #x0B27) + ("ORIYA LETTER NA" #x0B28) + ("ORIYA LETTER PA" #x0B2A) + ("ORIYA LETTER PHA" #x0B2B) + ("ORIYA LETTER BA" #x0B2C) + ("ORIYA LETTER BHA" #x0B2D) + ("ORIYA LETTER MA" #x0B2E) + ("ORIYA LETTER YA" #x0B2F) + ("ORIYA LETTER RA" #x0B30) + ("ORIYA LETTER LA" #x0B32) + ("ORIYA LETTER LLA" #x0B33) + ("ORIYA LETTER SHA" #x0B36) + ("ORIYA LETTER SSA" #x0B37) + ("ORIYA LETTER SA" #x0B38) + ("ORIYA LETTER HA" #x0B39) + ("ORIYA SIGN NUKTA" #x0B3C) + ("ORIYA SIGN AVAGRAHA" #x0B3D) + ("ORIYA VOWEL SIGN AA" #x0B3E) + ("ORIYA VOWEL SIGN I" #x0B3F) + ("ORIYA VOWEL SIGN II" #x0B40) + ("ORIYA VOWEL SIGN U" #x0B41) + ("ORIYA VOWEL SIGN UU" #x0B42) + ("ORIYA VOWEL SIGN VOCALIC R" #x0B43) + ("ORIYA VOWEL SIGN E" #x0B47) + ("ORIYA VOWEL SIGN AI" #x0B48) + ("ORIYA VOWEL SIGN O" #x0B4B) + ("ORIYA VOWEL SIGN AU" #x0B4C) + ("ORIYA SIGN VIRAMA" #x0B4D) + ("ORIYA AI LENGTH MARK" #x0B56) + ("ORIYA AU LENGTH MARK" #x0B57) + ("ORIYA LETTER RRA" #x0B5C) + ("ORIYA LETTER RHA" #x0B5D) + ("ORIYA LETTER YYA" #x0B5F) + ("ORIYA LETTER VOCALIC RR" #x0B60) + ("ORIYA LETTER VOCALIC LL" #x0B61) + ("ORIYA DIGIT ZERO" #x0B66) + ("ORIYA DIGIT ONE" #x0B67) + ("ORIYA DIGIT TWO" #x0B68) + ("ORIYA DIGIT THREE" #x0B69) + ("ORIYA DIGIT FOUR" #x0B6A) + ("ORIYA DIGIT FIVE" #x0B6B) + ("ORIYA DIGIT SIX" #x0B6C) + ("ORIYA DIGIT SEVEN" #x0B6D) + ("ORIYA DIGIT EIGHT" #x0B6E) + ("ORIYA DIGIT NINE" #x0B6F) + ("ORIYA ISSHAR" #x0B70) + )) + +;; arch-tag: 3a780627-f875-450a-b482-6b25f28c6f96 diff --git a/etc/nxml/00B80-00BFF.el b/etc/nxml/00B80-00BFF.el new file mode 100644 index 00000000000..ab5a34b821c --- /dev/null +++ b/etc/nxml/00B80-00BFF.el @@ -0,0 +1,65 @@ +(nxml-define-char-name-set 'tamil + '(("TAMIL SIGN ANUSVARA" #x0B82) + ("TAMIL SIGN VISARGA" #x0B83) + ("TAMIL LETTER A" #x0B85) + ("TAMIL LETTER AA" #x0B86) + ("TAMIL LETTER I" #x0B87) + ("TAMIL LETTER II" #x0B88) + ("TAMIL LETTER U" #x0B89) + ("TAMIL LETTER UU" #x0B8A) + ("TAMIL LETTER E" #x0B8E) + ("TAMIL LETTER EE" #x0B8F) + ("TAMIL LETTER AI" #x0B90) + ("TAMIL LETTER O" #x0B92) + ("TAMIL LETTER OO" #x0B93) + ("TAMIL LETTER AU" #x0B94) + ("TAMIL LETTER KA" #x0B95) + ("TAMIL LETTER NGA" #x0B99) + ("TAMIL LETTER CA" #x0B9A) + ("TAMIL LETTER JA" #x0B9C) + ("TAMIL LETTER NYA" #x0B9E) + ("TAMIL LETTER TTA" #x0B9F) + ("TAMIL LETTER NNA" #x0BA3) + ("TAMIL LETTER TA" #x0BA4) + ("TAMIL LETTER NA" #x0BA8) + ("TAMIL LETTER NNNA" #x0BA9) + ("TAMIL LETTER PA" #x0BAA) + ("TAMIL LETTER MA" #x0BAE) + ("TAMIL LETTER YA" #x0BAF) + ("TAMIL LETTER RA" #x0BB0) + ("TAMIL LETTER RRA" #x0BB1) + ("TAMIL LETTER LA" #x0BB2) + ("TAMIL LETTER LLA" #x0BB3) + ("TAMIL LETTER LLLA" #x0BB4) + ("TAMIL LETTER VA" #x0BB5) + ("TAMIL LETTER SSA" #x0BB7) + ("TAMIL LETTER SA" #x0BB8) + ("TAMIL LETTER HA" #x0BB9) + ("TAMIL VOWEL SIGN AA" #x0BBE) + ("TAMIL VOWEL SIGN I" #x0BBF) + ("TAMIL VOWEL SIGN II" #x0BC0) + ("TAMIL VOWEL SIGN U" #x0BC1) + ("TAMIL VOWEL SIGN UU" #x0BC2) + ("TAMIL VOWEL SIGN E" #x0BC6) + ("TAMIL VOWEL SIGN EE" #x0BC7) + ("TAMIL VOWEL SIGN AI" #x0BC8) + ("TAMIL VOWEL SIGN O" #x0BCA) + ("TAMIL VOWEL SIGN OO" #x0BCB) + ("TAMIL VOWEL SIGN AU" #x0BCC) + ("TAMIL SIGN VIRAMA" #x0BCD) + ("TAMIL AU LENGTH MARK" #x0BD7) + ("TAMIL DIGIT ONE" #x0BE7) + ("TAMIL DIGIT TWO" #x0BE8) + ("TAMIL DIGIT THREE" #x0BE9) + ("TAMIL DIGIT FOUR" #x0BEA) + ("TAMIL DIGIT FIVE" #x0BEB) + ("TAMIL DIGIT SIX" #x0BEC) + ("TAMIL DIGIT SEVEN" #x0BED) + ("TAMIL DIGIT EIGHT" #x0BEE) + ("TAMIL DIGIT NINE" #x0BEF) + ("TAMIL NUMBER TEN" #x0BF0) + ("TAMIL NUMBER ONE HUNDRED" #x0BF1) + ("TAMIL NUMBER ONE THOUSAND" #x0BF2) + )) + +;; arch-tag: a299bfdc-4543-4405-a4a8-202d178a578f diff --git a/etc/nxml/00C00-00C7F.el b/etc/nxml/00C00-00C7F.el new file mode 100644 index 00000000000..8ccda98c60b --- /dev/null +++ b/etc/nxml/00C00-00C7F.el @@ -0,0 +1,84 @@ +(nxml-define-char-name-set 'telugu + '(("TELUGU SIGN CANDRABINDU" #x0C01) + ("TELUGU SIGN ANUSVARA" #x0C02) + ("TELUGU SIGN VISARGA" #x0C03) + ("TELUGU LETTER A" #x0C05) + ("TELUGU LETTER AA" #x0C06) + ("TELUGU LETTER I" #x0C07) + ("TELUGU LETTER II" #x0C08) + ("TELUGU LETTER U" #x0C09) + ("TELUGU LETTER UU" #x0C0A) + ("TELUGU LETTER VOCALIC R" #x0C0B) + ("TELUGU LETTER VOCALIC L" #x0C0C) + ("TELUGU LETTER E" #x0C0E) + ("TELUGU LETTER EE" #x0C0F) + ("TELUGU LETTER AI" #x0C10) + ("TELUGU LETTER O" #x0C12) + ("TELUGU LETTER OO" #x0C13) + ("TELUGU LETTER AU" #x0C14) + ("TELUGU LETTER KA" #x0C15) + ("TELUGU LETTER KHA" #x0C16) + ("TELUGU LETTER GA" #x0C17) + ("TELUGU LETTER GHA" #x0C18) + ("TELUGU LETTER NGA" #x0C19) + ("TELUGU LETTER CA" #x0C1A) + ("TELUGU LETTER CHA" #x0C1B) + ("TELUGU LETTER JA" #x0C1C) + ("TELUGU LETTER JHA" #x0C1D) + ("TELUGU LETTER NYA" #x0C1E) + ("TELUGU LETTER TTA" #x0C1F) + ("TELUGU LETTER TTHA" #x0C20) + ("TELUGU LETTER DDA" #x0C21) + ("TELUGU LETTER DDHA" #x0C22) + ("TELUGU LETTER NNA" #x0C23) + ("TELUGU LETTER TA" #x0C24) + ("TELUGU LETTER THA" #x0C25) + ("TELUGU LETTER DA" #x0C26) + ("TELUGU LETTER DHA" #x0C27) + ("TELUGU LETTER NA" #x0C28) + ("TELUGU LETTER PA" #x0C2A) + ("TELUGU LETTER PHA" #x0C2B) + ("TELUGU LETTER BA" #x0C2C) + ("TELUGU LETTER BHA" #x0C2D) + ("TELUGU LETTER MA" #x0C2E) + ("TELUGU LETTER YA" #x0C2F) + ("TELUGU LETTER RA" #x0C30) + ("TELUGU LETTER RRA" #x0C31) + ("TELUGU LETTER LA" #x0C32) + ("TELUGU LETTER LLA" #x0C33) + ("TELUGU LETTER VA" #x0C35) + ("TELUGU LETTER SHA" #x0C36) + ("TELUGU LETTER SSA" #x0C37) + ("TELUGU LETTER SA" #x0C38) + ("TELUGU LETTER HA" #x0C39) + ("TELUGU VOWEL SIGN AA" #x0C3E) + ("TELUGU VOWEL SIGN I" #x0C3F) + ("TELUGU VOWEL SIGN II" #x0C40) + ("TELUGU VOWEL SIGN U" #x0C41) + ("TELUGU VOWEL SIGN UU" #x0C42) + ("TELUGU VOWEL SIGN VOCALIC R" #x0C43) + ("TELUGU VOWEL SIGN VOCALIC RR" #x0C44) + ("TELUGU VOWEL SIGN E" #x0C46) + ("TELUGU VOWEL SIGN EE" #x0C47) + ("TELUGU VOWEL SIGN AI" #x0C48) + ("TELUGU VOWEL SIGN O" #x0C4A) + ("TELUGU VOWEL SIGN OO" #x0C4B) + ("TELUGU VOWEL SIGN AU" #x0C4C) + ("TELUGU SIGN VIRAMA" #x0C4D) + ("TELUGU LENGTH MARK" #x0C55) + ("TELUGU AI LENGTH MARK" #x0C56) + ("TELUGU LETTER VOCALIC RR" #x0C60) + ("TELUGU LETTER VOCALIC LL" #x0C61) + ("TELUGU DIGIT ZERO" #x0C66) + ("TELUGU DIGIT ONE" #x0C67) + ("TELUGU DIGIT TWO" #x0C68) + ("TELUGU DIGIT THREE" #x0C69) + ("TELUGU DIGIT FOUR" #x0C6A) + ("TELUGU DIGIT FIVE" #x0C6B) + ("TELUGU DIGIT SIX" #x0C6C) + ("TELUGU DIGIT SEVEN" #x0C6D) + ("TELUGU DIGIT EIGHT" #x0C6E) + ("TELUGU DIGIT NINE" #x0C6F) + )) + +;; arch-tag: 12e2c9a2-fa3a-400a-9adb-82a89e0a639b diff --git a/etc/nxml/00C80-00CFF.el b/etc/nxml/00C80-00CFF.el new file mode 100644 index 00000000000..d5251fafbab --- /dev/null +++ b/etc/nxml/00C80-00CFF.el @@ -0,0 +1,84 @@ +(nxml-define-char-name-set 'kannada + '(("KANNADA SIGN ANUSVARA" #x0C82) + ("KANNADA SIGN VISARGA" #x0C83) + ("KANNADA LETTER A" #x0C85) + ("KANNADA LETTER AA" #x0C86) + ("KANNADA LETTER I" #x0C87) + ("KANNADA LETTER II" #x0C88) + ("KANNADA LETTER U" #x0C89) + ("KANNADA LETTER UU" #x0C8A) + ("KANNADA LETTER VOCALIC R" #x0C8B) + ("KANNADA LETTER VOCALIC L" #x0C8C) + ("KANNADA LETTER E" #x0C8E) + ("KANNADA LETTER EE" #x0C8F) + ("KANNADA LETTER AI" #x0C90) + ("KANNADA LETTER O" #x0C92) + ("KANNADA LETTER OO" #x0C93) + ("KANNADA LETTER AU" #x0C94) + ("KANNADA LETTER KA" #x0C95) + ("KANNADA LETTER KHA" #x0C96) + ("KANNADA LETTER GA" #x0C97) + ("KANNADA LETTER GHA" #x0C98) + ("KANNADA LETTER NGA" #x0C99) + ("KANNADA LETTER CA" #x0C9A) + ("KANNADA LETTER CHA" #x0C9B) + ("KANNADA LETTER JA" #x0C9C) + ("KANNADA LETTER JHA" #x0C9D) + ("KANNADA LETTER NYA" #x0C9E) + ("KANNADA LETTER TTA" #x0C9F) + ("KANNADA LETTER TTHA" #x0CA0) + ("KANNADA LETTER DDA" #x0CA1) + ("KANNADA LETTER DDHA" #x0CA2) + ("KANNADA LETTER NNA" #x0CA3) + ("KANNADA LETTER TA" #x0CA4) + ("KANNADA LETTER THA" #x0CA5) + ("KANNADA LETTER DA" #x0CA6) + ("KANNADA LETTER DHA" #x0CA7) + ("KANNADA LETTER NA" #x0CA8) + ("KANNADA LETTER PA" #x0CAA) + ("KANNADA LETTER PHA" #x0CAB) + ("KANNADA LETTER BA" #x0CAC) + ("KANNADA LETTER BHA" #x0CAD) + ("KANNADA LETTER MA" #x0CAE) + ("KANNADA LETTER YA" #x0CAF) + ("KANNADA LETTER RA" #x0CB0) + ("KANNADA LETTER RRA" #x0CB1) + ("KANNADA LETTER LA" #x0CB2) + ("KANNADA LETTER LLA" #x0CB3) + ("KANNADA LETTER VA" #x0CB5) + ("KANNADA LETTER SHA" #x0CB6) + ("KANNADA LETTER SSA" #x0CB7) + ("KANNADA LETTER SA" #x0CB8) + ("KANNADA LETTER HA" #x0CB9) + ("KANNADA VOWEL SIGN AA" #x0CBE) + ("KANNADA VOWEL SIGN I" #x0CBF) + ("KANNADA VOWEL SIGN II" #x0CC0) + ("KANNADA VOWEL SIGN U" #x0CC1) + ("KANNADA VOWEL SIGN UU" #x0CC2) + ("KANNADA VOWEL SIGN VOCALIC R" #x0CC3) + ("KANNADA VOWEL SIGN VOCALIC RR" #x0CC4) + ("KANNADA VOWEL SIGN E" #x0CC6) + ("KANNADA VOWEL SIGN EE" #x0CC7) + ("KANNADA VOWEL SIGN AI" #x0CC8) + ("KANNADA VOWEL SIGN O" #x0CCA) + ("KANNADA VOWEL SIGN OO" #x0CCB) + ("KANNADA VOWEL SIGN AU" #x0CCC) + ("KANNADA SIGN VIRAMA" #x0CCD) + ("KANNADA LENGTH MARK" #x0CD5) + ("KANNADA AI LENGTH MARK" #x0CD6) + ("KANNADA LETTER FA" #x0CDE) + ("KANNADA LETTER VOCALIC RR" #x0CE0) + ("KANNADA LETTER VOCALIC LL" #x0CE1) + ("KANNADA DIGIT ZERO" #x0CE6) + ("KANNADA DIGIT ONE" #x0CE7) + ("KANNADA DIGIT TWO" #x0CE8) + ("KANNADA DIGIT THREE" #x0CE9) + ("KANNADA DIGIT FOUR" #x0CEA) + ("KANNADA DIGIT FIVE" #x0CEB) + ("KANNADA DIGIT SIX" #x0CEC) + ("KANNADA DIGIT SEVEN" #x0CED) + ("KANNADA DIGIT EIGHT" #x0CEE) + ("KANNADA DIGIT NINE" #x0CEF) + )) + +;; arch-tag: b17f4e00-00e9-4e2f-8343-37b9c8e29e89 diff --git a/etc/nxml/00D00-00D7F.el b/etc/nxml/00D00-00D7F.el new file mode 100644 index 00000000000..5d4a728ae05 --- /dev/null +++ b/etc/nxml/00D00-00D7F.el @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'malayalam + '(("MALAYALAM SIGN ANUSVARA" #x0D02) + ("MALAYALAM SIGN VISARGA" #x0D03) + ("MALAYALAM LETTER A" #x0D05) + ("MALAYALAM LETTER AA" #x0D06) + ("MALAYALAM LETTER I" #x0D07) + ("MALAYALAM LETTER II" #x0D08) + ("MALAYALAM LETTER U" #x0D09) + ("MALAYALAM LETTER UU" #x0D0A) + ("MALAYALAM LETTER VOCALIC R" #x0D0B) + ("MALAYALAM LETTER VOCALIC L" #x0D0C) + ("MALAYALAM LETTER E" #x0D0E) + ("MALAYALAM LETTER EE" #x0D0F) + ("MALAYALAM LETTER AI" #x0D10) + ("MALAYALAM LETTER O" #x0D12) + ("MALAYALAM LETTER OO" #x0D13) + ("MALAYALAM LETTER AU" #x0D14) + ("MALAYALAM LETTER KA" #x0D15) + ("MALAYALAM LETTER KHA" #x0D16) + ("MALAYALAM LETTER GA" #x0D17) + ("MALAYALAM LETTER GHA" #x0D18) + ("MALAYALAM LETTER NGA" #x0D19) + ("MALAYALAM LETTER CA" #x0D1A) + ("MALAYALAM LETTER CHA" #x0D1B) + ("MALAYALAM LETTER JA" #x0D1C) + ("MALAYALAM LETTER JHA" #x0D1D) + ("MALAYALAM LETTER NYA" #x0D1E) + ("MALAYALAM LETTER TTA" #x0D1F) + ("MALAYALAM LETTER TTHA" #x0D20) + ("MALAYALAM LETTER DDA" #x0D21) + ("MALAYALAM LETTER DDHA" #x0D22) + ("MALAYALAM LETTER NNA" #x0D23) + ("MALAYALAM LETTER TA" #x0D24) + ("MALAYALAM LETTER THA" #x0D25) + ("MALAYALAM LETTER DA" #x0D26) + ("MALAYALAM LETTER DHA" #x0D27) + ("MALAYALAM LETTER NA" #x0D28) + ("MALAYALAM LETTER PA" #x0D2A) + ("MALAYALAM LETTER PHA" #x0D2B) + ("MALAYALAM LETTER BA" #x0D2C) + ("MALAYALAM LETTER BHA" #x0D2D) + ("MALAYALAM LETTER MA" #x0D2E) + ("MALAYALAM LETTER YA" #x0D2F) + ("MALAYALAM LETTER RA" #x0D30) + ("MALAYALAM LETTER RRA" #x0D31) + ("MALAYALAM LETTER LA" #x0D32) + ("MALAYALAM LETTER LLA" #x0D33) + ("MALAYALAM LETTER LLLA" #x0D34) + ("MALAYALAM LETTER VA" #x0D35) + ("MALAYALAM LETTER SHA" #x0D36) + ("MALAYALAM LETTER SSA" #x0D37) + ("MALAYALAM LETTER SA" #x0D38) + ("MALAYALAM LETTER HA" #x0D39) + ("MALAYALAM VOWEL SIGN AA" #x0D3E) + ("MALAYALAM VOWEL SIGN I" #x0D3F) + ("MALAYALAM VOWEL SIGN II" #x0D40) + ("MALAYALAM VOWEL SIGN U" #x0D41) + ("MALAYALAM VOWEL SIGN UU" #x0D42) + ("MALAYALAM VOWEL SIGN VOCALIC R" #x0D43) + ("MALAYALAM VOWEL SIGN E" #x0D46) + ("MALAYALAM VOWEL SIGN EE" #x0D47) + ("MALAYALAM VOWEL SIGN AI" #x0D48) + ("MALAYALAM VOWEL SIGN O" #x0D4A) + ("MALAYALAM VOWEL SIGN OO" #x0D4B) + ("MALAYALAM VOWEL SIGN AU" #x0D4C) + ("MALAYALAM SIGN VIRAMA" #x0D4D) + ("MALAYALAM AU LENGTH MARK" #x0D57) + ("MALAYALAM LETTER VOCALIC RR" #x0D60) + ("MALAYALAM LETTER VOCALIC LL" #x0D61) + ("MALAYALAM DIGIT ZERO" #x0D66) + ("MALAYALAM DIGIT ONE" #x0D67) + ("MALAYALAM DIGIT TWO" #x0D68) + ("MALAYALAM DIGIT THREE" #x0D69) + ("MALAYALAM DIGIT FOUR" #x0D6A) + ("MALAYALAM DIGIT FIVE" #x0D6B) + ("MALAYALAM DIGIT SIX" #x0D6C) + ("MALAYALAM DIGIT SEVEN" #x0D6D) + ("MALAYALAM DIGIT EIGHT" #x0D6E) + ("MALAYALAM DIGIT NINE" #x0D6F) + )) + +;; arch-tag: 1bce48f6-bdc3-4ebc-b1f0-1563c32e4926 diff --git a/etc/nxml/00D80-00DFF.el b/etc/nxml/00D80-00DFF.el new file mode 100644 index 00000000000..3130b1f919d --- /dev/null +++ b/etc/nxml/00D80-00DFF.el @@ -0,0 +1,84 @@ +(nxml-define-char-name-set 'sinhala + '(("SINHALA SIGN ANUSVARAYA" #x0D82) + ("SINHALA SIGN VISARGAYA" #x0D83) + ("SINHALA LETTER AYANNA" #x0D85) + ("SINHALA LETTER AAYANNA" #x0D86) + ("SINHALA LETTER AEYANNA" #x0D87) + ("SINHALA LETTER AEEYANNA" #x0D88) + ("SINHALA LETTER IYANNA" #x0D89) + ("SINHALA LETTER IIYANNA" #x0D8A) + ("SINHALA LETTER UYANNA" #x0D8B) + ("SINHALA LETTER UUYANNA" #x0D8C) + ("SINHALA LETTER IRUYANNA" #x0D8D) + ("SINHALA LETTER IRUUYANNA" #x0D8E) + ("SINHALA LETTER ILUYANNA" #x0D8F) + ("SINHALA LETTER ILUUYANNA" #x0D90) + ("SINHALA LETTER EYANNA" #x0D91) + ("SINHALA LETTER EEYANNA" #x0D92) + ("SINHALA LETTER AIYANNA" #x0D93) + ("SINHALA LETTER OYANNA" #x0D94) + ("SINHALA LETTER OOYANNA" #x0D95) + ("SINHALA LETTER AUYANNA" #x0D96) + ("SINHALA LETTER ALPAPRAANA KAYANNA" #x0D9A) + ("SINHALA LETTER MAHAAPRAANA KAYANNA" #x0D9B) + ("SINHALA LETTER ALPAPRAANA GAYANNA" #x0D9C) + ("SINHALA LETTER MAHAAPRAANA GAYANNA" #x0D9D) + ("SINHALA LETTER KANTAJA NAASIKYAYA" #x0D9E) + ("SINHALA LETTER SANYAKA GAYANNA" #x0D9F) + ("SINHALA LETTER ALPAPRAANA CAYANNA" #x0DA0) + ("SINHALA LETTER MAHAAPRAANA CAYANNA" #x0DA1) + ("SINHALA LETTER ALPAPRAANA JAYANNA" #x0DA2) + ("SINHALA LETTER MAHAAPRAANA JAYANNA" #x0DA3) + ("SINHALA LETTER TAALUJA NAASIKYAYA" #x0DA4) + ("SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA" #x0DA5) + ("SINHALA LETTER SANYAKA JAYANNA" #x0DA6) + ("SINHALA LETTER ALPAPRAANA TTAYANNA" #x0DA7) + ("SINHALA LETTER MAHAAPRAANA TTAYANNA" #x0DA8) + ("SINHALA LETTER ALPAPRAANA DDAYANNA" #x0DA9) + ("SINHALA LETTER MAHAAPRAANA DDAYANNA" #x0DAA) + ("SINHALA LETTER MUURDHAJA NAYANNA" #x0DAB) + ("SINHALA LETTER SANYAKA DDAYANNA" #x0DAC) + ("SINHALA LETTER ALPAPRAANA TAYANNA" #x0DAD) + ("SINHALA LETTER MAHAAPRAANA TAYANNA" #x0DAE) + ("SINHALA LETTER ALPAPRAANA DAYANNA" #x0DAF) + ("SINHALA LETTER MAHAAPRAANA DAYANNA" #x0DB0) + ("SINHALA LETTER DANTAJA NAYANNA" #x0DB1) + ("SINHALA LETTER SANYAKA DAYANNA" #x0DB3) + ("SINHALA LETTER ALPAPRAANA PAYANNA" #x0DB4) + ("SINHALA LETTER MAHAAPRAANA PAYANNA" #x0DB5) + ("SINHALA LETTER ALPAPRAANA BAYANNA" #x0DB6) + ("SINHALA LETTER MAHAAPRAANA BAYANNA" #x0DB7) + ("SINHALA LETTER MAYANNA" #x0DB8) + ("SINHALA LETTER AMBA BAYANNA" #x0DB9) + ("SINHALA LETTER YAYANNA" #x0DBA) + ("SINHALA LETTER RAYANNA" #x0DBB) + ("SINHALA LETTER DANTAJA LAYANNA" #x0DBD) + ("SINHALA LETTER VAYANNA" #x0DC0) + ("SINHALA LETTER TAALUJA SAYANNA" #x0DC1) + ("SINHALA LETTER MUURDHAJA SAYANNA" #x0DC2) + ("SINHALA LETTER DANTAJA SAYANNA" #x0DC3) + ("SINHALA LETTER HAYANNA" #x0DC4) + ("SINHALA LETTER MUURDHAJA LAYANNA" #x0DC5) + ("SINHALA LETTER FAYANNA" #x0DC6) + ("SINHALA SIGN AL-LAKUNA" #x0DCA) + ("SINHALA VOWEL SIGN AELA-PILLA" #x0DCF) + ("SINHALA VOWEL SIGN KETTI AEDA-PILLA" #x0DD0) + ("SINHALA VOWEL SIGN DIGA AEDA-PILLA" #x0DD1) + ("SINHALA VOWEL SIGN KETTI IS-PILLA" #x0DD2) + ("SINHALA VOWEL SIGN DIGA IS-PILLA" #x0DD3) + ("SINHALA VOWEL SIGN KETTI PAA-PILLA" #x0DD4) + ("SINHALA VOWEL SIGN DIGA PAA-PILLA" #x0DD6) + ("SINHALA VOWEL SIGN GAETTA-PILLA" #x0DD8) + ("SINHALA VOWEL SIGN KOMBUVA" #x0DD9) + ("SINHALA VOWEL SIGN DIGA KOMBUVA" #x0DDA) + ("SINHALA VOWEL SIGN KOMBU DEKA" #x0DDB) + ("SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA" #x0DDC) + ("SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA" #x0DDD) + ("SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA" #x0DDE) + ("SINHALA VOWEL SIGN GAYANUKITTA" #x0DDF) + ("SINHALA VOWEL SIGN DIGA GAETTA-PILLA" #x0DF2) + ("SINHALA VOWEL SIGN DIGA GAYANUKITTA" #x0DF3) + ("SINHALA PUNCTUATION KUNDDALIYA" #x0DF4) + )) + +;; arch-tag: 3dfac4e1-97f5-433a-bd47-8cd364b09075 diff --git a/etc/nxml/00E00-00E7F.el b/etc/nxml/00E00-00E7F.el new file mode 100644 index 00000000000..f265a069a5c --- /dev/null +++ b/etc/nxml/00E00-00E7F.el @@ -0,0 +1,91 @@ +(nxml-define-char-name-set 'thai + '(("THAI CHARACTER KO KAI" #x0E01) + ("THAI CHARACTER KHO KHAI" #x0E02) + ("THAI CHARACTER KHO KHUAT" #x0E03) + ("THAI CHARACTER KHO KHWAI" #x0E04) + ("THAI CHARACTER KHO KHON" #x0E05) + ("THAI CHARACTER KHO RAKHANG" #x0E06) + ("THAI CHARACTER NGO NGU" #x0E07) + ("THAI CHARACTER CHO CHAN" #x0E08) + ("THAI CHARACTER CHO CHING" #x0E09) + ("THAI CHARACTER CHO CHANG" #x0E0A) + ("THAI CHARACTER SO SO" #x0E0B) + ("THAI CHARACTER CHO CHOE" #x0E0C) + ("THAI CHARACTER YO YING" #x0E0D) + ("THAI CHARACTER DO CHADA" #x0E0E) + ("THAI CHARACTER TO PATAK" #x0E0F) + ("THAI CHARACTER THO THAN" #x0E10) + ("THAI CHARACTER THO NANGMONTHO" #x0E11) + ("THAI CHARACTER THO PHUTHAO" #x0E12) + ("THAI CHARACTER NO NEN" #x0E13) + ("THAI CHARACTER DO DEK" #x0E14) + ("THAI CHARACTER TO TAO" #x0E15) + ("THAI CHARACTER THO THUNG" #x0E16) + ("THAI CHARACTER THO THAHAN" #x0E17) + ("THAI CHARACTER THO THONG" #x0E18) + ("THAI CHARACTER NO NU" #x0E19) + ("THAI CHARACTER BO BAIMAI" #x0E1A) + ("THAI CHARACTER PO PLA" #x0E1B) + ("THAI CHARACTER PHO PHUNG" #x0E1C) + ("THAI CHARACTER FO FA" #x0E1D) + ("THAI CHARACTER PHO PHAN" #x0E1E) + ("THAI CHARACTER FO FAN" #x0E1F) + ("THAI CHARACTER PHO SAMPHAO" #x0E20) + ("THAI CHARACTER MO MA" #x0E21) + ("THAI CHARACTER YO YAK" #x0E22) + ("THAI CHARACTER RO RUA" #x0E23) + ("THAI CHARACTER RU" #x0E24) + ("THAI CHARACTER LO LING" #x0E25) + ("THAI CHARACTER LU" #x0E26) + ("THAI CHARACTER WO WAEN" #x0E27) + ("THAI CHARACTER SO SALA" #x0E28) + ("THAI CHARACTER SO RUSI" #x0E29) + ("THAI CHARACTER SO SUA" #x0E2A) + ("THAI CHARACTER HO HIP" #x0E2B) + ("THAI CHARACTER LO CHULA" #x0E2C) + ("THAI CHARACTER O ANG" #x0E2D) + ("THAI CHARACTER HO NOKHUK" #x0E2E) + ("THAI CHARACTER PAIYANNOI" #x0E2F) + ("THAI CHARACTER SARA A" #x0E30) + ("THAI CHARACTER MAI HAN-AKAT" #x0E31) + ("THAI CHARACTER SARA AA" #x0E32) + ("THAI CHARACTER SARA AM" #x0E33) + ("THAI CHARACTER SARA I" #x0E34) + ("THAI CHARACTER SARA II" #x0E35) + ("THAI CHARACTER SARA UE" #x0E36) + ("THAI CHARACTER SARA UEE" #x0E37) + ("THAI CHARACTER SARA U" #x0E38) + ("THAI CHARACTER SARA UU" #x0E39) + ("THAI CHARACTER PHINTHU" #x0E3A) + ("THAI CURRENCY SYMBOL BAHT" #x0E3F) + ("THAI CHARACTER SARA E" #x0E40) + ("THAI CHARACTER SARA AE" #x0E41) + ("THAI CHARACTER SARA O" #x0E42) + ("THAI CHARACTER SARA AI MAIMUAN" #x0E43) + ("THAI CHARACTER SARA AI MAIMALAI" #x0E44) + ("THAI CHARACTER LAKKHANGYAO" #x0E45) + ("THAI CHARACTER MAIYAMOK" #x0E46) + ("THAI CHARACTER MAITAIKHU" #x0E47) + ("THAI CHARACTER MAI EK" #x0E48) + ("THAI CHARACTER MAI THO" #x0E49) + ("THAI CHARACTER MAI TRI" #x0E4A) + ("THAI CHARACTER MAI CHATTAWA" #x0E4B) + ("THAI CHARACTER THANTHAKHAT" #x0E4C) + ("THAI CHARACTER NIKHAHIT" #x0E4D) + ("THAI CHARACTER YAMAKKAN" #x0E4E) + ("THAI CHARACTER FONGMAN" #x0E4F) + ("THAI DIGIT ZERO" #x0E50) + ("THAI DIGIT ONE" #x0E51) + ("THAI DIGIT TWO" #x0E52) + ("THAI DIGIT THREE" #x0E53) + ("THAI DIGIT FOUR" #x0E54) + ("THAI DIGIT FIVE" #x0E55) + ("THAI DIGIT SIX" #x0E56) + ("THAI DIGIT SEVEN" #x0E57) + ("THAI DIGIT EIGHT" #x0E58) + ("THAI DIGIT NINE" #x0E59) + ("THAI CHARACTER ANGKHANKHU" #x0E5A) + ("THAI CHARACTER KHOMUT" #x0E5B) + )) + +;; arch-tag: cf6119b0-ae54-4871-a8a7-10621d74cba8 diff --git a/etc/nxml/00E80-00EFF.el b/etc/nxml/00E80-00EFF.el new file mode 100644 index 00000000000..29be3e172a7 --- /dev/null +++ b/etc/nxml/00E80-00EFF.el @@ -0,0 +1,69 @@ +(nxml-define-char-name-set 'lao + '(("LAO LETTER KO" #x0E81) + ("LAO LETTER KHO SUNG" #x0E82) + ("LAO LETTER KHO TAM" #x0E84) + ("LAO LETTER NGO" #x0E87) + ("LAO LETTER CO" #x0E88) + ("LAO LETTER SO TAM" #x0E8A) + ("LAO LETTER NYO" #x0E8D) + ("LAO LETTER DO" #x0E94) + ("LAO LETTER TO" #x0E95) + ("LAO LETTER THO SUNG" #x0E96) + ("LAO LETTER THO TAM" #x0E97) + ("LAO LETTER NO" #x0E99) + ("LAO LETTER BO" #x0E9A) + ("LAO LETTER PO" #x0E9B) + ("LAO LETTER PHO SUNG" #x0E9C) + ("LAO LETTER FO TAM" #x0E9D) + ("LAO LETTER PHO TAM" #x0E9E) + ("LAO LETTER FO SUNG" #x0E9F) + ("LAO LETTER MO" #x0EA1) + ("LAO LETTER YO" #x0EA2) + ("LAO LETTER LO LING" #x0EA3) + ("LAO LETTER LO LOOT" #x0EA5) + ("LAO LETTER WO" #x0EA7) + ("LAO LETTER SO SUNG" #x0EAA) + ("LAO LETTER HO SUNG" #x0EAB) + ("LAO LETTER O" #x0EAD) + ("LAO LETTER HO TAM" #x0EAE) + ("LAO ELLIPSIS" #x0EAF) + ("LAO VOWEL SIGN A" #x0EB0) + ("LAO VOWEL SIGN MAI KAN" #x0EB1) + ("LAO VOWEL SIGN AA" #x0EB2) + ("LAO VOWEL SIGN AM" #x0EB3) + ("LAO VOWEL SIGN I" #x0EB4) + ("LAO VOWEL SIGN II" #x0EB5) + ("LAO VOWEL SIGN Y" #x0EB6) + ("LAO VOWEL SIGN YY" #x0EB7) + ("LAO VOWEL SIGN U" #x0EB8) + ("LAO VOWEL SIGN UU" #x0EB9) + ("LAO VOWEL SIGN MAI KON" #x0EBB) + ("LAO SEMIVOWEL SIGN LO" #x0EBC) + ("LAO SEMIVOWEL SIGN NYO" #x0EBD) + ("LAO VOWEL SIGN E" #x0EC0) + ("LAO VOWEL SIGN EI" #x0EC1) + ("LAO VOWEL SIGN O" #x0EC2) + ("LAO VOWEL SIGN AY" #x0EC3) + ("LAO VOWEL SIGN AI" #x0EC4) + ("LAO KO LA" #x0EC6) + ("LAO TONE MAI EK" #x0EC8) + ("LAO TONE MAI THO" #x0EC9) + ("LAO TONE MAI TI" #x0ECA) + ("LAO TONE MAI CATAWA" #x0ECB) + ("LAO CANCELLATION MARK" #x0ECC) + ("LAO NIGGAHITA" #x0ECD) + ("LAO DIGIT ZERO" #x0ED0) + ("LAO DIGIT ONE" #x0ED1) + ("LAO DIGIT TWO" #x0ED2) + ("LAO DIGIT THREE" #x0ED3) + ("LAO DIGIT FOUR" #x0ED4) + ("LAO DIGIT FIVE" #x0ED5) + ("LAO DIGIT SIX" #x0ED6) + ("LAO DIGIT SEVEN" #x0ED7) + ("LAO DIGIT EIGHT" #x0ED8) + ("LAO DIGIT NINE" #x0ED9) + ("LAO HO NO" #x0EDC) + ("LAO HO MO" #x0EDD) + )) + +;; arch-tag: 36f98cb4-447d-49e0-bae5-03a026adabac diff --git a/etc/nxml/00F00-00FFF.el b/etc/nxml/00F00-00FFF.el new file mode 100644 index 00000000000..8e8be125ccc --- /dev/null +++ b/etc/nxml/00F00-00FFF.el @@ -0,0 +1,197 @@ +(nxml-define-char-name-set 'tibetan + '(("TIBETAN SYLLABLE OM" #x0F00) + ("TIBETAN MARK GTER YIG MGO TRUNCATED A" #x0F01) + ("TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA" #x0F02) + ("TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA" #x0F03) + ("TIBETAN MARK INITIAL YIG MGO MDUN MA" #x0F04) + ("TIBETAN MARK CLOSING YIG MGO SGAB MA" #x0F05) + ("TIBETAN MARK CARET YIG MGO PHUR SHAD MA" #x0F06) + ("TIBETAN MARK YIG MGO TSHEG SHAD MA" #x0F07) + ("TIBETAN MARK SBRUL SHAD" #x0F08) + ("TIBETAN MARK BSKUR YIG MGO" #x0F09) + ("TIBETAN MARK BKA- SHOG YIG MGO" #x0F0A) + ("TIBETAN MARK INTERSYLLABIC TSHEG" #x0F0B) + ("TIBETAN MARK DELIMITER TSHEG BSTAR" #x0F0C) + ("TIBETAN MARK SHAD" #x0F0D) + ("TIBETAN MARK NYIS SHAD" #x0F0E) + ("TIBETAN MARK TSHEG SHAD" #x0F0F) + ("TIBETAN MARK NYIS TSHEG SHAD" #x0F10) + ("TIBETAN MARK RIN CHEN SPUNGS SHAD" #x0F11) + ("TIBETAN MARK RGYA GRAM SHAD" #x0F12) + ("TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN" #x0F13) + ("TIBETAN MARK GTER TSHEG" #x0F14) + ("TIBETAN LOGOTYPE SIGN CHAD RTAGS" #x0F15) + ("TIBETAN LOGOTYPE SIGN LHAG RTAGS" #x0F16) + ("TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS" #x0F17) + ("TIBETAN ASTROLOGICAL SIGN -KHYUD PA" #x0F18) + ("TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS" #x0F19) + ("TIBETAN SIGN RDEL DKAR GCIG" #x0F1A) + ("TIBETAN SIGN RDEL DKAR GNYIS" #x0F1B) + ("TIBETAN SIGN RDEL DKAR GSUM" #x0F1C) + ("TIBETAN SIGN RDEL NAG GCIG" #x0F1D) + ("TIBETAN SIGN RDEL NAG GNYIS" #x0F1E) + ("TIBETAN SIGN RDEL DKAR RDEL NAG" #x0F1F) + ("TIBETAN DIGIT ZERO" #x0F20) + ("TIBETAN DIGIT ONE" #x0F21) + ("TIBETAN DIGIT TWO" #x0F22) + ("TIBETAN DIGIT THREE" #x0F23) + ("TIBETAN DIGIT FOUR" #x0F24) + ("TIBETAN DIGIT FIVE" #x0F25) + ("TIBETAN DIGIT SIX" #x0F26) + ("TIBETAN DIGIT SEVEN" #x0F27) + ("TIBETAN DIGIT EIGHT" #x0F28) + ("TIBETAN DIGIT NINE" #x0F29) + ("TIBETAN DIGIT HALF ONE" #x0F2A) + ("TIBETAN DIGIT HALF TWO" #x0F2B) + ("TIBETAN DIGIT HALF THREE" #x0F2C) + ("TIBETAN DIGIT HALF FOUR" #x0F2D) + ("TIBETAN DIGIT HALF FIVE" #x0F2E) + ("TIBETAN DIGIT HALF SIX" #x0F2F) + ("TIBETAN DIGIT HALF SEVEN" #x0F30) + ("TIBETAN DIGIT HALF EIGHT" #x0F31) + ("TIBETAN DIGIT HALF NINE" #x0F32) + ("TIBETAN DIGIT HALF ZERO" #x0F33) + ("TIBETAN MARK BSDUS RTAGS" #x0F34) + ("TIBETAN MARK NGAS BZUNG NYI ZLA" #x0F35) + ("TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN" #x0F36) + ("TIBETAN MARK NGAS BZUNG SGOR RTAGS" #x0F37) + ("TIBETAN MARK CHE MGO" #x0F38) + ("TIBETAN MARK TSA -PHRU" #x0F39) + ("TIBETAN MARK GUG RTAGS GYON" #x0F3A) + ("TIBETAN MARK GUG RTAGS GYAS" #x0F3B) + ("TIBETAN MARK ANG KHANG GYON" #x0F3C) + ("TIBETAN MARK ANG KHANG GYAS" #x0F3D) + ("TIBETAN SIGN YAR TSHES" #x0F3E) + ("TIBETAN SIGN MAR TSHES" #x0F3F) + ("TIBETAN LETTER KA" #x0F40) + ("TIBETAN LETTER KHA" #x0F41) + ("TIBETAN LETTER GA" #x0F42) + ("TIBETAN LETTER GHA" #x0F43) + ("TIBETAN LETTER NGA" #x0F44) + ("TIBETAN LETTER CA" #x0F45) + ("TIBETAN LETTER CHA" #x0F46) + ("TIBETAN LETTER JA" #x0F47) + ("TIBETAN LETTER NYA" #x0F49) + ("TIBETAN LETTER TTA" #x0F4A) + ("TIBETAN LETTER TTHA" #x0F4B) + ("TIBETAN LETTER DDA" #x0F4C) + ("TIBETAN LETTER DDHA" #x0F4D) + ("TIBETAN LETTER NNA" #x0F4E) + ("TIBETAN LETTER TA" #x0F4F) + ("TIBETAN LETTER THA" #x0F50) + ("TIBETAN LETTER DA" #x0F51) + ("TIBETAN LETTER DHA" #x0F52) + ("TIBETAN LETTER NA" #x0F53) + ("TIBETAN LETTER PA" #x0F54) + ("TIBETAN LETTER PHA" #x0F55) + ("TIBETAN LETTER BA" #x0F56) + ("TIBETAN LETTER BHA" #x0F57) + ("TIBETAN LETTER MA" #x0F58) + ("TIBETAN LETTER TSA" #x0F59) + ("TIBETAN LETTER TSHA" #x0F5A) + ("TIBETAN LETTER DZA" #x0F5B) + ("TIBETAN LETTER DZHA" #x0F5C) + ("TIBETAN LETTER WA" #x0F5D) + ("TIBETAN LETTER ZHA" #x0F5E) + ("TIBETAN LETTER ZA" #x0F5F) + ("TIBETAN LETTER -A" #x0F60) + ("TIBETAN LETTER YA" #x0F61) + ("TIBETAN LETTER RA" #x0F62) + ("TIBETAN LETTER LA" #x0F63) + ("TIBETAN LETTER SHA" #x0F64) + ("TIBETAN LETTER SSA" #x0F65) + ("TIBETAN LETTER SA" #x0F66) + ("TIBETAN LETTER HA" #x0F67) + ("TIBETAN LETTER A" #x0F68) + ("TIBETAN LETTER KSSA" #x0F69) + ("TIBETAN LETTER FIXED-FORM RA" #x0F6A) + ("TIBETAN VOWEL SIGN AA" #x0F71) + ("TIBETAN VOWEL SIGN I" #x0F72) + ("TIBETAN VOWEL SIGN II" #x0F73) + ("TIBETAN VOWEL SIGN U" #x0F74) + ("TIBETAN VOWEL SIGN UU" #x0F75) + ("TIBETAN VOWEL SIGN VOCALIC R" #x0F76) + ("TIBETAN VOWEL SIGN VOCALIC RR" #x0F77) + ("TIBETAN VOWEL SIGN VOCALIC L" #x0F78) + ("TIBETAN VOWEL SIGN VOCALIC LL" #x0F79) + ("TIBETAN VOWEL SIGN E" #x0F7A) + ("TIBETAN VOWEL SIGN EE" #x0F7B) + ("TIBETAN VOWEL SIGN O" #x0F7C) + ("TIBETAN VOWEL SIGN OO" #x0F7D) + ("TIBETAN SIGN RJES SU NGA RO" #x0F7E) + ("TIBETAN SIGN RNAM BCAD" #x0F7F) + ("TIBETAN VOWEL SIGN REVERSED I" #x0F80) + ("TIBETAN VOWEL SIGN REVERSED II" #x0F81) + ("TIBETAN SIGN NYI ZLA NAA DA" #x0F82) + ("TIBETAN SIGN SNA LDAN" #x0F83) + ("TIBETAN MARK HALANTA" #x0F84) + ("TIBETAN MARK PALUTA" #x0F85) + ("TIBETAN SIGN LCI RTAGS" #x0F86) + ("TIBETAN SIGN YANG RTAGS" #x0F87) + ("TIBETAN SIGN LCE TSA CAN" #x0F88) + ("TIBETAN SIGN MCHU CAN" #x0F89) + ("TIBETAN SIGN GRU CAN RGYINGS" #x0F8A) + ("TIBETAN SIGN GRU MED RGYINGS" #x0F8B) + ("TIBETAN SUBJOINED LETTER KA" #x0F90) + ("TIBETAN SUBJOINED LETTER KHA" #x0F91) + ("TIBETAN SUBJOINED LETTER GA" #x0F92) + ("TIBETAN SUBJOINED LETTER GHA" #x0F93) + ("TIBETAN SUBJOINED LETTER NGA" #x0F94) + ("TIBETAN SUBJOINED LETTER CA" #x0F95) + ("TIBETAN SUBJOINED LETTER CHA" #x0F96) + ("TIBETAN SUBJOINED LETTER JA" #x0F97) + ("TIBETAN SUBJOINED LETTER NYA" #x0F99) + ("TIBETAN SUBJOINED LETTER TTA" #x0F9A) + ("TIBETAN SUBJOINED LETTER TTHA" #x0F9B) + ("TIBETAN SUBJOINED LETTER DDA" #x0F9C) + ("TIBETAN SUBJOINED LETTER DDHA" #x0F9D) + ("TIBETAN SUBJOINED LETTER NNA" #x0F9E) + ("TIBETAN SUBJOINED LETTER TA" #x0F9F) + ("TIBETAN SUBJOINED LETTER THA" #x0FA0) + ("TIBETAN SUBJOINED LETTER DA" #x0FA1) + ("TIBETAN SUBJOINED LETTER DHA" #x0FA2) + ("TIBETAN SUBJOINED LETTER NA" #x0FA3) + ("TIBETAN SUBJOINED LETTER PA" #x0FA4) + ("TIBETAN SUBJOINED LETTER PHA" #x0FA5) + ("TIBETAN SUBJOINED LETTER BA" #x0FA6) + ("TIBETAN SUBJOINED LETTER BHA" #x0FA7) + ("TIBETAN SUBJOINED LETTER MA" #x0FA8) + ("TIBETAN SUBJOINED LETTER TSA" #x0FA9) + ("TIBETAN SUBJOINED LETTER TSHA" #x0FAA) + ("TIBETAN SUBJOINED LETTER DZA" #x0FAB) + ("TIBETAN SUBJOINED LETTER DZHA" #x0FAC) + ("TIBETAN SUBJOINED LETTER WA" #x0FAD) + ("TIBETAN SUBJOINED LETTER ZHA" #x0FAE) + ("TIBETAN SUBJOINED LETTER ZA" #x0FAF) + ("TIBETAN SUBJOINED LETTER -A" #x0FB0) + ("TIBETAN SUBJOINED LETTER YA" #x0FB1) + ("TIBETAN SUBJOINED LETTER RA" #x0FB2) + ("TIBETAN SUBJOINED LETTER LA" #x0FB3) + ("TIBETAN SUBJOINED LETTER SHA" #x0FB4) + ("TIBETAN SUBJOINED LETTER SSA" #x0FB5) + ("TIBETAN SUBJOINED LETTER SA" #x0FB6) + ("TIBETAN SUBJOINED LETTER HA" #x0FB7) + ("TIBETAN SUBJOINED LETTER A" #x0FB8) + ("TIBETAN SUBJOINED LETTER KSSA" #x0FB9) + ("TIBETAN SUBJOINED LETTER FIXED-FORM WA" #x0FBA) + ("TIBETAN SUBJOINED LETTER FIXED-FORM YA" #x0FBB) + ("TIBETAN SUBJOINED LETTER FIXED-FORM RA" #x0FBC) + ("TIBETAN KU RU KHA" #x0FBE) + ("TIBETAN KU RU KHA BZHI MIG CAN" #x0FBF) + ("TIBETAN CANTILLATION SIGN HEAVY BEAT" #x0FC0) + ("TIBETAN CANTILLATION SIGN LIGHT BEAT" #x0FC1) + ("TIBETAN CANTILLATION SIGN CANG TE-U" #x0FC2) + ("TIBETAN CANTILLATION SIGN SBUB -CHAL" #x0FC3) + ("TIBETAN SYMBOL DRIL BU" #x0FC4) + ("TIBETAN SYMBOL RDO RJE" #x0FC5) + ("TIBETAN SYMBOL PADMA GDAN" #x0FC6) + ("TIBETAN SYMBOL RDO RJE RGYA GRAM" #x0FC7) + ("TIBETAN SYMBOL PHUR PA" #x0FC8) + ("TIBETAN SYMBOL NOR BU" #x0FC9) + ("TIBETAN SYMBOL NOR BU NYIS -KHYIL" #x0FCA) + ("TIBETAN SYMBOL NOR BU GSUM -KHYIL" #x0FCB) + ("TIBETAN SYMBOL NOR BU BZHI -KHYIL" #x0FCC) + ("TIBETAN SIGN RDEL NAG GSUM" #x0FCF) + )) + +;; arch-tag: 547e48c6-3ded-4dc7-be69-4ee324c604c3 diff --git a/etc/nxml/01000-0109F.el b/etc/nxml/01000-0109F.el new file mode 100644 index 00000000000..56ab64648b5 --- /dev/null +++ b/etc/nxml/01000-0109F.el @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'myanmar + '(("MYANMAR LETTER KA" #x1000) + ("MYANMAR LETTER KHA" #x1001) + ("MYANMAR LETTER GA" #x1002) + ("MYANMAR LETTER GHA" #x1003) + ("MYANMAR LETTER NGA" #x1004) + ("MYANMAR LETTER CA" #x1005) + ("MYANMAR LETTER CHA" #x1006) + ("MYANMAR LETTER JA" #x1007) + ("MYANMAR LETTER JHA" #x1008) + ("MYANMAR LETTER NYA" #x1009) + ("MYANMAR LETTER NNYA" #x100A) + ("MYANMAR LETTER TTA" #x100B) + ("MYANMAR LETTER TTHA" #x100C) + ("MYANMAR LETTER DDA" #x100D) + ("MYANMAR LETTER DDHA" #x100E) + ("MYANMAR LETTER NNA" #x100F) + ("MYANMAR LETTER TA" #x1010) + ("MYANMAR LETTER THA" #x1011) + ("MYANMAR LETTER DA" #x1012) + ("MYANMAR LETTER DHA" #x1013) + ("MYANMAR LETTER NA" #x1014) + ("MYANMAR LETTER PA" #x1015) + ("MYANMAR LETTER PHA" #x1016) + ("MYANMAR LETTER BA" #x1017) + ("MYANMAR LETTER BHA" #x1018) + ("MYANMAR LETTER MA" #x1019) + ("MYANMAR LETTER YA" #x101A) + ("MYANMAR LETTER RA" #x101B) + ("MYANMAR LETTER LA" #x101C) + ("MYANMAR LETTER WA" #x101D) + ("MYANMAR LETTER SA" #x101E) + ("MYANMAR LETTER HA" #x101F) + ("MYANMAR LETTER LLA" #x1020) + ("MYANMAR LETTER A" #x1021) + ("MYANMAR LETTER I" #x1023) + ("MYANMAR LETTER II" #x1024) + ("MYANMAR LETTER U" #x1025) + ("MYANMAR LETTER UU" #x1026) + ("MYANMAR LETTER E" #x1027) + ("MYANMAR LETTER O" #x1029) + ("MYANMAR LETTER AU" #x102A) + ("MYANMAR VOWEL SIGN AA" #x102C) + ("MYANMAR VOWEL SIGN I" #x102D) + ("MYANMAR VOWEL SIGN II" #x102E) + ("MYANMAR VOWEL SIGN U" #x102F) + ("MYANMAR VOWEL SIGN UU" #x1030) + ("MYANMAR VOWEL SIGN E" #x1031) + ("MYANMAR VOWEL SIGN AI" #x1032) + ("MYANMAR SIGN ANUSVARA" #x1036) + ("MYANMAR SIGN DOT BELOW" #x1037) + ("MYANMAR SIGN VISARGA" #x1038) + ("MYANMAR SIGN VIRAMA" #x1039) + ("MYANMAR DIGIT ZERO" #x1040) + ("MYANMAR DIGIT ONE" #x1041) + ("MYANMAR DIGIT TWO" #x1042) + ("MYANMAR DIGIT THREE" #x1043) + ("MYANMAR DIGIT FOUR" #x1044) + ("MYANMAR DIGIT FIVE" #x1045) + ("MYANMAR DIGIT SIX" #x1046) + ("MYANMAR DIGIT SEVEN" #x1047) + ("MYANMAR DIGIT EIGHT" #x1048) + ("MYANMAR DIGIT NINE" #x1049) + ("MYANMAR SIGN LITTLE SECTION" #x104A) + ("MYANMAR SIGN SECTION" #x104B) + ("MYANMAR SYMBOL LOCATIVE" #x104C) + ("MYANMAR SYMBOL COMPLETED" #x104D) + ("MYANMAR SYMBOL AFOREMENTIONED" #x104E) + ("MYANMAR SYMBOL GENITIVE" #x104F) + ("MYANMAR LETTER SHA" #x1050) + ("MYANMAR LETTER SSA" #x1051) + ("MYANMAR LETTER VOCALIC R" #x1052) + ("MYANMAR LETTER VOCALIC RR" #x1053) + ("MYANMAR LETTER VOCALIC L" #x1054) + ("MYANMAR LETTER VOCALIC LL" #x1055) + ("MYANMAR VOWEL SIGN VOCALIC R" #x1056) + ("MYANMAR VOWEL SIGN VOCALIC RR" #x1057) + ("MYANMAR VOWEL SIGN VOCALIC L" #x1058) + ("MYANMAR VOWEL SIGN VOCALIC LL" #x1059) + )) + +;; arch-tag: 030cc7f0-2667-4504-ae9c-39c00fe146ff diff --git a/etc/nxml/010A0-010FF.el b/etc/nxml/010A0-010FF.el new file mode 100644 index 00000000000..d8c3ab7d314 --- /dev/null +++ b/etc/nxml/010A0-010FF.el @@ -0,0 +1,84 @@ +(nxml-define-char-name-set 'georgian + '(("GEORGIAN CAPITAL LETTER AN" #x10A0) + ("GEORGIAN CAPITAL LETTER BAN" #x10A1) + ("GEORGIAN CAPITAL LETTER GAN" #x10A2) + ("GEORGIAN CAPITAL LETTER DON" #x10A3) + ("GEORGIAN CAPITAL LETTER EN" #x10A4) + ("GEORGIAN CAPITAL LETTER VIN" #x10A5) + ("GEORGIAN CAPITAL LETTER ZEN" #x10A6) + ("GEORGIAN CAPITAL LETTER TAN" #x10A7) + ("GEORGIAN CAPITAL LETTER IN" #x10A8) + ("GEORGIAN CAPITAL LETTER KAN" #x10A9) + ("GEORGIAN CAPITAL LETTER LAS" #x10AA) + ("GEORGIAN CAPITAL LETTER MAN" #x10AB) + ("GEORGIAN CAPITAL LETTER NAR" #x10AC) + ("GEORGIAN CAPITAL LETTER ON" #x10AD) + ("GEORGIAN CAPITAL LETTER PAR" #x10AE) + ("GEORGIAN CAPITAL LETTER ZHAR" #x10AF) + ("GEORGIAN CAPITAL LETTER RAE" #x10B0) + ("GEORGIAN CAPITAL LETTER SAN" #x10B1) + ("GEORGIAN CAPITAL LETTER TAR" #x10B2) + ("GEORGIAN CAPITAL LETTER UN" #x10B3) + ("GEORGIAN CAPITAL LETTER PHAR" #x10B4) + ("GEORGIAN CAPITAL LETTER KHAR" #x10B5) + ("GEORGIAN CAPITAL LETTER GHAN" #x10B6) + ("GEORGIAN CAPITAL LETTER QAR" #x10B7) + ("GEORGIAN CAPITAL LETTER SHIN" #x10B8) + ("GEORGIAN CAPITAL LETTER CHIN" #x10B9) + ("GEORGIAN CAPITAL LETTER CAN" #x10BA) + ("GEORGIAN CAPITAL LETTER JIL" #x10BB) + ("GEORGIAN CAPITAL LETTER CIL" #x10BC) + ("GEORGIAN CAPITAL LETTER CHAR" #x10BD) + ("GEORGIAN CAPITAL LETTER XAN" #x10BE) + ("GEORGIAN CAPITAL LETTER JHAN" #x10BF) + ("GEORGIAN CAPITAL LETTER HAE" #x10C0) + ("GEORGIAN CAPITAL LETTER HE" #x10C1) + ("GEORGIAN CAPITAL LETTER HIE" #x10C2) + ("GEORGIAN CAPITAL LETTER WE" #x10C3) + ("GEORGIAN CAPITAL LETTER HAR" #x10C4) + ("GEORGIAN CAPITAL LETTER HOE" #x10C5) + ("GEORGIAN LETTER AN" #x10D0) + ("GEORGIAN LETTER BAN" #x10D1) + ("GEORGIAN LETTER GAN" #x10D2) + ("GEORGIAN LETTER DON" #x10D3) + ("GEORGIAN LETTER EN" #x10D4) + ("GEORGIAN LETTER VIN" #x10D5) + ("GEORGIAN LETTER ZEN" #x10D6) + ("GEORGIAN LETTER TAN" #x10D7) + ("GEORGIAN LETTER IN" #x10D8) + ("GEORGIAN LETTER KAN" #x10D9) + ("GEORGIAN LETTER LAS" #x10DA) + ("GEORGIAN LETTER MAN" #x10DB) + ("GEORGIAN LETTER NAR" #x10DC) + ("GEORGIAN LETTER ON" #x10DD) + ("GEORGIAN LETTER PAR" #x10DE) + ("GEORGIAN LETTER ZHAR" #x10DF) + ("GEORGIAN LETTER RAE" #x10E0) + ("GEORGIAN LETTER SAN" #x10E1) + ("GEORGIAN LETTER TAR" #x10E2) + ("GEORGIAN LETTER UN" #x10E3) + ("GEORGIAN LETTER PHAR" #x10E4) + ("GEORGIAN LETTER KHAR" #x10E5) + ("GEORGIAN LETTER GHAN" #x10E6) + ("GEORGIAN LETTER QAR" #x10E7) + ("GEORGIAN LETTER SHIN" #x10E8) + ("GEORGIAN LETTER CHIN" #x10E9) + ("GEORGIAN LETTER CAN" #x10EA) + ("GEORGIAN LETTER JIL" #x10EB) + ("GEORGIAN LETTER CIL" #x10EC) + ("GEORGIAN LETTER CHAR" #x10ED) + ("GEORGIAN LETTER XAN" #x10EE) + ("GEORGIAN LETTER JHAN" #x10EF) + ("GEORGIAN LETTER HAE" #x10F0) + ("GEORGIAN LETTER HE" #x10F1) + ("GEORGIAN LETTER HIE" #x10F2) + ("GEORGIAN LETTER WE" #x10F3) + ("GEORGIAN LETTER HAR" #x10F4) + ("GEORGIAN LETTER HOE" #x10F5) + ("GEORGIAN LETTER FI" #x10F6) + ("GEORGIAN LETTER YN" #x10F7) + ("GEORGIAN LETTER ELIFI" #x10F8) + ("GEORGIAN PARAGRAPH SEPARATOR" #x10FB) + )) + +;; arch-tag: 8f5a9cec-8b71-48c9-af68-c8c51112e5b2 diff --git a/etc/nxml/01100-011FF.el b/etc/nxml/01100-011FF.el new file mode 100644 index 00000000000..7e7619d3e8f --- /dev/null +++ b/etc/nxml/01100-011FF.el @@ -0,0 +1,244 @@ +(nxml-define-char-name-set 'hangul-jamo + '(("HANGUL CHOSEONG KIYEOK" #x1100) + ("HANGUL CHOSEONG SSANGKIYEOK" #x1101) + ("HANGUL CHOSEONG NIEUN" #x1102) + ("HANGUL CHOSEONG TIKEUT" #x1103) + ("HANGUL CHOSEONG SSANGTIKEUT" #x1104) + ("HANGUL CHOSEONG RIEUL" #x1105) + ("HANGUL CHOSEONG MIEUM" #x1106) + ("HANGUL CHOSEONG PIEUP" #x1107) + ("HANGUL CHOSEONG SSANGPIEUP" #x1108) + ("HANGUL CHOSEONG SIOS" #x1109) + ("HANGUL CHOSEONG SSANGSIOS" #x110A) + ("HANGUL CHOSEONG IEUNG" #x110B) + ("HANGUL CHOSEONG CIEUC" #x110C) + ("HANGUL CHOSEONG SSANGCIEUC" #x110D) + ("HANGUL CHOSEONG CHIEUCH" #x110E) + ("HANGUL CHOSEONG KHIEUKH" #x110F) + ("HANGUL CHOSEONG THIEUTH" #x1110) + ("HANGUL CHOSEONG PHIEUPH" #x1111) + ("HANGUL CHOSEONG HIEUH" #x1112) + ("HANGUL CHOSEONG NIEUN-KIYEOK" #x1113) + ("HANGUL CHOSEONG SSANGNIEUN" #x1114) + ("HANGUL CHOSEONG NIEUN-TIKEUT" #x1115) + ("HANGUL CHOSEONG NIEUN-PIEUP" #x1116) + ("HANGUL CHOSEONG TIKEUT-KIYEOK" #x1117) + ("HANGUL CHOSEONG RIEUL-NIEUN" #x1118) + ("HANGUL CHOSEONG SSANGRIEUL" #x1119) + ("HANGUL CHOSEONG RIEUL-HIEUH" #x111A) + ("HANGUL CHOSEONG KAPYEOUNRIEUL" #x111B) + ("HANGUL CHOSEONG MIEUM-PIEUP" #x111C) + ("HANGUL CHOSEONG KAPYEOUNMIEUM" #x111D) + ("HANGUL CHOSEONG PIEUP-KIYEOK" #x111E) + ("HANGUL CHOSEONG PIEUP-NIEUN" #x111F) + ("HANGUL CHOSEONG PIEUP-TIKEUT" #x1120) + ("HANGUL CHOSEONG PIEUP-SIOS" #x1121) + ("HANGUL CHOSEONG PIEUP-SIOS-KIYEOK" #x1122) + ("HANGUL CHOSEONG PIEUP-SIOS-TIKEUT" #x1123) + ("HANGUL CHOSEONG PIEUP-SIOS-PIEUP" #x1124) + ("HANGUL CHOSEONG PIEUP-SSANGSIOS" #x1125) + ("HANGUL CHOSEONG PIEUP-SIOS-CIEUC" #x1126) + ("HANGUL CHOSEONG PIEUP-CIEUC" #x1127) + ("HANGUL CHOSEONG PIEUP-CHIEUCH" #x1128) + ("HANGUL CHOSEONG PIEUP-THIEUTH" #x1129) + ("HANGUL CHOSEONG PIEUP-PHIEUPH" #x112A) + ("HANGUL CHOSEONG KAPYEOUNPIEUP" #x112B) + ("HANGUL CHOSEONG KAPYEOUNSSANGPIEUP" #x112C) + ("HANGUL CHOSEONG SIOS-KIYEOK" #x112D) + ("HANGUL CHOSEONG SIOS-NIEUN" #x112E) + ("HANGUL CHOSEONG SIOS-TIKEUT" #x112F) + ("HANGUL CHOSEONG SIOS-RIEUL" #x1130) + ("HANGUL CHOSEONG SIOS-MIEUM" #x1131) + ("HANGUL CHOSEONG SIOS-PIEUP" #x1132) + ("HANGUL CHOSEONG SIOS-PIEUP-KIYEOK" #x1133) + ("HANGUL CHOSEONG SIOS-SSANGSIOS" #x1134) + ("HANGUL CHOSEONG SIOS-IEUNG" #x1135) + ("HANGUL CHOSEONG SIOS-CIEUC" #x1136) + ("HANGUL CHOSEONG SIOS-CHIEUCH" #x1137) + ("HANGUL CHOSEONG SIOS-KHIEUKH" #x1138) + ("HANGUL CHOSEONG SIOS-THIEUTH" #x1139) + ("HANGUL CHOSEONG SIOS-PHIEUPH" #x113A) + ("HANGUL CHOSEONG SIOS-HIEUH" #x113B) + ("HANGUL CHOSEONG CHITUEUMSIOS" #x113C) + ("HANGUL CHOSEONG CHITUEUMSSANGSIOS" #x113D) + ("HANGUL CHOSEONG CEONGCHIEUMSIOS" #x113E) + ("HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS" #x113F) + ("HANGUL CHOSEONG PANSIOS" #x1140) + ("HANGUL CHOSEONG IEUNG-KIYEOK" #x1141) + ("HANGUL CHOSEONG IEUNG-TIKEUT" #x1142) + ("HANGUL CHOSEONG IEUNG-MIEUM" #x1143) + ("HANGUL CHOSEONG IEUNG-PIEUP" #x1144) + ("HANGUL CHOSEONG IEUNG-SIOS" #x1145) + ("HANGUL CHOSEONG IEUNG-PANSIOS" #x1146) + ("HANGUL CHOSEONG SSANGIEUNG" #x1147) + ("HANGUL CHOSEONG IEUNG-CIEUC" #x1148) + ("HANGUL CHOSEONG IEUNG-CHIEUCH" #x1149) + ("HANGUL CHOSEONG IEUNG-THIEUTH" #x114A) + ("HANGUL CHOSEONG IEUNG-PHIEUPH" #x114B) + ("HANGUL CHOSEONG YESIEUNG" #x114C) + ("HANGUL CHOSEONG CIEUC-IEUNG" #x114D) + ("HANGUL CHOSEONG CHITUEUMCIEUC" #x114E) + ("HANGUL CHOSEONG CHITUEUMSSANGCIEUC" #x114F) + ("HANGUL CHOSEONG CEONGCHIEUMCIEUC" #x1150) + ("HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC" #x1151) + ("HANGUL CHOSEONG CHIEUCH-KHIEUKH" #x1152) + ("HANGUL CHOSEONG CHIEUCH-HIEUH" #x1153) + ("HANGUL CHOSEONG CHITUEUMCHIEUCH" #x1154) + ("HANGUL CHOSEONG CEONGCHIEUMCHIEUCH" #x1155) + ("HANGUL CHOSEONG PHIEUPH-PIEUP" #x1156) + ("HANGUL CHOSEONG KAPYEOUNPHIEUPH" #x1157) + ("HANGUL CHOSEONG SSANGHIEUH" #x1158) + ("HANGUL CHOSEONG YEORINHIEUH" #x1159) + ("HANGUL CHOSEONG FILLER" #x115F) + ("HANGUL JUNGSEONG FILLER" #x1160) + ("HANGUL JUNGSEONG A" #x1161) + ("HANGUL JUNGSEONG AE" #x1162) + ("HANGUL JUNGSEONG YA" #x1163) + ("HANGUL JUNGSEONG YAE" #x1164) + ("HANGUL JUNGSEONG EO" #x1165) + ("HANGUL JUNGSEONG E" #x1166) + ("HANGUL JUNGSEONG YEO" #x1167) + ("HANGUL JUNGSEONG YE" #x1168) + ("HANGUL JUNGSEONG O" #x1169) + ("HANGUL JUNGSEONG WA" #x116A) + ("HANGUL JUNGSEONG WAE" #x116B) + ("HANGUL JUNGSEONG OE" #x116C) + ("HANGUL JUNGSEONG YO" #x116D) + ("HANGUL JUNGSEONG U" #x116E) + ("HANGUL JUNGSEONG WEO" #x116F) + ("HANGUL JUNGSEONG WE" #x1170) + ("HANGUL JUNGSEONG WI" #x1171) + ("HANGUL JUNGSEONG YU" #x1172) + ("HANGUL JUNGSEONG EU" #x1173) + ("HANGUL JUNGSEONG YI" #x1174) + ("HANGUL JUNGSEONG I" #x1175) + ("HANGUL JUNGSEONG A-O" #x1176) + ("HANGUL JUNGSEONG A-U" #x1177) + ("HANGUL JUNGSEONG YA-O" #x1178) + ("HANGUL JUNGSEONG YA-YO" #x1179) + ("HANGUL JUNGSEONG EO-O" #x117A) + ("HANGUL JUNGSEONG EO-U" #x117B) + ("HANGUL JUNGSEONG EO-EU" #x117C) + ("HANGUL JUNGSEONG YEO-O" #x117D) + ("HANGUL JUNGSEONG YEO-U" #x117E) + ("HANGUL JUNGSEONG O-EO" #x117F) + ("HANGUL JUNGSEONG O-E" #x1180) + ("HANGUL JUNGSEONG O-YE" #x1181) + ("HANGUL JUNGSEONG O-O" #x1182) + ("HANGUL JUNGSEONG O-U" #x1183) + ("HANGUL JUNGSEONG YO-YA" #x1184) + ("HANGUL JUNGSEONG YO-YAE" #x1185) + ("HANGUL JUNGSEONG YO-YEO" #x1186) + ("HANGUL JUNGSEONG YO-O" #x1187) + ("HANGUL JUNGSEONG YO-I" #x1188) + ("HANGUL JUNGSEONG U-A" #x1189) + ("HANGUL JUNGSEONG U-AE" #x118A) + ("HANGUL JUNGSEONG U-EO-EU" #x118B) + ("HANGUL JUNGSEONG U-YE" #x118C) + ("HANGUL JUNGSEONG U-U" #x118D) + ("HANGUL JUNGSEONG YU-A" #x118E) + ("HANGUL JUNGSEONG YU-EO" #x118F) + ("HANGUL JUNGSEONG YU-E" #x1190) + ("HANGUL JUNGSEONG YU-YEO" #x1191) + ("HANGUL JUNGSEONG YU-YE" #x1192) + ("HANGUL JUNGSEONG YU-U" #x1193) + ("HANGUL JUNGSEONG YU-I" #x1194) + ("HANGUL JUNGSEONG EU-U" #x1195) + ("HANGUL JUNGSEONG EU-EU" #x1196) + ("HANGUL JUNGSEONG YI-U" #x1197) + ("HANGUL JUNGSEONG I-A" #x1198) + ("HANGUL JUNGSEONG I-YA" #x1199) + ("HANGUL JUNGSEONG I-O" #x119A) + ("HANGUL JUNGSEONG I-U" #x119B) + ("HANGUL JUNGSEONG I-EU" #x119C) + ("HANGUL JUNGSEONG I-ARAEA" #x119D) + ("HANGUL JUNGSEONG ARAEA" #x119E) + ("HANGUL JUNGSEONG ARAEA-EO" #x119F) + ("HANGUL JUNGSEONG ARAEA-U" #x11A0) + ("HANGUL JUNGSEONG ARAEA-I" #x11A1) + ("HANGUL JUNGSEONG SSANGARAEA" #x11A2) + ("HANGUL JONGSEONG KIYEOK" #x11A8) + ("HANGUL JONGSEONG SSANGKIYEOK" #x11A9) + ("HANGUL JONGSEONG KIYEOK-SIOS" #x11AA) + ("HANGUL JONGSEONG NIEUN" #x11AB) + ("HANGUL JONGSEONG NIEUN-CIEUC" #x11AC) + ("HANGUL JONGSEONG NIEUN-HIEUH" #x11AD) + ("HANGUL JONGSEONG TIKEUT" #x11AE) + ("HANGUL JONGSEONG RIEUL" #x11AF) + ("HANGUL JONGSEONG RIEUL-KIYEOK" #x11B0) + ("HANGUL JONGSEONG RIEUL-MIEUM" #x11B1) + ("HANGUL JONGSEONG RIEUL-PIEUP" #x11B2) + ("HANGUL JONGSEONG RIEUL-SIOS" #x11B3) + ("HANGUL JONGSEONG RIEUL-THIEUTH" #x11B4) + ("HANGUL JONGSEONG RIEUL-PHIEUPH" #x11B5) + ("HANGUL JONGSEONG RIEUL-HIEUH" #x11B6) + ("HANGUL JONGSEONG MIEUM" #x11B7) + ("HANGUL JONGSEONG PIEUP" #x11B8) + ("HANGUL JONGSEONG PIEUP-SIOS" #x11B9) + ("HANGUL JONGSEONG SIOS" #x11BA) + ("HANGUL JONGSEONG SSANGSIOS" #x11BB) + ("HANGUL JONGSEONG IEUNG" #x11BC) + ("HANGUL JONGSEONG CIEUC" #x11BD) + ("HANGUL JONGSEONG CHIEUCH" #x11BE) + ("HANGUL JONGSEONG KHIEUKH" #x11BF) + ("HANGUL JONGSEONG THIEUTH" #x11C0) + ("HANGUL JONGSEONG PHIEUPH" #x11C1) + ("HANGUL JONGSEONG HIEUH" #x11C2) + ("HANGUL JONGSEONG KIYEOK-RIEUL" #x11C3) + ("HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK" #x11C4) + ("HANGUL JONGSEONG NIEUN-KIYEOK" #x11C5) + ("HANGUL JONGSEONG NIEUN-TIKEUT" #x11C6) + ("HANGUL JONGSEONG NIEUN-SIOS" #x11C7) + ("HANGUL JONGSEONG NIEUN-PANSIOS" #x11C8) + ("HANGUL JONGSEONG NIEUN-THIEUTH" #x11C9) + ("HANGUL JONGSEONG TIKEUT-KIYEOK" #x11CA) + ("HANGUL JONGSEONG TIKEUT-RIEUL" #x11CB) + ("HANGUL JONGSEONG RIEUL-KIYEOK-SIOS" #x11CC) + ("HANGUL JONGSEONG RIEUL-NIEUN" #x11CD) + ("HANGUL JONGSEONG RIEUL-TIKEUT" #x11CE) + ("HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH" #x11CF) + ("HANGUL JONGSEONG SSANGRIEUL" #x11D0) + ("HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK" #x11D1) + ("HANGUL JONGSEONG RIEUL-MIEUM-SIOS" #x11D2) + ("HANGUL JONGSEONG RIEUL-PIEUP-SIOS" #x11D3) + ("HANGUL JONGSEONG RIEUL-PIEUP-HIEUH" #x11D4) + ("HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP" #x11D5) + ("HANGUL JONGSEONG RIEUL-SSANGSIOS" #x11D6) + ("HANGUL JONGSEONG RIEUL-PANSIOS" #x11D7) + ("HANGUL JONGSEONG RIEUL-KHIEUKH" #x11D8) + ("HANGUL JONGSEONG RIEUL-YEORINHIEUH" #x11D9) + ("HANGUL JONGSEONG MIEUM-KIYEOK" #x11DA) + ("HANGUL JONGSEONG MIEUM-RIEUL" #x11DB) + ("HANGUL JONGSEONG MIEUM-PIEUP" #x11DC) + ("HANGUL JONGSEONG MIEUM-SIOS" #x11DD) + ("HANGUL JONGSEONG MIEUM-SSANGSIOS" #x11DE) + ("HANGUL JONGSEONG MIEUM-PANSIOS" #x11DF) + ("HANGUL JONGSEONG MIEUM-CHIEUCH" #x11E0) + ("HANGUL JONGSEONG MIEUM-HIEUH" #x11E1) + ("HANGUL JONGSEONG KAPYEOUNMIEUM" #x11E2) + ("HANGUL JONGSEONG PIEUP-RIEUL" #x11E3) + ("HANGUL JONGSEONG PIEUP-PHIEUPH" #x11E4) + ("HANGUL JONGSEONG PIEUP-HIEUH" #x11E5) + ("HANGUL JONGSEONG KAPYEOUNPIEUP" #x11E6) + ("HANGUL JONGSEONG SIOS-KIYEOK" #x11E7) + ("HANGUL JONGSEONG SIOS-TIKEUT" #x11E8) + ("HANGUL JONGSEONG SIOS-RIEUL" #x11E9) + ("HANGUL JONGSEONG SIOS-PIEUP" #x11EA) + ("HANGUL JONGSEONG PANSIOS" #x11EB) + ("HANGUL JONGSEONG IEUNG-KIYEOK" #x11EC) + ("HANGUL JONGSEONG IEUNG-SSANGKIYEOK" #x11ED) + ("HANGUL JONGSEONG SSANGIEUNG" #x11EE) + ("HANGUL JONGSEONG IEUNG-KHIEUKH" #x11EF) + ("HANGUL JONGSEONG YESIEUNG" #x11F0) + ("HANGUL JONGSEONG YESIEUNG-SIOS" #x11F1) + ("HANGUL JONGSEONG YESIEUNG-PANSIOS" #x11F2) + ("HANGUL JONGSEONG PHIEUPH-PIEUP" #x11F3) + ("HANGUL JONGSEONG KAPYEOUNPHIEUPH" #x11F4) + ("HANGUL JONGSEONG HIEUH-NIEUN" #x11F5) + ("HANGUL JONGSEONG HIEUH-RIEUL" #x11F6) + ("HANGUL JONGSEONG HIEUH-MIEUM" #x11F7) + ("HANGUL JONGSEONG HIEUH-PIEUP" #x11F8) + ("HANGUL JONGSEONG YEORINHIEUH" #x11F9) + )) + +;; arch-tag: e631a2ad-7d7e-4a86-89f0-e6e4f7db5f39 diff --git a/etc/nxml/01200-0137F.el b/etc/nxml/01200-0137F.el new file mode 100644 index 00000000000..26a5a3a3836 --- /dev/null +++ b/etc/nxml/01200-0137F.el @@ -0,0 +1,349 @@ +(nxml-define-char-name-set 'ethiopic + '(("ETHIOPIC SYLLABLE HA" #x1200) + ("ETHIOPIC SYLLABLE HU" #x1201) + ("ETHIOPIC SYLLABLE HI" #x1202) + ("ETHIOPIC SYLLABLE HAA" #x1203) + ("ETHIOPIC SYLLABLE HEE" #x1204) + ("ETHIOPIC SYLLABLE HE" #x1205) + ("ETHIOPIC SYLLABLE HO" #x1206) + ("ETHIOPIC SYLLABLE LA" #x1208) + ("ETHIOPIC SYLLABLE LU" #x1209) + ("ETHIOPIC SYLLABLE LI" #x120A) + ("ETHIOPIC SYLLABLE LAA" #x120B) + ("ETHIOPIC SYLLABLE LEE" #x120C) + ("ETHIOPIC SYLLABLE LE" #x120D) + ("ETHIOPIC SYLLABLE LO" #x120E) + ("ETHIOPIC SYLLABLE LWA" #x120F) + ("ETHIOPIC SYLLABLE HHA" #x1210) + ("ETHIOPIC SYLLABLE HHU" #x1211) + ("ETHIOPIC SYLLABLE HHI" #x1212) + ("ETHIOPIC SYLLABLE HHAA" #x1213) + ("ETHIOPIC SYLLABLE HHEE" #x1214) + ("ETHIOPIC SYLLABLE HHE" #x1215) + ("ETHIOPIC SYLLABLE HHO" #x1216) + ("ETHIOPIC SYLLABLE HHWA" #x1217) + ("ETHIOPIC SYLLABLE MA" #x1218) + ("ETHIOPIC SYLLABLE MU" #x1219) + ("ETHIOPIC SYLLABLE MI" #x121A) + ("ETHIOPIC SYLLABLE MAA" #x121B) + ("ETHIOPIC SYLLABLE MEE" #x121C) + ("ETHIOPIC SYLLABLE ME" #x121D) + ("ETHIOPIC SYLLABLE MO" #x121E) + ("ETHIOPIC SYLLABLE MWA" #x121F) + ("ETHIOPIC SYLLABLE SZA" #x1220) + ("ETHIOPIC SYLLABLE SZU" #x1221) + ("ETHIOPIC SYLLABLE SZI" #x1222) + ("ETHIOPIC SYLLABLE SZAA" #x1223) + ("ETHIOPIC SYLLABLE SZEE" #x1224) + ("ETHIOPIC SYLLABLE SZE" #x1225) + ("ETHIOPIC SYLLABLE SZO" #x1226) + ("ETHIOPIC SYLLABLE SZWA" #x1227) + ("ETHIOPIC SYLLABLE RA" #x1228) + ("ETHIOPIC SYLLABLE RU" #x1229) + ("ETHIOPIC SYLLABLE RI" #x122A) + ("ETHIOPIC SYLLABLE RAA" #x122B) + ("ETHIOPIC SYLLABLE REE" #x122C) + ("ETHIOPIC SYLLABLE RE" #x122D) + ("ETHIOPIC SYLLABLE RO" #x122E) + ("ETHIOPIC SYLLABLE RWA" #x122F) + ("ETHIOPIC SYLLABLE SA" #x1230) + ("ETHIOPIC SYLLABLE SU" #x1231) + ("ETHIOPIC SYLLABLE SI" #x1232) + ("ETHIOPIC SYLLABLE SAA" #x1233) + ("ETHIOPIC SYLLABLE SEE" #x1234) + ("ETHIOPIC SYLLABLE SE" #x1235) + ("ETHIOPIC SYLLABLE SO" #x1236) + ("ETHIOPIC SYLLABLE SWA" #x1237) + ("ETHIOPIC SYLLABLE SHA" #x1238) + ("ETHIOPIC SYLLABLE SHU" #x1239) + ("ETHIOPIC SYLLABLE SHI" #x123A) + ("ETHIOPIC SYLLABLE SHAA" #x123B) + ("ETHIOPIC SYLLABLE SHEE" #x123C) + ("ETHIOPIC SYLLABLE SHE" #x123D) + ("ETHIOPIC SYLLABLE SHO" #x123E) + ("ETHIOPIC SYLLABLE SHWA" #x123F) + ("ETHIOPIC SYLLABLE QA" #x1240) + ("ETHIOPIC SYLLABLE QU" #x1241) + ("ETHIOPIC SYLLABLE QI" #x1242) + ("ETHIOPIC SYLLABLE QAA" #x1243) + ("ETHIOPIC SYLLABLE QEE" #x1244) + ("ETHIOPIC SYLLABLE QE" #x1245) + ("ETHIOPIC SYLLABLE QO" #x1246) + ("ETHIOPIC SYLLABLE QWA" #x1248) + ("ETHIOPIC SYLLABLE QWI" #x124A) + ("ETHIOPIC SYLLABLE QWAA" #x124B) + ("ETHIOPIC SYLLABLE QWEE" #x124C) + ("ETHIOPIC SYLLABLE QWE" #x124D) + ("ETHIOPIC SYLLABLE QHA" #x1250) + ("ETHIOPIC SYLLABLE QHU" #x1251) + ("ETHIOPIC SYLLABLE QHI" #x1252) + ("ETHIOPIC SYLLABLE QHAA" #x1253) + ("ETHIOPIC SYLLABLE QHEE" #x1254) + ("ETHIOPIC SYLLABLE QHE" #x1255) + ("ETHIOPIC SYLLABLE QHO" #x1256) + ("ETHIOPIC SYLLABLE QHWA" #x1258) + ("ETHIOPIC SYLLABLE QHWI" #x125A) + ("ETHIOPIC SYLLABLE QHWAA" #x125B) + ("ETHIOPIC SYLLABLE QHWEE" #x125C) + ("ETHIOPIC SYLLABLE QHWE" #x125D) + ("ETHIOPIC SYLLABLE BA" #x1260) + ("ETHIOPIC SYLLABLE BU" #x1261) + ("ETHIOPIC SYLLABLE BI" #x1262) + ("ETHIOPIC SYLLABLE BAA" #x1263) + ("ETHIOPIC SYLLABLE BEE" #x1264) + ("ETHIOPIC SYLLABLE BE" #x1265) + ("ETHIOPIC SYLLABLE BO" #x1266) + ("ETHIOPIC SYLLABLE BWA" #x1267) + ("ETHIOPIC SYLLABLE VA" #x1268) + ("ETHIOPIC SYLLABLE VU" #x1269) + ("ETHIOPIC SYLLABLE VI" #x126A) + ("ETHIOPIC SYLLABLE VAA" #x126B) + ("ETHIOPIC SYLLABLE VEE" #x126C) + ("ETHIOPIC SYLLABLE VE" #x126D) + ("ETHIOPIC SYLLABLE VO" #x126E) + ("ETHIOPIC SYLLABLE VWA" #x126F) + ("ETHIOPIC SYLLABLE TA" #x1270) + ("ETHIOPIC SYLLABLE TU" #x1271) + ("ETHIOPIC SYLLABLE TI" #x1272) + ("ETHIOPIC SYLLABLE TAA" #x1273) + ("ETHIOPIC SYLLABLE TEE" #x1274) + ("ETHIOPIC SYLLABLE TE" #x1275) + ("ETHIOPIC SYLLABLE TO" #x1276) + ("ETHIOPIC SYLLABLE TWA" #x1277) + ("ETHIOPIC SYLLABLE CA" #x1278) + ("ETHIOPIC SYLLABLE CU" #x1279) + ("ETHIOPIC SYLLABLE CI" #x127A) + ("ETHIOPIC SYLLABLE CAA" #x127B) + ("ETHIOPIC SYLLABLE CEE" #x127C) + ("ETHIOPIC SYLLABLE CE" #x127D) + ("ETHIOPIC SYLLABLE CO" #x127E) + ("ETHIOPIC SYLLABLE CWA" #x127F) + ("ETHIOPIC SYLLABLE XA" #x1280) + ("ETHIOPIC SYLLABLE XU" #x1281) + ("ETHIOPIC SYLLABLE XI" #x1282) + ("ETHIOPIC SYLLABLE XAA" #x1283) + ("ETHIOPIC SYLLABLE XEE" #x1284) + ("ETHIOPIC SYLLABLE XE" #x1285) + ("ETHIOPIC SYLLABLE XO" #x1286) + ("ETHIOPIC SYLLABLE XWA" #x1288) + ("ETHIOPIC SYLLABLE XWI" #x128A) + ("ETHIOPIC SYLLABLE XWAA" #x128B) + ("ETHIOPIC SYLLABLE XWEE" #x128C) + ("ETHIOPIC SYLLABLE XWE" #x128D) + ("ETHIOPIC SYLLABLE NA" #x1290) + ("ETHIOPIC SYLLABLE NU" #x1291) + ("ETHIOPIC SYLLABLE NI" #x1292) + ("ETHIOPIC SYLLABLE NAA" #x1293) + ("ETHIOPIC SYLLABLE NEE" #x1294) + ("ETHIOPIC SYLLABLE NE" #x1295) + ("ETHIOPIC SYLLABLE NO" #x1296) + ("ETHIOPIC SYLLABLE NWA" #x1297) + ("ETHIOPIC SYLLABLE NYA" #x1298) + ("ETHIOPIC SYLLABLE NYU" #x1299) + ("ETHIOPIC SYLLABLE NYI" #x129A) + ("ETHIOPIC SYLLABLE NYAA" #x129B) + ("ETHIOPIC SYLLABLE NYEE" #x129C) + ("ETHIOPIC SYLLABLE NYE" #x129D) + ("ETHIOPIC SYLLABLE NYO" #x129E) + ("ETHIOPIC SYLLABLE NYWA" #x129F) + ("ETHIOPIC SYLLABLE GLOTTAL A" #x12A0) + ("ETHIOPIC SYLLABLE GLOTTAL U" #x12A1) + ("ETHIOPIC SYLLABLE GLOTTAL I" #x12A2) + ("ETHIOPIC SYLLABLE GLOTTAL AA" #x12A3) + ("ETHIOPIC SYLLABLE GLOTTAL EE" #x12A4) + ("ETHIOPIC SYLLABLE GLOTTAL E" #x12A5) + ("ETHIOPIC SYLLABLE GLOTTAL O" #x12A6) + ("ETHIOPIC SYLLABLE GLOTTAL WA" #x12A7) + ("ETHIOPIC SYLLABLE KA" #x12A8) + ("ETHIOPIC SYLLABLE KU" #x12A9) + ("ETHIOPIC SYLLABLE KI" #x12AA) + ("ETHIOPIC SYLLABLE KAA" #x12AB) + ("ETHIOPIC SYLLABLE KEE" #x12AC) + ("ETHIOPIC SYLLABLE KE" #x12AD) + ("ETHIOPIC SYLLABLE KO" #x12AE) + ("ETHIOPIC SYLLABLE KWA" #x12B0) + ("ETHIOPIC SYLLABLE KWI" #x12B2) + ("ETHIOPIC SYLLABLE KWAA" #x12B3) + ("ETHIOPIC SYLLABLE KWEE" #x12B4) + ("ETHIOPIC SYLLABLE KWE" #x12B5) + ("ETHIOPIC SYLLABLE KXA" #x12B8) + ("ETHIOPIC SYLLABLE KXU" #x12B9) + ("ETHIOPIC SYLLABLE KXI" #x12BA) + ("ETHIOPIC SYLLABLE KXAA" #x12BB) + ("ETHIOPIC SYLLABLE KXEE" #x12BC) + ("ETHIOPIC SYLLABLE KXE" #x12BD) + ("ETHIOPIC SYLLABLE KXO" #x12BE) + ("ETHIOPIC SYLLABLE KXWA" #x12C0) + ("ETHIOPIC SYLLABLE KXWI" #x12C2) + ("ETHIOPIC SYLLABLE KXWAA" #x12C3) + ("ETHIOPIC SYLLABLE KXWEE" #x12C4) + ("ETHIOPIC SYLLABLE KXWE" #x12C5) + ("ETHIOPIC SYLLABLE WA" #x12C8) + ("ETHIOPIC SYLLABLE WU" #x12C9) + ("ETHIOPIC SYLLABLE WI" #x12CA) + ("ETHIOPIC SYLLABLE WAA" #x12CB) + ("ETHIOPIC SYLLABLE WEE" #x12CC) + ("ETHIOPIC SYLLABLE WE" #x12CD) + ("ETHIOPIC SYLLABLE WO" #x12CE) + ("ETHIOPIC SYLLABLE PHARYNGEAL A" #x12D0) + ("ETHIOPIC SYLLABLE PHARYNGEAL U" #x12D1) + ("ETHIOPIC SYLLABLE PHARYNGEAL I" #x12D2) + ("ETHIOPIC SYLLABLE PHARYNGEAL AA" #x12D3) + ("ETHIOPIC SYLLABLE PHARYNGEAL EE" #x12D4) + ("ETHIOPIC SYLLABLE PHARYNGEAL E" #x12D5) + ("ETHIOPIC SYLLABLE PHARYNGEAL O" #x12D6) + ("ETHIOPIC SYLLABLE ZA" #x12D8) + ("ETHIOPIC SYLLABLE ZU" #x12D9) + ("ETHIOPIC SYLLABLE ZI" #x12DA) + ("ETHIOPIC SYLLABLE ZAA" #x12DB) + ("ETHIOPIC SYLLABLE ZEE" #x12DC) + ("ETHIOPIC SYLLABLE ZE" #x12DD) + ("ETHIOPIC SYLLABLE ZO" #x12DE) + ("ETHIOPIC SYLLABLE ZWA" #x12DF) + ("ETHIOPIC SYLLABLE ZHA" #x12E0) + ("ETHIOPIC SYLLABLE ZHU" #x12E1) + ("ETHIOPIC SYLLABLE ZHI" #x12E2) + ("ETHIOPIC SYLLABLE ZHAA" #x12E3) + ("ETHIOPIC SYLLABLE ZHEE" #x12E4) + ("ETHIOPIC SYLLABLE ZHE" #x12E5) + ("ETHIOPIC SYLLABLE ZHO" #x12E6) + ("ETHIOPIC SYLLABLE ZHWA" #x12E7) + ("ETHIOPIC SYLLABLE YA" #x12E8) + ("ETHIOPIC SYLLABLE YU" #x12E9) + ("ETHIOPIC SYLLABLE YI" #x12EA) + ("ETHIOPIC SYLLABLE YAA" #x12EB) + ("ETHIOPIC SYLLABLE YEE" #x12EC) + ("ETHIOPIC SYLLABLE YE" #x12ED) + ("ETHIOPIC SYLLABLE YO" #x12EE) + ("ETHIOPIC SYLLABLE DA" #x12F0) + ("ETHIOPIC SYLLABLE DU" #x12F1) + ("ETHIOPIC SYLLABLE DI" #x12F2) + ("ETHIOPIC SYLLABLE DAA" #x12F3) + ("ETHIOPIC SYLLABLE DEE" #x12F4) + ("ETHIOPIC SYLLABLE DE" #x12F5) + ("ETHIOPIC SYLLABLE DO" #x12F6) + ("ETHIOPIC SYLLABLE DWA" #x12F7) + ("ETHIOPIC SYLLABLE DDA" #x12F8) + ("ETHIOPIC SYLLABLE DDU" #x12F9) + ("ETHIOPIC SYLLABLE DDI" #x12FA) + ("ETHIOPIC SYLLABLE DDAA" #x12FB) + ("ETHIOPIC SYLLABLE DDEE" #x12FC) + ("ETHIOPIC SYLLABLE DDE" #x12FD) + ("ETHIOPIC SYLLABLE DDO" #x12FE) + ("ETHIOPIC SYLLABLE DDWA" #x12FF) + ("ETHIOPIC SYLLABLE JA" #x1300) + ("ETHIOPIC SYLLABLE JU" #x1301) + ("ETHIOPIC SYLLABLE JI" #x1302) + ("ETHIOPIC SYLLABLE JAA" #x1303) + ("ETHIOPIC SYLLABLE JEE" #x1304) + ("ETHIOPIC SYLLABLE JE" #x1305) + ("ETHIOPIC SYLLABLE JO" #x1306) + ("ETHIOPIC SYLLABLE JWA" #x1307) + ("ETHIOPIC SYLLABLE GA" #x1308) + ("ETHIOPIC SYLLABLE GU" #x1309) + ("ETHIOPIC SYLLABLE GI" #x130A) + ("ETHIOPIC SYLLABLE GAA" #x130B) + ("ETHIOPIC SYLLABLE GEE" #x130C) + ("ETHIOPIC SYLLABLE GE" #x130D) + ("ETHIOPIC SYLLABLE GO" #x130E) + ("ETHIOPIC SYLLABLE GWA" #x1310) + ("ETHIOPIC SYLLABLE GWI" #x1312) + ("ETHIOPIC SYLLABLE GWAA" #x1313) + ("ETHIOPIC SYLLABLE GWEE" #x1314) + ("ETHIOPIC SYLLABLE GWE" #x1315) + ("ETHIOPIC SYLLABLE GGA" #x1318) + ("ETHIOPIC SYLLABLE GGU" #x1319) + ("ETHIOPIC SYLLABLE GGI" #x131A) + ("ETHIOPIC SYLLABLE GGAA" #x131B) + ("ETHIOPIC SYLLABLE GGEE" #x131C) + ("ETHIOPIC SYLLABLE GGE" #x131D) + ("ETHIOPIC SYLLABLE GGO" #x131E) + ("ETHIOPIC SYLLABLE THA" #x1320) + ("ETHIOPIC SYLLABLE THU" #x1321) + ("ETHIOPIC SYLLABLE THI" #x1322) + ("ETHIOPIC SYLLABLE THAA" #x1323) + ("ETHIOPIC SYLLABLE THEE" #x1324) + ("ETHIOPIC SYLLABLE THE" #x1325) + ("ETHIOPIC SYLLABLE THO" #x1326) + ("ETHIOPIC SYLLABLE THWA" #x1327) + ("ETHIOPIC SYLLABLE CHA" #x1328) + ("ETHIOPIC SYLLABLE CHU" #x1329) + ("ETHIOPIC SYLLABLE CHI" #x132A) + ("ETHIOPIC SYLLABLE CHAA" #x132B) + ("ETHIOPIC SYLLABLE CHEE" #x132C) + ("ETHIOPIC SYLLABLE CHE" #x132D) + ("ETHIOPIC SYLLABLE CHO" #x132E) + ("ETHIOPIC SYLLABLE CHWA" #x132F) + ("ETHIOPIC SYLLABLE PHA" #x1330) + ("ETHIOPIC SYLLABLE PHU" #x1331) + ("ETHIOPIC SYLLABLE PHI" #x1332) + ("ETHIOPIC SYLLABLE PHAA" #x1333) + ("ETHIOPIC SYLLABLE PHEE" #x1334) + ("ETHIOPIC SYLLABLE PHE" #x1335) + ("ETHIOPIC SYLLABLE PHO" #x1336) + ("ETHIOPIC SYLLABLE PHWA" #x1337) + ("ETHIOPIC SYLLABLE TSA" #x1338) + ("ETHIOPIC SYLLABLE TSU" #x1339) + ("ETHIOPIC SYLLABLE TSI" #x133A) + ("ETHIOPIC SYLLABLE TSAA" #x133B) + ("ETHIOPIC SYLLABLE TSEE" #x133C) + ("ETHIOPIC SYLLABLE TSE" #x133D) + ("ETHIOPIC SYLLABLE TSO" #x133E) + ("ETHIOPIC SYLLABLE TSWA" #x133F) + ("ETHIOPIC SYLLABLE TZA" #x1340) + ("ETHIOPIC SYLLABLE TZU" #x1341) + ("ETHIOPIC SYLLABLE TZI" #x1342) + ("ETHIOPIC SYLLABLE TZAA" #x1343) + ("ETHIOPIC SYLLABLE TZEE" #x1344) + ("ETHIOPIC SYLLABLE TZE" #x1345) + ("ETHIOPIC SYLLABLE TZO" #x1346) + ("ETHIOPIC SYLLABLE FA" #x1348) + ("ETHIOPIC SYLLABLE FU" #x1349) + ("ETHIOPIC SYLLABLE FI" #x134A) + ("ETHIOPIC SYLLABLE FAA" #x134B) + ("ETHIOPIC SYLLABLE FEE" #x134C) + ("ETHIOPIC SYLLABLE FE" #x134D) + ("ETHIOPIC SYLLABLE FO" #x134E) + ("ETHIOPIC SYLLABLE FWA" #x134F) + ("ETHIOPIC SYLLABLE PA" #x1350) + ("ETHIOPIC SYLLABLE PU" #x1351) + ("ETHIOPIC SYLLABLE PI" #x1352) + ("ETHIOPIC SYLLABLE PAA" #x1353) + ("ETHIOPIC SYLLABLE PEE" #x1354) + ("ETHIOPIC SYLLABLE PE" #x1355) + ("ETHIOPIC SYLLABLE PO" #x1356) + ("ETHIOPIC SYLLABLE PWA" #x1357) + ("ETHIOPIC SYLLABLE RYA" #x1358) + ("ETHIOPIC SYLLABLE MYA" #x1359) + ("ETHIOPIC SYLLABLE FYA" #x135A) + ("ETHIOPIC WORDSPACE" #x1361) + ("ETHIOPIC FULL STOP" #x1362) + ("ETHIOPIC COMMA" #x1363) + ("ETHIOPIC SEMICOLON" #x1364) + ("ETHIOPIC COLON" #x1365) + ("ETHIOPIC PREFACE COLON" #x1366) + ("ETHIOPIC QUESTION MARK" #x1367) + ("ETHIOPIC PARAGRAPH SEPARATOR" #x1368) + ("ETHIOPIC DIGIT ONE" #x1369) + ("ETHIOPIC DIGIT TWO" #x136A) + ("ETHIOPIC DIGIT THREE" #x136B) + ("ETHIOPIC DIGIT FOUR" #x136C) + ("ETHIOPIC DIGIT FIVE" #x136D) + ("ETHIOPIC DIGIT SIX" #x136E) + ("ETHIOPIC DIGIT SEVEN" #x136F) + ("ETHIOPIC DIGIT EIGHT" #x1370) + ("ETHIOPIC DIGIT NINE" #x1371) + ("ETHIOPIC NUMBER TEN" #x1372) + ("ETHIOPIC NUMBER TWENTY" #x1373) + ("ETHIOPIC NUMBER THIRTY" #x1374) + ("ETHIOPIC NUMBER FORTY" #x1375) + ("ETHIOPIC NUMBER FIFTY" #x1376) + ("ETHIOPIC NUMBER SIXTY" #x1377) + ("ETHIOPIC NUMBER SEVENTY" #x1378) + ("ETHIOPIC NUMBER EIGHTY" #x1379) + ("ETHIOPIC NUMBER NINETY" #x137A) + ("ETHIOPIC NUMBER HUNDRED" #x137B) + ("ETHIOPIC NUMBER TEN THOUSAND" #x137C) + )) + +;; arch-tag: a34092f4-c605-4c01-b619-222a1241853d diff --git a/etc/nxml/013A0-013FF.el b/etc/nxml/013A0-013FF.el new file mode 100644 index 00000000000..e3fd669671f --- /dev/null +++ b/etc/nxml/013A0-013FF.el @@ -0,0 +1,89 @@ +(nxml-define-char-name-set 'cherokee + '(("CHEROKEE LETTER A" #x13A0) + ("CHEROKEE LETTER E" #x13A1) + ("CHEROKEE LETTER I" #x13A2) + ("CHEROKEE LETTER O" #x13A3) + ("CHEROKEE LETTER U" #x13A4) + ("CHEROKEE LETTER V" #x13A5) + ("CHEROKEE LETTER GA" #x13A6) + ("CHEROKEE LETTER KA" #x13A7) + ("CHEROKEE LETTER GE" #x13A8) + ("CHEROKEE LETTER GI" #x13A9) + ("CHEROKEE LETTER GO" #x13AA) + ("CHEROKEE LETTER GU" #x13AB) + ("CHEROKEE LETTER GV" #x13AC) + ("CHEROKEE LETTER HA" #x13AD) + ("CHEROKEE LETTER HE" #x13AE) + ("CHEROKEE LETTER HI" #x13AF) + ("CHEROKEE LETTER HO" #x13B0) + ("CHEROKEE LETTER HU" #x13B1) + ("CHEROKEE LETTER HV" #x13B2) + ("CHEROKEE LETTER LA" #x13B3) + ("CHEROKEE LETTER LE" #x13B4) + ("CHEROKEE LETTER LI" #x13B5) + ("CHEROKEE LETTER LO" #x13B6) + ("CHEROKEE LETTER LU" #x13B7) + ("CHEROKEE LETTER LV" #x13B8) + ("CHEROKEE LETTER MA" #x13B9) + ("CHEROKEE LETTER ME" #x13BA) + ("CHEROKEE LETTER MI" #x13BB) + ("CHEROKEE LETTER MO" #x13BC) + ("CHEROKEE LETTER MU" #x13BD) + ("CHEROKEE LETTER NA" #x13BE) + ("CHEROKEE LETTER HNA" #x13BF) + ("CHEROKEE LETTER NAH" #x13C0) + ("CHEROKEE LETTER NE" #x13C1) + ("CHEROKEE LETTER NI" #x13C2) + ("CHEROKEE LETTER NO" #x13C3) + ("CHEROKEE LETTER NU" #x13C4) + ("CHEROKEE LETTER NV" #x13C5) + ("CHEROKEE LETTER QUA" #x13C6) + ("CHEROKEE LETTER QUE" #x13C7) + ("CHEROKEE LETTER QUI" #x13C8) + ("CHEROKEE LETTER QUO" #x13C9) + ("CHEROKEE LETTER QUU" #x13CA) + ("CHEROKEE LETTER QUV" #x13CB) + ("CHEROKEE LETTER SA" #x13CC) + ("CHEROKEE LETTER S" #x13CD) + ("CHEROKEE LETTER SE" #x13CE) + ("CHEROKEE LETTER SI" #x13CF) + ("CHEROKEE LETTER SO" #x13D0) + ("CHEROKEE LETTER SU" #x13D1) + ("CHEROKEE LETTER SV" #x13D2) + ("CHEROKEE LETTER DA" #x13D3) + ("CHEROKEE LETTER TA" #x13D4) + ("CHEROKEE LETTER DE" #x13D5) + ("CHEROKEE LETTER TE" #x13D6) + ("CHEROKEE LETTER DI" #x13D7) + ("CHEROKEE LETTER TI" #x13D8) + ("CHEROKEE LETTER DO" #x13D9) + ("CHEROKEE LETTER DU" #x13DA) + ("CHEROKEE LETTER DV" #x13DB) + ("CHEROKEE LETTER DLA" #x13DC) + ("CHEROKEE LETTER TLA" #x13DD) + ("CHEROKEE LETTER TLE" #x13DE) + ("CHEROKEE LETTER TLI" #x13DF) + ("CHEROKEE LETTER TLO" #x13E0) + ("CHEROKEE LETTER TLU" #x13E1) + ("CHEROKEE LETTER TLV" #x13E2) + ("CHEROKEE LETTER TSA" #x13E3) + ("CHEROKEE LETTER TSE" #x13E4) + ("CHEROKEE LETTER TSI" #x13E5) + ("CHEROKEE LETTER TSO" #x13E6) + ("CHEROKEE LETTER TSU" #x13E7) + ("CHEROKEE LETTER TSV" #x13E8) + ("CHEROKEE LETTER WA" #x13E9) + ("CHEROKEE LETTER WE" #x13EA) + ("CHEROKEE LETTER WI" #x13EB) + ("CHEROKEE LETTER WO" #x13EC) + ("CHEROKEE LETTER WU" #x13ED) + ("CHEROKEE LETTER WV" #x13EE) + ("CHEROKEE LETTER YA" #x13EF) + ("CHEROKEE LETTER YE" #x13F0) + ("CHEROKEE LETTER YI" #x13F1) + ("CHEROKEE LETTER YO" #x13F2) + ("CHEROKEE LETTER YU" #x13F3) + ("CHEROKEE LETTER YV" #x13F4) + )) + +;; arch-tag: 42d669f3-aa0a-4b38-8f60-c1bf05b0d8be diff --git a/etc/nxml/01400-0167F.el b/etc/nxml/01400-0167F.el new file mode 100644 index 00000000000..1dfce26a852 --- /dev/null +++ b/etc/nxml/01400-0167F.el @@ -0,0 +1,634 @@ +(nxml-define-char-name-set 'unified-canadian-aboriginal-syllabics + '(("CANADIAN SYLLABICS E" #x1401) + ("CANADIAN SYLLABICS AAI" #x1402) + ("CANADIAN SYLLABICS I" #x1403) + ("CANADIAN SYLLABICS II" #x1404) + ("CANADIAN SYLLABICS O" #x1405) + ("CANADIAN SYLLABICS OO" #x1406) + ("CANADIAN SYLLABICS Y-CREE OO" #x1407) + ("CANADIAN SYLLABICS CARRIER EE" #x1408) + ("CANADIAN SYLLABICS CARRIER I" #x1409) + ("CANADIAN SYLLABICS A" #x140A) + ("CANADIAN SYLLABICS AA" #x140B) + ("CANADIAN SYLLABICS WE" #x140C) + ("CANADIAN SYLLABICS WEST-CREE WE" #x140D) + ("CANADIAN SYLLABICS WI" #x140E) + ("CANADIAN SYLLABICS WEST-CREE WI" #x140F) + ("CANADIAN SYLLABICS WII" #x1410) + ("CANADIAN SYLLABICS WEST-CREE WII" #x1411) + ("CANADIAN SYLLABICS WO" #x1412) + ("CANADIAN SYLLABICS WEST-CREE WO" #x1413) + ("CANADIAN SYLLABICS WOO" #x1414) + ("CANADIAN SYLLABICS WEST-CREE WOO" #x1415) + ("CANADIAN SYLLABICS NASKAPI WOO" #x1416) + ("CANADIAN SYLLABICS WA" #x1417) + ("CANADIAN SYLLABICS WEST-CREE WA" #x1418) + ("CANADIAN SYLLABICS WAA" #x1419) + ("CANADIAN SYLLABICS WEST-CREE WAA" #x141A) + ("CANADIAN SYLLABICS NASKAPI WAA" #x141B) + ("CANADIAN SYLLABICS AI" #x141C) + ("CANADIAN SYLLABICS Y-CREE W" #x141D) + ("CANADIAN SYLLABICS GLOTTAL STOP" #x141E) + ("CANADIAN SYLLABICS FINAL ACUTE" #x141F) + ("CANADIAN SYLLABICS FINAL GRAVE" #x1420) + ("CANADIAN SYLLABICS FINAL BOTTOM HALF RING" #x1421) + ("CANADIAN SYLLABICS FINAL TOP HALF RING" #x1422) + ("CANADIAN SYLLABICS FINAL RIGHT HALF RING" #x1423) + ("CANADIAN SYLLABICS FINAL RING" #x1424) + ("CANADIAN SYLLABICS FINAL DOUBLE ACUTE" #x1425) + ("CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES" #x1426) + ("CANADIAN SYLLABICS FINAL MIDDLE DOT" #x1427) + ("CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE" #x1428) + ("CANADIAN SYLLABICS FINAL PLUS" #x1429) + ("CANADIAN SYLLABICS FINAL DOWN TACK" #x142A) + ("CANADIAN SYLLABICS EN" #x142B) + ("CANADIAN SYLLABICS IN" #x142C) + ("CANADIAN SYLLABICS ON" #x142D) + ("CANADIAN SYLLABICS AN" #x142E) + ("CANADIAN SYLLABICS PE" #x142F) + ("CANADIAN SYLLABICS PAAI" #x1430) + ("CANADIAN SYLLABICS PI" #x1431) + ("CANADIAN SYLLABICS PII" #x1432) + ("CANADIAN SYLLABICS PO" #x1433) + ("CANADIAN SYLLABICS POO" #x1434) + ("CANADIAN SYLLABICS Y-CREE POO" #x1435) + ("CANADIAN SYLLABICS CARRIER HEE" #x1436) + ("CANADIAN SYLLABICS CARRIER HI" #x1437) + ("CANADIAN SYLLABICS PA" #x1438) + ("CANADIAN SYLLABICS PAA" #x1439) + ("CANADIAN SYLLABICS PWE" #x143A) + ("CANADIAN SYLLABICS WEST-CREE PWE" #x143B) + ("CANADIAN SYLLABICS PWI" #x143C) + ("CANADIAN SYLLABICS WEST-CREE PWI" #x143D) + ("CANADIAN SYLLABICS PWII" #x143E) + ("CANADIAN SYLLABICS WEST-CREE PWII" #x143F) + ("CANADIAN SYLLABICS PWO" #x1440) + ("CANADIAN SYLLABICS WEST-CREE PWO" #x1441) + ("CANADIAN SYLLABICS PWOO" #x1442) + ("CANADIAN SYLLABICS WEST-CREE PWOO" #x1443) + ("CANADIAN SYLLABICS PWA" #x1444) + ("CANADIAN SYLLABICS WEST-CREE PWA" #x1445) + ("CANADIAN SYLLABICS PWAA" #x1446) + ("CANADIAN SYLLABICS WEST-CREE PWAA" #x1447) + ("CANADIAN SYLLABICS Y-CREE PWAA" #x1448) + ("CANADIAN SYLLABICS P" #x1449) + ("CANADIAN SYLLABICS WEST-CREE P" #x144A) + ("CANADIAN SYLLABICS CARRIER H" #x144B) + ("CANADIAN SYLLABICS TE" #x144C) + ("CANADIAN SYLLABICS TAAI" #x144D) + ("CANADIAN SYLLABICS TI" #x144E) + ("CANADIAN SYLLABICS TII" #x144F) + ("CANADIAN SYLLABICS TO" #x1450) + ("CANADIAN SYLLABICS TOO" #x1451) + ("CANADIAN SYLLABICS Y-CREE TOO" #x1452) + ("CANADIAN SYLLABICS CARRIER DEE" #x1453) + ("CANADIAN SYLLABICS CARRIER DI" #x1454) + ("CANADIAN SYLLABICS TA" #x1455) + ("CANADIAN SYLLABICS TAA" #x1456) + ("CANADIAN SYLLABICS TWE" #x1457) + ("CANADIAN SYLLABICS WEST-CREE TWE" #x1458) + ("CANADIAN SYLLABICS TWI" #x1459) + ("CANADIAN SYLLABICS WEST-CREE TWI" #x145A) + ("CANADIAN SYLLABICS TWII" #x145B) + ("CANADIAN SYLLABICS WEST-CREE TWII" #x145C) + ("CANADIAN SYLLABICS TWO" #x145D) + ("CANADIAN SYLLABICS WEST-CREE TWO" #x145E) + ("CANADIAN SYLLABICS TWOO" #x145F) + ("CANADIAN SYLLABICS WEST-CREE TWOO" #x1460) + ("CANADIAN SYLLABICS TWA" #x1461) + ("CANADIAN SYLLABICS WEST-CREE TWA" #x1462) + ("CANADIAN SYLLABICS TWAA" #x1463) + ("CANADIAN SYLLABICS WEST-CREE TWAA" #x1464) + ("CANADIAN SYLLABICS NASKAPI TWAA" #x1465) + ("CANADIAN SYLLABICS T" #x1466) + ("CANADIAN SYLLABICS TTE" #x1467) + ("CANADIAN SYLLABICS TTI" #x1468) + ("CANADIAN SYLLABICS TTO" #x1469) + ("CANADIAN SYLLABICS TTA" #x146A) + ("CANADIAN SYLLABICS KE" #x146B) + ("CANADIAN SYLLABICS KAAI" #x146C) + ("CANADIAN SYLLABICS KI" #x146D) + ("CANADIAN SYLLABICS KII" #x146E) + ("CANADIAN SYLLABICS KO" #x146F) + ("CANADIAN SYLLABICS KOO" #x1470) + ("CANADIAN SYLLABICS Y-CREE KOO" #x1471) + ("CANADIAN SYLLABICS KA" #x1472) + ("CANADIAN SYLLABICS KAA" #x1473) + ("CANADIAN SYLLABICS KWE" #x1474) + ("CANADIAN SYLLABICS WEST-CREE KWE" #x1475) + ("CANADIAN SYLLABICS KWI" #x1476) + ("CANADIAN SYLLABICS WEST-CREE KWI" #x1477) + ("CANADIAN SYLLABICS KWII" #x1478) + ("CANADIAN SYLLABICS WEST-CREE KWII" #x1479) + ("CANADIAN SYLLABICS KWO" #x147A) + ("CANADIAN SYLLABICS WEST-CREE KWO" #x147B) + ("CANADIAN SYLLABICS KWOO" #x147C) + ("CANADIAN SYLLABICS WEST-CREE KWOO" #x147D) + ("CANADIAN SYLLABICS KWA" #x147E) + ("CANADIAN SYLLABICS WEST-CREE KWA" #x147F) + ("CANADIAN SYLLABICS KWAA" #x1480) + ("CANADIAN SYLLABICS WEST-CREE KWAA" #x1481) + ("CANADIAN SYLLABICS NASKAPI KWAA" #x1482) + ("CANADIAN SYLLABICS K" #x1483) + ("CANADIAN SYLLABICS KW" #x1484) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KEH" #x1485) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KIH" #x1486) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KOH" #x1487) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KAH" #x1488) + ("CANADIAN SYLLABICS CE" #x1489) + ("CANADIAN SYLLABICS CAAI" #x148A) + ("CANADIAN SYLLABICS CI" #x148B) + ("CANADIAN SYLLABICS CII" #x148C) + ("CANADIAN SYLLABICS CO" #x148D) + ("CANADIAN SYLLABICS COO" #x148E) + ("CANADIAN SYLLABICS Y-CREE COO" #x148F) + ("CANADIAN SYLLABICS CA" #x1490) + ("CANADIAN SYLLABICS CAA" #x1491) + ("CANADIAN SYLLABICS CWE" #x1492) + ("CANADIAN SYLLABICS WEST-CREE CWE" #x1493) + ("CANADIAN SYLLABICS CWI" #x1494) + ("CANADIAN SYLLABICS WEST-CREE CWI" #x1495) + ("CANADIAN SYLLABICS CWII" #x1496) + ("CANADIAN SYLLABICS WEST-CREE CWII" #x1497) + ("CANADIAN SYLLABICS CWO" #x1498) + ("CANADIAN SYLLABICS WEST-CREE CWO" #x1499) + ("CANADIAN SYLLABICS CWOO" #x149A) + ("CANADIAN SYLLABICS WEST-CREE CWOO" #x149B) + ("CANADIAN SYLLABICS CWA" #x149C) + ("CANADIAN SYLLABICS WEST-CREE CWA" #x149D) + ("CANADIAN SYLLABICS CWAA" #x149E) + ("CANADIAN SYLLABICS WEST-CREE CWAA" #x149F) + ("CANADIAN SYLLABICS NASKAPI CWAA" #x14A0) + ("CANADIAN SYLLABICS C" #x14A1) + ("CANADIAN SYLLABICS SAYISI TH" #x14A2) + ("CANADIAN SYLLABICS ME" #x14A3) + ("CANADIAN SYLLABICS MAAI" #x14A4) + ("CANADIAN SYLLABICS MI" #x14A5) + ("CANADIAN SYLLABICS MII" #x14A6) + ("CANADIAN SYLLABICS MO" #x14A7) + ("CANADIAN SYLLABICS MOO" #x14A8) + ("CANADIAN SYLLABICS Y-CREE MOO" #x14A9) + ("CANADIAN SYLLABICS MA" #x14AA) + ("CANADIAN SYLLABICS MAA" #x14AB) + ("CANADIAN SYLLABICS MWE" #x14AC) + ("CANADIAN SYLLABICS WEST-CREE MWE" #x14AD) + ("CANADIAN SYLLABICS MWI" #x14AE) + ("CANADIAN SYLLABICS WEST-CREE MWI" #x14AF) + ("CANADIAN SYLLABICS MWII" #x14B0) + ("CANADIAN SYLLABICS WEST-CREE MWII" #x14B1) + ("CANADIAN SYLLABICS MWO" #x14B2) + ("CANADIAN SYLLABICS WEST-CREE MWO" #x14B3) + ("CANADIAN SYLLABICS MWOO" #x14B4) + ("CANADIAN SYLLABICS WEST-CREE MWOO" #x14B5) + ("CANADIAN SYLLABICS MWA" #x14B6) + ("CANADIAN SYLLABICS WEST-CREE MWA" #x14B7) + ("CANADIAN SYLLABICS MWAA" #x14B8) + ("CANADIAN SYLLABICS WEST-CREE MWAA" #x14B9) + ("CANADIAN SYLLABICS NASKAPI MWAA" #x14BA) + ("CANADIAN SYLLABICS M" #x14BB) + ("CANADIAN SYLLABICS WEST-CREE M" #x14BC) + ("CANADIAN SYLLABICS MH" #x14BD) + ("CANADIAN SYLLABICS ATHAPASCAN M" #x14BE) + ("CANADIAN SYLLABICS SAYISI M" #x14BF) + ("CANADIAN SYLLABICS NE" #x14C0) + ("CANADIAN SYLLABICS NAAI" #x14C1) + ("CANADIAN SYLLABICS NI" #x14C2) + ("CANADIAN SYLLABICS NII" #x14C3) + ("CANADIAN SYLLABICS NO" #x14C4) + ("CANADIAN SYLLABICS NOO" #x14C5) + ("CANADIAN SYLLABICS Y-CREE NOO" #x14C6) + ("CANADIAN SYLLABICS NA" #x14C7) + ("CANADIAN SYLLABICS NAA" #x14C8) + ("CANADIAN SYLLABICS NWE" #x14C9) + ("CANADIAN SYLLABICS WEST-CREE NWE" #x14CA) + ("CANADIAN SYLLABICS NWA" #x14CB) + ("CANADIAN SYLLABICS WEST-CREE NWA" #x14CC) + ("CANADIAN SYLLABICS NWAA" #x14CD) + ("CANADIAN SYLLABICS WEST-CREE NWAA" #x14CE) + ("CANADIAN SYLLABICS NASKAPI NWAA" #x14CF) + ("CANADIAN SYLLABICS N" #x14D0) + ("CANADIAN SYLLABICS CARRIER NG" #x14D1) + ("CANADIAN SYLLABICS NH" #x14D2) + ("CANADIAN SYLLABICS LE" #x14D3) + ("CANADIAN SYLLABICS LAAI" #x14D4) + ("CANADIAN SYLLABICS LI" #x14D5) + ("CANADIAN SYLLABICS LII" #x14D6) + ("CANADIAN SYLLABICS LO" #x14D7) + ("CANADIAN SYLLABICS LOO" #x14D8) + ("CANADIAN SYLLABICS Y-CREE LOO" #x14D9) + ("CANADIAN SYLLABICS LA" #x14DA) + ("CANADIAN SYLLABICS LAA" #x14DB) + ("CANADIAN SYLLABICS LWE" #x14DC) + ("CANADIAN SYLLABICS WEST-CREE LWE" #x14DD) + ("CANADIAN SYLLABICS LWI" #x14DE) + ("CANADIAN SYLLABICS WEST-CREE LWI" #x14DF) + ("CANADIAN SYLLABICS LWII" #x14E0) + ("CANADIAN SYLLABICS WEST-CREE LWII" #x14E1) + ("CANADIAN SYLLABICS LWO" #x14E2) + ("CANADIAN SYLLABICS WEST-CREE LWO" #x14E3) + ("CANADIAN SYLLABICS LWOO" #x14E4) + ("CANADIAN SYLLABICS WEST-CREE LWOO" #x14E5) + ("CANADIAN SYLLABICS LWA" #x14E6) + ("CANADIAN SYLLABICS WEST-CREE LWA" #x14E7) + ("CANADIAN SYLLABICS LWAA" #x14E8) + ("CANADIAN SYLLABICS WEST-CREE LWAA" #x14E9) + ("CANADIAN SYLLABICS L" #x14EA) + ("CANADIAN SYLLABICS WEST-CREE L" #x14EB) + ("CANADIAN SYLLABICS MEDIAL L" #x14EC) + ("CANADIAN SYLLABICS SE" #x14ED) + ("CANADIAN SYLLABICS SAAI" #x14EE) + ("CANADIAN SYLLABICS SI" #x14EF) + ("CANADIAN SYLLABICS SII" #x14F0) + ("CANADIAN SYLLABICS SO" #x14F1) + ("CANADIAN SYLLABICS SOO" #x14F2) + ("CANADIAN SYLLABICS Y-CREE SOO" #x14F3) + ("CANADIAN SYLLABICS SA" #x14F4) + ("CANADIAN SYLLABICS SAA" #x14F5) + ("CANADIAN SYLLABICS SWE" #x14F6) + ("CANADIAN SYLLABICS WEST-CREE SWE" #x14F7) + ("CANADIAN SYLLABICS SWI" #x14F8) + ("CANADIAN SYLLABICS WEST-CREE SWI" #x14F9) + ("CANADIAN SYLLABICS SWII" #x14FA) + ("CANADIAN SYLLABICS WEST-CREE SWII" #x14FB) + ("CANADIAN SYLLABICS SWO" #x14FC) + ("CANADIAN SYLLABICS WEST-CREE SWO" #x14FD) + ("CANADIAN SYLLABICS SWOO" #x14FE) + ("CANADIAN SYLLABICS WEST-CREE SWOO" #x14FF) + ("CANADIAN SYLLABICS SWA" #x1500) + ("CANADIAN SYLLABICS WEST-CREE SWA" #x1501) + ("CANADIAN SYLLABICS SWAA" #x1502) + ("CANADIAN SYLLABICS WEST-CREE SWAA" #x1503) + ("CANADIAN SYLLABICS NASKAPI SWAA" #x1504) + ("CANADIAN SYLLABICS S" #x1505) + ("CANADIAN SYLLABICS ATHAPASCAN S" #x1506) + ("CANADIAN SYLLABICS SW" #x1507) + ("CANADIAN SYLLABICS BLACKFOOT S" #x1508) + ("CANADIAN SYLLABICS MOOSE-CREE SK" #x1509) + ("CANADIAN SYLLABICS NASKAPI SKW" #x150A) + ("CANADIAN SYLLABICS NASKAPI S-W" #x150B) + ("CANADIAN SYLLABICS NASKAPI SPWA" #x150C) + ("CANADIAN SYLLABICS NASKAPI STWA" #x150D) + ("CANADIAN SYLLABICS NASKAPI SKWA" #x150E) + ("CANADIAN SYLLABICS NASKAPI SCWA" #x150F) + ("CANADIAN SYLLABICS SHE" #x1510) + ("CANADIAN SYLLABICS SHI" #x1511) + ("CANADIAN SYLLABICS SHII" #x1512) + ("CANADIAN SYLLABICS SHO" #x1513) + ("CANADIAN SYLLABICS SHOO" #x1514) + ("CANADIAN SYLLABICS SHA" #x1515) + ("CANADIAN SYLLABICS SHAA" #x1516) + ("CANADIAN SYLLABICS SHWE" #x1517) + ("CANADIAN SYLLABICS WEST-CREE SHWE" #x1518) + ("CANADIAN SYLLABICS SHWI" #x1519) + ("CANADIAN SYLLABICS WEST-CREE SHWI" #x151A) + ("CANADIAN SYLLABICS SHWII" #x151B) + ("CANADIAN SYLLABICS WEST-CREE SHWII" #x151C) + ("CANADIAN SYLLABICS SHWO" #x151D) + ("CANADIAN SYLLABICS WEST-CREE SHWO" #x151E) + ("CANADIAN SYLLABICS SHWOO" #x151F) + ("CANADIAN SYLLABICS WEST-CREE SHWOO" #x1520) + ("CANADIAN SYLLABICS SHWA" #x1521) + ("CANADIAN SYLLABICS WEST-CREE SHWA" #x1522) + ("CANADIAN SYLLABICS SHWAA" #x1523) + ("CANADIAN SYLLABICS WEST-CREE SHWAA" #x1524) + ("CANADIAN SYLLABICS SH" #x1525) + ("CANADIAN SYLLABICS YE" #x1526) + ("CANADIAN SYLLABICS YAAI" #x1527) + ("CANADIAN SYLLABICS YI" #x1528) + ("CANADIAN SYLLABICS YII" #x1529) + ("CANADIAN SYLLABICS YO" #x152A) + ("CANADIAN SYLLABICS YOO" #x152B) + ("CANADIAN SYLLABICS Y-CREE YOO" #x152C) + ("CANADIAN SYLLABICS YA" #x152D) + ("CANADIAN SYLLABICS YAA" #x152E) + ("CANADIAN SYLLABICS YWE" #x152F) + ("CANADIAN SYLLABICS WEST-CREE YWE" #x1530) + ("CANADIAN SYLLABICS YWI" #x1531) + ("CANADIAN SYLLABICS WEST-CREE YWI" #x1532) + ("CANADIAN SYLLABICS YWII" #x1533) + ("CANADIAN SYLLABICS WEST-CREE YWII" #x1534) + ("CANADIAN SYLLABICS YWO" #x1535) + ("CANADIAN SYLLABICS WEST-CREE YWO" #x1536) + ("CANADIAN SYLLABICS YWOO" #x1537) + ("CANADIAN SYLLABICS WEST-CREE YWOO" #x1538) + ("CANADIAN SYLLABICS YWA" #x1539) + ("CANADIAN SYLLABICS WEST-CREE YWA" #x153A) + ("CANADIAN SYLLABICS YWAA" #x153B) + ("CANADIAN SYLLABICS WEST-CREE YWAA" #x153C) + ("CANADIAN SYLLABICS NASKAPI YWAA" #x153D) + ("CANADIAN SYLLABICS Y" #x153E) + ("CANADIAN SYLLABICS BIBLE-CREE Y" #x153F) + ("CANADIAN SYLLABICS WEST-CREE Y" #x1540) + ("CANADIAN SYLLABICS SAYISI YI" #x1541) + ("CANADIAN SYLLABICS RE" #x1542) + ("CANADIAN SYLLABICS R-CREE RE" #x1543) + ("CANADIAN SYLLABICS WEST-CREE LE" #x1544) + ("CANADIAN SYLLABICS RAAI" #x1545) + ("CANADIAN SYLLABICS RI" #x1546) + ("CANADIAN SYLLABICS RII" #x1547) + ("CANADIAN SYLLABICS RO" #x1548) + ("CANADIAN SYLLABICS ROO" #x1549) + ("CANADIAN SYLLABICS WEST-CREE LO" #x154A) + ("CANADIAN SYLLABICS RA" #x154B) + ("CANADIAN SYLLABICS RAA" #x154C) + ("CANADIAN SYLLABICS WEST-CREE LA" #x154D) + ("CANADIAN SYLLABICS RWAA" #x154E) + ("CANADIAN SYLLABICS WEST-CREE RWAA" #x154F) + ("CANADIAN SYLLABICS R" #x1550) + ("CANADIAN SYLLABICS WEST-CREE R" #x1551) + ("CANADIAN SYLLABICS MEDIAL R" #x1552) + ("CANADIAN SYLLABICS FE" #x1553) + ("CANADIAN SYLLABICS FAAI" #x1554) + ("CANADIAN SYLLABICS FI" #x1555) + ("CANADIAN SYLLABICS FII" #x1556) + ("CANADIAN SYLLABICS FO" #x1557) + ("CANADIAN SYLLABICS FOO" #x1558) + ("CANADIAN SYLLABICS FA" #x1559) + ("CANADIAN SYLLABICS FAA" #x155A) + ("CANADIAN SYLLABICS FWAA" #x155B) + ("CANADIAN SYLLABICS WEST-CREE FWAA" #x155C) + ("CANADIAN SYLLABICS F" #x155D) + ("CANADIAN SYLLABICS THE" #x155E) + ("CANADIAN SYLLABICS N-CREE THE" #x155F) + ("CANADIAN SYLLABICS THI" #x1560) + ("CANADIAN SYLLABICS N-CREE THI" #x1561) + ("CANADIAN SYLLABICS THII" #x1562) + ("CANADIAN SYLLABICS N-CREE THII" #x1563) + ("CANADIAN SYLLABICS THO" #x1564) + ("CANADIAN SYLLABICS THOO" #x1565) + ("CANADIAN SYLLABICS THA" #x1566) + ("CANADIAN SYLLABICS THAA" #x1567) + ("CANADIAN SYLLABICS THWAA" #x1568) + ("CANADIAN SYLLABICS WEST-CREE THWAA" #x1569) + ("CANADIAN SYLLABICS TH" #x156A) + ("CANADIAN SYLLABICS TTHE" #x156B) + ("CANADIAN SYLLABICS TTHI" #x156C) + ("CANADIAN SYLLABICS TTHO" #x156D) + ("CANADIAN SYLLABICS TTHA" #x156E) + ("CANADIAN SYLLABICS TTH" #x156F) + ("CANADIAN SYLLABICS TYE" #x1570) + ("CANADIAN SYLLABICS TYI" #x1571) + ("CANADIAN SYLLABICS TYO" #x1572) + ("CANADIAN SYLLABICS TYA" #x1573) + ("CANADIAN SYLLABICS NUNAVIK HE" #x1574) + ("CANADIAN SYLLABICS NUNAVIK HI" #x1575) + ("CANADIAN SYLLABICS NUNAVIK HII" #x1576) + ("CANADIAN SYLLABICS NUNAVIK HO" #x1577) + ("CANADIAN SYLLABICS NUNAVIK HOO" #x1578) + ("CANADIAN SYLLABICS NUNAVIK HA" #x1579) + ("CANADIAN SYLLABICS NUNAVIK HAA" #x157A) + ("CANADIAN SYLLABICS NUNAVIK H" #x157B) + ("CANADIAN SYLLABICS NUNAVUT H" #x157C) + ("CANADIAN SYLLABICS HK" #x157D) + ("CANADIAN SYLLABICS QAAI" #x157E) + ("CANADIAN SYLLABICS QI" #x157F) + ("CANADIAN SYLLABICS QII" #x1580) + ("CANADIAN SYLLABICS QO" #x1581) + ("CANADIAN SYLLABICS QOO" #x1582) + ("CANADIAN SYLLABICS QA" #x1583) + ("CANADIAN SYLLABICS QAA" #x1584) + ("CANADIAN SYLLABICS Q" #x1585) + ("CANADIAN SYLLABICS TLHE" #x1586) + ("CANADIAN SYLLABICS TLHI" #x1587) + ("CANADIAN SYLLABICS TLHO" #x1588) + ("CANADIAN SYLLABICS TLHA" #x1589) + ("CANADIAN SYLLABICS WEST-CREE RE" #x158A) + ("CANADIAN SYLLABICS WEST-CREE RI" #x158B) + ("CANADIAN SYLLABICS WEST-CREE RO" #x158C) + ("CANADIAN SYLLABICS WEST-CREE RA" #x158D) + ("CANADIAN SYLLABICS NGAAI" #x158E) + ("CANADIAN SYLLABICS NGI" #x158F) + ("CANADIAN SYLLABICS NGII" #x1590) + ("CANADIAN SYLLABICS NGO" #x1591) + ("CANADIAN SYLLABICS NGOO" #x1592) + ("CANADIAN SYLLABICS NGA" #x1593) + ("CANADIAN SYLLABICS NGAA" #x1594) + ("CANADIAN SYLLABICS NG" #x1595) + ("CANADIAN SYLLABICS NNG" #x1596) + ("CANADIAN SYLLABICS SAYISI SHE" #x1597) + ("CANADIAN SYLLABICS SAYISI SHI" #x1598) + ("CANADIAN SYLLABICS SAYISI SHO" #x1599) + ("CANADIAN SYLLABICS SAYISI SHA" #x159A) + ("CANADIAN SYLLABICS WOODS-CREE THE" #x159B) + ("CANADIAN SYLLABICS WOODS-CREE THI" #x159C) + ("CANADIAN SYLLABICS WOODS-CREE THO" #x159D) + ("CANADIAN SYLLABICS WOODS-CREE THA" #x159E) + ("CANADIAN SYLLABICS WOODS-CREE TH" #x159F) + ("CANADIAN SYLLABICS LHI" #x15A0) + ("CANADIAN SYLLABICS LHII" #x15A1) + ("CANADIAN SYLLABICS LHO" #x15A2) + ("CANADIAN SYLLABICS LHOO" #x15A3) + ("CANADIAN SYLLABICS LHA" #x15A4) + ("CANADIAN SYLLABICS LHAA" #x15A5) + ("CANADIAN SYLLABICS LH" #x15A6) + ("CANADIAN SYLLABICS TH-CREE THE" #x15A7) + ("CANADIAN SYLLABICS TH-CREE THI" #x15A8) + ("CANADIAN SYLLABICS TH-CREE THII" #x15A9) + ("CANADIAN SYLLABICS TH-CREE THO" #x15AA) + ("CANADIAN SYLLABICS TH-CREE THOO" #x15AB) + ("CANADIAN SYLLABICS TH-CREE THA" #x15AC) + ("CANADIAN SYLLABICS TH-CREE THAA" #x15AD) + ("CANADIAN SYLLABICS TH-CREE TH" #x15AE) + ("CANADIAN SYLLABICS AIVILIK B" #x15AF) + ("CANADIAN SYLLABICS BLACKFOOT E" #x15B0) + ("CANADIAN SYLLABICS BLACKFOOT I" #x15B1) + ("CANADIAN SYLLABICS BLACKFOOT O" #x15B2) + ("CANADIAN SYLLABICS BLACKFOOT A" #x15B3) + ("CANADIAN SYLLABICS BLACKFOOT WE" #x15B4) + ("CANADIAN SYLLABICS BLACKFOOT WI" #x15B5) + ("CANADIAN SYLLABICS BLACKFOOT WO" #x15B6) + ("CANADIAN SYLLABICS BLACKFOOT WA" #x15B7) + ("CANADIAN SYLLABICS BLACKFOOT NE" #x15B8) + ("CANADIAN SYLLABICS BLACKFOOT NI" #x15B9) + ("CANADIAN SYLLABICS BLACKFOOT NO" #x15BA) + ("CANADIAN SYLLABICS BLACKFOOT NA" #x15BB) + ("CANADIAN SYLLABICS BLACKFOOT KE" #x15BC) + ("CANADIAN SYLLABICS BLACKFOOT KI" #x15BD) + ("CANADIAN SYLLABICS BLACKFOOT KO" #x15BE) + ("CANADIAN SYLLABICS BLACKFOOT KA" #x15BF) + ("CANADIAN SYLLABICS SAYISI HE" #x15C0) + ("CANADIAN SYLLABICS SAYISI HI" #x15C1) + ("CANADIAN SYLLABICS SAYISI HO" #x15C2) + ("CANADIAN SYLLABICS SAYISI HA" #x15C3) + ("CANADIAN SYLLABICS CARRIER GHU" #x15C4) + ("CANADIAN SYLLABICS CARRIER GHO" #x15C5) + ("CANADIAN SYLLABICS CARRIER GHE" #x15C6) + ("CANADIAN SYLLABICS CARRIER GHEE" #x15C7) + ("CANADIAN SYLLABICS CARRIER GHI" #x15C8) + ("CANADIAN SYLLABICS CARRIER GHA" #x15C9) + ("CANADIAN SYLLABICS CARRIER RU" #x15CA) + ("CANADIAN SYLLABICS CARRIER RO" #x15CB) + ("CANADIAN SYLLABICS CARRIER RE" #x15CC) + ("CANADIAN SYLLABICS CARRIER REE" #x15CD) + ("CANADIAN SYLLABICS CARRIER RI" #x15CE) + ("CANADIAN SYLLABICS CARRIER RA" #x15CF) + ("CANADIAN SYLLABICS CARRIER WU" #x15D0) + ("CANADIAN SYLLABICS CARRIER WO" #x15D1) + ("CANADIAN SYLLABICS CARRIER WE" #x15D2) + ("CANADIAN SYLLABICS CARRIER WEE" #x15D3) + ("CANADIAN SYLLABICS CARRIER WI" #x15D4) + ("CANADIAN SYLLABICS CARRIER WA" #x15D5) + ("CANADIAN SYLLABICS CARRIER HWU" #x15D6) + ("CANADIAN SYLLABICS CARRIER HWO" #x15D7) + ("CANADIAN SYLLABICS CARRIER HWE" #x15D8) + ("CANADIAN SYLLABICS CARRIER HWEE" #x15D9) + ("CANADIAN SYLLABICS CARRIER HWI" #x15DA) + ("CANADIAN SYLLABICS CARRIER HWA" #x15DB) + ("CANADIAN SYLLABICS CARRIER THU" #x15DC) + ("CANADIAN SYLLABICS CARRIER THO" #x15DD) + ("CANADIAN SYLLABICS CARRIER THE" #x15DE) + ("CANADIAN SYLLABICS CARRIER THEE" #x15DF) + ("CANADIAN SYLLABICS CARRIER THI" #x15E0) + ("CANADIAN SYLLABICS CARRIER THA" #x15E1) + ("CANADIAN SYLLABICS CARRIER TTU" #x15E2) + ("CANADIAN SYLLABICS CARRIER TTO" #x15E3) + ("CANADIAN SYLLABICS CARRIER TTE" #x15E4) + ("CANADIAN SYLLABICS CARRIER TTEE" #x15E5) + ("CANADIAN SYLLABICS CARRIER TTI" #x15E6) + ("CANADIAN SYLLABICS CARRIER TTA" #x15E7) + ("CANADIAN SYLLABICS CARRIER PU" #x15E8) + ("CANADIAN SYLLABICS CARRIER PO" #x15E9) + ("CANADIAN SYLLABICS CARRIER PE" #x15EA) + ("CANADIAN SYLLABICS CARRIER PEE" #x15EB) + ("CANADIAN SYLLABICS CARRIER PI" #x15EC) + ("CANADIAN SYLLABICS CARRIER PA" #x15ED) + ("CANADIAN SYLLABICS CARRIER P" #x15EE) + ("CANADIAN SYLLABICS CARRIER GU" #x15EF) + ("CANADIAN SYLLABICS CARRIER GO" #x15F0) + ("CANADIAN SYLLABICS CARRIER GE" #x15F1) + ("CANADIAN SYLLABICS CARRIER GEE" #x15F2) + ("CANADIAN SYLLABICS CARRIER GI" #x15F3) + ("CANADIAN SYLLABICS CARRIER GA" #x15F4) + ("CANADIAN SYLLABICS CARRIER KHU" #x15F5) + ("CANADIAN SYLLABICS CARRIER KHO" #x15F6) + ("CANADIAN SYLLABICS CARRIER KHE" #x15F7) + ("CANADIAN SYLLABICS CARRIER KHEE" #x15F8) + ("CANADIAN SYLLABICS CARRIER KHI" #x15F9) + ("CANADIAN SYLLABICS CARRIER KHA" #x15FA) + ("CANADIAN SYLLABICS CARRIER KKU" #x15FB) + ("CANADIAN SYLLABICS CARRIER KKO" #x15FC) + ("CANADIAN SYLLABICS CARRIER KKE" #x15FD) + ("CANADIAN SYLLABICS CARRIER KKEE" #x15FE) + ("CANADIAN SYLLABICS CARRIER KKI" #x15FF) + ("CANADIAN SYLLABICS CARRIER KKA" #x1600) + ("CANADIAN SYLLABICS CARRIER KK" #x1601) + ("CANADIAN SYLLABICS CARRIER NU" #x1602) + ("CANADIAN SYLLABICS CARRIER NO" #x1603) + ("CANADIAN SYLLABICS CARRIER NE" #x1604) + ("CANADIAN SYLLABICS CARRIER NEE" #x1605) + ("CANADIAN SYLLABICS CARRIER NI" #x1606) + ("CANADIAN SYLLABICS CARRIER NA" #x1607) + ("CANADIAN SYLLABICS CARRIER MU" #x1608) + ("CANADIAN SYLLABICS CARRIER MO" #x1609) + ("CANADIAN SYLLABICS CARRIER ME" #x160A) + ("CANADIAN SYLLABICS CARRIER MEE" #x160B) + ("CANADIAN SYLLABICS CARRIER MI" #x160C) + ("CANADIAN SYLLABICS CARRIER MA" #x160D) + ("CANADIAN SYLLABICS CARRIER YU" #x160E) + ("CANADIAN SYLLABICS CARRIER YO" #x160F) + ("CANADIAN SYLLABICS CARRIER YE" #x1610) + ("CANADIAN SYLLABICS CARRIER YEE" #x1611) + ("CANADIAN SYLLABICS CARRIER YI" #x1612) + ("CANADIAN SYLLABICS CARRIER YA" #x1613) + ("CANADIAN SYLLABICS CARRIER JU" #x1614) + ("CANADIAN SYLLABICS SAYISI JU" #x1615) + ("CANADIAN SYLLABICS CARRIER JO" #x1616) + ("CANADIAN SYLLABICS CARRIER JE" #x1617) + ("CANADIAN SYLLABICS CARRIER JEE" #x1618) + ("CANADIAN SYLLABICS CARRIER JI" #x1619) + ("CANADIAN SYLLABICS SAYISI JI" #x161A) + ("CANADIAN SYLLABICS CARRIER JA" #x161B) + ("CANADIAN SYLLABICS CARRIER JJU" #x161C) + ("CANADIAN SYLLABICS CARRIER JJO" #x161D) + ("CANADIAN SYLLABICS CARRIER JJE" #x161E) + ("CANADIAN SYLLABICS CARRIER JJEE" #x161F) + ("CANADIAN SYLLABICS CARRIER JJI" #x1620) + ("CANADIAN SYLLABICS CARRIER JJA" #x1621) + ("CANADIAN SYLLABICS CARRIER LU" #x1622) + ("CANADIAN SYLLABICS CARRIER LO" #x1623) + ("CANADIAN SYLLABICS CARRIER LE" #x1624) + ("CANADIAN SYLLABICS CARRIER LEE" #x1625) + ("CANADIAN SYLLABICS CARRIER LI" #x1626) + ("CANADIAN SYLLABICS CARRIER LA" #x1627) + ("CANADIAN SYLLABICS CARRIER DLU" #x1628) + ("CANADIAN SYLLABICS CARRIER DLO" #x1629) + ("CANADIAN SYLLABICS CARRIER DLE" #x162A) + ("CANADIAN SYLLABICS CARRIER DLEE" #x162B) + ("CANADIAN SYLLABICS CARRIER DLI" #x162C) + ("CANADIAN SYLLABICS CARRIER DLA" #x162D) + ("CANADIAN SYLLABICS CARRIER LHU" #x162E) + ("CANADIAN SYLLABICS CARRIER LHO" #x162F) + ("CANADIAN SYLLABICS CARRIER LHE" #x1630) + ("CANADIAN SYLLABICS CARRIER LHEE" #x1631) + ("CANADIAN SYLLABICS CARRIER LHI" #x1632) + ("CANADIAN SYLLABICS CARRIER LHA" #x1633) + ("CANADIAN SYLLABICS CARRIER TLHU" #x1634) + ("CANADIAN SYLLABICS CARRIER TLHO" #x1635) + ("CANADIAN SYLLABICS CARRIER TLHE" #x1636) + ("CANADIAN SYLLABICS CARRIER TLHEE" #x1637) + ("CANADIAN SYLLABICS CARRIER TLHI" #x1638) + ("CANADIAN SYLLABICS CARRIER TLHA" #x1639) + ("CANADIAN SYLLABICS CARRIER TLU" #x163A) + ("CANADIAN SYLLABICS CARRIER TLO" #x163B) + ("CANADIAN SYLLABICS CARRIER TLE" #x163C) + ("CANADIAN SYLLABICS CARRIER TLEE" #x163D) + ("CANADIAN SYLLABICS CARRIER TLI" #x163E) + ("CANADIAN SYLLABICS CARRIER TLA" #x163F) + ("CANADIAN SYLLABICS CARRIER ZU" #x1640) + ("CANADIAN SYLLABICS CARRIER ZO" #x1641) + ("CANADIAN SYLLABICS CARRIER ZE" #x1642) + ("CANADIAN SYLLABICS CARRIER ZEE" #x1643) + ("CANADIAN SYLLABICS CARRIER ZI" #x1644) + ("CANADIAN SYLLABICS CARRIER ZA" #x1645) + ("CANADIAN SYLLABICS CARRIER Z" #x1646) + ("CANADIAN SYLLABICS CARRIER INITIAL Z" #x1647) + ("CANADIAN SYLLABICS CARRIER DZU" #x1648) + ("CANADIAN SYLLABICS CARRIER DZO" #x1649) + ("CANADIAN SYLLABICS CARRIER DZE" #x164A) + ("CANADIAN SYLLABICS CARRIER DZEE" #x164B) + ("CANADIAN SYLLABICS CARRIER DZI" #x164C) + ("CANADIAN SYLLABICS CARRIER DZA" #x164D) + ("CANADIAN SYLLABICS CARRIER SU" #x164E) + ("CANADIAN SYLLABICS CARRIER SO" #x164F) + ("CANADIAN SYLLABICS CARRIER SE" #x1650) + ("CANADIAN SYLLABICS CARRIER SEE" #x1651) + ("CANADIAN SYLLABICS CARRIER SI" #x1652) + ("CANADIAN SYLLABICS CARRIER SA" #x1653) + ("CANADIAN SYLLABICS CARRIER SHU" #x1654) + ("CANADIAN SYLLABICS CARRIER SHO" #x1655) + ("CANADIAN SYLLABICS CARRIER SHE" #x1656) + ("CANADIAN SYLLABICS CARRIER SHEE" #x1657) + ("CANADIAN SYLLABICS CARRIER SHI" #x1658) + ("CANADIAN SYLLABICS CARRIER SHA" #x1659) + ("CANADIAN SYLLABICS CARRIER SH" #x165A) + ("CANADIAN SYLLABICS CARRIER TSU" #x165B) + ("CANADIAN SYLLABICS CARRIER TSO" #x165C) + ("CANADIAN SYLLABICS CARRIER TSE" #x165D) + ("CANADIAN SYLLABICS CARRIER TSEE" #x165E) + ("CANADIAN SYLLABICS CARRIER TSI" #x165F) + ("CANADIAN SYLLABICS CARRIER TSA" #x1660) + ("CANADIAN SYLLABICS CARRIER CHU" #x1661) + ("CANADIAN SYLLABICS CARRIER CHO" #x1662) + ("CANADIAN SYLLABICS CARRIER CHE" #x1663) + ("CANADIAN SYLLABICS CARRIER CHEE" #x1664) + ("CANADIAN SYLLABICS CARRIER CHI" #x1665) + ("CANADIAN SYLLABICS CARRIER CHA" #x1666) + ("CANADIAN SYLLABICS CARRIER TTSU" #x1667) + ("CANADIAN SYLLABICS CARRIER TTSO" #x1668) + ("CANADIAN SYLLABICS CARRIER TTSE" #x1669) + ("CANADIAN SYLLABICS CARRIER TTSEE" #x166A) + ("CANADIAN SYLLABICS CARRIER TTSI" #x166B) + ("CANADIAN SYLLABICS CARRIER TTSA" #x166C) + ("CANADIAN SYLLABICS CHI SIGN" #x166D) + ("CANADIAN SYLLABICS FULL STOP" #x166E) + ("CANADIAN SYLLABICS QAI" #x166F) + ("CANADIAN SYLLABICS NGAI" #x1670) + ("CANADIAN SYLLABICS NNGI" #x1671) + ("CANADIAN SYLLABICS NNGII" #x1672) + ("CANADIAN SYLLABICS NNGO" #x1673) + ("CANADIAN SYLLABICS NNGOO" #x1674) + ("CANADIAN SYLLABICS NNGA" #x1675) + ("CANADIAN SYLLABICS NNGAA" #x1676) + )) + +;; arch-tag: 7b4079a4-dea1-44b9-9699-8826b5919ad7 diff --git a/etc/nxml/01680-0169F.el b/etc/nxml/01680-0169F.el new file mode 100644 index 00000000000..52c4cce8798 --- /dev/null +++ b/etc/nxml/01680-0169F.el @@ -0,0 +1,33 @@ +(nxml-define-char-name-set 'ogham + '(("OGHAM SPACE MARK" #x1680) + ("OGHAM LETTER BEITH" #x1681) + ("OGHAM LETTER LUIS" #x1682) + ("OGHAM LETTER FEARN" #x1683) + ("OGHAM LETTER SAIL" #x1684) + ("OGHAM LETTER NION" #x1685) + ("OGHAM LETTER UATH" #x1686) + ("OGHAM LETTER DAIR" #x1687) + ("OGHAM LETTER TINNE" #x1688) + ("OGHAM LETTER COLL" #x1689) + ("OGHAM LETTER CEIRT" #x168A) + ("OGHAM LETTER MUIN" #x168B) + ("OGHAM LETTER GORT" #x168C) + ("OGHAM LETTER NGEADAL" #x168D) + ("OGHAM LETTER STRAIF" #x168E) + ("OGHAM LETTER RUIS" #x168F) + ("OGHAM LETTER AILM" #x1690) + ("OGHAM LETTER ONN" #x1691) + ("OGHAM LETTER UR" #x1692) + ("OGHAM LETTER EADHADH" #x1693) + ("OGHAM LETTER IODHADH" #x1694) + ("OGHAM LETTER EABHADH" #x1695) + ("OGHAM LETTER OR" #x1696) + ("OGHAM LETTER UILLEANN" #x1697) + ("OGHAM LETTER IFIN" #x1698) + ("OGHAM LETTER EAMHANCHOLL" #x1699) + ("OGHAM LETTER PEITH" #x169A) + ("OGHAM FEATHER MARK" #x169B) + ("OGHAM REVERSED FEATHER MARK" #x169C) + )) + +;; arch-tag: db8ea8fc-61b4-4f83-97f5-d2a952b9d8b6 diff --git a/etc/nxml/016A0-016FF.el b/etc/nxml/016A0-016FF.el new file mode 100644 index 00000000000..81f1df77c27 --- /dev/null +++ b/etc/nxml/016A0-016FF.el @@ -0,0 +1,85 @@ +(nxml-define-char-name-set 'runic + '(("RUNIC LETTER FEHU FEOH FE F" #x16A0) + ("RUNIC LETTER V" #x16A1) + ("RUNIC LETTER URUZ UR U" #x16A2) + ("RUNIC LETTER YR" #x16A3) + ("RUNIC LETTER Y" #x16A4) + ("RUNIC LETTER W" #x16A5) + ("RUNIC LETTER THURISAZ THURS THORN" #x16A6) + ("RUNIC LETTER ETH" #x16A7) + ("RUNIC LETTER ANSUZ A" #x16A8) + ("RUNIC LETTER OS O" #x16A9) + ("RUNIC LETTER AC A" #x16AA) + ("RUNIC LETTER AESC" #x16AB) + ("RUNIC LETTER LONG-BRANCH-OSS O" #x16AC) + ("RUNIC LETTER SHORT-TWIG-OSS O" #x16AD) + ("RUNIC LETTER O" #x16AE) + ("RUNIC LETTER OE" #x16AF) + ("RUNIC LETTER ON" #x16B0) + ("RUNIC LETTER RAIDO RAD REID R" #x16B1) + ("RUNIC LETTER KAUNA" #x16B2) + ("RUNIC LETTER CEN" #x16B3) + ("RUNIC LETTER KAUN K" #x16B4) + ("RUNIC LETTER G" #x16B5) + ("RUNIC LETTER ENG" #x16B6) + ("RUNIC LETTER GEBO GYFU G" #x16B7) + ("RUNIC LETTER GAR" #x16B8) + ("RUNIC LETTER WUNJO WYNN W" #x16B9) + ("RUNIC LETTER HAGLAZ H" #x16BA) + ("RUNIC LETTER HAEGL H" #x16BB) + ("RUNIC LETTER LONG-BRANCH-HAGALL H" #x16BC) + ("RUNIC LETTER SHORT-TWIG-HAGALL H" #x16BD) + ("RUNIC LETTER NAUDIZ NYD NAUD N" #x16BE) + ("RUNIC LETTER SHORT-TWIG-NAUD N" #x16BF) + ("RUNIC LETTER DOTTED-N" #x16C0) + ("RUNIC LETTER ISAZ IS ISS I" #x16C1) + ("RUNIC LETTER E" #x16C2) + ("RUNIC LETTER JERAN J" #x16C3) + ("RUNIC LETTER GER" #x16C4) + ("RUNIC LETTER LONG-BRANCH-AR AE" #x16C5) + ("RUNIC LETTER SHORT-TWIG-AR A" #x16C6) + ("RUNIC LETTER IWAZ EOH" #x16C7) + ("RUNIC LETTER PERTHO PEORTH P" #x16C8) + ("RUNIC LETTER ALGIZ EOLHX" #x16C9) + ("RUNIC LETTER SOWILO S" #x16CA) + ("RUNIC LETTER SIGEL LONG-BRANCH-SOL S" #x16CB) + ("RUNIC LETTER SHORT-TWIG-SOL S" #x16CC) + ("RUNIC LETTER C" #x16CD) + ("RUNIC LETTER Z" #x16CE) + ("RUNIC LETTER TIWAZ TIR TYR T" #x16CF) + ("RUNIC LETTER SHORT-TWIG-TYR T" #x16D0) + ("RUNIC LETTER D" #x16D1) + ("RUNIC LETTER BERKANAN BEORC BJARKAN B" #x16D2) + ("RUNIC LETTER SHORT-TWIG-BJARKAN B" #x16D3) + ("RUNIC LETTER DOTTED-P" #x16D4) + ("RUNIC LETTER OPEN-P" #x16D5) + ("RUNIC LETTER EHWAZ EH E" #x16D6) + ("RUNIC LETTER MANNAZ MAN M" #x16D7) + ("RUNIC LETTER LONG-BRANCH-MADR M" #x16D8) + ("RUNIC LETTER SHORT-TWIG-MADR M" #x16D9) + ("RUNIC LETTER LAUKAZ LAGU LOGR L" #x16DA) + ("RUNIC LETTER DOTTED-L" #x16DB) + ("RUNIC LETTER INGWAZ" #x16DC) + ("RUNIC LETTER ING" #x16DD) + ("RUNIC LETTER DAGAZ DAEG D" #x16DE) + ("RUNIC LETTER OTHALAN ETHEL O" #x16DF) + ("RUNIC LETTER EAR" #x16E0) + ("RUNIC LETTER IOR" #x16E1) + ("RUNIC LETTER CWEORTH" #x16E2) + ("RUNIC LETTER CALC" #x16E3) + ("RUNIC LETTER CEALC" #x16E4) + ("RUNIC LETTER STAN" #x16E5) + ("RUNIC LETTER LONG-BRANCH-YR" #x16E6) + ("RUNIC LETTER SHORT-TWIG-YR" #x16E7) + ("RUNIC LETTER ICELANDIC-YR" #x16E8) + ("RUNIC LETTER Q" #x16E9) + ("RUNIC LETTER X" #x16EA) + ("RUNIC SINGLE PUNCTUATION" #x16EB) + ("RUNIC MULTIPLE PUNCTUATION" #x16EC) + ("RUNIC CROSS PUNCTUATION" #x16ED) + ("RUNIC ARLAUG SYMBOL" #x16EE) + ("RUNIC TVIMADUR SYMBOL" #x16EF) + ("RUNIC BELGTHOR SYMBOL" #x16F0) + )) + +;; arch-tag: e21b5eb5-adb4-44fa-a453-995bf3c7fdc5 diff --git a/etc/nxml/01700-0171F.el b/etc/nxml/01700-0171F.el new file mode 100644 index 00000000000..06df5066a6a --- /dev/null +++ b/etc/nxml/01700-0171F.el @@ -0,0 +1,24 @@ +(nxml-define-char-name-set 'tagalog + '(("TAGALOG LETTER A" #x1700) + ("TAGALOG LETTER I" #x1701) + ("TAGALOG LETTER U" #x1702) + ("TAGALOG LETTER KA" #x1703) + ("TAGALOG LETTER GA" #x1704) + ("TAGALOG LETTER NGA" #x1705) + ("TAGALOG LETTER TA" #x1706) + ("TAGALOG LETTER DA" #x1707) + ("TAGALOG LETTER NA" #x1708) + ("TAGALOG LETTER PA" #x1709) + ("TAGALOG LETTER BA" #x170A) + ("TAGALOG LETTER MA" #x170B) + ("TAGALOG LETTER YA" #x170C) + ("TAGALOG LETTER LA" #x170E) + ("TAGALOG LETTER WA" #x170F) + ("TAGALOG LETTER SA" #x1710) + ("TAGALOG LETTER HA" #x1711) + ("TAGALOG VOWEL SIGN I" #x1712) + ("TAGALOG VOWEL SIGN U" #x1713) + ("TAGALOG SIGN VIRAMA" #x1714) + )) + +;; arch-tag: f30d4825-3942-4534-8671-5fcd71df44ba diff --git a/etc/nxml/01720-0173F.el b/etc/nxml/01720-0173F.el new file mode 100644 index 00000000000..a7530051cea --- /dev/null +++ b/etc/nxml/01720-0173F.el @@ -0,0 +1,27 @@ +(nxml-define-char-name-set 'hanunoo + '(("HANUNOO LETTER A" #x1720) + ("HANUNOO LETTER I" #x1721) + ("HANUNOO LETTER U" #x1722) + ("HANUNOO LETTER KA" #x1723) + ("HANUNOO LETTER GA" #x1724) + ("HANUNOO LETTER NGA" #x1725) + ("HANUNOO LETTER TA" #x1726) + ("HANUNOO LETTER DA" #x1727) + ("HANUNOO LETTER NA" #x1728) + ("HANUNOO LETTER PA" #x1729) + ("HANUNOO LETTER BA" #x172A) + ("HANUNOO LETTER MA" #x172B) + ("HANUNOO LETTER YA" #x172C) + ("HANUNOO LETTER RA" #x172D) + ("HANUNOO LETTER LA" #x172E) + ("HANUNOO LETTER WA" #x172F) + ("HANUNOO LETTER SA" #x1730) + ("HANUNOO LETTER HA" #x1731) + ("HANUNOO VOWEL SIGN I" #x1732) + ("HANUNOO VOWEL SIGN U" #x1733) + ("HANUNOO SIGN PAMUDPOD" #x1734) + ("PHILIPPINE SINGLE PUNCTUATION" #x1735) + ("PHILIPPINE DOUBLE PUNCTUATION" #x1736) + )) + +;; arch-tag: d577c8e1-70e3-4afc-82f4-b61e4cf0b603 diff --git a/etc/nxml/01740-0175F.el b/etc/nxml/01740-0175F.el new file mode 100644 index 00000000000..4043bcc317c --- /dev/null +++ b/etc/nxml/01740-0175F.el @@ -0,0 +1,24 @@ +(nxml-define-char-name-set 'buhid + '(("BUHID LETTER A" #x1740) + ("BUHID LETTER I" #x1741) + ("BUHID LETTER U" #x1742) + ("BUHID LETTER KA" #x1743) + ("BUHID LETTER GA" #x1744) + ("BUHID LETTER NGA" #x1745) + ("BUHID LETTER TA" #x1746) + ("BUHID LETTER DA" #x1747) + ("BUHID LETTER NA" #x1748) + ("BUHID LETTER PA" #x1749) + ("BUHID LETTER BA" #x174A) + ("BUHID LETTER MA" #x174B) + ("BUHID LETTER YA" #x174C) + ("BUHID LETTER RA" #x174D) + ("BUHID LETTER LA" #x174E) + ("BUHID LETTER WA" #x174F) + ("BUHID LETTER SA" #x1750) + ("BUHID LETTER HA" #x1751) + ("BUHID VOWEL SIGN I" #x1752) + ("BUHID VOWEL SIGN U" #x1753) + )) + +;; arch-tag: a30b6352-4c93-4908-a5df-0172b643ae23 diff --git a/etc/nxml/01760-0177F.el b/etc/nxml/01760-0177F.el new file mode 100644 index 00000000000..d6bb109d8db --- /dev/null +++ b/etc/nxml/01760-0177F.el @@ -0,0 +1,22 @@ +(nxml-define-char-name-set 'tagbanwa + '(("TAGBANWA LETTER A" #x1760) + ("TAGBANWA LETTER I" #x1761) + ("TAGBANWA LETTER U" #x1762) + ("TAGBANWA LETTER KA" #x1763) + ("TAGBANWA LETTER GA" #x1764) + ("TAGBANWA LETTER NGA" #x1765) + ("TAGBANWA LETTER TA" #x1766) + ("TAGBANWA LETTER DA" #x1767) + ("TAGBANWA LETTER NA" #x1768) + ("TAGBANWA LETTER PA" #x1769) + ("TAGBANWA LETTER BA" #x176A) + ("TAGBANWA LETTER MA" #x176B) + ("TAGBANWA LETTER YA" #x176C) + ("TAGBANWA LETTER LA" #x176E) + ("TAGBANWA LETTER WA" #x176F) + ("TAGBANWA LETTER SA" #x1770) + ("TAGBANWA VOWEL SIGN I" #x1772) + ("TAGBANWA VOWEL SIGN U" #x1773) + )) + +;; arch-tag: 7ec84a4f-8077-400f-9b1a-f31b6d75fb65 diff --git a/etc/nxml/01780-017FF.el b/etc/nxml/01780-017FF.el new file mode 100644 index 00000000000..182440e5eb1 --- /dev/null +++ b/etc/nxml/01780-017FF.el @@ -0,0 +1,107 @@ +(nxml-define-char-name-set 'khmer + '(("KHMER LETTER KA" #x1780) + ("KHMER LETTER KHA" #x1781) + ("KHMER LETTER KO" #x1782) + ("KHMER LETTER KHO" #x1783) + ("KHMER LETTER NGO" #x1784) + ("KHMER LETTER CA" #x1785) + ("KHMER LETTER CHA" #x1786) + ("KHMER LETTER CO" #x1787) + ("KHMER LETTER CHO" #x1788) + ("KHMER LETTER NYO" #x1789) + ("KHMER LETTER DA" #x178A) + ("KHMER LETTER TTHA" #x178B) + ("KHMER LETTER DO" #x178C) + ("KHMER LETTER TTHO" #x178D) + ("KHMER LETTER NNO" #x178E) + ("KHMER LETTER TA" #x178F) + ("KHMER LETTER THA" #x1790) + ("KHMER LETTER TO" #x1791) + ("KHMER LETTER THO" #x1792) + ("KHMER LETTER NO" #x1793) + ("KHMER LETTER BA" #x1794) + ("KHMER LETTER PHA" #x1795) + ("KHMER LETTER PO" #x1796) + ("KHMER LETTER PHO" #x1797) + ("KHMER LETTER MO" #x1798) + ("KHMER LETTER YO" #x1799) + ("KHMER LETTER RO" #x179A) + ("KHMER LETTER LO" #x179B) + ("KHMER LETTER VO" #x179C) + ("KHMER LETTER SHA" #x179D) + ("KHMER LETTER SSO" #x179E) + ("KHMER LETTER SA" #x179F) + ("KHMER LETTER HA" #x17A0) + ("KHMER LETTER LA" #x17A1) + ("KHMER LETTER QA" #x17A2) + ("KHMER INDEPENDENT VOWEL QAQ" #x17A3) + ("KHMER INDEPENDENT VOWEL QAA" #x17A4) + ("KHMER INDEPENDENT VOWEL QI" #x17A5) + ("KHMER INDEPENDENT VOWEL QII" #x17A6) + ("KHMER INDEPENDENT VOWEL QU" #x17A7) + ("KHMER INDEPENDENT VOWEL QUK" #x17A8) + ("KHMER INDEPENDENT VOWEL QUU" #x17A9) + ("KHMER INDEPENDENT VOWEL QUUV" #x17AA) + ("KHMER INDEPENDENT VOWEL RY" #x17AB) + ("KHMER INDEPENDENT VOWEL RYY" #x17AC) + ("KHMER INDEPENDENT VOWEL LY" #x17AD) + ("KHMER INDEPENDENT VOWEL LYY" #x17AE) + ("KHMER INDEPENDENT VOWEL QE" #x17AF) + ("KHMER INDEPENDENT VOWEL QAI" #x17B0) + ("KHMER INDEPENDENT VOWEL QOO TYPE ONE" #x17B1) + ("KHMER INDEPENDENT VOWEL QOO TYPE TWO" #x17B2) + ("KHMER INDEPENDENT VOWEL QAU" #x17B3) + ("KHMER VOWEL INHERENT AQ" #x17B4) + ("KHMER VOWEL INHERENT AA" #x17B5) + ("KHMER VOWEL SIGN AA" #x17B6) + ("KHMER VOWEL SIGN I" #x17B7) + ("KHMER VOWEL SIGN II" #x17B8) + ("KHMER VOWEL SIGN Y" #x17B9) + ("KHMER VOWEL SIGN YY" #x17BA) + ("KHMER VOWEL SIGN U" #x17BB) + ("KHMER VOWEL SIGN UU" #x17BC) + ("KHMER VOWEL SIGN UA" #x17BD) + ("KHMER VOWEL SIGN OE" #x17BE) + ("KHMER VOWEL SIGN YA" #x17BF) + ("KHMER VOWEL SIGN IE" #x17C0) + ("KHMER VOWEL SIGN E" #x17C1) + ("KHMER VOWEL SIGN AE" #x17C2) + ("KHMER VOWEL SIGN AI" #x17C3) + ("KHMER VOWEL SIGN OO" #x17C4) + ("KHMER VOWEL SIGN AU" #x17C5) + ("KHMER SIGN NIKAHIT" #x17C6) + ("KHMER SIGN REAHMUK" #x17C7) + ("KHMER SIGN YUUKALEAPINTU" #x17C8) + ("KHMER SIGN MUUSIKATOAN" #x17C9) + ("KHMER SIGN TRIISAP" #x17CA) + ("KHMER SIGN BANTOC" #x17CB) + ("KHMER SIGN ROBAT" #x17CC) + ("KHMER SIGN TOANDAKHIAT" #x17CD) + ("KHMER SIGN KAKABAT" #x17CE) + ("KHMER SIGN AHSDA" #x17CF) + ("KHMER SIGN SAMYOK SANNYA" #x17D0) + ("KHMER SIGN VIRIAM" #x17D1) + ("KHMER SIGN COENG" #x17D2) + ("KHMER SIGN BATHAMASAT" #x17D3) + ("KHMER SIGN KHAN" #x17D4) + ("KHMER SIGN BARIYOOSAN" #x17D5) + ("KHMER SIGN CAMNUC PII KUUH" #x17D6) + ("KHMER SIGN LEK TOO" #x17D7) + ("KHMER SIGN BEYYAL" #x17D8) + ("KHMER SIGN PHNAEK MUAN" #x17D9) + ("KHMER SIGN KOOMUUT" #x17DA) + ("KHMER CURRENCY SYMBOL RIEL" #x17DB) + ("KHMER SIGN AVAKRAHASANYA" #x17DC) + ("KHMER DIGIT ZERO" #x17E0) + ("KHMER DIGIT ONE" #x17E1) + ("KHMER DIGIT TWO" #x17E2) + ("KHMER DIGIT THREE" #x17E3) + ("KHMER DIGIT FOUR" #x17E4) + ("KHMER DIGIT FIVE" #x17E5) + ("KHMER DIGIT SIX" #x17E6) + ("KHMER DIGIT SEVEN" #x17E7) + ("KHMER DIGIT EIGHT" #x17E8) + ("KHMER DIGIT NINE" #x17E9) + )) + +;; arch-tag: 2d03b253-c5f2-4595-b346-36e3b87df51c diff --git a/etc/nxml/01800-018AF.el b/etc/nxml/01800-018AF.el new file mode 100644 index 00000000000..a24ec715bc4 --- /dev/null +++ b/etc/nxml/01800-018AF.el @@ -0,0 +1,159 @@ +(nxml-define-char-name-set 'mongolian + '(("MONGOLIAN BIRGA" #x1800) + ("MONGOLIAN ELLIPSIS" #x1801) + ("MONGOLIAN COMMA" #x1802) + ("MONGOLIAN FULL STOP" #x1803) + ("MONGOLIAN COLON" #x1804) + ("MONGOLIAN FOUR DOTS" #x1805) + ("MONGOLIAN TODO SOFT HYPHEN" #x1806) + ("MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER" #x1807) + ("MONGOLIAN MANCHU COMMA" #x1808) + ("MONGOLIAN MANCHU FULL STOP" #x1809) + ("MONGOLIAN NIRUGU" #x180A) + ("MONGOLIAN FREE VARIATION SELECTOR ONE" #x180B) + ("MONGOLIAN FREE VARIATION SELECTOR TWO" #x180C) + ("MONGOLIAN FREE VARIATION SELECTOR THREE" #x180D) + ("MONGOLIAN VOWEL SEPARATOR" #x180E) + ("MONGOLIAN DIGIT ZERO" #x1810) + ("MONGOLIAN DIGIT ONE" #x1811) + ("MONGOLIAN DIGIT TWO" #x1812) + ("MONGOLIAN DIGIT THREE" #x1813) + ("MONGOLIAN DIGIT FOUR" #x1814) + ("MONGOLIAN DIGIT FIVE" #x1815) + ("MONGOLIAN DIGIT SIX" #x1816) + ("MONGOLIAN DIGIT SEVEN" #x1817) + ("MONGOLIAN DIGIT EIGHT" #x1818) + ("MONGOLIAN DIGIT NINE" #x1819) + ("MONGOLIAN LETTER A" #x1820) + ("MONGOLIAN LETTER E" #x1821) + ("MONGOLIAN LETTER I" #x1822) + ("MONGOLIAN LETTER O" #x1823) + ("MONGOLIAN LETTER U" #x1824) + ("MONGOLIAN LETTER OE" #x1825) + ("MONGOLIAN LETTER UE" #x1826) + ("MONGOLIAN LETTER EE" #x1827) + ("MONGOLIAN LETTER NA" #x1828) + ("MONGOLIAN LETTER ANG" #x1829) + ("MONGOLIAN LETTER BA" #x182A) + ("MONGOLIAN LETTER PA" #x182B) + ("MONGOLIAN LETTER QA" #x182C) + ("MONGOLIAN LETTER GA" #x182D) + ("MONGOLIAN LETTER MA" #x182E) + ("MONGOLIAN LETTER LA" #x182F) + ("MONGOLIAN LETTER SA" #x1830) + ("MONGOLIAN LETTER SHA" #x1831) + ("MONGOLIAN LETTER TA" #x1832) + ("MONGOLIAN LETTER DA" #x1833) + ("MONGOLIAN LETTER CHA" #x1834) + ("MONGOLIAN LETTER JA" #x1835) + ("MONGOLIAN LETTER YA" #x1836) + ("MONGOLIAN LETTER RA" #x1837) + ("MONGOLIAN LETTER WA" #x1838) + ("MONGOLIAN LETTER FA" #x1839) + ("MONGOLIAN LETTER KA" #x183A) + ("MONGOLIAN LETTER KHA" #x183B) + ("MONGOLIAN LETTER TSA" #x183C) + ("MONGOLIAN LETTER ZA" #x183D) + ("MONGOLIAN LETTER HAA" #x183E) + ("MONGOLIAN LETTER ZRA" #x183F) + ("MONGOLIAN LETTER LHA" #x1840) + ("MONGOLIAN LETTER ZHI" #x1841) + ("MONGOLIAN LETTER CHI" #x1842) + ("MONGOLIAN LETTER TODO LONG VOWEL SIGN" #x1843) + ("MONGOLIAN LETTER TODO E" #x1844) + ("MONGOLIAN LETTER TODO I" #x1845) + ("MONGOLIAN LETTER TODO O" #x1846) + ("MONGOLIAN LETTER TODO U" #x1847) + ("MONGOLIAN LETTER TODO OE" #x1848) + ("MONGOLIAN LETTER TODO UE" #x1849) + ("MONGOLIAN LETTER TODO ANG" #x184A) + ("MONGOLIAN LETTER TODO BA" #x184B) + ("MONGOLIAN LETTER TODO PA" #x184C) + ("MONGOLIAN LETTER TODO QA" #x184D) + ("MONGOLIAN LETTER TODO GA" #x184E) + ("MONGOLIAN LETTER TODO MA" #x184F) + ("MONGOLIAN LETTER TODO TA" #x1850) + ("MONGOLIAN LETTER TODO DA" #x1851) + ("MONGOLIAN LETTER TODO CHA" #x1852) + ("MONGOLIAN LETTER TODO JA" #x1853) + ("MONGOLIAN LETTER TODO TSA" #x1854) + ("MONGOLIAN LETTER TODO YA" #x1855) + ("MONGOLIAN LETTER TODO WA" #x1856) + ("MONGOLIAN LETTER TODO KA" #x1857) + ("MONGOLIAN LETTER TODO GAA" #x1858) + ("MONGOLIAN LETTER TODO HAA" #x1859) + ("MONGOLIAN LETTER TODO JIA" #x185A) + ("MONGOLIAN LETTER TODO NIA" #x185B) + ("MONGOLIAN LETTER TODO DZA" #x185C) + ("MONGOLIAN LETTER SIBE E" #x185D) + ("MONGOLIAN LETTER SIBE I" #x185E) + ("MONGOLIAN LETTER SIBE IY" #x185F) + ("MONGOLIAN LETTER SIBE UE" #x1860) + ("MONGOLIAN LETTER SIBE U" #x1861) + ("MONGOLIAN LETTER SIBE ANG" #x1862) + ("MONGOLIAN LETTER SIBE KA" #x1863) + ("MONGOLIAN LETTER SIBE GA" #x1864) + ("MONGOLIAN LETTER SIBE HA" #x1865) + ("MONGOLIAN LETTER SIBE PA" #x1866) + ("MONGOLIAN LETTER SIBE SHA" #x1867) + ("MONGOLIAN LETTER SIBE TA" #x1868) + ("MONGOLIAN LETTER SIBE DA" #x1869) + ("MONGOLIAN LETTER SIBE JA" #x186A) + ("MONGOLIAN LETTER SIBE FA" #x186B) + ("MONGOLIAN LETTER SIBE GAA" #x186C) + ("MONGOLIAN LETTER SIBE HAA" #x186D) + ("MONGOLIAN LETTER SIBE TSA" #x186E) + ("MONGOLIAN LETTER SIBE ZA" #x186F) + ("MONGOLIAN LETTER SIBE RAA" #x1870) + ("MONGOLIAN LETTER SIBE CHA" #x1871) + ("MONGOLIAN LETTER SIBE ZHA" #x1872) + ("MONGOLIAN LETTER MANCHU I" #x1873) + ("MONGOLIAN LETTER MANCHU KA" #x1874) + ("MONGOLIAN LETTER MANCHU RA" #x1875) + ("MONGOLIAN LETTER MANCHU FA" #x1876) + ("MONGOLIAN LETTER MANCHU ZHA" #x1877) + ("MONGOLIAN LETTER ALI GALI ANUSVARA ONE" #x1880) + ("MONGOLIAN LETTER ALI GALI VISARGA ONE" #x1881) + ("MONGOLIAN LETTER ALI GALI DAMARU" #x1882) + ("MONGOLIAN LETTER ALI GALI UBADAMA" #x1883) + ("MONGOLIAN LETTER ALI GALI INVERTED UBADAMA" #x1884) + ("MONGOLIAN LETTER ALI GALI BALUDA" #x1885) + ("MONGOLIAN LETTER ALI GALI THREE BALUDA" #x1886) + ("MONGOLIAN LETTER ALI GALI A" #x1887) + ("MONGOLIAN LETTER ALI GALI I" #x1888) + ("MONGOLIAN LETTER ALI GALI KA" #x1889) + ("MONGOLIAN LETTER ALI GALI NGA" #x188A) + ("MONGOLIAN LETTER ALI GALI CA" #x188B) + ("MONGOLIAN LETTER ALI GALI TTA" #x188C) + ("MONGOLIAN LETTER ALI GALI TTHA" #x188D) + ("MONGOLIAN LETTER ALI GALI DDA" #x188E) + ("MONGOLIAN LETTER ALI GALI NNA" #x188F) + ("MONGOLIAN LETTER ALI GALI TA" #x1890) + ("MONGOLIAN LETTER ALI GALI DA" #x1891) + ("MONGOLIAN LETTER ALI GALI PA" #x1892) + ("MONGOLIAN LETTER ALI GALI PHA" #x1893) + ("MONGOLIAN LETTER ALI GALI SSA" #x1894) + ("MONGOLIAN LETTER ALI GALI ZHA" #x1895) + ("MONGOLIAN LETTER ALI GALI ZA" #x1896) + ("MONGOLIAN LETTER ALI GALI AH" #x1897) + ("MONGOLIAN LETTER TODO ALI GALI TA" #x1898) + ("MONGOLIAN LETTER TODO ALI GALI ZHA" #x1899) + ("MONGOLIAN LETTER MANCHU ALI GALI GHA" #x189A) + ("MONGOLIAN LETTER MANCHU ALI GALI NGA" #x189B) + ("MONGOLIAN LETTER MANCHU ALI GALI CA" #x189C) + ("MONGOLIAN LETTER MANCHU ALI GALI JHA" #x189D) + ("MONGOLIAN LETTER MANCHU ALI GALI TTA" #x189E) + ("MONGOLIAN LETTER MANCHU ALI GALI DDHA" #x189F) + ("MONGOLIAN LETTER MANCHU ALI GALI TA" #x18A0) + ("MONGOLIAN LETTER MANCHU ALI GALI DHA" #x18A1) + ("MONGOLIAN LETTER MANCHU ALI GALI SSA" #x18A2) + ("MONGOLIAN LETTER MANCHU ALI GALI CYA" #x18A3) + ("MONGOLIAN LETTER MANCHU ALI GALI ZHA" #x18A4) + ("MONGOLIAN LETTER MANCHU ALI GALI ZA" #x18A5) + ("MONGOLIAN LETTER ALI GALI HALF U" #x18A6) + ("MONGOLIAN LETTER ALI GALI HALF YA" #x18A7) + ("MONGOLIAN LETTER MANCHU ALI GALI BHA" #x18A8) + ("MONGOLIAN LETTER ALI GALI DAGALGA" #x18A9) + )) + +;; arch-tag: 36134d5c-514f-4042-b104-97688d5194b4 diff --git a/etc/nxml/01E00-01EFF.el b/etc/nxml/01E00-01EFF.el new file mode 100644 index 00000000000..fed5cf3ca7b --- /dev/null +++ b/etc/nxml/01E00-01EFF.el @@ -0,0 +1,250 @@ +(nxml-define-char-name-set 'latin-extended-additional + '(("LATIN CAPITAL LETTER A WITH RING BELOW" #x1E00) + ("LATIN SMALL LETTER A WITH RING BELOW" #x1E01) + ("LATIN CAPITAL LETTER B WITH DOT ABOVE" #x1E02) + ("LATIN SMALL LETTER B WITH DOT ABOVE" #x1E03) + ("LATIN CAPITAL LETTER B WITH DOT BELOW" #x1E04) + ("LATIN SMALL LETTER B WITH DOT BELOW" #x1E05) + ("LATIN CAPITAL LETTER B WITH LINE BELOW" #x1E06) + ("LATIN SMALL LETTER B WITH LINE BELOW" #x1E07) + ("LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE" #x1E08) + ("LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" #x1E09) + ("LATIN CAPITAL LETTER D WITH DOT ABOVE" #x1E0A) + ("LATIN SMALL LETTER D WITH DOT ABOVE" #x1E0B) + ("LATIN CAPITAL LETTER D WITH DOT BELOW" #x1E0C) + ("LATIN SMALL LETTER D WITH DOT BELOW" #x1E0D) + ("LATIN CAPITAL LETTER D WITH LINE BELOW" #x1E0E) + ("LATIN SMALL LETTER D WITH LINE BELOW" #x1E0F) + ("LATIN CAPITAL LETTER D WITH CEDILLA" #x1E10) + ("LATIN SMALL LETTER D WITH CEDILLA" #x1E11) + ("LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW" #x1E12) + ("LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW" #x1E13) + ("LATIN CAPITAL LETTER E WITH MACRON AND GRAVE" #x1E14) + ("LATIN SMALL LETTER E WITH MACRON AND GRAVE" #x1E15) + ("LATIN CAPITAL LETTER E WITH MACRON AND ACUTE" #x1E16) + ("LATIN SMALL LETTER E WITH MACRON AND ACUTE" #x1E17) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW" #x1E18) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW" #x1E19) + ("LATIN CAPITAL LETTER E WITH TILDE BELOW" #x1E1A) + ("LATIN SMALL LETTER E WITH TILDE BELOW" #x1E1B) + ("LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE" #x1E1C) + ("LATIN SMALL LETTER E WITH CEDILLA AND BREVE" #x1E1D) + ("LATIN CAPITAL LETTER F WITH DOT ABOVE" #x1E1E) + ("LATIN SMALL LETTER F WITH DOT ABOVE" #x1E1F) + ("LATIN CAPITAL LETTER G WITH MACRON" #x1E20) + ("LATIN SMALL LETTER G WITH MACRON" #x1E21) + ("LATIN CAPITAL LETTER H WITH DOT ABOVE" #x1E22) + ("LATIN SMALL LETTER H WITH DOT ABOVE" #x1E23) + ("LATIN CAPITAL LETTER H WITH DOT BELOW" #x1E24) + ("LATIN SMALL LETTER H WITH DOT BELOW" #x1E25) + ("LATIN CAPITAL LETTER H WITH DIAERESIS" #x1E26) + ("LATIN SMALL LETTER H WITH DIAERESIS" #x1E27) + ("LATIN CAPITAL LETTER H WITH CEDILLA" #x1E28) + ("LATIN SMALL LETTER H WITH CEDILLA" #x1E29) + ("LATIN CAPITAL LETTER H WITH BREVE BELOW" #x1E2A) + ("LATIN SMALL LETTER H WITH BREVE BELOW" #x1E2B) + ("LATIN CAPITAL LETTER I WITH TILDE BELOW" #x1E2C) + ("LATIN SMALL LETTER I WITH TILDE BELOW" #x1E2D) + ("LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE" #x1E2E) + ("LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE" #x1E2F) + ("LATIN CAPITAL LETTER K WITH ACUTE" #x1E30) + ("LATIN SMALL LETTER K WITH ACUTE" #x1E31) + ("LATIN CAPITAL LETTER K WITH DOT BELOW" #x1E32) + ("LATIN SMALL LETTER K WITH DOT BELOW" #x1E33) + ("LATIN CAPITAL LETTER K WITH LINE BELOW" #x1E34) + ("LATIN SMALL LETTER K WITH LINE BELOW" #x1E35) + ("LATIN CAPITAL LETTER L WITH DOT BELOW" #x1E36) + ("LATIN SMALL LETTER L WITH DOT BELOW" #x1E37) + ("LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON" #x1E38) + ("LATIN SMALL LETTER L WITH DOT BELOW AND MACRON" #x1E39) + ("LATIN CAPITAL LETTER L WITH LINE BELOW" #x1E3A) + ("LATIN SMALL LETTER L WITH LINE BELOW" #x1E3B) + ("LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW" #x1E3C) + ("LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW" #x1E3D) + ("LATIN CAPITAL LETTER M WITH ACUTE" #x1E3E) + ("LATIN SMALL LETTER M WITH ACUTE" #x1E3F) + ("LATIN CAPITAL LETTER M WITH DOT ABOVE" #x1E40) + ("LATIN SMALL LETTER M WITH DOT ABOVE" #x1E41) + ("LATIN CAPITAL LETTER M WITH DOT BELOW" #x1E42) + ("LATIN SMALL LETTER M WITH DOT BELOW" #x1E43) + ("LATIN CAPITAL LETTER N WITH DOT ABOVE" #x1E44) + ("LATIN SMALL LETTER N WITH DOT ABOVE" #x1E45) + ("LATIN CAPITAL LETTER N WITH DOT BELOW" #x1E46) + ("LATIN SMALL LETTER N WITH DOT BELOW" #x1E47) + ("LATIN CAPITAL LETTER N WITH LINE BELOW" #x1E48) + ("LATIN SMALL LETTER N WITH LINE BELOW" #x1E49) + ("LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW" #x1E4A) + ("LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW" #x1E4B) + ("LATIN CAPITAL LETTER O WITH TILDE AND ACUTE" #x1E4C) + ("LATIN SMALL LETTER O WITH TILDE AND ACUTE" #x1E4D) + ("LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS" #x1E4E) + ("LATIN SMALL LETTER O WITH TILDE AND DIAERESIS" #x1E4F) + ("LATIN CAPITAL LETTER O WITH MACRON AND GRAVE" #x1E50) + ("LATIN SMALL LETTER O WITH MACRON AND GRAVE" #x1E51) + ("LATIN CAPITAL LETTER O WITH MACRON AND ACUTE" #x1E52) + ("LATIN SMALL LETTER O WITH MACRON AND ACUTE" #x1E53) + ("LATIN CAPITAL LETTER P WITH ACUTE" #x1E54) + ("LATIN SMALL LETTER P WITH ACUTE" #x1E55) + ("LATIN CAPITAL LETTER P WITH DOT ABOVE" #x1E56) + ("LATIN SMALL LETTER P WITH DOT ABOVE" #x1E57) + ("LATIN CAPITAL LETTER R WITH DOT ABOVE" #x1E58) + ("LATIN SMALL LETTER R WITH DOT ABOVE" #x1E59) + ("LATIN CAPITAL LETTER R WITH DOT BELOW" #x1E5A) + ("LATIN SMALL LETTER R WITH DOT BELOW" #x1E5B) + ("LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON" #x1E5C) + ("LATIN SMALL LETTER R WITH DOT BELOW AND MACRON" #x1E5D) + ("LATIN CAPITAL LETTER R WITH LINE BELOW" #x1E5E) + ("LATIN SMALL LETTER R WITH LINE BELOW" #x1E5F) + ("LATIN CAPITAL LETTER S WITH DOT ABOVE" #x1E60) + ("LATIN SMALL LETTER S WITH DOT ABOVE" #x1E61) + ("LATIN CAPITAL LETTER S WITH DOT BELOW" #x1E62) + ("LATIN SMALL LETTER S WITH DOT BELOW" #x1E63) + ("LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE" #x1E64) + ("LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE" #x1E65) + ("LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE" #x1E66) + ("LATIN SMALL LETTER S WITH CARON AND DOT ABOVE" #x1E67) + ("LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E68) + ("LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E69) + ("LATIN CAPITAL LETTER T WITH DOT ABOVE" #x1E6A) + ("LATIN SMALL LETTER T WITH DOT ABOVE" #x1E6B) + ("LATIN CAPITAL LETTER T WITH DOT BELOW" #x1E6C) + ("LATIN SMALL LETTER T WITH DOT BELOW" #x1E6D) + ("LATIN CAPITAL LETTER T WITH LINE BELOW" #x1E6E) + ("LATIN SMALL LETTER T WITH LINE BELOW" #x1E6F) + ("LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW" #x1E70) + ("LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW" #x1E71) + ("LATIN CAPITAL LETTER U WITH DIAERESIS BELOW" #x1E72) + ("LATIN SMALL LETTER U WITH DIAERESIS BELOW" #x1E73) + ("LATIN CAPITAL LETTER U WITH TILDE BELOW" #x1E74) + ("LATIN SMALL LETTER U WITH TILDE BELOW" #x1E75) + ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW" #x1E76) + ("LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW" #x1E77) + ("LATIN CAPITAL LETTER U WITH TILDE AND ACUTE" #x1E78) + ("LATIN SMALL LETTER U WITH TILDE AND ACUTE" #x1E79) + ("LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS" #x1E7A) + ("LATIN SMALL LETTER U WITH MACRON AND DIAERESIS" #x1E7B) + ("LATIN CAPITAL LETTER V WITH TILDE" #x1E7C) + ("LATIN SMALL LETTER V WITH TILDE" #x1E7D) + ("LATIN CAPITAL LETTER V WITH DOT BELOW" #x1E7E) + ("LATIN SMALL LETTER V WITH DOT BELOW" #x1E7F) + ("LATIN CAPITAL LETTER W WITH GRAVE" #x1E80) + ("LATIN SMALL LETTER W WITH GRAVE" #x1E81) + ("LATIN CAPITAL LETTER W WITH ACUTE" #x1E82) + ("LATIN SMALL LETTER W WITH ACUTE" #x1E83) + ("LATIN CAPITAL LETTER W WITH DIAERESIS" #x1E84) + ("LATIN SMALL LETTER W WITH DIAERESIS" #x1E85) + ("LATIN CAPITAL LETTER W WITH DOT ABOVE" #x1E86) + ("LATIN SMALL LETTER W WITH DOT ABOVE" #x1E87) + ("LATIN CAPITAL LETTER W WITH DOT BELOW" #x1E88) + ("LATIN SMALL LETTER W WITH DOT BELOW" #x1E89) + ("LATIN CAPITAL LETTER X WITH DOT ABOVE" #x1E8A) + ("LATIN SMALL LETTER X WITH DOT ABOVE" #x1E8B) + ("LATIN CAPITAL LETTER X WITH DIAERESIS" #x1E8C) + ("LATIN SMALL LETTER X WITH DIAERESIS" #x1E8D) + ("LATIN CAPITAL LETTER Y WITH DOT ABOVE" #x1E8E) + ("LATIN SMALL LETTER Y WITH DOT ABOVE" #x1E8F) + ("LATIN CAPITAL LETTER Z WITH CIRCUMFLEX" #x1E90) + ("LATIN SMALL LETTER Z WITH CIRCUMFLEX" #x1E91) + ("LATIN CAPITAL LETTER Z WITH DOT BELOW" #x1E92) + ("LATIN SMALL LETTER Z WITH DOT BELOW" #x1E93) + ("LATIN CAPITAL LETTER Z WITH LINE BELOW" #x1E94) + ("LATIN SMALL LETTER Z WITH LINE BELOW" #x1E95) + ("LATIN SMALL LETTER H WITH LINE BELOW" #x1E96) + ("LATIN SMALL LETTER T WITH DIAERESIS" #x1E97) + ("LATIN SMALL LETTER W WITH RING ABOVE" #x1E98) + ("LATIN SMALL LETTER Y WITH RING ABOVE" #x1E99) + ("LATIN SMALL LETTER A WITH RIGHT HALF RING" #x1E9A) + ("LATIN SMALL LETTER LONG S WITH DOT ABOVE" #x1E9B) + ("LATIN CAPITAL LETTER A WITH DOT BELOW" #x1EA0) + ("LATIN SMALL LETTER A WITH DOT BELOW" #x1EA1) + ("LATIN CAPITAL LETTER A WITH HOOK ABOVE" #x1EA2) + ("LATIN SMALL LETTER A WITH HOOK ABOVE" #x1EA3) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA4) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA5) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA6) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA7) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA8) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA9) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAA) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAB) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAC) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAD) + ("LATIN CAPITAL LETTER A WITH BREVE AND ACUTE" #x1EAE) + ("LATIN SMALL LETTER A WITH BREVE AND ACUTE" #x1EAF) + ("LATIN CAPITAL LETTER A WITH BREVE AND GRAVE" #x1EB0) + ("LATIN SMALL LETTER A WITH BREVE AND GRAVE" #x1EB1) + ("LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB2) + ("LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB3) + ("LATIN CAPITAL LETTER A WITH BREVE AND TILDE" #x1EB4) + ("LATIN SMALL LETTER A WITH BREVE AND TILDE" #x1EB5) + ("LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW" #x1EB6) + ("LATIN SMALL LETTER A WITH BREVE AND DOT BELOW" #x1EB7) + ("LATIN CAPITAL LETTER E WITH DOT BELOW" #x1EB8) + ("LATIN SMALL LETTER E WITH DOT BELOW" #x1EB9) + ("LATIN CAPITAL LETTER E WITH HOOK ABOVE" #x1EBA) + ("LATIN SMALL LETTER E WITH HOOK ABOVE" #x1EBB) + ("LATIN CAPITAL LETTER E WITH TILDE" #x1EBC) + ("LATIN SMALL LETTER E WITH TILDE" #x1EBD) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBE) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBF) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC0) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC1) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC2) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC3) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC4) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC5) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC6) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC7) + ("LATIN CAPITAL LETTER I WITH HOOK ABOVE" #x1EC8) + ("LATIN SMALL LETTER I WITH HOOK ABOVE" #x1EC9) + ("LATIN CAPITAL LETTER I WITH DOT BELOW" #x1ECA) + ("LATIN SMALL LETTER I WITH DOT BELOW" #x1ECB) + ("LATIN CAPITAL LETTER O WITH DOT BELOW" #x1ECC) + ("LATIN SMALL LETTER O WITH DOT BELOW" #x1ECD) + ("LATIN CAPITAL LETTER O WITH HOOK ABOVE" #x1ECE) + ("LATIN SMALL LETTER O WITH HOOK ABOVE" #x1ECF) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED0) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED1) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED2) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED3) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED4) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED5) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED6) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED7) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED8) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED9) + ("LATIN CAPITAL LETTER O WITH HORN AND ACUTE" #x1EDA) + ("LATIN SMALL LETTER O WITH HORN AND ACUTE" #x1EDB) + ("LATIN CAPITAL LETTER O WITH HORN AND GRAVE" #x1EDC) + ("LATIN SMALL LETTER O WITH HORN AND GRAVE" #x1EDD) + ("LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE" #x1EDE) + ("LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE" #x1EDF) + ("LATIN CAPITAL LETTER O WITH HORN AND TILDE" #x1EE0) + ("LATIN SMALL LETTER O WITH HORN AND TILDE" #x1EE1) + ("LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW" #x1EE2) + ("LATIN SMALL LETTER O WITH HORN AND DOT BELOW" #x1EE3) + ("LATIN CAPITAL LETTER U WITH DOT BELOW" #x1EE4) + ("LATIN SMALL LETTER U WITH DOT BELOW" #x1EE5) + ("LATIN CAPITAL LETTER U WITH HOOK ABOVE" #x1EE6) + ("LATIN SMALL LETTER U WITH HOOK ABOVE" #x1EE7) + ("LATIN CAPITAL LETTER U WITH HORN AND ACUTE" #x1EE8) + ("LATIN SMALL LETTER U WITH HORN AND ACUTE" #x1EE9) + ("LATIN CAPITAL LETTER U WITH HORN AND GRAVE" #x1EEA) + ("LATIN SMALL LETTER U WITH HORN AND GRAVE" #x1EEB) + ("LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE" #x1EEC) + ("LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE" #x1EED) + ("LATIN CAPITAL LETTER U WITH HORN AND TILDE" #x1EEE) + ("LATIN SMALL LETTER U WITH HORN AND TILDE" #x1EEF) + ("LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW" #x1EF0) + ("LATIN SMALL LETTER U WITH HORN AND DOT BELOW" #x1EF1) + ("LATIN CAPITAL LETTER Y WITH GRAVE" #x1EF2) + ("LATIN SMALL LETTER Y WITH GRAVE" #x1EF3) + ("LATIN CAPITAL LETTER Y WITH DOT BELOW" #x1EF4) + ("LATIN SMALL LETTER Y WITH DOT BELOW" #x1EF5) + ("LATIN CAPITAL LETTER Y WITH HOOK ABOVE" #x1EF6) + ("LATIN SMALL LETTER Y WITH HOOK ABOVE" #x1EF7) + ("LATIN CAPITAL LETTER Y WITH TILDE" #x1EF8) + ("LATIN SMALL LETTER Y WITH TILDE" #x1EF9) + )) + +;; arch-tag: 67862606-3d2a-4063-b666-45ccd6edff6b diff --git a/etc/nxml/01F00-01FFF.el b/etc/nxml/01F00-01FFF.el new file mode 100644 index 00000000000..5da301f019b --- /dev/null +++ b/etc/nxml/01F00-01FFF.el @@ -0,0 +1,237 @@ +(nxml-define-char-name-set 'greek-extended + '(("GREEK SMALL LETTER ALPHA WITH PSILI" #x1F00) + ("GREEK SMALL LETTER ALPHA WITH DASIA" #x1F01) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA" #x1F02) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" #x1F03) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA" #x1F04) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA" #x1F05) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F06) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F07) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI" #x1F08) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA" #x1F09) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA" #x1F0A) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA" #x1F0B) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA" #x1F0C) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA" #x1F0D) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F0E) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F0F) + ("GREEK SMALL LETTER EPSILON WITH PSILI" #x1F10) + ("GREEK SMALL LETTER EPSILON WITH DASIA" #x1F11) + ("GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA" #x1F12) + ("GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA" #x1F13) + ("GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" #x1F14) + ("GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA" #x1F15) + ("GREEK CAPITAL LETTER EPSILON WITH PSILI" #x1F18) + ("GREEK CAPITAL LETTER EPSILON WITH DASIA" #x1F19) + ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA" #x1F1A) + ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA" #x1F1B) + ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA" #x1F1C) + ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA" #x1F1D) + ("GREEK SMALL LETTER ETA WITH PSILI" #x1F20) + ("GREEK SMALL LETTER ETA WITH DASIA" #x1F21) + ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA" #x1F22) + ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA" #x1F23) + ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA" #x1F24) + ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA" #x1F25) + ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F26) + ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F27) + ("GREEK CAPITAL LETTER ETA WITH PSILI" #x1F28) + ("GREEK CAPITAL LETTER ETA WITH DASIA" #x1F29) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA" #x1F2A) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA" #x1F2B) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA" #x1F2C) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA" #x1F2D) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F2E) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F2F) + ("GREEK SMALL LETTER IOTA WITH PSILI" #x1F30) + ("GREEK SMALL LETTER IOTA WITH DASIA" #x1F31) + ("GREEK SMALL LETTER IOTA WITH PSILI AND VARIA" #x1F32) + ("GREEK SMALL LETTER IOTA WITH DASIA AND VARIA" #x1F33) + ("GREEK SMALL LETTER IOTA WITH PSILI AND OXIA" #x1F34) + ("GREEK SMALL LETTER IOTA WITH DASIA AND OXIA" #x1F35) + ("GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F36) + ("GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F37) + ("GREEK CAPITAL LETTER IOTA WITH PSILI" #x1F38) + ("GREEK CAPITAL LETTER IOTA WITH DASIA" #x1F39) + ("GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA" #x1F3A) + ("GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA" #x1F3B) + ("GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA" #x1F3C) + ("GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA" #x1F3D) + ("GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F3E) + ("GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F3F) + ("GREEK SMALL LETTER OMICRON WITH PSILI" #x1F40) + ("GREEK SMALL LETTER OMICRON WITH DASIA" #x1F41) + ("GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA" #x1F42) + ("GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA" #x1F43) + ("GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA" #x1F44) + ("GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA" #x1F45) + ("GREEK CAPITAL LETTER OMICRON WITH PSILI" #x1F48) + ("GREEK CAPITAL LETTER OMICRON WITH DASIA" #x1F49) + ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA" #x1F4A) + ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA" #x1F4B) + ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA" #x1F4C) + ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA" #x1F4D) + ("GREEK SMALL LETTER UPSILON WITH PSILI" #x1F50) + ("GREEK SMALL LETTER UPSILON WITH DASIA" #x1F51) + ("GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA" #x1F52) + ("GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA" #x1F53) + ("GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA" #x1F54) + ("GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA" #x1F55) + ("GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI" #x1F56) + ("GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F57) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA" #x1F59) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA" #x1F5B) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA" #x1F5D) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F5F) + ("GREEK SMALL LETTER OMEGA WITH PSILI" #x1F60) + ("GREEK SMALL LETTER OMEGA WITH DASIA" #x1F61) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA" #x1F62) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA" #x1F63) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" #x1F64) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA" #x1F65) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F66) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F67) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI" #x1F68) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA" #x1F69) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA" #x1F6A) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA" #x1F6B) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA" #x1F6C) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA" #x1F6D) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F6E) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F6F) + ("GREEK SMALL LETTER ALPHA WITH VARIA" #x1F70) + ("GREEK SMALL LETTER ALPHA WITH OXIA" #x1F71) + ("GREEK SMALL LETTER EPSILON WITH VARIA" #x1F72) + ("GREEK SMALL LETTER EPSILON WITH OXIA" #x1F73) + ("GREEK SMALL LETTER ETA WITH VARIA" #x1F74) + ("GREEK SMALL LETTER ETA WITH OXIA" #x1F75) + ("GREEK SMALL LETTER IOTA WITH VARIA" #x1F76) + ("GREEK SMALL LETTER IOTA WITH OXIA" #x1F77) + ("GREEK SMALL LETTER OMICRON WITH VARIA" #x1F78) + ("GREEK SMALL LETTER OMICRON WITH OXIA" #x1F79) + ("GREEK SMALL LETTER UPSILON WITH VARIA" #x1F7A) + ("GREEK SMALL LETTER UPSILON WITH OXIA" #x1F7B) + ("GREEK SMALL LETTER OMEGA WITH VARIA" #x1F7C) + ("GREEK SMALL LETTER OMEGA WITH OXIA" #x1F7D) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI" #x1F80) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI" #x1F81) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F82) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F83) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F84) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F85) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F86) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F87) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI" #x1F88) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI" #x1F89) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F8A) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F8B) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F8C) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F8D) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8E) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8F) + ("GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI" #x1F90) + ("GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI" #x1F91) + ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F92) + ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F93) + ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F94) + ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F95) + ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F96) + ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F97) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI" #x1F98) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI" #x1F99) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F9A) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F9B) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F9C) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F9D) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9E) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9F) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI" #x1FA0) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI" #x1FA1) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1FA2) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1FA3) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1FA4) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1FA5) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA6) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA7) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI" #x1FA8) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI" #x1FA9) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1FAA) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1FAB) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1FAC) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1FAD) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAE) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAF) + ("GREEK SMALL LETTER ALPHA WITH VRACHY" #x1FB0) + ("GREEK SMALL LETTER ALPHA WITH MACRON" #x1FB1) + ("GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI" #x1FB2) + ("GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI" #x1FB3) + ("GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI" #x1FB4) + ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI" #x1FB6) + ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FB7) + ("GREEK CAPITAL LETTER ALPHA WITH VRACHY" #x1FB8) + ("GREEK CAPITAL LETTER ALPHA WITH MACRON" #x1FB9) + ("GREEK CAPITAL LETTER ALPHA WITH VARIA" #x1FBA) + ("GREEK CAPITAL LETTER ALPHA WITH OXIA" #x1FBB) + ("GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI" #x1FBC) + ("GREEK KORONIS" #x1FBD) + ("GREEK PROSGEGRAMMENI" #x1FBE) + ("GREEK PSILI" #x1FBF) + ("GREEK PERISPOMENI" #x1FC0) + ("GREEK DIALYTIKA AND PERISPOMENI" #x1FC1) + ("GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI" #x1FC2) + ("GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI" #x1FC3) + ("GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI" #x1FC4) + ("GREEK SMALL LETTER ETA WITH PERISPOMENI" #x1FC6) + ("GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FC7) + ("GREEK CAPITAL LETTER EPSILON WITH VARIA" #x1FC8) + ("GREEK CAPITAL LETTER EPSILON WITH OXIA" #x1FC9) + ("GREEK CAPITAL LETTER ETA WITH VARIA" #x1FCA) + ("GREEK CAPITAL LETTER ETA WITH OXIA" #x1FCB) + ("GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI" #x1FCC) + ("GREEK PSILI AND VARIA" #x1FCD) + ("GREEK PSILI AND OXIA" #x1FCE) + ("GREEK PSILI AND PERISPOMENI" #x1FCF) + ("GREEK SMALL LETTER IOTA WITH VRACHY" #x1FD0) + ("GREEK SMALL LETTER IOTA WITH MACRON" #x1FD1) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA" #x1FD2) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA" #x1FD3) + ("GREEK SMALL LETTER IOTA WITH PERISPOMENI" #x1FD6) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI" #x1FD7) + ("GREEK CAPITAL LETTER IOTA WITH VRACHY" #x1FD8) + ("GREEK CAPITAL LETTER IOTA WITH MACRON" #x1FD9) + ("GREEK CAPITAL LETTER IOTA WITH VARIA" #x1FDA) + ("GREEK CAPITAL LETTER IOTA WITH OXIA" #x1FDB) + ("GREEK DASIA AND VARIA" #x1FDD) + ("GREEK DASIA AND OXIA" #x1FDE) + ("GREEK DASIA AND PERISPOMENI" #x1FDF) + ("GREEK SMALL LETTER UPSILON WITH VRACHY" #x1FE0) + ("GREEK SMALL LETTER UPSILON WITH MACRON" #x1FE1) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA" #x1FE2) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA" #x1FE3) + ("GREEK SMALL LETTER RHO WITH PSILI" #x1FE4) + ("GREEK SMALL LETTER RHO WITH DASIA" #x1FE5) + ("GREEK SMALL LETTER UPSILON WITH PERISPOMENI" #x1FE6) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI" #x1FE7) + ("GREEK CAPITAL LETTER UPSILON WITH VRACHY" #x1FE8) + ("GREEK CAPITAL LETTER UPSILON WITH MACRON" #x1FE9) + ("GREEK CAPITAL LETTER UPSILON WITH VARIA" #x1FEA) + ("GREEK CAPITAL LETTER UPSILON WITH OXIA" #x1FEB) + ("GREEK CAPITAL LETTER RHO WITH DASIA" #x1FEC) + ("GREEK DIALYTIKA AND VARIA" #x1FED) + ("GREEK DIALYTIKA AND OXIA" #x1FEE) + ("GREEK VARIA" #x1FEF) + ("GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI" #x1FF2) + ("GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI" #x1FF3) + ("GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI" #x1FF4) + ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI" #x1FF6) + ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FF7) + ("GREEK CAPITAL LETTER OMICRON WITH VARIA" #x1FF8) + ("GREEK CAPITAL LETTER OMICRON WITH OXIA" #x1FF9) + ("GREEK CAPITAL LETTER OMEGA WITH VARIA" #x1FFA) + ("GREEK CAPITAL LETTER OMEGA WITH OXIA" #x1FFB) + ("GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI" #x1FFC) + ("GREEK OXIA" #x1FFD) + ("GREEK DASIA" #x1FFE) + )) + +;; arch-tag: ace2193e-e5be-4800-898e-efad7ba5d6da diff --git a/etc/nxml/02000-0206F.el b/etc/nxml/02000-0206F.el new file mode 100644 index 00000000000..0a367cb1e1e --- /dev/null +++ b/etc/nxml/02000-0206F.el @@ -0,0 +1,99 @@ +(nxml-define-char-name-set 'general-punctuation + '(("EN QUAD" #x2000) + ("EM QUAD" #x2001) + ("EN SPACE" #x2002) + ("EM SPACE" #x2003) + ("THREE-PER-EM SPACE" #x2004) + ("FOUR-PER-EM SPACE" #x2005) + ("SIX-PER-EM SPACE" #x2006) + ("FIGURE SPACE" #x2007) + ("PUNCTUATION SPACE" #x2008) + ("THIN SPACE" #x2009) + ("HAIR SPACE" #x200A) + ("ZERO WIDTH SPACE" #x200B) + ("ZERO WIDTH NON-JOINER" #x200C) + ("ZERO WIDTH JOINER" #x200D) + ("LEFT-TO-RIGHT MARK" #x200E) + ("RIGHT-TO-LEFT MARK" #x200F) + ("HYPHEN" #x2010) + ("NON-BREAKING HYPHEN" #x2011) + ("FIGURE DASH" #x2012) + ("EN DASH" #x2013) + ("EM DASH" #x2014) + ("HORIZONTAL BAR" #x2015) + ("DOUBLE VERTICAL LINE" #x2016) + ("DOUBLE LOW LINE" #x2017) + ("LEFT SINGLE QUOTATION MARK" #x2018) + ("RIGHT SINGLE QUOTATION MARK" #x2019) + ("SINGLE LOW-9 QUOTATION MARK" #x201A) + ("SINGLE HIGH-REVERSED-9 QUOTATION MARK" #x201B) + ("LEFT DOUBLE QUOTATION MARK" #x201C) + ("RIGHT DOUBLE QUOTATION MARK" #x201D) + ("DOUBLE LOW-9 QUOTATION MARK" #x201E) + ("DOUBLE HIGH-REVERSED-9 QUOTATION MARK" #x201F) + ("DAGGER" #x2020) + ("DOUBLE DAGGER" #x2021) + ("BULLET" #x2022) + ("TRIANGULAR BULLET" #x2023) + ("ONE DOT LEADER" #x2024) + ("TWO DOT LEADER" #x2025) + ("HORIZONTAL ELLIPSIS" #x2026) + ("HYPHENATION POINT" #x2027) + ("LINE SEPARATOR" #x2028) + ("PARAGRAPH SEPARATOR" #x2029) + ("LEFT-TO-RIGHT EMBEDDING" #x202A) + ("RIGHT-TO-LEFT EMBEDDING" #x202B) + ("POP DIRECTIONAL FORMATTING" #x202C) + ("LEFT-TO-RIGHT OVERRIDE" #x202D) + ("RIGHT-TO-LEFT OVERRIDE" #x202E) + ("NARROW NO-BREAK SPACE" #x202F) + ("PER MILLE SIGN" #x2030) + ("PER TEN THOUSAND SIGN" #x2031) + ("PRIME" #x2032) + ("DOUBLE PRIME" #x2033) + ("TRIPLE PRIME" #x2034) + ("REVERSED PRIME" #x2035) + ("REVERSED DOUBLE PRIME" #x2036) + ("REVERSED TRIPLE PRIME" #x2037) + ("CARET" #x2038) + ("SINGLE LEFT-POINTING ANGLE QUOTATION MARK" #x2039) + ("SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" #x203A) + ("REFERENCE MARK" #x203B) + ("DOUBLE EXCLAMATION MARK" #x203C) + ("INTERROBANG" #x203D) + ("OVERLINE" #x203E) + ("UNDERTIE" #x203F) + ("CHARACTER TIE" #x2040) + ("CARET INSERTION POINT" #x2041) + ("ASTERISM" #x2042) + ("HYPHEN BULLET" #x2043) + ("FRACTION SLASH" #x2044) + ("LEFT SQUARE BRACKET WITH QUILL" #x2045) + ("RIGHT SQUARE BRACKET WITH QUILL" #x2046) + ("DOUBLE QUESTION MARK" #x2047) + ("QUESTION EXCLAMATION MARK" #x2048) + ("EXCLAMATION QUESTION MARK" #x2049) + ("TIRONIAN SIGN ET" #x204A) + ("REVERSED PILCROW SIGN" #x204B) + ("BLACK LEFTWARDS BULLET" #x204C) + ("BLACK RIGHTWARDS BULLET" #x204D) + ("LOW ASTERISK" #x204E) + ("REVERSED SEMICOLON" #x204F) + ("CLOSE UP" #x2050) + ("TWO ASTERISKS ALIGNED VERTICALLY" #x2051) + ("COMMERCIAL MINUS SIGN" #x2052) + ("QUADRUPLE PRIME" #x2057) + ("MEDIUM MATHEMATICAL SPACE" #x205F) + ("WORD JOINER" #x2060) + ("FUNCTION APPLICATION" #x2061) + ("INVISIBLE TIMES" #x2062) + ("INVISIBLE SEPARATOR" #x2063) + ("INHIBIT SYMMETRIC SWAPPING" #x206A) + ("ACTIVATE SYMMETRIC SWAPPING" #x206B) + ("INHIBIT ARABIC FORM SHAPING" #x206C) + ("ACTIVATE ARABIC FORM SHAPING" #x206D) + ("NATIONAL DIGIT SHAPES" #x206E) + ("NOMINAL DIGIT SHAPES" #x206F) + )) + +;; arch-tag: 9208787e-c528-416d-a9b1-7261c9cde84e diff --git a/etc/nxml/02070-0209F.el b/etc/nxml/02070-0209F.el new file mode 100644 index 00000000000..aad7f331ccc --- /dev/null +++ b/etc/nxml/02070-0209F.el @@ -0,0 +1,33 @@ +(nxml-define-char-name-set 'superscripts-and-subscripts + '(("SUPERSCRIPT ZERO" #x2070) + ("SUPERSCRIPT LATIN SMALL LETTER I" #x2071) + ("SUPERSCRIPT FOUR" #x2074) + ("SUPERSCRIPT FIVE" #x2075) + ("SUPERSCRIPT SIX" #x2076) + ("SUPERSCRIPT SEVEN" #x2077) + ("SUPERSCRIPT EIGHT" #x2078) + ("SUPERSCRIPT NINE" #x2079) + ("SUPERSCRIPT PLUS SIGN" #x207A) + ("SUPERSCRIPT MINUS" #x207B) + ("SUPERSCRIPT EQUALS SIGN" #x207C) + ("SUPERSCRIPT LEFT PARENTHESIS" #x207D) + ("SUPERSCRIPT RIGHT PARENTHESIS" #x207E) + ("SUPERSCRIPT LATIN SMALL LETTER N" #x207F) + ("SUBSCRIPT ZERO" #x2080) + ("SUBSCRIPT ONE" #x2081) + ("SUBSCRIPT TWO" #x2082) + ("SUBSCRIPT THREE" #x2083) + ("SUBSCRIPT FOUR" #x2084) + ("SUBSCRIPT FIVE" #x2085) + ("SUBSCRIPT SIX" #x2086) + ("SUBSCRIPT SEVEN" #x2087) + ("SUBSCRIPT EIGHT" #x2088) + ("SUBSCRIPT NINE" #x2089) + ("SUBSCRIPT PLUS SIGN" #x208A) + ("SUBSCRIPT MINUS" #x208B) + ("SUBSCRIPT EQUALS SIGN" #x208C) + ("SUBSCRIPT LEFT PARENTHESIS" #x208D) + ("SUBSCRIPT RIGHT PARENTHESIS" #x208E) + )) + +;; arch-tag: 59e357e5-c021-440d-a923-921b485dcbb8 diff --git a/etc/nxml/020A0-020CF.el b/etc/nxml/020A0-020CF.el new file mode 100644 index 00000000000..98f334752b8 --- /dev/null +++ b/etc/nxml/020A0-020CF.el @@ -0,0 +1,22 @@ +(nxml-define-char-name-set 'currency-symbols + '(("EURO-CURRENCY SIGN" #x20A0) + ("COLON SIGN" #x20A1) + ("CRUZEIRO SIGN" #x20A2) + ("FRENCH FRANC SIGN" #x20A3) + ("LIRA SIGN" #x20A4) + ("MILL SIGN" #x20A5) + ("NAIRA SIGN" #x20A6) + ("PESETA SIGN" #x20A7) + ("RUPEE SIGN" #x20A8) + ("WON SIGN" #x20A9) + ("NEW SHEQEL SIGN" #x20AA) + ("DONG SIGN" #x20AB) + ("EURO SIGN" #x20AC) + ("KIP SIGN" #x20AD) + ("TUGRIK SIGN" #x20AE) + ("DRACHMA SIGN" #x20AF) + ("GERMAN PENNY SIGN" #x20B0) + ("PESO SIGN" #x20B1) + )) + +;; arch-tag: 2f9ece37-0ae6-4a82-b12e-dc10ac58e6ce diff --git a/etc/nxml/020D0-020FF.el b/etc/nxml/020D0-020FF.el new file mode 100644 index 00000000000..c2626c6f362 --- /dev/null +++ b/etc/nxml/020D0-020FF.el @@ -0,0 +1,31 @@ +(nxml-define-char-name-set 'combining-diacritical-marks-for-symbols + '(("COMBINING LEFT HARPOON ABOVE" #x20D0) + ("COMBINING RIGHT HARPOON ABOVE" #x20D1) + ("COMBINING LONG VERTICAL LINE OVERLAY" #x20D2) + ("COMBINING SHORT VERTICAL LINE OVERLAY" #x20D3) + ("COMBINING ANTICLOCKWISE ARROW ABOVE" #x20D4) + ("COMBINING CLOCKWISE ARROW ABOVE" #x20D5) + ("COMBINING LEFT ARROW ABOVE" #x20D6) + ("COMBINING RIGHT ARROW ABOVE" #x20D7) + ("COMBINING RING OVERLAY" #x20D8) + ("COMBINING CLOCKWISE RING OVERLAY" #x20D9) + ("COMBINING ANTICLOCKWISE RING OVERLAY" #x20DA) + ("COMBINING THREE DOTS ABOVE" #x20DB) + ("COMBINING FOUR DOTS ABOVE" #x20DC) + ("COMBINING ENCLOSING CIRCLE" #x20DD) + ("COMBINING ENCLOSING SQUARE" #x20DE) + ("COMBINING ENCLOSING DIAMOND" #x20DF) + ("COMBINING ENCLOSING CIRCLE BACKSLASH" #x20E0) + ("COMBINING LEFT RIGHT ARROW ABOVE" #x20E1) + ("COMBINING ENCLOSING SCREEN" #x20E2) + ("COMBINING ENCLOSING KEYCAP" #x20E3) + ("COMBINING ENCLOSING UPWARD POINTING TRIANGLE" #x20E4) + ("COMBINING REVERSE SOLIDUS OVERLAY" #x20E5) + ("COMBINING DOUBLE VERTICAL STROKE OVERLAY" #x20E6) + ("COMBINING ANNUITY SYMBOL" #x20E7) + ("COMBINING TRIPLE UNDERDOT" #x20E8) + ("COMBINING WIDE BRIDGE ABOVE" #x20E9) + ("COMBINING LEFTWARDS ARROW OVERLAY" #x20EA) + )) + +;; arch-tag: 4b1f7ef0-287b-49a6-a9f2-910752aac517 diff --git a/etc/nxml/02100-0214F.el b/etc/nxml/02100-0214F.el new file mode 100644 index 00000000000..1c499c0c020 --- /dev/null +++ b/etc/nxml/02100-0214F.el @@ -0,0 +1,78 @@ +(nxml-define-char-name-set 'letterlike-symbols + '(("ACCOUNT OF" #x2100) + ("ADDRESSED TO THE SUBJECT" #x2101) + ("DOUBLE-STRUCK CAPITAL C" #x2102) + ("DEGREE CELSIUS" #x2103) + ("CENTRE LINE SYMBOL" #x2104) + ("CARE OF" #x2105) + ("CADA UNA" #x2106) + ("EULER CONSTANT" #x2107) + ("SCRUPLE" #x2108) + ("DEGREE FAHRENHEIT" #x2109) + ("SCRIPT SMALL G" #x210A) + ("SCRIPT CAPITAL H" #x210B) + ("BLACK-LETTER CAPITAL H" #x210C) + ("DOUBLE-STRUCK CAPITAL H" #x210D) + ("PLANCK CONSTANT" #x210E) + ("PLANCK CONSTANT OVER TWO PI" #x210F) + ("SCRIPT CAPITAL I" #x2110) + ("BLACK-LETTER CAPITAL I" #x2111) + ("SCRIPT CAPITAL L" #x2112) + ("SCRIPT SMALL L" #x2113) + ("L B BAR SYMBOL" #x2114) + ("DOUBLE-STRUCK CAPITAL N" #x2115) + ("NUMERO SIGN" #x2116) + ("SOUND RECORDING COPYRIGHT" #x2117) + ("SCRIPT CAPITAL P" #x2118) + ("DOUBLE-STRUCK CAPITAL P" #x2119) + ("DOUBLE-STRUCK CAPITAL Q" #x211A) + ("SCRIPT CAPITAL R" #x211B) + ("BLACK-LETTER CAPITAL R" #x211C) + ("DOUBLE-STRUCK CAPITAL R" #x211D) + ("PRESCRIPTION TAKE" #x211E) + ("RESPONSE" #x211F) + ("SERVICE MARK" #x2120) + ("TELEPHONE SIGN" #x2121) + ("TRADE MARK SIGN" #x2122) + ("VERSICLE" #x2123) + ("DOUBLE-STRUCK CAPITAL Z" #x2124) + ("OUNCE SIGN" #x2125) + ("OHM SIGN" #x2126) + ("INVERTED OHM SIGN" #x2127) + ("BLACK-LETTER CAPITAL Z" #x2128) + ("TURNED GREEK SMALL LETTER IOTA" #x2129) + ("KELVIN SIGN" #x212A) + ("ANGSTROM SIGN" #x212B) + ("SCRIPT CAPITAL B" #x212C) + ("BLACK-LETTER CAPITAL C" #x212D) + ("ESTIMATED SYMBOL" #x212E) + ("SCRIPT SMALL E" #x212F) + ("SCRIPT CAPITAL E" #x2130) + ("SCRIPT CAPITAL F" #x2131) + ("TURNED CAPITAL F" #x2132) + ("SCRIPT CAPITAL M" #x2133) + ("SCRIPT SMALL O" #x2134) + ("ALEF SYMBOL" #x2135) + ("BET SYMBOL" #x2136) + ("GIMEL SYMBOL" #x2137) + ("DALET SYMBOL" #x2138) + ("INFORMATION SOURCE" #x2139) + ("ROTATED CAPITAL Q" #x213A) + ("DOUBLE-STRUCK SMALL GAMMA" #x213D) + ("DOUBLE-STRUCK CAPITAL GAMMA" #x213E) + ("DOUBLE-STRUCK CAPITAL PI" #x213F) + ("DOUBLE-STRUCK N-ARY SUMMATION" #x2140) + ("TURNED SANS-SERIF CAPITAL G" #x2141) + ("TURNED SANS-SERIF CAPITAL L" #x2142) + ("REVERSED SANS-SERIF CAPITAL L" #x2143) + ("TURNED SANS-SERIF CAPITAL Y" #x2144) + ("DOUBLE-STRUCK ITALIC CAPITAL D" #x2145) + ("DOUBLE-STRUCK ITALIC SMALL D" #x2146) + ("DOUBLE-STRUCK ITALIC SMALL E" #x2147) + ("DOUBLE-STRUCK ITALIC SMALL I" #x2148) + ("DOUBLE-STRUCK ITALIC SMALL J" #x2149) + ("PROPERTY LINE" #x214A) + ("TURNED AMPERSAND" #x214B) + )) + +;; arch-tag: 4233f761-f78d-4854-a019-2409f78514fa diff --git a/etc/nxml/02150-0218F.el b/etc/nxml/02150-0218F.el new file mode 100644 index 00000000000..ac2e7067fd1 --- /dev/null +++ b/etc/nxml/02150-0218F.el @@ -0,0 +1,53 @@ +(nxml-define-char-name-set 'number-forms + '(("VULGAR FRACTION ONE THIRD" #x2153) + ("VULGAR FRACTION TWO THIRDS" #x2154) + ("VULGAR FRACTION ONE FIFTH" #x2155) + ("VULGAR FRACTION TWO FIFTHS" #x2156) + ("VULGAR FRACTION THREE FIFTHS" #x2157) + ("VULGAR FRACTION FOUR FIFTHS" #x2158) + ("VULGAR FRACTION ONE SIXTH" #x2159) + ("VULGAR FRACTION FIVE SIXTHS" #x215A) + ("VULGAR FRACTION ONE EIGHTH" #x215B) + ("VULGAR FRACTION THREE EIGHTHS" #x215C) + ("VULGAR FRACTION FIVE EIGHTHS" #x215D) + ("VULGAR FRACTION SEVEN EIGHTHS" #x215E) + ("FRACTION NUMERATOR ONE" #x215F) + ("ROMAN NUMERAL ONE" #x2160) + ("ROMAN NUMERAL TWO" #x2161) + ("ROMAN NUMERAL THREE" #x2162) + ("ROMAN NUMERAL FOUR" #x2163) + ("ROMAN NUMERAL FIVE" #x2164) + ("ROMAN NUMERAL SIX" #x2165) + ("ROMAN NUMERAL SEVEN" #x2166) + ("ROMAN NUMERAL EIGHT" #x2167) + ("ROMAN NUMERAL NINE" #x2168) + ("ROMAN NUMERAL TEN" #x2169) + ("ROMAN NUMERAL ELEVEN" #x216A) + ("ROMAN NUMERAL TWELVE" #x216B) + ("ROMAN NUMERAL FIFTY" #x216C) + ("ROMAN NUMERAL ONE HUNDRED" #x216D) + ("ROMAN NUMERAL FIVE HUNDRED" #x216E) + ("ROMAN NUMERAL ONE THOUSAND" #x216F) + ("SMALL ROMAN NUMERAL ONE" #x2170) + ("SMALL ROMAN NUMERAL TWO" #x2171) + ("SMALL ROMAN NUMERAL THREE" #x2172) + ("SMALL ROMAN NUMERAL FOUR" #x2173) + ("SMALL ROMAN NUMERAL FIVE" #x2174) + ("SMALL ROMAN NUMERAL SIX" #x2175) + ("SMALL ROMAN NUMERAL SEVEN" #x2176) + ("SMALL ROMAN NUMERAL EIGHT" #x2177) + ("SMALL ROMAN NUMERAL NINE" #x2178) + ("SMALL ROMAN NUMERAL TEN" #x2179) + ("SMALL ROMAN NUMERAL ELEVEN" #x217A) + ("SMALL ROMAN NUMERAL TWELVE" #x217B) + ("SMALL ROMAN NUMERAL FIFTY" #x217C) + ("SMALL ROMAN NUMERAL ONE HUNDRED" #x217D) + ("SMALL ROMAN NUMERAL FIVE HUNDRED" #x217E) + ("SMALL ROMAN NUMERAL ONE THOUSAND" #x217F) + ("ROMAN NUMERAL ONE THOUSAND C D" #x2180) + ("ROMAN NUMERAL FIVE THOUSAND" #x2181) + ("ROMAN NUMERAL TEN THOUSAND" #x2182) + ("ROMAN NUMERAL REVERSED ONE HUNDRED" #x2183) + )) + +;; arch-tag: 9931b436-670d-471f-8214-f4c4454ae841 diff --git a/etc/nxml/02190-021FF.el b/etc/nxml/02190-021FF.el new file mode 100644 index 00000000000..4a2851a9552 --- /dev/null +++ b/etc/nxml/02190-021FF.el @@ -0,0 +1,116 @@ +(nxml-define-char-name-set 'arrows + '(("LEFTWARDS ARROW" #x2190) + ("UPWARDS ARROW" #x2191) + ("RIGHTWARDS ARROW" #x2192) + ("DOWNWARDS ARROW" #x2193) + ("LEFT RIGHT ARROW" #x2194) + ("UP DOWN ARROW" #x2195) + ("NORTH WEST ARROW" #x2196) + ("NORTH EAST ARROW" #x2197) + ("SOUTH EAST ARROW" #x2198) + ("SOUTH WEST ARROW" #x2199) + ("LEFTWARDS ARROW WITH STROKE" #x219A) + ("RIGHTWARDS ARROW WITH STROKE" #x219B) + ("LEFTWARDS WAVE ARROW" #x219C) + ("RIGHTWARDS WAVE ARROW" #x219D) + ("LEFTWARDS TWO HEADED ARROW" #x219E) + ("UPWARDS TWO HEADED ARROW" #x219F) + ("RIGHTWARDS TWO HEADED ARROW" #x21A0) + ("DOWNWARDS TWO HEADED ARROW" #x21A1) + ("LEFTWARDS ARROW WITH TAIL" #x21A2) + ("RIGHTWARDS ARROW WITH TAIL" #x21A3) + ("LEFTWARDS ARROW FROM BAR" #x21A4) + ("UPWARDS ARROW FROM BAR" #x21A5) + ("RIGHTWARDS ARROW FROM BAR" #x21A6) + ("DOWNWARDS ARROW FROM BAR" #x21A7) + ("UP DOWN ARROW WITH BASE" #x21A8) + ("LEFTWARDS ARROW WITH HOOK" #x21A9) + ("RIGHTWARDS ARROW WITH HOOK" #x21AA) + ("LEFTWARDS ARROW WITH LOOP" #x21AB) + ("RIGHTWARDS ARROW WITH LOOP" #x21AC) + ("LEFT RIGHT WAVE ARROW" #x21AD) + ("LEFT RIGHT ARROW WITH STROKE" #x21AE) + ("DOWNWARDS ZIGZAG ARROW" #x21AF) + ("UPWARDS ARROW WITH TIP LEFTWARDS" #x21B0) + ("UPWARDS ARROW WITH TIP RIGHTWARDS" #x21B1) + ("DOWNWARDS ARROW WITH TIP LEFTWARDS" #x21B2) + ("DOWNWARDS ARROW WITH TIP RIGHTWARDS" #x21B3) + ("RIGHTWARDS ARROW WITH CORNER DOWNWARDS" #x21B4) + ("DOWNWARDS ARROW WITH CORNER LEFTWARDS" #x21B5) + ("ANTICLOCKWISE TOP SEMICIRCLE ARROW" #x21B6) + ("CLOCKWISE TOP SEMICIRCLE ARROW" #x21B7) + ("NORTH WEST ARROW TO LONG BAR" #x21B8) + ("LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR" #x21B9) + ("ANTICLOCKWISE OPEN CIRCLE ARROW" #x21BA) + ("CLOCKWISE OPEN CIRCLE ARROW" #x21BB) + ("LEFTWARDS HARPOON WITH BARB UPWARDS" #x21BC) + ("LEFTWARDS HARPOON WITH BARB DOWNWARDS" #x21BD) + ("UPWARDS HARPOON WITH BARB RIGHTWARDS" #x21BE) + ("UPWARDS HARPOON WITH BARB LEFTWARDS" #x21BF) + ("RIGHTWARDS HARPOON WITH BARB UPWARDS" #x21C0) + ("RIGHTWARDS HARPOON WITH BARB DOWNWARDS" #x21C1) + ("DOWNWARDS HARPOON WITH BARB RIGHTWARDS" #x21C2) + ("DOWNWARDS HARPOON WITH BARB LEFTWARDS" #x21C3) + ("RIGHTWARDS ARROW OVER LEFTWARDS ARROW" #x21C4) + ("UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW" #x21C5) + ("LEFTWARDS ARROW OVER RIGHTWARDS ARROW" #x21C6) + ("LEFTWARDS PAIRED ARROWS" #x21C7) + ("UPWARDS PAIRED ARROWS" #x21C8) + ("RIGHTWARDS PAIRED ARROWS" #x21C9) + ("DOWNWARDS PAIRED ARROWS" #x21CA) + ("LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON" #x21CB) + ("RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON" #x21CC) + ("LEFTWARDS DOUBLE ARROW WITH STROKE" #x21CD) + ("LEFT RIGHT DOUBLE ARROW WITH STROKE" #x21CE) + ("RIGHTWARDS DOUBLE ARROW WITH STROKE" #x21CF) + ("LEFTWARDS DOUBLE ARROW" #x21D0) + ("UPWARDS DOUBLE ARROW" #x21D1) + ("RIGHTWARDS DOUBLE ARROW" #x21D2) + ("DOWNWARDS DOUBLE ARROW" #x21D3) + ("LEFT RIGHT DOUBLE ARROW" #x21D4) + ("UP DOWN DOUBLE ARROW" #x21D5) + ("NORTH WEST DOUBLE ARROW" #x21D6) + ("NORTH EAST DOUBLE ARROW" #x21D7) + ("SOUTH EAST DOUBLE ARROW" #x21D8) + ("SOUTH WEST DOUBLE ARROW" #x21D9) + ("LEFTWARDS TRIPLE ARROW" #x21DA) + ("RIGHTWARDS TRIPLE ARROW" #x21DB) + ("LEFTWARDS SQUIGGLE ARROW" #x21DC) + ("RIGHTWARDS SQUIGGLE ARROW" #x21DD) + ("UPWARDS ARROW WITH DOUBLE STROKE" #x21DE) + ("DOWNWARDS ARROW WITH DOUBLE STROKE" #x21DF) + ("LEFTWARDS DASHED ARROW" #x21E0) + ("UPWARDS DASHED ARROW" #x21E1) + ("RIGHTWARDS DASHED ARROW" #x21E2) + ("DOWNWARDS DASHED ARROW" #x21E3) + ("LEFTWARDS ARROW TO BAR" #x21E4) + ("RIGHTWARDS ARROW TO BAR" #x21E5) + ("LEFTWARDS WHITE ARROW" #x21E6) + ("UPWARDS WHITE ARROW" #x21E7) + ("RIGHTWARDS WHITE ARROW" #x21E8) + ("DOWNWARDS WHITE ARROW" #x21E9) + ("UPWARDS WHITE ARROW FROM BAR" #x21EA) + ("UPWARDS WHITE ARROW ON PEDESTAL" #x21EB) + ("UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR" #x21EC) + ("UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR" #x21ED) + ("UPWARDS WHITE DOUBLE ARROW" #x21EE) + ("UPWARDS WHITE DOUBLE ARROW ON PEDESTAL" #x21EF) + ("RIGHTWARDS WHITE ARROW FROM WALL" #x21F0) + ("NORTH WEST ARROW TO CORNER" #x21F1) + ("SOUTH EAST ARROW TO CORNER" #x21F2) + ("UP DOWN WHITE ARROW" #x21F3) + ("RIGHT ARROW WITH SMALL CIRCLE" #x21F4) + ("DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW" #x21F5) + ("THREE RIGHTWARDS ARROWS" #x21F6) + ("LEFTWARDS ARROW WITH VERTICAL STROKE" #x21F7) + ("RIGHTWARDS ARROW WITH VERTICAL STROKE" #x21F8) + ("LEFT RIGHT ARROW WITH VERTICAL STROKE" #x21F9) + ("LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FA) + ("RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FB) + ("LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE" #x21FC) + ("LEFTWARDS OPEN-HEADED ARROW" #x21FD) + ("RIGHTWARDS OPEN-HEADED ARROW" #x21FE) + ("LEFT RIGHT OPEN-HEADED ARROW" #x21FF) + )) + +;; arch-tag: de5679de-82b6-4d64-9b7c-79c35e12521d diff --git a/etc/nxml/02200-022FF.el b/etc/nxml/02200-022FF.el new file mode 100644 index 00000000000..be8278341d0 --- /dev/null +++ b/etc/nxml/02200-022FF.el @@ -0,0 +1,260 @@ +(nxml-define-char-name-set 'mathematical-operators + '(("FOR ALL" #x2200) + ("COMPLEMENT" #x2201) + ("PARTIAL DIFFERENTIAL" #x2202) + ("THERE EXISTS" #x2203) + ("THERE DOES NOT EXIST" #x2204) + ("EMPTY SET" #x2205) + ("INCREMENT" #x2206) + ("NABLA" #x2207) + ("ELEMENT OF" #x2208) + ("NOT AN ELEMENT OF" #x2209) + ("SMALL ELEMENT OF" #x220A) + ("CONTAINS AS MEMBER" #x220B) + ("DOES NOT CONTAIN AS MEMBER" #x220C) + ("SMALL CONTAINS AS MEMBER" #x220D) + ("END OF PROOF" #x220E) + ("N-ARY PRODUCT" #x220F) + ("N-ARY COPRODUCT" #x2210) + ("N-ARY SUMMATION" #x2211) + ("MINUS SIGN" #x2212) + ("MINUS-OR-PLUS SIGN" #x2213) + ("DOT PLUS" #x2214) + ("DIVISION SLASH" #x2215) + ("SET MINUS" #x2216) + ("ASTERISK OPERATOR" #x2217) + ("RING OPERATOR" #x2218) + ("BULLET OPERATOR" #x2219) + ("SQUARE ROOT" #x221A) + ("CUBE ROOT" #x221B) + ("FOURTH ROOT" #x221C) + ("PROPORTIONAL TO" #x221D) + ("INFINITY" #x221E) + ("RIGHT ANGLE" #x221F) + ("ANGLE" #x2220) + ("MEASURED ANGLE" #x2221) + ("SPHERICAL ANGLE" #x2222) + ("DIVIDES" #x2223) + ("DOES NOT DIVIDE" #x2224) + ("PARALLEL TO" #x2225) + ("NOT PARALLEL TO" #x2226) + ("LOGICAL AND" #x2227) + ("LOGICAL OR" #x2228) + ("INTERSECTION" #x2229) + ("UNION" #x222A) + ("INTEGRAL" #x222B) + ("DOUBLE INTEGRAL" #x222C) + ("TRIPLE INTEGRAL" #x222D) + ("CONTOUR INTEGRAL" #x222E) + ("SURFACE INTEGRAL" #x222F) + ("VOLUME INTEGRAL" #x2230) + ("CLOCKWISE INTEGRAL" #x2231) + ("CLOCKWISE CONTOUR INTEGRAL" #x2232) + ("ANTICLOCKWISE CONTOUR INTEGRAL" #x2233) + ("THEREFORE" #x2234) + ("BECAUSE" #x2235) + ("RATIO" #x2236) + ("PROPORTION" #x2237) + ("DOT MINUS" #x2238) + ("EXCESS" #x2239) + ("GEOMETRIC PROPORTION" #x223A) + ("HOMOTHETIC" #x223B) + ("TILDE OPERATOR" #x223C) + ("REVERSED TILDE" #x223D) + ("INVERTED LAZY S" #x223E) + ("SINE WAVE" #x223F) + ("WREATH PRODUCT" #x2240) + ("NOT TILDE" #x2241) + ("MINUS TILDE" #x2242) + ("ASYMPTOTICALLY EQUAL TO" #x2243) + ("NOT ASYMPTOTICALLY EQUAL TO" #x2244) + ("APPROXIMATELY EQUAL TO" #x2245) + ("APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" #x2246) + ("NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" #x2247) + ("ALMOST EQUAL TO" #x2248) + ("NOT ALMOST EQUAL TO" #x2249) + ("ALMOST EQUAL OR EQUAL TO" #x224A) + ("TRIPLE TILDE" #x224B) + ("ALL EQUAL TO" #x224C) + ("EQUIVALENT TO" #x224D) + ("GEOMETRICALLY EQUIVALENT TO" #x224E) + ("DIFFERENCE BETWEEN" #x224F) + ("APPROACHES THE LIMIT" #x2250) + ("GEOMETRICALLY EQUAL TO" #x2251) + ("APPROXIMATELY EQUAL TO OR THE IMAGE OF" #x2252) + ("IMAGE OF OR APPROXIMATELY EQUAL TO" #x2253) + ("COLON EQUALS" #x2254) + ("EQUALS COLON" #x2255) + ("RING IN EQUAL TO" #x2256) + ("RING EQUAL TO" #x2257) + ("CORRESPONDS TO" #x2258) + ("ESTIMATES" #x2259) + ("EQUIANGULAR TO" #x225A) + ("STAR EQUALS" #x225B) + ("DELTA EQUAL TO" #x225C) + ("EQUAL TO BY DEFINITION" #x225D) + ("MEASURED BY" #x225E) + ("QUESTIONED EQUAL TO" #x225F) + ("NOT EQUAL TO" #x2260) + ("IDENTICAL TO" #x2261) + ("NOT IDENTICAL TO" #x2262) + ("STRICTLY EQUIVALENT TO" #x2263) + ("LESS-THAN OR EQUAL TO" #x2264) + ("GREATER-THAN OR EQUAL TO" #x2265) + ("LESS-THAN OVER EQUAL TO" #x2266) + ("GREATER-THAN OVER EQUAL TO" #x2267) + ("LESS-THAN BUT NOT EQUAL TO" #x2268) + ("GREATER-THAN BUT NOT EQUAL TO" #x2269) + ("MUCH LESS-THAN" #x226A) + ("MUCH GREATER-THAN" #x226B) + ("BETWEEN" #x226C) + ("NOT EQUIVALENT TO" #x226D) + ("NOT LESS-THAN" #x226E) + ("NOT GREATER-THAN" #x226F) + ("NEITHER LESS-THAN NOR EQUAL TO" #x2270) + ("NEITHER GREATER-THAN NOR EQUAL TO" #x2271) + ("LESS-THAN OR EQUIVALENT TO" #x2272) + ("GREATER-THAN OR EQUIVALENT TO" #x2273) + ("NEITHER LESS-THAN NOR EQUIVALENT TO" #x2274) + ("NEITHER GREATER-THAN NOR EQUIVALENT TO" #x2275) + ("LESS-THAN OR GREATER-THAN" #x2276) + ("GREATER-THAN OR LESS-THAN" #x2277) + ("NEITHER LESS-THAN NOR GREATER-THAN" #x2278) + ("NEITHER GREATER-THAN NOR LESS-THAN" #x2279) + ("PRECEDES" #x227A) + ("SUCCEEDS" #x227B) + ("PRECEDES OR EQUAL TO" #x227C) + ("SUCCEEDS OR EQUAL TO" #x227D) + ("PRECEDES OR EQUIVALENT TO" #x227E) + ("SUCCEEDS OR EQUIVALENT TO" #x227F) + ("DOES NOT PRECEDE" #x2280) + ("DOES NOT SUCCEED" #x2281) + ("SUBSET OF" #x2282) + ("SUPERSET OF" #x2283) + ("NOT A SUBSET OF" #x2284) + ("NOT A SUPERSET OF" #x2285) + ("SUBSET OF OR EQUAL TO" #x2286) + ("SUPERSET OF OR EQUAL TO" #x2287) + ("NEITHER A SUBSET OF NOR EQUAL TO" #x2288) + ("NEITHER A SUPERSET OF NOR EQUAL TO" #x2289) + ("SUBSET OF WITH NOT EQUAL TO" #x228A) + ("SUPERSET OF WITH NOT EQUAL TO" #x228B) + ("MULTISET" #x228C) + ("MULTISET MULTIPLICATION" #x228D) + ("MULTISET UNION" #x228E) + ("SQUARE IMAGE OF" #x228F) + ("SQUARE ORIGINAL OF" #x2290) + ("SQUARE IMAGE OF OR EQUAL TO" #x2291) + ("SQUARE ORIGINAL OF OR EQUAL TO" #x2292) + ("SQUARE CAP" #x2293) + ("SQUARE CUP" #x2294) + ("CIRCLED PLUS" #x2295) + ("CIRCLED MINUS" #x2296) + ("CIRCLED TIMES" #x2297) + ("CIRCLED DIVISION SLASH" #x2298) + ("CIRCLED DOT OPERATOR" #x2299) + ("CIRCLED RING OPERATOR" #x229A) + ("CIRCLED ASTERISK OPERATOR" #x229B) + ("CIRCLED EQUALS" #x229C) + ("CIRCLED DASH" #x229D) + ("SQUARED PLUS" #x229E) + ("SQUARED MINUS" #x229F) + ("SQUARED TIMES" #x22A0) + ("SQUARED DOT OPERATOR" #x22A1) + ("RIGHT TACK" #x22A2) + ("LEFT TACK" #x22A3) + ("DOWN TACK" #x22A4) + ("UP TACK" #x22A5) + ("ASSERTION" #x22A6) + ("MODELS" #x22A7) + ("TRUE" #x22A8) + ("FORCES" #x22A9) + ("TRIPLE VERTICAL BAR RIGHT TURNSTILE" #x22AA) + ("DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AB) + ("DOES NOT PROVE" #x22AC) + ("NOT TRUE" #x22AD) + ("DOES NOT FORCE" #x22AE) + ("NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AF) + ("PRECEDES UNDER RELATION" #x22B0) + ("SUCCEEDS UNDER RELATION" #x22B1) + ("NORMAL SUBGROUP OF" #x22B2) + ("CONTAINS AS NORMAL SUBGROUP" #x22B3) + ("NORMAL SUBGROUP OF OR EQUAL TO" #x22B4) + ("CONTAINS AS NORMAL SUBGROUP OR EQUAL TO" #x22B5) + ("ORIGINAL OF" #x22B6) + ("IMAGE OF" #x22B7) + ("MULTIMAP" #x22B8) + ("HERMITIAN CONJUGATE MATRIX" #x22B9) + ("INTERCALATE" #x22BA) + ("XOR" #x22BB) + ("NAND" #x22BC) + ("NOR" #x22BD) + ("RIGHT ANGLE WITH ARC" #x22BE) + ("RIGHT TRIANGLE" #x22BF) + ("N-ARY LOGICAL AND" #x22C0) + ("N-ARY LOGICAL OR" #x22C1) + ("N-ARY INTERSECTION" #x22C2) + ("N-ARY UNION" #x22C3) + ("DIAMOND OPERATOR" #x22C4) + ("DOT OPERATOR" #x22C5) + ("STAR OPERATOR" #x22C6) + ("DIVISION TIMES" #x22C7) + ("BOWTIE" #x22C8) + ("LEFT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22C9) + ("RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22CA) + ("LEFT SEMIDIRECT PRODUCT" #x22CB) + ("RIGHT SEMIDIRECT PRODUCT" #x22CC) + ("REVERSED TILDE EQUALS" #x22CD) + ("CURLY LOGICAL OR" #x22CE) + ("CURLY LOGICAL AND" #x22CF) + ("DOUBLE SUBSET" #x22D0) + ("DOUBLE SUPERSET" #x22D1) + ("DOUBLE INTERSECTION" #x22D2) + ("DOUBLE UNION" #x22D3) + ("PITCHFORK" #x22D4) + ("EQUAL AND PARALLEL TO" #x22D5) + ("LESS-THAN WITH DOT" #x22D6) + ("GREATER-THAN WITH DOT" #x22D7) + ("VERY MUCH LESS-THAN" #x22D8) + ("VERY MUCH GREATER-THAN" #x22D9) + ("LESS-THAN EQUAL TO OR GREATER-THAN" #x22DA) + ("GREATER-THAN EQUAL TO OR LESS-THAN" #x22DB) + ("EQUAL TO OR LESS-THAN" #x22DC) + ("EQUAL TO OR GREATER-THAN" #x22DD) + ("EQUAL TO OR PRECEDES" #x22DE) + ("EQUAL TO OR SUCCEEDS" #x22DF) + ("DOES NOT PRECEDE OR EQUAL" #x22E0) + ("DOES NOT SUCCEED OR EQUAL" #x22E1) + ("NOT SQUARE IMAGE OF OR EQUAL TO" #x22E2) + ("NOT SQUARE ORIGINAL OF OR EQUAL TO" #x22E3) + ("SQUARE IMAGE OF OR NOT EQUAL TO" #x22E4) + ("SQUARE ORIGINAL OF OR NOT EQUAL TO" #x22E5) + ("LESS-THAN BUT NOT EQUIVALENT TO" #x22E6) + ("GREATER-THAN BUT NOT EQUIVALENT TO" #x22E7) + ("PRECEDES BUT NOT EQUIVALENT TO" #x22E8) + ("SUCCEEDS BUT NOT EQUIVALENT TO" #x22E9) + ("NOT NORMAL SUBGROUP OF" #x22EA) + ("DOES NOT CONTAIN AS NORMAL SUBGROUP" #x22EB) + ("NOT NORMAL SUBGROUP OF OR EQUAL TO" #x22EC) + ("DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL" #x22ED) + ("VERTICAL ELLIPSIS" #x22EE) + ("MIDLINE HORIZONTAL ELLIPSIS" #x22EF) + ("UP RIGHT DIAGONAL ELLIPSIS" #x22F0) + ("DOWN RIGHT DIAGONAL ELLIPSIS" #x22F1) + ("ELEMENT OF WITH LONG HORIZONTAL STROKE" #x22F2) + ("ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F3) + ("SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F4) + ("ELEMENT OF WITH DOT ABOVE" #x22F5) + ("ELEMENT OF WITH OVERBAR" #x22F6) + ("SMALL ELEMENT OF WITH OVERBAR" #x22F7) + ("ELEMENT OF WITH UNDERBAR" #x22F8) + ("ELEMENT OF WITH TWO HORIZONTAL STROKES" #x22F9) + ("CONTAINS WITH LONG HORIZONTAL STROKE" #x22FA) + ("CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FB) + ("SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FC) + ("CONTAINS WITH OVERBAR" #x22FD) + ("SMALL CONTAINS WITH OVERBAR" #x22FE) + ("Z NOTATION BAG MEMBERSHIP" #x22FF) + )) + +;; arch-tag: 12911bcf-5cc6-4b8a-9f0e-48c0b6f85566 diff --git a/etc/nxml/02300-023FF.el b/etc/nxml/02300-023FF.el new file mode 100644 index 00000000000..58526bd98ec --- /dev/null +++ b/etc/nxml/02300-023FF.el @@ -0,0 +1,211 @@ +(nxml-define-char-name-set 'miscellaneous-technical + '(("DIAMETER SIGN" #x2300) + ("ELECTRIC ARROW" #x2301) + ("HOUSE" #x2302) + ("UP ARROWHEAD" #x2303) + ("DOWN ARROWHEAD" #x2304) + ("PROJECTIVE" #x2305) + ("PERSPECTIVE" #x2306) + ("WAVY LINE" #x2307) + ("LEFT CEILING" #x2308) + ("RIGHT CEILING" #x2309) + ("LEFT FLOOR" #x230A) + ("RIGHT FLOOR" #x230B) + ("BOTTOM RIGHT CROP" #x230C) + ("BOTTOM LEFT CROP" #x230D) + ("TOP RIGHT CROP" #x230E) + ("TOP LEFT CROP" #x230F) + ("REVERSED NOT SIGN" #x2310) + ("SQUARE LOZENGE" #x2311) + ("ARC" #x2312) + ("SEGMENT" #x2313) + ("SECTOR" #x2314) + ("TELEPHONE RECORDER" #x2315) + ("POSITION INDICATOR" #x2316) + ("VIEWDATA SQUARE" #x2317) + ("PLACE OF INTEREST SIGN" #x2318) + ("TURNED NOT SIGN" #x2319) + ("WATCH" #x231A) + ("HOURGLASS" #x231B) + ("TOP LEFT CORNER" #x231C) + ("TOP RIGHT CORNER" #x231D) + ("BOTTOM LEFT CORNER" #x231E) + ("BOTTOM RIGHT CORNER" #x231F) + ("TOP HALF INTEGRAL" #x2320) + ("BOTTOM HALF INTEGRAL" #x2321) + ("FROWN" #x2322) + ("SMILE" #x2323) + ("UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" #x2324) + ("OPTION KEY" #x2325) + ("ERASE TO THE RIGHT" #x2326) + ("X IN A RECTANGLE BOX" #x2327) + ("KEYBOARD" #x2328) + ("LEFT-POINTING ANGLE BRACKET" #x2329) + ("RIGHT-POINTING ANGLE BRACKET" #x232A) + ("ERASE TO THE LEFT" #x232B) + ("BENZENE RING" #x232C) + ("CYLINDRICITY" #x232D) + ("ALL AROUND-PROFILE" #x232E) + ("SYMMETRY" #x232F) + ("TOTAL RUNOUT" #x2330) + ("DIMENSION ORIGIN" #x2331) + ("CONICAL TAPER" #x2332) + ("SLOPE" #x2333) + ("COUNTERBORE" #x2334) + ("COUNTERSINK" #x2335) + ("APL FUNCTIONAL SYMBOL I-BEAM" #x2336) + ("APL FUNCTIONAL SYMBOL SQUISH QUAD" #x2337) + ("APL FUNCTIONAL SYMBOL QUAD EQUAL" #x2338) + ("APL FUNCTIONAL SYMBOL QUAD DIVIDE" #x2339) + ("APL FUNCTIONAL SYMBOL QUAD DIAMOND" #x233A) + ("APL FUNCTIONAL SYMBOL QUAD JOT" #x233B) + ("APL FUNCTIONAL SYMBOL QUAD CIRCLE" #x233C) + ("APL FUNCTIONAL SYMBOL CIRCLE STILE" #x233D) + ("APL FUNCTIONAL SYMBOL CIRCLE JOT" #x233E) + ("APL FUNCTIONAL SYMBOL SLASH BAR" #x233F) + ("APL FUNCTIONAL SYMBOL BACKSLASH BAR" #x2340) + ("APL FUNCTIONAL SYMBOL QUAD SLASH" #x2341) + ("APL FUNCTIONAL SYMBOL QUAD BACKSLASH" #x2342) + ("APL FUNCTIONAL SYMBOL QUAD LESS-THAN" #x2343) + ("APL FUNCTIONAL SYMBOL QUAD GREATER-THAN" #x2344) + ("APL FUNCTIONAL SYMBOL LEFTWARDS VANE" #x2345) + ("APL FUNCTIONAL SYMBOL RIGHTWARDS VANE" #x2346) + ("APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW" #x2347) + ("APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW" #x2348) + ("APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH" #x2349) + ("APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR" #x234A) + ("APL FUNCTIONAL SYMBOL DELTA STILE" #x234B) + ("APL FUNCTIONAL SYMBOL QUAD DOWN CARET" #x234C) + ("APL FUNCTIONAL SYMBOL QUAD DELTA" #x234D) + ("APL FUNCTIONAL SYMBOL DOWN TACK JOT" #x234E) + ("APL FUNCTIONAL SYMBOL UPWARDS VANE" #x234F) + ("APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW" #x2350) + ("APL FUNCTIONAL SYMBOL UP TACK OVERBAR" #x2351) + ("APL FUNCTIONAL SYMBOL DEL STILE" #x2352) + ("APL FUNCTIONAL SYMBOL QUAD UP CARET" #x2353) + ("APL FUNCTIONAL SYMBOL QUAD DEL" #x2354) + ("APL FUNCTIONAL SYMBOL UP TACK JOT" #x2355) + ("APL FUNCTIONAL SYMBOL DOWNWARDS VANE" #x2356) + ("APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW" #x2357) + ("APL FUNCTIONAL SYMBOL QUOTE UNDERBAR" #x2358) + ("APL FUNCTIONAL SYMBOL DELTA UNDERBAR" #x2359) + ("APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR" #x235A) + ("APL FUNCTIONAL SYMBOL JOT UNDERBAR" #x235B) + ("APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR" #x235C) + ("APL FUNCTIONAL SYMBOL UP SHOE JOT" #x235D) + ("APL FUNCTIONAL SYMBOL QUOTE QUAD" #x235E) + ("APL FUNCTIONAL SYMBOL CIRCLE STAR" #x235F) + ("APL FUNCTIONAL SYMBOL QUAD COLON" #x2360) + ("APL FUNCTIONAL SYMBOL UP TACK DIAERESIS" #x2361) + ("APL FUNCTIONAL SYMBOL DEL DIAERESIS" #x2362) + ("APL FUNCTIONAL SYMBOL STAR DIAERESIS" #x2363) + ("APL FUNCTIONAL SYMBOL JOT DIAERESIS" #x2364) + ("APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS" #x2365) + ("APL FUNCTIONAL SYMBOL DOWN SHOE STILE" #x2366) + ("APL FUNCTIONAL SYMBOL LEFT SHOE STILE" #x2367) + ("APL FUNCTIONAL SYMBOL TILDE DIAERESIS" #x2368) + ("APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS" #x2369) + ("APL FUNCTIONAL SYMBOL COMMA BAR" #x236A) + ("APL FUNCTIONAL SYMBOL DEL TILDE" #x236B) + ("APL FUNCTIONAL SYMBOL ZILDE" #x236C) + ("APL FUNCTIONAL SYMBOL STILE TILDE" #x236D) + ("APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR" #x236E) + ("APL FUNCTIONAL SYMBOL QUAD NOT EQUAL" #x236F) + ("APL FUNCTIONAL SYMBOL QUAD QUESTION" #x2370) + ("APL FUNCTIONAL SYMBOL DOWN CARET TILDE" #x2371) + ("APL FUNCTIONAL SYMBOL UP CARET TILDE" #x2372) + ("APL FUNCTIONAL SYMBOL IOTA" #x2373) + ("APL FUNCTIONAL SYMBOL RHO" #x2374) + ("APL FUNCTIONAL SYMBOL OMEGA" #x2375) + ("APL FUNCTIONAL SYMBOL ALPHA UNDERBAR" #x2376) + ("APL FUNCTIONAL SYMBOL EPSILON UNDERBAR" #x2377) + ("APL FUNCTIONAL SYMBOL IOTA UNDERBAR" #x2378) + ("APL FUNCTIONAL SYMBOL OMEGA UNDERBAR" #x2379) + ("APL FUNCTIONAL SYMBOL ALPHA" #x237A) + ("NOT CHECK MARK" #x237B) + ("RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW" #x237C) + ("SHOULDERED OPEN BOX" #x237D) + ("BELL SYMBOL" #x237E) + ("VERTICAL LINE WITH MIDDLE DOT" #x237F) + ("INSERTION SYMBOL" #x2380) + ("CONTINUOUS UNDERLINE SYMBOL" #x2381) + ("DISCONTINUOUS UNDERLINE SYMBOL" #x2382) + ("EMPHASIS SYMBOL" #x2383) + ("COMPOSITION SYMBOL" #x2384) + ("WHITE SQUARE WITH CENTRE VERTICAL LINE" #x2385) + ("ENTER SYMBOL" #x2386) + ("ALTERNATIVE KEY SYMBOL" #x2387) + ("HELM SYMBOL" #x2388) + ("CIRCLED HORIZONTAL BAR WITH NOTCH" #x2389) + ("CIRCLED TRIANGLE DOWN" #x238A) + ("BROKEN CIRCLE WITH NORTHWEST ARROW" #x238B) + ("UNDO SYMBOL" #x238C) + ("MONOSTABLE SYMBOL" #x238D) + ("HYSTERESIS SYMBOL" #x238E) + ("OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL" #x238F) + ("OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL" #x2390) + ("PASSIVE-PULL-DOWN-OUTPUT SYMBOL" #x2391) + ("PASSIVE-PULL-UP-OUTPUT SYMBOL" #x2392) + ("DIRECT CURRENT SYMBOL FORM TWO" #x2393) + ("SOFTWARE-FUNCTION SYMBOL" #x2394) + ("APL FUNCTIONAL SYMBOL QUAD" #x2395) + ("DECIMAL SEPARATOR KEY SYMBOL" #x2396) + ("PREVIOUS PAGE" #x2397) + ("NEXT PAGE" #x2398) + ("PRINT SCREEN SYMBOL" #x2399) + ("CLEAR SCREEN SYMBOL" #x239A) + ("LEFT PARENTHESIS UPPER HOOK" #x239B) + ("LEFT PARENTHESIS EXTENSION" #x239C) + ("LEFT PARENTHESIS LOWER HOOK" #x239D) + ("RIGHT PARENTHESIS UPPER HOOK" #x239E) + ("RIGHT PARENTHESIS EXTENSION" #x239F) + ("RIGHT PARENTHESIS LOWER HOOK" #x23A0) + ("LEFT SQUARE BRACKET UPPER CORNER" #x23A1) + ("LEFT SQUARE BRACKET EXTENSION" #x23A2) + ("LEFT SQUARE BRACKET LOWER CORNER" #x23A3) + ("RIGHT SQUARE BRACKET UPPER CORNER" #x23A4) + ("RIGHT SQUARE BRACKET EXTENSION" #x23A5) + ("RIGHT SQUARE BRACKET LOWER CORNER" #x23A6) + ("LEFT CURLY BRACKET UPPER HOOK" #x23A7) + ("LEFT CURLY BRACKET MIDDLE PIECE" #x23A8) + ("LEFT CURLY BRACKET LOWER HOOK" #x23A9) + ("CURLY BRACKET EXTENSION" #x23AA) + ("RIGHT CURLY BRACKET UPPER HOOK" #x23AB) + ("RIGHT CURLY BRACKET MIDDLE PIECE" #x23AC) + ("RIGHT CURLY BRACKET LOWER HOOK" #x23AD) + ("INTEGRAL EXTENSION" #x23AE) + ("HORIZONTAL LINE EXTENSION" #x23AF) + ("UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION" #x23B0) + ("UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION" #x23B1) + ("SUMMATION TOP" #x23B2) + ("SUMMATION BOTTOM" #x23B3) + ("TOP SQUARE BRACKET" #x23B4) + ("BOTTOM SQUARE BRACKET" #x23B5) + ("BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET" #x23B6) + ("RADICAL SYMBOL BOTTOM" #x23B7) + ("LEFT VERTICAL BOX LINE" #x23B8) + ("RIGHT VERTICAL BOX LINE" #x23B9) + ("HORIZONTAL SCAN LINE-1" #x23BA) + ("HORIZONTAL SCAN LINE-3" #x23BB) + ("HORIZONTAL SCAN LINE-7" #x23BC) + ("HORIZONTAL SCAN LINE-9" #x23BD) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT" #x23BE) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT" #x23BF) + ("DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE" #x23C0) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE" #x23C1) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE" #x23C2) + ("DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE" #x23C3) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE" #x23C4) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE" #x23C5) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE" #x23C6) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE" #x23C7) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE" #x23C8) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL" #x23C9) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL" #x23CA) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT" #x23CB) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT" #x23CC) + ("SQUARE FOOT" #x23CD) + ("RETURN SYMBOL" #x23CE) + )) + +;; arch-tag: ee70bee5-f22f-4c0e-bed6-2606b27d94cf diff --git a/etc/nxml/02400-0243F.el b/etc/nxml/02400-0243F.el new file mode 100644 index 00000000000..ff6bdce8483 --- /dev/null +++ b/etc/nxml/02400-0243F.el @@ -0,0 +1,43 @@ +(nxml-define-char-name-set 'control-pictures + '(("SYMBOL FOR NULL" #x2400) + ("SYMBOL FOR START OF HEADING" #x2401) + ("SYMBOL FOR START OF TEXT" #x2402) + ("SYMBOL FOR END OF TEXT" #x2403) + ("SYMBOL FOR END OF TRANSMISSION" #x2404) + ("SYMBOL FOR ENQUIRY" #x2405) + ("SYMBOL FOR ACKNOWLEDGE" #x2406) + ("SYMBOL FOR BELL" #x2407) + ("SYMBOL FOR BACKSPACE" #x2408) + ("SYMBOL FOR HORIZONTAL TABULATION" #x2409) + ("SYMBOL FOR LINE FEED" #x240A) + ("SYMBOL FOR VERTICAL TABULATION" #x240B) + ("SYMBOL FOR FORM FEED" #x240C) + ("SYMBOL FOR CARRIAGE RETURN" #x240D) + ("SYMBOL FOR SHIFT OUT" #x240E) + ("SYMBOL FOR SHIFT IN" #x240F) + ("SYMBOL FOR DATA LINK ESCAPE" #x2410) + ("SYMBOL FOR DEVICE CONTROL ONE" #x2411) + ("SYMBOL FOR DEVICE CONTROL TWO" #x2412) + ("SYMBOL FOR DEVICE CONTROL THREE" #x2413) + ("SYMBOL FOR DEVICE CONTROL FOUR" #x2414) + ("SYMBOL FOR NEGATIVE ACKNOWLEDGE" #x2415) + ("SYMBOL FOR SYNCHRONOUS IDLE" #x2416) + ("SYMBOL FOR END OF TRANSMISSION BLOCK" #x2417) + ("SYMBOL FOR CANCEL" #x2418) + ("SYMBOL FOR END OF MEDIUM" #x2419) + ("SYMBOL FOR SUBSTITUTE" #x241A) + ("SYMBOL FOR ESCAPE" #x241B) + ("SYMBOL FOR FILE SEPARATOR" #x241C) + ("SYMBOL FOR GROUP SEPARATOR" #x241D) + ("SYMBOL FOR RECORD SEPARATOR" #x241E) + ("SYMBOL FOR UNIT SEPARATOR" #x241F) + ("SYMBOL FOR SPACE" #x2420) + ("SYMBOL FOR DELETE" #x2421) + ("BLANK SYMBOL" #x2422) + ("OPEN BOX" #x2423) + ("SYMBOL FOR NEWLINE" #x2424) + ("SYMBOL FOR DELETE FORM TWO" #x2425) + ("SYMBOL FOR SUBSTITUTE FORM TWO" #x2426) + )) + +;; arch-tag: efc349c9-065d-4033-b261-7cb961c54072 diff --git a/etc/nxml/02440-0245F.el b/etc/nxml/02440-0245F.el new file mode 100644 index 00000000000..3a484cec296 --- /dev/null +++ b/etc/nxml/02440-0245F.el @@ -0,0 +1,15 @@ +(nxml-define-char-name-set 'optical-character-recognition + '(("OCR HOOK" #x2440) + ("OCR CHAIR" #x2441) + ("OCR FORK" #x2442) + ("OCR INVERTED FORK" #x2443) + ("OCR BELT BUCKLE" #x2444) + ("OCR BOW TIE" #x2445) + ("OCR BRANCH BANK IDENTIFICATION" #x2446) + ("OCR AMOUNT OF CHECK" #x2447) + ("OCR DASH" #x2448) + ("OCR CUSTOMER ACCOUNT NUMBER" #x2449) + ("OCR DOUBLE BACKSLASH" #x244A) + )) + +;; arch-tag: e532db31-38fd-4eee-8e47-974316fb6dd5 diff --git a/etc/nxml/02460-024FF.el b/etc/nxml/02460-024FF.el new file mode 100644 index 00000000000..4cbea4a5f6f --- /dev/null +++ b/etc/nxml/02460-024FF.el @@ -0,0 +1,163 @@ +(nxml-define-char-name-set 'enclosed-alphanumerics + '(("CIRCLED DIGIT ONE" #x2460) + ("CIRCLED DIGIT TWO" #x2461) + ("CIRCLED DIGIT THREE" #x2462) + ("CIRCLED DIGIT FOUR" #x2463) + ("CIRCLED DIGIT FIVE" #x2464) + ("CIRCLED DIGIT SIX" #x2465) + ("CIRCLED DIGIT SEVEN" #x2466) + ("CIRCLED DIGIT EIGHT" #x2467) + ("CIRCLED DIGIT NINE" #x2468) + ("CIRCLED NUMBER TEN" #x2469) + ("CIRCLED NUMBER ELEVEN" #x246A) + ("CIRCLED NUMBER TWELVE" #x246B) + ("CIRCLED NUMBER THIRTEEN" #x246C) + ("CIRCLED NUMBER FOURTEEN" #x246D) + ("CIRCLED NUMBER FIFTEEN" #x246E) + ("CIRCLED NUMBER SIXTEEN" #x246F) + ("CIRCLED NUMBER SEVENTEEN" #x2470) + ("CIRCLED NUMBER EIGHTEEN" #x2471) + ("CIRCLED NUMBER NINETEEN" #x2472) + ("CIRCLED NUMBER TWENTY" #x2473) + ("PARENTHESIZED DIGIT ONE" #x2474) + ("PARENTHESIZED DIGIT TWO" #x2475) + ("PARENTHESIZED DIGIT THREE" #x2476) + ("PARENTHESIZED DIGIT FOUR" #x2477) + ("PARENTHESIZED DIGIT FIVE" #x2478) + ("PARENTHESIZED DIGIT SIX" #x2479) + ("PARENTHESIZED DIGIT SEVEN" #x247A) + ("PARENTHESIZED DIGIT EIGHT" #x247B) + ("PARENTHESIZED DIGIT NINE" #x247C) + ("PARENTHESIZED NUMBER TEN" #x247D) + ("PARENTHESIZED NUMBER ELEVEN" #x247E) + ("PARENTHESIZED NUMBER TWELVE" #x247F) + ("PARENTHESIZED NUMBER THIRTEEN" #x2480) + ("PARENTHESIZED NUMBER FOURTEEN" #x2481) + ("PARENTHESIZED NUMBER FIFTEEN" #x2482) + ("PARENTHESIZED NUMBER SIXTEEN" #x2483) + ("PARENTHESIZED NUMBER SEVENTEEN" #x2484) + ("PARENTHESIZED NUMBER EIGHTEEN" #x2485) + ("PARENTHESIZED NUMBER NINETEEN" #x2486) + ("PARENTHESIZED NUMBER TWENTY" #x2487) + ("DIGIT ONE FULL STOP" #x2488) + ("DIGIT TWO FULL STOP" #x2489) + ("DIGIT THREE FULL STOP" #x248A) + ("DIGIT FOUR FULL STOP" #x248B) + ("DIGIT FIVE FULL STOP" #x248C) + ("DIGIT SIX FULL STOP" #x248D) + ("DIGIT SEVEN FULL STOP" #x248E) + ("DIGIT EIGHT FULL STOP" #x248F) + ("DIGIT NINE FULL STOP" #x2490) + ("NUMBER TEN FULL STOP" #x2491) + ("NUMBER ELEVEN FULL STOP" #x2492) + ("NUMBER TWELVE FULL STOP" #x2493) + ("NUMBER THIRTEEN FULL STOP" #x2494) + ("NUMBER FOURTEEN FULL STOP" #x2495) + ("NUMBER FIFTEEN FULL STOP" #x2496) + ("NUMBER SIXTEEN FULL STOP" #x2497) + ("NUMBER SEVENTEEN FULL STOP" #x2498) + ("NUMBER EIGHTEEN FULL STOP" #x2499) + ("NUMBER NINETEEN FULL STOP" #x249A) + ("NUMBER TWENTY FULL STOP" #x249B) + ("PARENTHESIZED LATIN SMALL LETTER A" #x249C) + ("PARENTHESIZED LATIN SMALL LETTER B" #x249D) + ("PARENTHESIZED LATIN SMALL LETTER C" #x249E) + ("PARENTHESIZED LATIN SMALL LETTER D" #x249F) + ("PARENTHESIZED LATIN SMALL LETTER E" #x24A0) + ("PARENTHESIZED LATIN SMALL LETTER F" #x24A1) + ("PARENTHESIZED LATIN SMALL LETTER G" #x24A2) + ("PARENTHESIZED LATIN SMALL LETTER H" #x24A3) + ("PARENTHESIZED LATIN SMALL LETTER I" #x24A4) + ("PARENTHESIZED LATIN SMALL LETTER J" #x24A5) + ("PARENTHESIZED LATIN SMALL LETTER K" #x24A6) + ("PARENTHESIZED LATIN SMALL LETTER L" #x24A7) + ("PARENTHESIZED LATIN SMALL LETTER M" #x24A8) + ("PARENTHESIZED LATIN SMALL LETTER N" #x24A9) + ("PARENTHESIZED LATIN SMALL LETTER O" #x24AA) + ("PARENTHESIZED LATIN SMALL LETTER P" #x24AB) + ("PARENTHESIZED LATIN SMALL LETTER Q" #x24AC) + ("PARENTHESIZED LATIN SMALL LETTER R" #x24AD) + ("PARENTHESIZED LATIN SMALL LETTER S" #x24AE) + ("PARENTHESIZED LATIN SMALL LETTER T" #x24AF) + ("PARENTHESIZED LATIN SMALL LETTER U" #x24B0) + ("PARENTHESIZED LATIN SMALL LETTER V" #x24B1) + ("PARENTHESIZED LATIN SMALL LETTER W" #x24B2) + ("PARENTHESIZED LATIN SMALL LETTER X" #x24B3) + ("PARENTHESIZED LATIN SMALL LETTER Y" #x24B4) + ("PARENTHESIZED LATIN SMALL LETTER Z" #x24B5) + ("CIRCLED LATIN CAPITAL LETTER A" #x24B6) + ("CIRCLED LATIN CAPITAL LETTER B" #x24B7) + ("CIRCLED LATIN CAPITAL LETTER C" #x24B8) + ("CIRCLED LATIN CAPITAL LETTER D" #x24B9) + ("CIRCLED LATIN CAPITAL LETTER E" #x24BA) + ("CIRCLED LATIN CAPITAL LETTER F" #x24BB) + ("CIRCLED LATIN CAPITAL LETTER G" #x24BC) + ("CIRCLED LATIN CAPITAL LETTER H" #x24BD) + ("CIRCLED LATIN CAPITAL LETTER I" #x24BE) + ("CIRCLED LATIN CAPITAL LETTER J" #x24BF) + ("CIRCLED LATIN CAPITAL LETTER K" #x24C0) + ("CIRCLED LATIN CAPITAL LETTER L" #x24C1) + ("CIRCLED LATIN CAPITAL LETTER M" #x24C2) + ("CIRCLED LATIN CAPITAL LETTER N" #x24C3) + ("CIRCLED LATIN CAPITAL LETTER O" #x24C4) + ("CIRCLED LATIN CAPITAL LETTER P" #x24C5) + ("CIRCLED LATIN CAPITAL LETTER Q" #x24C6) + ("CIRCLED LATIN CAPITAL LETTER R" #x24C7) + ("CIRCLED LATIN CAPITAL LETTER S" #x24C8) + ("CIRCLED LATIN CAPITAL LETTER T" #x24C9) + ("CIRCLED LATIN CAPITAL LETTER U" #x24CA) + ("CIRCLED LATIN CAPITAL LETTER V" #x24CB) + ("CIRCLED LATIN CAPITAL LETTER W" #x24CC) + ("CIRCLED LATIN CAPITAL LETTER X" #x24CD) + ("CIRCLED LATIN CAPITAL LETTER Y" #x24CE) + ("CIRCLED LATIN CAPITAL LETTER Z" #x24CF) + ("CIRCLED LATIN SMALL LETTER A" #x24D0) + ("CIRCLED LATIN SMALL LETTER B" #x24D1) + ("CIRCLED LATIN SMALL LETTER C" #x24D2) + ("CIRCLED LATIN SMALL LETTER D" #x24D3) + ("CIRCLED LATIN SMALL LETTER E" #x24D4) + ("CIRCLED LATIN SMALL LETTER F" #x24D5) + ("CIRCLED LATIN SMALL LETTER G" #x24D6) + ("CIRCLED LATIN SMALL LETTER H" #x24D7) + ("CIRCLED LATIN SMALL LETTER I" #x24D8) + ("CIRCLED LATIN SMALL LETTER J" #x24D9) + ("CIRCLED LATIN SMALL LETTER K" #x24DA) + ("CIRCLED LATIN SMALL LETTER L" #x24DB) + ("CIRCLED LATIN SMALL LETTER M" #x24DC) + ("CIRCLED LATIN SMALL LETTER N" #x24DD) + ("CIRCLED LATIN SMALL LETTER O" #x24DE) + ("CIRCLED LATIN SMALL LETTER P" #x24DF) + ("CIRCLED LATIN SMALL LETTER Q" #x24E0) + ("CIRCLED LATIN SMALL LETTER R" #x24E1) + ("CIRCLED LATIN SMALL LETTER S" #x24E2) + ("CIRCLED LATIN SMALL LETTER T" #x24E3) + ("CIRCLED LATIN SMALL LETTER U" #x24E4) + ("CIRCLED LATIN SMALL LETTER V" #x24E5) + ("CIRCLED LATIN SMALL LETTER W" #x24E6) + ("CIRCLED LATIN SMALL LETTER X" #x24E7) + ("CIRCLED LATIN SMALL LETTER Y" #x24E8) + ("CIRCLED LATIN SMALL LETTER Z" #x24E9) + ("CIRCLED DIGIT ZERO" #x24EA) + ("NEGATIVE CIRCLED NUMBER ELEVEN" #x24EB) + ("NEGATIVE CIRCLED NUMBER TWELVE" #x24EC) + ("NEGATIVE CIRCLED NUMBER THIRTEEN" #x24ED) + ("NEGATIVE CIRCLED NUMBER FOURTEEN" #x24EE) + ("NEGATIVE CIRCLED NUMBER FIFTEEN" #x24EF) + ("NEGATIVE CIRCLED NUMBER SIXTEEN" #x24F0) + ("NEGATIVE CIRCLED NUMBER SEVENTEEN" #x24F1) + ("NEGATIVE CIRCLED NUMBER EIGHTEEN" #x24F2) + ("NEGATIVE CIRCLED NUMBER NINETEEN" #x24F3) + ("NEGATIVE CIRCLED NUMBER TWENTY" #x24F4) + ("DOUBLE CIRCLED DIGIT ONE" #x24F5) + ("DOUBLE CIRCLED DIGIT TWO" #x24F6) + ("DOUBLE CIRCLED DIGIT THREE" #x24F7) + ("DOUBLE CIRCLED DIGIT FOUR" #x24F8) + ("DOUBLE CIRCLED DIGIT FIVE" #x24F9) + ("DOUBLE CIRCLED DIGIT SIX" #x24FA) + ("DOUBLE CIRCLED DIGIT SEVEN" #x24FB) + ("DOUBLE CIRCLED DIGIT EIGHT" #x24FC) + ("DOUBLE CIRCLED DIGIT NINE" #x24FD) + ("DOUBLE CIRCLED NUMBER TEN" #x24FE) + )) + +;; arch-tag: 2ec7ede5-ce9d-48b5-a725-dd3f177060f4 diff --git a/etc/nxml/02500-0257F.el b/etc/nxml/02500-0257F.el new file mode 100644 index 00000000000..97e63df862c --- /dev/null +++ b/etc/nxml/02500-0257F.el @@ -0,0 +1,132 @@ +(nxml-define-char-name-set 'box-drawing + '(("BOX DRAWINGS LIGHT HORIZONTAL" #x2500) + ("BOX DRAWINGS HEAVY HORIZONTAL" #x2501) + ("BOX DRAWINGS LIGHT VERTICAL" #x2502) + ("BOX DRAWINGS HEAVY VERTICAL" #x2503) + ("BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL" #x2504) + ("BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL" #x2505) + ("BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL" #x2506) + ("BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL" #x2507) + ("BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL" #x2508) + ("BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL" #x2509) + ("BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL" #x250A) + ("BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL" #x250B) + ("BOX DRAWINGS LIGHT DOWN AND RIGHT" #x250C) + ("BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY" #x250D) + ("BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT" #x250E) + ("BOX DRAWINGS HEAVY DOWN AND RIGHT" #x250F) + ("BOX DRAWINGS LIGHT DOWN AND LEFT" #x2510) + ("BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY" #x2511) + ("BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT" #x2512) + ("BOX DRAWINGS HEAVY DOWN AND LEFT" #x2513) + ("BOX DRAWINGS LIGHT UP AND RIGHT" #x2514) + ("BOX DRAWINGS UP LIGHT AND RIGHT HEAVY" #x2515) + ("BOX DRAWINGS UP HEAVY AND RIGHT LIGHT" #x2516) + ("BOX DRAWINGS HEAVY UP AND RIGHT" #x2517) + ("BOX DRAWINGS LIGHT UP AND LEFT" #x2518) + ("BOX DRAWINGS UP LIGHT AND LEFT HEAVY" #x2519) + ("BOX DRAWINGS UP HEAVY AND LEFT LIGHT" #x251A) + ("BOX DRAWINGS HEAVY UP AND LEFT" #x251B) + ("BOX DRAWINGS LIGHT VERTICAL AND RIGHT" #x251C) + ("BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY" #x251D) + ("BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT" #x251E) + ("BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT" #x251F) + ("BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT" #x2520) + ("BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY" #x2521) + ("BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY" #x2522) + ("BOX DRAWINGS HEAVY VERTICAL AND RIGHT" #x2523) + ("BOX DRAWINGS LIGHT VERTICAL AND LEFT" #x2524) + ("BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY" #x2525) + ("BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT" #x2526) + ("BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT" #x2527) + ("BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT" #x2528) + ("BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY" #x2529) + ("BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY" #x252A) + ("BOX DRAWINGS HEAVY VERTICAL AND LEFT" #x252B) + ("BOX DRAWINGS LIGHT DOWN AND HORIZONTAL" #x252C) + ("BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT" #x252D) + ("BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT" #x252E) + ("BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY" #x252F) + ("BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT" #x2530) + ("BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY" #x2531) + ("BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY" #x2532) + ("BOX DRAWINGS HEAVY DOWN AND HORIZONTAL" #x2533) + ("BOX DRAWINGS LIGHT UP AND HORIZONTAL" #x2534) + ("BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT" #x2535) + ("BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT" #x2536) + ("BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY" #x2537) + ("BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT" #x2538) + ("BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY" #x2539) + ("BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY" #x253A) + ("BOX DRAWINGS HEAVY UP AND HORIZONTAL" #x253B) + ("BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL" #x253C) + ("BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT" #x253D) + ("BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT" #x253E) + ("BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY" #x253F) + ("BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT" #x2540) + ("BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT" #x2541) + ("BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT" #x2542) + ("BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT" #x2543) + ("BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT" #x2544) + ("BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT" #x2545) + ("BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT" #x2546) + ("BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY" #x2547) + ("BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY" #x2548) + ("BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY" #x2549) + ("BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY" #x254A) + ("BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL" #x254B) + ("BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL" #x254C) + ("BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL" #x254D) + ("BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL" #x254E) + ("BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL" #x254F) + ("BOX DRAWINGS DOUBLE HORIZONTAL" #x2550) + ("BOX DRAWINGS DOUBLE VERTICAL" #x2551) + ("BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE" #x2552) + ("BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE" #x2553) + ("BOX DRAWINGS DOUBLE DOWN AND RIGHT" #x2554) + ("BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE" #x2555) + ("BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE" #x2556) + ("BOX DRAWINGS DOUBLE DOWN AND LEFT" #x2557) + ("BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE" #x2558) + ("BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE" #x2559) + ("BOX DRAWINGS DOUBLE UP AND RIGHT" #x255A) + ("BOX DRAWINGS UP SINGLE AND LEFT DOUBLE" #x255B) + ("BOX DRAWINGS UP DOUBLE AND LEFT SINGLE" #x255C) + ("BOX DRAWINGS DOUBLE UP AND LEFT" #x255D) + ("BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE" #x255E) + ("BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE" #x255F) + ("BOX DRAWINGS DOUBLE VERTICAL AND RIGHT" #x2560) + ("BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE" #x2561) + ("BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE" #x2562) + ("BOX DRAWINGS DOUBLE VERTICAL AND LEFT" #x2563) + ("BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE" #x2564) + ("BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE" #x2565) + ("BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL" #x2566) + ("BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE" #x2567) + ("BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE" #x2568) + ("BOX DRAWINGS DOUBLE UP AND HORIZONTAL" #x2569) + ("BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE" #x256A) + ("BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE" #x256B) + ("BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL" #x256C) + ("BOX DRAWINGS LIGHT ARC DOWN AND RIGHT" #x256D) + ("BOX DRAWINGS LIGHT ARC DOWN AND LEFT" #x256E) + ("BOX DRAWINGS LIGHT ARC UP AND LEFT" #x256F) + ("BOX DRAWINGS LIGHT ARC UP AND RIGHT" #x2570) + ("BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT" #x2571) + ("BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT" #x2572) + ("BOX DRAWINGS LIGHT DIAGONAL CROSS" #x2573) + ("BOX DRAWINGS LIGHT LEFT" #x2574) + ("BOX DRAWINGS LIGHT UP" #x2575) + ("BOX DRAWINGS LIGHT RIGHT" #x2576) + ("BOX DRAWINGS LIGHT DOWN" #x2577) + ("BOX DRAWINGS HEAVY LEFT" #x2578) + ("BOX DRAWINGS HEAVY UP" #x2579) + ("BOX DRAWINGS HEAVY RIGHT" #x257A) + ("BOX DRAWINGS HEAVY DOWN" #x257B) + ("BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT" #x257C) + ("BOX DRAWINGS LIGHT UP AND HEAVY DOWN" #x257D) + ("BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT" #x257E) + ("BOX DRAWINGS HEAVY UP AND LIGHT DOWN" #x257F) + )) + +;; arch-tag: 6870ad7c-84cf-42a0-82ce-f6863da1c7ad diff --git a/etc/nxml/02580-0259F.el b/etc/nxml/02580-0259F.el new file mode 100644 index 00000000000..bc4d6a12bff --- /dev/null +++ b/etc/nxml/02580-0259F.el @@ -0,0 +1,36 @@ +(nxml-define-char-name-set 'block-elements + '(("UPPER HALF BLOCK" #x2580) + ("LOWER ONE EIGHTH BLOCK" #x2581) + ("LOWER ONE QUARTER BLOCK" #x2582) + ("LOWER THREE EIGHTHS BLOCK" #x2583) + ("LOWER HALF BLOCK" #x2584) + ("LOWER FIVE EIGHTHS BLOCK" #x2585) + ("LOWER THREE QUARTERS BLOCK" #x2586) + ("LOWER SEVEN EIGHTHS BLOCK" #x2587) + ("FULL BLOCK" #x2588) + ("LEFT SEVEN EIGHTHS BLOCK" #x2589) + ("LEFT THREE QUARTERS BLOCK" #x258A) + ("LEFT FIVE EIGHTHS BLOCK" #x258B) + ("LEFT HALF BLOCK" #x258C) + ("LEFT THREE EIGHTHS BLOCK" #x258D) + ("LEFT ONE QUARTER BLOCK" #x258E) + ("LEFT ONE EIGHTH BLOCK" #x258F) + ("RIGHT HALF BLOCK" #x2590) + ("LIGHT SHADE" #x2591) + ("MEDIUM SHADE" #x2592) + ("DARK SHADE" #x2593) + ("UPPER ONE EIGHTH BLOCK" #x2594) + ("RIGHT ONE EIGHTH BLOCK" #x2595) + ("QUADRANT LOWER LEFT" #x2596) + ("QUADRANT LOWER RIGHT" #x2597) + ("QUADRANT UPPER LEFT" #x2598) + ("QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT" #x2599) + ("QUADRANT UPPER LEFT AND LOWER RIGHT" #x259A) + ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT" #x259B) + ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT" #x259C) + ("QUADRANT UPPER RIGHT" #x259D) + ("QUADRANT UPPER RIGHT AND LOWER LEFT" #x259E) + ("QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT" #x259F) + )) + +;; arch-tag: 51c971a7-cd90-42a5-bf18-dd9683bcab41 diff --git a/etc/nxml/025A0-025FF.el b/etc/nxml/025A0-025FF.el new file mode 100644 index 00000000000..47284d4a126 --- /dev/null +++ b/etc/nxml/025A0-025FF.el @@ -0,0 +1,100 @@ +(nxml-define-char-name-set 'geometric-shapes + '(("BLACK SQUARE" #x25A0) + ("WHITE SQUARE" #x25A1) + ("WHITE SQUARE WITH ROUNDED CORNERS" #x25A2) + ("WHITE SQUARE CONTAINING BLACK SMALL SQUARE" #x25A3) + ("SQUARE WITH HORIZONTAL FILL" #x25A4) + ("SQUARE WITH VERTICAL FILL" #x25A5) + ("SQUARE WITH ORTHOGONAL CROSSHATCH FILL" #x25A6) + ("SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL" #x25A7) + ("SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL" #x25A8) + ("SQUARE WITH DIAGONAL CROSSHATCH FILL" #x25A9) + ("BLACK SMALL SQUARE" #x25AA) + ("WHITE SMALL SQUARE" #x25AB) + ("BLACK RECTANGLE" #x25AC) + ("WHITE RECTANGLE" #x25AD) + ("BLACK VERTICAL RECTANGLE" #x25AE) + ("WHITE VERTICAL RECTANGLE" #x25AF) + ("BLACK PARALLELOGRAM" #x25B0) + ("WHITE PARALLELOGRAM" #x25B1) + ("BLACK UP-POINTING TRIANGLE" #x25B2) + ("WHITE UP-POINTING TRIANGLE" #x25B3) + ("BLACK UP-POINTING SMALL TRIANGLE" #x25B4) + ("WHITE UP-POINTING SMALL TRIANGLE" #x25B5) + ("BLACK RIGHT-POINTING TRIANGLE" #x25B6) + ("WHITE RIGHT-POINTING TRIANGLE" #x25B7) + ("BLACK RIGHT-POINTING SMALL TRIANGLE" #x25B8) + ("WHITE RIGHT-POINTING SMALL TRIANGLE" #x25B9) + ("BLACK RIGHT-POINTING POINTER" #x25BA) + ("WHITE RIGHT-POINTING POINTER" #x25BB) + ("BLACK DOWN-POINTING TRIANGLE" #x25BC) + ("WHITE DOWN-POINTING TRIANGLE" #x25BD) + ("BLACK DOWN-POINTING SMALL TRIANGLE" #x25BE) + ("WHITE DOWN-POINTING SMALL TRIANGLE" #x25BF) + ("BLACK LEFT-POINTING TRIANGLE" #x25C0) + ("WHITE LEFT-POINTING TRIANGLE" #x25C1) + ("BLACK LEFT-POINTING SMALL TRIANGLE" #x25C2) + ("WHITE LEFT-POINTING SMALL TRIANGLE" #x25C3) + ("BLACK LEFT-POINTING POINTER" #x25C4) + ("WHITE LEFT-POINTING POINTER" #x25C5) + ("BLACK DIAMOND" #x25C6) + ("WHITE DIAMOND" #x25C7) + ("WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND" #x25C8) + ("FISHEYE" #x25C9) + ("LOZENGE" #x25CA) + ("WHITE CIRCLE" #x25CB) + ("DOTTED CIRCLE" #x25CC) + ("CIRCLE WITH VERTICAL FILL" #x25CD) + ("BULLSEYE" #x25CE) + ("BLACK CIRCLE" #x25CF) + ("CIRCLE WITH LEFT HALF BLACK" #x25D0) + ("CIRCLE WITH RIGHT HALF BLACK" #x25D1) + ("CIRCLE WITH LOWER HALF BLACK" #x25D2) + ("CIRCLE WITH UPPER HALF BLACK" #x25D3) + ("CIRCLE WITH UPPER RIGHT QUADRANT BLACK" #x25D4) + ("CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK" #x25D5) + ("LEFT HALF BLACK CIRCLE" #x25D6) + ("RIGHT HALF BLACK CIRCLE" #x25D7) + ("INVERSE BULLET" #x25D8) + ("INVERSE WHITE CIRCLE" #x25D9) + ("UPPER HALF INVERSE WHITE CIRCLE" #x25DA) + ("LOWER HALF INVERSE WHITE CIRCLE" #x25DB) + ("UPPER LEFT QUADRANT CIRCULAR ARC" #x25DC) + ("UPPER RIGHT QUADRANT CIRCULAR ARC" #x25DD) + ("LOWER RIGHT QUADRANT CIRCULAR ARC" #x25DE) + ("LOWER LEFT QUADRANT CIRCULAR ARC" #x25DF) + ("UPPER HALF CIRCLE" #x25E0) + ("LOWER HALF CIRCLE" #x25E1) + ("BLACK LOWER RIGHT TRIANGLE" #x25E2) + ("BLACK LOWER LEFT TRIANGLE" #x25E3) + ("BLACK UPPER LEFT TRIANGLE" #x25E4) + ("BLACK UPPER RIGHT TRIANGLE" #x25E5) + ("WHITE BULLET" #x25E6) + ("SQUARE WITH LEFT HALF BLACK" #x25E7) + ("SQUARE WITH RIGHT HALF BLACK" #x25E8) + ("SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK" #x25E9) + ("SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK" #x25EA) + ("WHITE SQUARE WITH VERTICAL BISECTING LINE" #x25EB) + ("WHITE UP-POINTING TRIANGLE WITH DOT" #x25EC) + ("UP-POINTING TRIANGLE WITH LEFT HALF BLACK" #x25ED) + ("UP-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x25EE) + ("LARGE CIRCLE" #x25EF) + ("WHITE SQUARE WITH UPPER LEFT QUADRANT" #x25F0) + ("WHITE SQUARE WITH LOWER LEFT QUADRANT" #x25F1) + ("WHITE SQUARE WITH LOWER RIGHT QUADRANT" #x25F2) + ("WHITE SQUARE WITH UPPER RIGHT QUADRANT" #x25F3) + ("WHITE CIRCLE WITH UPPER LEFT QUADRANT" #x25F4) + ("WHITE CIRCLE WITH LOWER LEFT QUADRANT" #x25F5) + ("WHITE CIRCLE WITH LOWER RIGHT QUADRANT" #x25F6) + ("WHITE CIRCLE WITH UPPER RIGHT QUADRANT" #x25F7) + ("UPPER LEFT TRIANGLE" #x25F8) + ("UPPER RIGHT TRIANGLE" #x25F9) + ("LOWER LEFT TRIANGLE" #x25FA) + ("WHITE MEDIUM SQUARE" #x25FB) + ("BLACK MEDIUM SQUARE" #x25FC) + ("WHITE MEDIUM SMALL SQUARE" #x25FD) + ("BLACK MEDIUM SMALL SQUARE" #x25FE) + ("LOWER RIGHT TRIANGLE" #x25FF) + )) + +;; arch-tag: ac97acd5-57a6-4521-bee4-8c2d0a9bd06a diff --git a/etc/nxml/02600-026FF.el b/etc/nxml/02600-026FF.el new file mode 100644 index 00000000000..c0d0a065aef --- /dev/null +++ b/etc/nxml/02600-026FF.el @@ -0,0 +1,137 @@ +(nxml-define-char-name-set 'miscellaneous-symbols + '(("BLACK SUN WITH RAYS" #x2600) + ("CLOUD" #x2601) + ("UMBRELLA" #x2602) + ("SNOWMAN" #x2603) + ("COMET" #x2604) + ("BLACK STAR" #x2605) + ("WHITE STAR" #x2606) + ("LIGHTNING" #x2607) + ("THUNDERSTORM" #x2608) + ("SUN" #x2609) + ("ASCENDING NODE" #x260A) + ("DESCENDING NODE" #x260B) + ("CONJUNCTION" #x260C) + ("OPPOSITION" #x260D) + ("BLACK TELEPHONE" #x260E) + ("WHITE TELEPHONE" #x260F) + ("BALLOT BOX" #x2610) + ("BALLOT BOX WITH CHECK" #x2611) + ("BALLOT BOX WITH X" #x2612) + ("SALTIRE" #x2613) + ("WHITE SHOGI PIECE" #x2616) + ("BLACK SHOGI PIECE" #x2617) + ("REVERSED ROTATED FLORAL HEART BULLET" #x2619) + ("BLACK LEFT POINTING INDEX" #x261A) + ("BLACK RIGHT POINTING INDEX" #x261B) + ("WHITE LEFT POINTING INDEX" #x261C) + ("WHITE UP POINTING INDEX" #x261D) + ("WHITE RIGHT POINTING INDEX" #x261E) + ("WHITE DOWN POINTING INDEX" #x261F) + ("SKULL AND CROSSBONES" #x2620) + ("CAUTION SIGN" #x2621) + ("RADIOACTIVE SIGN" #x2622) + ("BIOHAZARD SIGN" #x2623) + ("CADUCEUS" #x2624) + ("ANKH" #x2625) + ("ORTHODOX CROSS" #x2626) + ("CHI RHO" #x2627) + ("CROSS OF LORRAINE" #x2628) + ("CROSS OF JERUSALEM" #x2629) + ("STAR AND CRESCENT" #x262A) + ("FARSI SYMBOL" #x262B) + ("ADI SHAKTI" #x262C) + ("HAMMER AND SICKLE" #x262D) + ("PEACE SYMBOL" #x262E) + ("YIN YANG" #x262F) + ("TRIGRAM FOR HEAVEN" #x2630) + ("TRIGRAM FOR LAKE" #x2631) + ("TRIGRAM FOR FIRE" #x2632) + ("TRIGRAM FOR THUNDER" #x2633) + ("TRIGRAM FOR WIND" #x2634) + ("TRIGRAM FOR WATER" #x2635) + ("TRIGRAM FOR MOUNTAIN" #x2636) + ("TRIGRAM FOR EARTH" #x2637) + ("WHEEL OF DHARMA" #x2638) + ("WHITE FROWNING FACE" #x2639) + ("WHITE SMILING FACE" #x263A) + ("BLACK SMILING FACE" #x263B) + ("WHITE SUN WITH RAYS" #x263C) + ("FIRST QUARTER MOON" #x263D) + ("LAST QUARTER MOON" #x263E) + ("MERCURY" #x263F) + ("FEMALE SIGN" #x2640) + ("EARTH" #x2641) + ("MALE SIGN" #x2642) + ("JUPITER" #x2643) + ("SATURN" #x2644) + ("URANUS" #x2645) + ("NEPTUNE" #x2646) + ("PLUTO" #x2647) + ("ARIES" #x2648) + ("TAURUS" #x2649) + ("GEMINI" #x264A) + ("CANCER" #x264B) + ("LEO" #x264C) + ("VIRGO" #x264D) + ("LIBRA" #x264E) + ("SCORPIUS" #x264F) + ("SAGITTARIUS" #x2650) + ("CAPRICORN" #x2651) + ("AQUARIUS" #x2652) + ("PISCES" #x2653) + ("WHITE CHESS KING" #x2654) + ("WHITE CHESS QUEEN" #x2655) + ("WHITE CHESS ROOK" #x2656) + ("WHITE CHESS BISHOP" #x2657) + ("WHITE CHESS KNIGHT" #x2658) + ("WHITE CHESS PAWN" #x2659) + ("BLACK CHESS KING" #x265A) + ("BLACK CHESS QUEEN" #x265B) + ("BLACK CHESS ROOK" #x265C) + ("BLACK CHESS BISHOP" #x265D) + ("BLACK CHESS KNIGHT" #x265E) + ("BLACK CHESS PAWN" #x265F) + ("BLACK SPADE SUIT" #x2660) + ("WHITE HEART SUIT" #x2661) + ("WHITE DIAMOND SUIT" #x2662) + ("BLACK CLUB SUIT" #x2663) + ("WHITE SPADE SUIT" #x2664) + ("BLACK HEART SUIT" #x2665) + ("BLACK DIAMOND SUIT" #x2666) + ("WHITE CLUB SUIT" #x2667) + ("HOT SPRINGS" #x2668) + ("QUARTER NOTE" #x2669) + ("EIGHTH NOTE" #x266A) + ("BEAMED EIGHTH NOTES" #x266B) + ("BEAMED SIXTEENTH NOTES" #x266C) + ("MUSIC FLAT SIGN" #x266D) + ("MUSIC NATURAL SIGN" #x266E) + ("MUSIC SHARP SIGN" #x266F) + ("WEST SYRIAC CROSS" #x2670) + ("EAST SYRIAC CROSS" #x2671) + ("UNIVERSAL RECYCLING SYMBOL" #x2672) + ("RECYCLING SYMBOL FOR TYPE-1 PLASTICS" #x2673) + ("RECYCLING SYMBOL FOR TYPE-2 PLASTICS" #x2674) + ("RECYCLING SYMBOL FOR TYPE-3 PLASTICS" #x2675) + ("RECYCLING SYMBOL FOR TYPE-4 PLASTICS" #x2676) + ("RECYCLING SYMBOL FOR TYPE-5 PLASTICS" #x2677) + ("RECYCLING SYMBOL FOR TYPE-6 PLASTICS" #x2678) + ("RECYCLING SYMBOL FOR TYPE-7 PLASTICS" #x2679) + ("RECYCLING SYMBOL FOR GENERIC MATERIALS" #x267A) + ("BLACK UNIVERSAL RECYCLING SYMBOL" #x267B) + ("RECYCLED PAPER SYMBOL" #x267C) + ("PARTIALLY-RECYCLED PAPER SYMBOL" #x267D) + ("DIE FACE-1" #x2680) + ("DIE FACE-2" #x2681) + ("DIE FACE-3" #x2682) + ("DIE FACE-4" #x2683) + ("DIE FACE-5" #x2684) + ("DIE FACE-6" #x2685) + ("WHITE CIRCLE WITH DOT RIGHT" #x2686) + ("WHITE CIRCLE WITH TWO DOTS" #x2687) + ("BLACK CIRCLE WITH WHITE DOT RIGHT" #x2688) + ("BLACK CIRCLE WITH TWO WHITE DOTS" #x2689) + )) + +;; arch-tag: b976b52e-eefc-4aa3-b96c-7f4998429f77 diff --git a/etc/nxml/02700-027BF.el b/etc/nxml/02700-027BF.el new file mode 100644 index 00000000000..47599255870 --- /dev/null +++ b/etc/nxml/02700-027BF.el @@ -0,0 +1,178 @@ +(nxml-define-char-name-set 'dingbats + '(("UPPER BLADE SCISSORS" #x2701) + ("BLACK SCISSORS" #x2702) + ("LOWER BLADE SCISSORS" #x2703) + ("WHITE SCISSORS" #x2704) + ("TELEPHONE LOCATION SIGN" #x2706) + ("TAPE DRIVE" #x2707) + ("AIRPLANE" #x2708) + ("ENVELOPE" #x2709) + ("VICTORY HAND" #x270C) + ("WRITING HAND" #x270D) + ("LOWER RIGHT PENCIL" #x270E) + ("PENCIL" #x270F) + ("UPPER RIGHT PENCIL" #x2710) + ("WHITE NIB" #x2711) + ("BLACK NIB" #x2712) + ("CHECK MARK" #x2713) + ("HEAVY CHECK MARK" #x2714) + ("MULTIPLICATION X" #x2715) + ("HEAVY MULTIPLICATION X" #x2716) + ("BALLOT X" #x2717) + ("HEAVY BALLOT X" #x2718) + ("OUTLINED GREEK CROSS" #x2719) + ("HEAVY GREEK CROSS" #x271A) + ("OPEN CENTRE CROSS" #x271B) + ("HEAVY OPEN CENTRE CROSS" #x271C) + ("LATIN CROSS" #x271D) + ("SHADOWED WHITE LATIN CROSS" #x271E) + ("OUTLINED LATIN CROSS" #x271F) + ("MALTESE CROSS" #x2720) + ("STAR OF DAVID" #x2721) + ("FOUR TEARDROP-SPOKED ASTERISK" #x2722) + ("FOUR BALLOON-SPOKED ASTERISK" #x2723) + ("HEAVY FOUR BALLOON-SPOKED ASTERISK" #x2724) + ("FOUR CLUB-SPOKED ASTERISK" #x2725) + ("BLACK FOUR POINTED STAR" #x2726) + ("WHITE FOUR POINTED STAR" #x2727) + ("STRESS OUTLINED WHITE STAR" #x2729) + ("CIRCLED WHITE STAR" #x272A) + ("OPEN CENTRE BLACK STAR" #x272B) + ("BLACK CENTRE WHITE STAR" #x272C) + ("OUTLINED BLACK STAR" #x272D) + ("HEAVY OUTLINED BLACK STAR" #x272E) + ("PINWHEEL STAR" #x272F) + ("SHADOWED WHITE STAR" #x2730) + ("HEAVY ASTERISK" #x2731) + ("OPEN CENTRE ASTERISK" #x2732) + ("EIGHT SPOKED ASTERISK" #x2733) + ("EIGHT POINTED BLACK STAR" #x2734) + ("EIGHT POINTED PINWHEEL STAR" #x2735) + ("SIX POINTED BLACK STAR" #x2736) + ("EIGHT POINTED RECTILINEAR BLACK STAR" #x2737) + ("HEAVY EIGHT POINTED RECTILINEAR BLACK STAR" #x2738) + ("TWELVE POINTED BLACK STAR" #x2739) + ("SIXTEEN POINTED ASTERISK" #x273A) + ("TEARDROP-SPOKED ASTERISK" #x273B) + ("OPEN CENTRE TEARDROP-SPOKED ASTERISK" #x273C) + ("HEAVY TEARDROP-SPOKED ASTERISK" #x273D) + ("SIX PETALLED BLACK AND WHITE FLORETTE" #x273E) + ("BLACK FLORETTE" #x273F) + ("WHITE FLORETTE" #x2740) + ("EIGHT PETALLED OUTLINED BLACK FLORETTE" #x2741) + ("CIRCLED OPEN CENTRE EIGHT POINTED STAR" #x2742) + ("HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK" #x2743) + ("SNOWFLAKE" #x2744) + ("TIGHT TRIFOLIATE SNOWFLAKE" #x2745) + ("HEAVY CHEVRON SNOWFLAKE" #x2746) + ("SPARKLE" #x2747) + ("HEAVY SPARKLE" #x2748) + ("BALLOON-SPOKED ASTERISK" #x2749) + ("EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274A) + ("HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274B) + ("SHADOWED WHITE CIRCLE" #x274D) + ("LOWER RIGHT DROP-SHADOWED WHITE SQUARE" #x274F) + ("UPPER RIGHT DROP-SHADOWED WHITE SQUARE" #x2750) + ("LOWER RIGHT SHADOWED WHITE SQUARE" #x2751) + ("UPPER RIGHT SHADOWED WHITE SQUARE" #x2752) + ("BLACK DIAMOND MINUS WHITE X" #x2756) + ("LIGHT VERTICAL BAR" #x2758) + ("MEDIUM VERTICAL BAR" #x2759) + ("HEAVY VERTICAL BAR" #x275A) + ("HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275B) + ("HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT" #x275C) + ("HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275D) + ("HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" #x275E) + ("CURVED STEM PARAGRAPH SIGN ORNAMENT" #x2761) + ("HEAVY EXCLAMATION MARK ORNAMENT" #x2762) + ("HEAVY HEART EXCLAMATION MARK ORNAMENT" #x2763) + ("HEAVY BLACK HEART" #x2764) + ("ROTATED HEAVY BLACK HEART BULLET" #x2765) + ("FLORAL HEART" #x2766) + ("ROTATED FLORAL HEART BULLET" #x2767) + ("MEDIUM LEFT PARENTHESIS ORNAMENT" #x2768) + ("MEDIUM RIGHT PARENTHESIS ORNAMENT" #x2769) + ("MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT" #x276A) + ("MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT" #x276B) + ("MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT" #x276C) + ("MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x276D) + ("HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276E) + ("HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276F) + ("HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT" #x2770) + ("HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x2771) + ("LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT" #x2772) + ("LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT" #x2773) + ("MEDIUM LEFT CURLY BRACKET ORNAMENT" #x2774) + ("MEDIUM RIGHT CURLY BRACKET ORNAMENT" #x2775) + ("DINGBAT NEGATIVE CIRCLED DIGIT ONE" #x2776) + ("DINGBAT NEGATIVE CIRCLED DIGIT TWO" #x2777) + ("DINGBAT NEGATIVE CIRCLED DIGIT THREE" #x2778) + ("DINGBAT NEGATIVE CIRCLED DIGIT FOUR" #x2779) + ("DINGBAT NEGATIVE CIRCLED DIGIT FIVE" #x277A) + ("DINGBAT NEGATIVE CIRCLED DIGIT SIX" #x277B) + ("DINGBAT NEGATIVE CIRCLED DIGIT SEVEN" #x277C) + ("DINGBAT NEGATIVE CIRCLED DIGIT EIGHT" #x277D) + ("DINGBAT NEGATIVE CIRCLED DIGIT NINE" #x277E) + ("DINGBAT NEGATIVE CIRCLED NUMBER TEN" #x277F) + ("DINGBAT CIRCLED SANS-SERIF DIGIT ONE" #x2780) + ("DINGBAT CIRCLED SANS-SERIF DIGIT TWO" #x2781) + ("DINGBAT CIRCLED SANS-SERIF DIGIT THREE" #x2782) + ("DINGBAT CIRCLED SANS-SERIF DIGIT FOUR" #x2783) + ("DINGBAT CIRCLED SANS-SERIF DIGIT FIVE" #x2784) + ("DINGBAT CIRCLED SANS-SERIF DIGIT SIX" #x2785) + ("DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN" #x2786) + ("DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT" #x2787) + ("DINGBAT CIRCLED SANS-SERIF DIGIT NINE" #x2788) + ("DINGBAT CIRCLED SANS-SERIF NUMBER TEN" #x2789) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE" #x278A) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO" #x278B) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE" #x278C) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR" #x278D) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE" #x278E) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" #x278F) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN" #x2790) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT" #x2791) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE" #x2792) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN" #x2793) + ("HEAVY WIDE-HEADED RIGHTWARDS ARROW" #x2794) + ("HEAVY SOUTH EAST ARROW" #x2798) + ("HEAVY RIGHTWARDS ARROW" #x2799) + ("HEAVY NORTH EAST ARROW" #x279A) + ("DRAFTING POINT RIGHTWARDS ARROW" #x279B) + ("HEAVY ROUND-TIPPED RIGHTWARDS ARROW" #x279C) + ("TRIANGLE-HEADED RIGHTWARDS ARROW" #x279D) + ("HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW" #x279E) + ("DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x279F) + ("HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x27A0) + ("BLACK RIGHTWARDS ARROW" #x27A1) + ("THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD" #x27A2) + ("THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD" #x27A3) + ("BLACK RIGHTWARDS ARROWHEAD" #x27A4) + ("HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW" #x27A5) + ("HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW" #x27A6) + ("SQUAT BLACK RIGHTWARDS ARROW" #x27A7) + ("HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW" #x27A8) + ("RIGHT-SHADED WHITE RIGHTWARDS ARROW" #x27A9) + ("LEFT-SHADED WHITE RIGHTWARDS ARROW" #x27AA) + ("BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AB) + ("FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AC) + ("HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AD) + ("HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AE) + ("NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AF) + ("NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27B1) + ("CIRCLED HEAVY WHITE RIGHTWARDS ARROW" #x27B2) + ("WHITE-FEATHERED RIGHTWARDS ARROW" #x27B3) + ("BLACK-FEATHERED SOUTH EAST ARROW" #x27B4) + ("BLACK-FEATHERED RIGHTWARDS ARROW" #x27B5) + ("BLACK-FEATHERED NORTH EAST ARROW" #x27B6) + ("HEAVY BLACK-FEATHERED SOUTH EAST ARROW" #x27B7) + ("HEAVY BLACK-FEATHERED RIGHTWARDS ARROW" #x27B8) + ("HEAVY BLACK-FEATHERED NORTH EAST ARROW" #x27B9) + ("TEARDROP-BARBED RIGHTWARDS ARROW" #x27BA) + ("HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW" #x27BB) + ("WEDGE-TAILED RIGHTWARDS ARROW" #x27BC) + ("HEAVY WEDGE-TAILED RIGHTWARDS ARROW" #x27BD) + ("OPEN-OUTLINED RIGHTWARDS ARROW" #x27BE) + )) + +;; arch-tag: 183adc05-e931-4f1b-8a89-abd760a8fcd5 diff --git a/etc/nxml/027C0-027EF.el b/etc/nxml/027C0-027EF.el new file mode 100644 index 00000000000..e0171576a54 --- /dev/null +++ b/etc/nxml/027C0-027EF.el @@ -0,0 +1,32 @@ +(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-a + '(("WHITE DIAMOND WITH CENTRED DOT" #x27D0) + ("AND WITH DOT" #x27D1) + ("ELEMENT OF OPENING UPWARDS" #x27D2) + ("LOWER RIGHT CORNER WITH DOT" #x27D3) + ("UPPER LEFT CORNER WITH DOT" #x27D4) + ("LEFT OUTER JOIN" #x27D5) + ("RIGHT OUTER JOIN" #x27D6) + ("FULL OUTER JOIN" #x27D7) + ("LARGE UP TACK" #x27D8) + ("LARGE DOWN TACK" #x27D9) + ("LEFT AND RIGHT DOUBLE TURNSTILE" #x27DA) + ("LEFT AND RIGHT TACK" #x27DB) + ("LEFT MULTIMAP" #x27DC) + ("LONG RIGHT TACK" #x27DD) + ("LONG LEFT TACK" #x27DE) + ("UP TACK WITH CIRCLE ABOVE" #x27DF) + ("LOZENGE DIVIDED BY HORIZONTAL RULE" #x27E0) + ("WHITE CONCAVE-SIDED DIAMOND" #x27E1) + ("WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK" #x27E2) + ("WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK" #x27E3) + ("WHITE SQUARE WITH LEFTWARDS TICK" #x27E4) + ("WHITE SQUARE WITH RIGHTWARDS TICK" #x27E5) + ("MATHEMATICAL LEFT WHITE SQUARE BRACKET" #x27E6) + ("MATHEMATICAL RIGHT WHITE SQUARE BRACKET" #x27E7) + ("MATHEMATICAL LEFT ANGLE BRACKET" #x27E8) + ("MATHEMATICAL RIGHT ANGLE BRACKET" #x27E9) + ("MATHEMATICAL LEFT DOUBLE ANGLE BRACKET" #x27EA) + ("MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET" #x27EB) + )) + +;; arch-tag: f66b9857-6560-4ad9-9adb-1f3b5fb079de diff --git a/etc/nxml/027F0-027FF.el b/etc/nxml/027F0-027FF.el new file mode 100644 index 00000000000..5da2bc2a226 --- /dev/null +++ b/etc/nxml/027F0-027FF.el @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'supplemental-arrows-a + '(("UPWARDS QUADRUPLE ARROW" #x27F0) + ("DOWNWARDS QUADRUPLE ARROW" #x27F1) + ("ANTICLOCKWISE GAPPED CIRCLE ARROW" #x27F2) + ("CLOCKWISE GAPPED CIRCLE ARROW" #x27F3) + ("RIGHT ARROW WITH CIRCLED PLUS" #x27F4) + ("LONG LEFTWARDS ARROW" #x27F5) + ("LONG RIGHTWARDS ARROW" #x27F6) + ("LONG LEFT RIGHT ARROW" #x27F7) + ("LONG LEFTWARDS DOUBLE ARROW" #x27F8) + ("LONG RIGHTWARDS DOUBLE ARROW" #x27F9) + ("LONG LEFT RIGHT DOUBLE ARROW" #x27FA) + ("LONG LEFTWARDS ARROW FROM BAR" #x27FB) + ("LONG RIGHTWARDS ARROW FROM BAR" #x27FC) + ("LONG LEFTWARDS DOUBLE ARROW FROM BAR" #x27FD) + ("LONG RIGHTWARDS DOUBLE ARROW FROM BAR" #x27FE) + ("LONG RIGHTWARDS SQUIGGLE ARROW" #x27FF) + )) + +;; arch-tag: 64623112-13d2-4bd6-8768-5508e3a7f8a9 diff --git a/etc/nxml/02800-028FF.el b/etc/nxml/02800-028FF.el new file mode 100644 index 00000000000..d936481acac --- /dev/null +++ b/etc/nxml/02800-028FF.el @@ -0,0 +1,260 @@ +(nxml-define-char-name-set 'braille-patterns + '(("BRAILLE PATTERN BLANK" #x2800) + ("BRAILLE PATTERN DOTS-1" #x2801) + ("BRAILLE PATTERN DOTS-2" #x2802) + ("BRAILLE PATTERN DOTS-12" #x2803) + ("BRAILLE PATTERN DOTS-3" #x2804) + ("BRAILLE PATTERN DOTS-13" #x2805) + ("BRAILLE PATTERN DOTS-23" #x2806) + ("BRAILLE PATTERN DOTS-123" #x2807) + ("BRAILLE PATTERN DOTS-4" #x2808) + ("BRAILLE PATTERN DOTS-14" #x2809) + ("BRAILLE PATTERN DOTS-24" #x280A) + ("BRAILLE PATTERN DOTS-124" #x280B) + ("BRAILLE PATTERN DOTS-34" #x280C) + ("BRAILLE PATTERN DOTS-134" #x280D) + ("BRAILLE PATTERN DOTS-234" #x280E) + ("BRAILLE PATTERN DOTS-1234" #x280F) + ("BRAILLE PATTERN DOTS-5" #x2810) + ("BRAILLE PATTERN DOTS-15" #x2811) + ("BRAILLE PATTERN DOTS-25" #x2812) + ("BRAILLE PATTERN DOTS-125" #x2813) + ("BRAILLE PATTERN DOTS-35" #x2814) + ("BRAILLE PATTERN DOTS-135" #x2815) + ("BRAILLE PATTERN DOTS-235" #x2816) + ("BRAILLE PATTERN DOTS-1235" #x2817) + ("BRAILLE PATTERN DOTS-45" #x2818) + ("BRAILLE PATTERN DOTS-145" #x2819) + ("BRAILLE PATTERN DOTS-245" #x281A) + ("BRAILLE PATTERN DOTS-1245" #x281B) + ("BRAILLE PATTERN DOTS-345" #x281C) + ("BRAILLE PATTERN DOTS-1345" #x281D) + ("BRAILLE PATTERN DOTS-2345" #x281E) + ("BRAILLE PATTERN DOTS-12345" #x281F) + ("BRAILLE PATTERN DOTS-6" #x2820) + ("BRAILLE PATTERN DOTS-16" #x2821) + ("BRAILLE PATTERN DOTS-26" #x2822) + ("BRAILLE PATTERN DOTS-126" #x2823) + ("BRAILLE PATTERN DOTS-36" #x2824) + ("BRAILLE PATTERN DOTS-136" #x2825) + ("BRAILLE PATTERN DOTS-236" #x2826) + ("BRAILLE PATTERN DOTS-1236" #x2827) + ("BRAILLE PATTERN DOTS-46" #x2828) + ("BRAILLE PATTERN DOTS-146" #x2829) + ("BRAILLE PATTERN DOTS-246" #x282A) + ("BRAILLE PATTERN DOTS-1246" #x282B) + ("BRAILLE PATTERN DOTS-346" #x282C) + ("BRAILLE PATTERN DOTS-1346" #x282D) + ("BRAILLE PATTERN DOTS-2346" #x282E) + ("BRAILLE PATTERN DOTS-12346" #x282F) + ("BRAILLE PATTERN DOTS-56" #x2830) + ("BRAILLE PATTERN DOTS-156" #x2831) + ("BRAILLE PATTERN DOTS-256" #x2832) + ("BRAILLE PATTERN DOTS-1256" #x2833) + ("BRAILLE PATTERN DOTS-356" #x2834) + ("BRAILLE PATTERN DOTS-1356" #x2835) + ("BRAILLE PATTERN DOTS-2356" #x2836) + ("BRAILLE PATTERN DOTS-12356" #x2837) + ("BRAILLE PATTERN DOTS-456" #x2838) + ("BRAILLE PATTERN DOTS-1456" #x2839) + ("BRAILLE PATTERN DOTS-2456" #x283A) + ("BRAILLE PATTERN DOTS-12456" #x283B) + ("BRAILLE PATTERN DOTS-3456" #x283C) + ("BRAILLE PATTERN DOTS-13456" #x283D) + ("BRAILLE PATTERN DOTS-23456" #x283E) + ("BRAILLE PATTERN DOTS-123456" #x283F) + ("BRAILLE PATTERN DOTS-7" #x2840) + ("BRAILLE PATTERN DOTS-17" #x2841) + ("BRAILLE PATTERN DOTS-27" #x2842) + ("BRAILLE PATTERN DOTS-127" #x2843) + ("BRAILLE PATTERN DOTS-37" #x2844) + ("BRAILLE PATTERN DOTS-137" #x2845) + ("BRAILLE PATTERN DOTS-237" #x2846) + ("BRAILLE PATTERN DOTS-1237" #x2847) + ("BRAILLE PATTERN DOTS-47" #x2848) + ("BRAILLE PATTERN DOTS-147" #x2849) + ("BRAILLE PATTERN DOTS-247" #x284A) + ("BRAILLE PATTERN DOTS-1247" #x284B) + ("BRAILLE PATTERN DOTS-347" #x284C) + ("BRAILLE PATTERN DOTS-1347" #x284D) + ("BRAILLE PATTERN DOTS-2347" #x284E) + ("BRAILLE PATTERN DOTS-12347" #x284F) + ("BRAILLE PATTERN DOTS-57" #x2850) + ("BRAILLE PATTERN DOTS-157" #x2851) + ("BRAILLE PATTERN DOTS-257" #x2852) + ("BRAILLE PATTERN DOTS-1257" #x2853) + ("BRAILLE PATTERN DOTS-357" #x2854) + ("BRAILLE PATTERN DOTS-1357" #x2855) + ("BRAILLE PATTERN DOTS-2357" #x2856) + ("BRAILLE PATTERN DOTS-12357" #x2857) + ("BRAILLE PATTERN DOTS-457" #x2858) + ("BRAILLE PATTERN DOTS-1457" #x2859) + ("BRAILLE PATTERN DOTS-2457" #x285A) + ("BRAILLE PATTERN DOTS-12457" #x285B) + ("BRAILLE PATTERN DOTS-3457" #x285C) + ("BRAILLE PATTERN DOTS-13457" #x285D) + ("BRAILLE PATTERN DOTS-23457" #x285E) + ("BRAILLE PATTERN DOTS-123457" #x285F) + ("BRAILLE PATTERN DOTS-67" #x2860) + ("BRAILLE PATTERN DOTS-167" #x2861) + ("BRAILLE PATTERN DOTS-267" #x2862) + ("BRAILLE PATTERN DOTS-1267" #x2863) + ("BRAILLE PATTERN DOTS-367" #x2864) + ("BRAILLE PATTERN DOTS-1367" #x2865) + ("BRAILLE PATTERN DOTS-2367" #x2866) + ("BRAILLE PATTERN DOTS-12367" #x2867) + ("BRAILLE PATTERN DOTS-467" #x2868) + ("BRAILLE PATTERN DOTS-1467" #x2869) + ("BRAILLE PATTERN DOTS-2467" #x286A) + ("BRAILLE PATTERN DOTS-12467" #x286B) + ("BRAILLE PATTERN DOTS-3467" #x286C) + ("BRAILLE PATTERN DOTS-13467" #x286D) + ("BRAILLE PATTERN DOTS-23467" #x286E) + ("BRAILLE PATTERN DOTS-123467" #x286F) + ("BRAILLE PATTERN DOTS-567" #x2870) + ("BRAILLE PATTERN DOTS-1567" #x2871) + ("BRAILLE PATTERN DOTS-2567" #x2872) + ("BRAILLE PATTERN DOTS-12567" #x2873) + ("BRAILLE PATTERN DOTS-3567" #x2874) + ("BRAILLE PATTERN DOTS-13567" #x2875) + ("BRAILLE PATTERN DOTS-23567" #x2876) + ("BRAILLE PATTERN DOTS-123567" #x2877) + ("BRAILLE PATTERN DOTS-4567" #x2878) + ("BRAILLE PATTERN DOTS-14567" #x2879) + ("BRAILLE PATTERN DOTS-24567" #x287A) + ("BRAILLE PATTERN DOTS-124567" #x287B) + ("BRAILLE PATTERN DOTS-34567" #x287C) + ("BRAILLE PATTERN DOTS-134567" #x287D) + ("BRAILLE PATTERN DOTS-234567" #x287E) + ("BRAILLE PATTERN DOTS-1234567" #x287F) + ("BRAILLE PATTERN DOTS-8" #x2880) + ("BRAILLE PATTERN DOTS-18" #x2881) + ("BRAILLE PATTERN DOTS-28" #x2882) + ("BRAILLE PATTERN DOTS-128" #x2883) + ("BRAILLE PATTERN DOTS-38" #x2884) + ("BRAILLE PATTERN DOTS-138" #x2885) + ("BRAILLE PATTERN DOTS-238" #x2886) + ("BRAILLE PATTERN DOTS-1238" #x2887) + ("BRAILLE PATTERN DOTS-48" #x2888) + ("BRAILLE PATTERN DOTS-148" #x2889) + ("BRAILLE PATTERN DOTS-248" #x288A) + ("BRAILLE PATTERN DOTS-1248" #x288B) + ("BRAILLE PATTERN DOTS-348" #x288C) + ("BRAILLE PATTERN DOTS-1348" #x288D) + ("BRAILLE PATTERN DOTS-2348" #x288E) + ("BRAILLE PATTERN DOTS-12348" #x288F) + ("BRAILLE PATTERN DOTS-58" #x2890) + ("BRAILLE PATTERN DOTS-158" #x2891) + ("BRAILLE PATTERN DOTS-258" #x2892) + ("BRAILLE PATTERN DOTS-1258" #x2893) + ("BRAILLE PATTERN DOTS-358" #x2894) + ("BRAILLE PATTERN DOTS-1358" #x2895) + ("BRAILLE PATTERN DOTS-2358" #x2896) + ("BRAILLE PATTERN DOTS-12358" #x2897) + ("BRAILLE PATTERN DOTS-458" #x2898) + ("BRAILLE PATTERN DOTS-1458" #x2899) + ("BRAILLE PATTERN DOTS-2458" #x289A) + ("BRAILLE PATTERN DOTS-12458" #x289B) + ("BRAILLE PATTERN DOTS-3458" #x289C) + ("BRAILLE PATTERN DOTS-13458" #x289D) + ("BRAILLE PATTERN DOTS-23458" #x289E) + ("BRAILLE PATTERN DOTS-123458" #x289F) + ("BRAILLE PATTERN DOTS-68" #x28A0) + ("BRAILLE PATTERN DOTS-168" #x28A1) + ("BRAILLE PATTERN DOTS-268" #x28A2) + ("BRAILLE PATTERN DOTS-1268" #x28A3) + ("BRAILLE PATTERN DOTS-368" #x28A4) + ("BRAILLE PATTERN DOTS-1368" #x28A5) + ("BRAILLE PATTERN DOTS-2368" #x28A6) + ("BRAILLE PATTERN DOTS-12368" #x28A7) + ("BRAILLE PATTERN DOTS-468" #x28A8) + ("BRAILLE PATTERN DOTS-1468" #x28A9) + ("BRAILLE PATTERN DOTS-2468" #x28AA) + ("BRAILLE PATTERN DOTS-12468" #x28AB) + ("BRAILLE PATTERN DOTS-3468" #x28AC) + ("BRAILLE PATTERN DOTS-13468" #x28AD) + ("BRAILLE PATTERN DOTS-23468" #x28AE) + ("BRAILLE PATTERN DOTS-123468" #x28AF) + ("BRAILLE PATTERN DOTS-568" #x28B0) + ("BRAILLE PATTERN DOTS-1568" #x28B1) + ("BRAILLE PATTERN DOTS-2568" #x28B2) + ("BRAILLE PATTERN DOTS-12568" #x28B3) + ("BRAILLE PATTERN DOTS-3568" #x28B4) + ("BRAILLE PATTERN DOTS-13568" #x28B5) + ("BRAILLE PATTERN DOTS-23568" #x28B6) + ("BRAILLE PATTERN DOTS-123568" #x28B7) + ("BRAILLE PATTERN DOTS-4568" #x28B8) + ("BRAILLE PATTERN DOTS-14568" #x28B9) + ("BRAILLE PATTERN DOTS-24568" #x28BA) + ("BRAILLE PATTERN DOTS-124568" #x28BB) + ("BRAILLE PATTERN DOTS-34568" #x28BC) + ("BRAILLE PATTERN DOTS-134568" #x28BD) + ("BRAILLE PATTERN DOTS-234568" #x28BE) + ("BRAILLE PATTERN DOTS-1234568" #x28BF) + ("BRAILLE PATTERN DOTS-78" #x28C0) + ("BRAILLE PATTERN DOTS-178" #x28C1) + ("BRAILLE PATTERN DOTS-278" #x28C2) + ("BRAILLE PATTERN DOTS-1278" #x28C3) + ("BRAILLE PATTERN DOTS-378" #x28C4) + ("BRAILLE PATTERN DOTS-1378" #x28C5) + ("BRAILLE PATTERN DOTS-2378" #x28C6) + ("BRAILLE PATTERN DOTS-12378" #x28C7) + ("BRAILLE PATTERN DOTS-478" #x28C8) + ("BRAILLE PATTERN DOTS-1478" #x28C9) + ("BRAILLE PATTERN DOTS-2478" #x28CA) + ("BRAILLE PATTERN DOTS-12478" #x28CB) + ("BRAILLE PATTERN DOTS-3478" #x28CC) + ("BRAILLE PATTERN DOTS-13478" #x28CD) + ("BRAILLE PATTERN DOTS-23478" #x28CE) + ("BRAILLE PATTERN DOTS-123478" #x28CF) + ("BRAILLE PATTERN DOTS-578" #x28D0) + ("BRAILLE PATTERN DOTS-1578" #x28D1) + ("BRAILLE PATTERN DOTS-2578" #x28D2) + ("BRAILLE PATTERN DOTS-12578" #x28D3) + ("BRAILLE PATTERN DOTS-3578" #x28D4) + ("BRAILLE PATTERN DOTS-13578" #x28D5) + ("BRAILLE PATTERN DOTS-23578" #x28D6) + ("BRAILLE PATTERN DOTS-123578" #x28D7) + ("BRAILLE PATTERN DOTS-4578" #x28D8) + ("BRAILLE PATTERN DOTS-14578" #x28D9) + ("BRAILLE PATTERN DOTS-24578" #x28DA) + ("BRAILLE PATTERN DOTS-124578" #x28DB) + ("BRAILLE PATTERN DOTS-34578" #x28DC) + ("BRAILLE PATTERN DOTS-134578" #x28DD) + ("BRAILLE PATTERN DOTS-234578" #x28DE) + ("BRAILLE PATTERN DOTS-1234578" #x28DF) + ("BRAILLE PATTERN DOTS-678" #x28E0) + ("BRAILLE PATTERN DOTS-1678" #x28E1) + ("BRAILLE PATTERN DOTS-2678" #x28E2) + ("BRAILLE PATTERN DOTS-12678" #x28E3) + ("BRAILLE PATTERN DOTS-3678" #x28E4) + ("BRAILLE PATTERN DOTS-13678" #x28E5) + ("BRAILLE PATTERN DOTS-23678" #x28E6) + ("BRAILLE PATTERN DOTS-123678" #x28E7) + ("BRAILLE PATTERN DOTS-4678" #x28E8) + ("BRAILLE PATTERN DOTS-14678" #x28E9) + ("BRAILLE PATTERN DOTS-24678" #x28EA) + ("BRAILLE PATTERN DOTS-124678" #x28EB) + ("BRAILLE PATTERN DOTS-34678" #x28EC) + ("BRAILLE PATTERN DOTS-134678" #x28ED) + ("BRAILLE PATTERN DOTS-234678" #x28EE) + ("BRAILLE PATTERN DOTS-1234678" #x28EF) + ("BRAILLE PATTERN DOTS-5678" #x28F0) + ("BRAILLE PATTERN DOTS-15678" #x28F1) + ("BRAILLE PATTERN DOTS-25678" #x28F2) + ("BRAILLE PATTERN DOTS-125678" #x28F3) + ("BRAILLE PATTERN DOTS-35678" #x28F4) + ("BRAILLE PATTERN DOTS-135678" #x28F5) + ("BRAILLE PATTERN DOTS-235678" #x28F6) + ("BRAILLE PATTERN DOTS-1235678" #x28F7) + ("BRAILLE PATTERN DOTS-45678" #x28F8) + ("BRAILLE PATTERN DOTS-145678" #x28F9) + ("BRAILLE PATTERN DOTS-245678" #x28FA) + ("BRAILLE PATTERN DOTS-1245678" #x28FB) + ("BRAILLE PATTERN DOTS-345678" #x28FC) + ("BRAILLE PATTERN DOTS-1345678" #x28FD) + ("BRAILLE PATTERN DOTS-2345678" #x28FE) + ("BRAILLE PATTERN DOTS-12345678" #x28FF) + )) + +;; arch-tag: 461f6d3c-a4fb-404c-a107-ec8afd212bd2 diff --git a/etc/nxml/02900-0297F.el b/etc/nxml/02900-0297F.el new file mode 100644 index 00000000000..d1c217b0df4 --- /dev/null +++ b/etc/nxml/02900-0297F.el @@ -0,0 +1,132 @@ +(nxml-define-char-name-set 'supplemental-arrows-b + '(("RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE" #x2900) + ("RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE" #x2901) + ("LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2902) + ("RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2903) + ("LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE" #x2904) + ("RIGHTWARDS TWO-HEADED ARROW FROM BAR" #x2905) + ("LEFTWARDS DOUBLE ARROW FROM BAR" #x2906) + ("RIGHTWARDS DOUBLE ARROW FROM BAR" #x2907) + ("DOWNWARDS ARROW WITH HORIZONTAL STROKE" #x2908) + ("UPWARDS ARROW WITH HORIZONTAL STROKE" #x2909) + ("UPWARDS TRIPLE ARROW" #x290A) + ("DOWNWARDS TRIPLE ARROW" #x290B) + ("LEFTWARDS DOUBLE DASH ARROW" #x290C) + ("RIGHTWARDS DOUBLE DASH ARROW" #x290D) + ("LEFTWARDS TRIPLE DASH ARROW" #x290E) + ("RIGHTWARDS TRIPLE DASH ARROW" #x290F) + ("RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW" #x2910) + ("RIGHTWARDS ARROW WITH DOTTED STEM" #x2911) + ("UPWARDS ARROW TO BAR" #x2912) + ("DOWNWARDS ARROW TO BAR" #x2913) + ("RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE" #x2914) + ("RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2915) + ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL" #x2916) + ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE" #x2917) + ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2918) + ("LEFTWARDS ARROW-TAIL" #x2919) + ("RIGHTWARDS ARROW-TAIL" #x291A) + ("LEFTWARDS DOUBLE ARROW-TAIL" #x291B) + ("RIGHTWARDS DOUBLE ARROW-TAIL" #x291C) + ("LEFTWARDS ARROW TO BLACK DIAMOND" #x291D) + ("RIGHTWARDS ARROW TO BLACK DIAMOND" #x291E) + ("LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x291F) + ("RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x2920) + ("NORTH WEST AND SOUTH EAST ARROW" #x2921) + ("NORTH EAST AND SOUTH WEST ARROW" #x2922) + ("NORTH WEST ARROW WITH HOOK" #x2923) + ("NORTH EAST ARROW WITH HOOK" #x2924) + ("SOUTH EAST ARROW WITH HOOK" #x2925) + ("SOUTH WEST ARROW WITH HOOK" #x2926) + ("NORTH WEST ARROW AND NORTH EAST ARROW" #x2927) + ("NORTH EAST ARROW AND SOUTH EAST ARROW" #x2928) + ("SOUTH EAST ARROW AND SOUTH WEST ARROW" #x2929) + ("SOUTH WEST ARROW AND NORTH WEST ARROW" #x292A) + ("RISING DIAGONAL CROSSING FALLING DIAGONAL" #x292B) + ("FALLING DIAGONAL CROSSING RISING DIAGONAL" #x292C) + ("SOUTH EAST ARROW CROSSING NORTH EAST ARROW" #x292D) + ("NORTH EAST ARROW CROSSING SOUTH EAST ARROW" #x292E) + ("FALLING DIAGONAL CROSSING NORTH EAST ARROW" #x292F) + ("RISING DIAGONAL CROSSING SOUTH EAST ARROW" #x2930) + ("NORTH EAST ARROW CROSSING NORTH WEST ARROW" #x2931) + ("NORTH WEST ARROW CROSSING NORTH EAST ARROW" #x2932) + ("WAVE ARROW POINTING DIRECTLY RIGHT" #x2933) + ("ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS" #x2934) + ("ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS" #x2935) + ("ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS" #x2936) + ("ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS" #x2937) + ("RIGHT-SIDE ARC CLOCKWISE ARROW" #x2938) + ("LEFT-SIDE ARC ANTICLOCKWISE ARROW" #x2939) + ("TOP ARC ANTICLOCKWISE ARROW" #x293A) + ("BOTTOM ARC ANTICLOCKWISE ARROW" #x293B) + ("TOP ARC CLOCKWISE ARROW WITH MINUS" #x293C) + ("TOP ARC ANTICLOCKWISE ARROW WITH PLUS" #x293D) + ("LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW" #x293E) + ("LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW" #x293F) + ("ANTICLOCKWISE CLOSED CIRCLE ARROW" #x2940) + ("CLOCKWISE CLOSED CIRCLE ARROW" #x2941) + ("RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW" #x2942) + ("LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW" #x2943) + ("SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW" #x2944) + ("RIGHTWARDS ARROW WITH PLUS BELOW" #x2945) + ("LEFTWARDS ARROW WITH PLUS BELOW" #x2946) + ("RIGHTWARDS ARROW THROUGH X" #x2947) + ("LEFT RIGHT ARROW THROUGH SMALL CIRCLE" #x2948) + ("UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE" #x2949) + ("LEFT BARB UP RIGHT BARB DOWN HARPOON" #x294A) + ("LEFT BARB DOWN RIGHT BARB UP HARPOON" #x294B) + ("UP BARB RIGHT DOWN BARB LEFT HARPOON" #x294C) + ("UP BARB LEFT DOWN BARB RIGHT HARPOON" #x294D) + ("LEFT BARB UP RIGHT BARB UP HARPOON" #x294E) + ("UP BARB RIGHT DOWN BARB RIGHT HARPOON" #x294F) + ("LEFT BARB DOWN RIGHT BARB DOWN HARPOON" #x2950) + ("UP BARB LEFT DOWN BARB LEFT HARPOON" #x2951) + ("LEFTWARDS HARPOON WITH BARB UP TO BAR" #x2952) + ("RIGHTWARDS HARPOON WITH BARB UP TO BAR" #x2953) + ("UPWARDS HARPOON WITH BARB RIGHT TO BAR" #x2954) + ("DOWNWARDS HARPOON WITH BARB RIGHT TO BAR" #x2955) + ("LEFTWARDS HARPOON WITH BARB DOWN TO BAR" #x2956) + ("RIGHTWARDS HARPOON WITH BARB DOWN TO BAR" #x2957) + ("UPWARDS HARPOON WITH BARB LEFT TO BAR" #x2958) + ("DOWNWARDS HARPOON WITH BARB LEFT TO BAR" #x2959) + ("LEFTWARDS HARPOON WITH BARB UP FROM BAR" #x295A) + ("RIGHTWARDS HARPOON WITH BARB UP FROM BAR" #x295B) + ("UPWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295C) + ("DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295D) + ("LEFTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295E) + ("RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295F) + ("UPWARDS HARPOON WITH BARB LEFT FROM BAR" #x2960) + ("DOWNWARDS HARPOON WITH BARB LEFT FROM BAR" #x2961) + ("LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2962) + ("UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x2963) + ("RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2964) + ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x2965) + ("LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP" #x2966) + ("LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2967) + ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP" #x2968) + ("RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2969) + ("LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296A) + ("LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296B) + ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296C) + ("RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296D) + ("UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x296E) + ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x296F) + ("RIGHT DOUBLE ARROW WITH ROUNDED HEAD" #x2970) + ("EQUALS SIGN ABOVE RIGHTWARDS ARROW" #x2971) + ("TILDE OPERATOR ABOVE RIGHTWARDS ARROW" #x2972) + ("LEFTWARDS ARROW ABOVE TILDE OPERATOR" #x2973) + ("RIGHTWARDS ARROW ABOVE TILDE OPERATOR" #x2974) + ("RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO" #x2975) + ("LESS-THAN ABOVE LEFTWARDS ARROW" #x2976) + ("LEFTWARDS ARROW THROUGH LESS-THAN" #x2977) + ("GREATER-THAN ABOVE RIGHTWARDS ARROW" #x2978) + ("SUBSET ABOVE RIGHTWARDS ARROW" #x2979) + ("LEFTWARDS ARROW THROUGH SUBSET" #x297A) + ("SUPERSET ABOVE LEFTWARDS ARROW" #x297B) + ("LEFT FISH TAIL" #x297C) + ("RIGHT FISH TAIL" #x297D) + ("UP FISH TAIL" #x297E) + ("DOWN FISH TAIL" #x297F) + )) + +;; arch-tag: 57fdeec3-1003-4f3e-ac93-1d698f6eacd8 diff --git a/etc/nxml/02980-029FF.el b/etc/nxml/02980-029FF.el new file mode 100644 index 00000000000..11197e31c91 --- /dev/null +++ b/etc/nxml/02980-029FF.el @@ -0,0 +1,132 @@ +(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-b + '(("TRIPLE VERTICAL BAR DELIMITER" #x2980) + ("Z NOTATION SPOT" #x2981) + ("Z NOTATION TYPE COLON" #x2982) + ("LEFT WHITE CURLY BRACKET" #x2983) + ("RIGHT WHITE CURLY BRACKET" #x2984) + ("LEFT WHITE PARENTHESIS" #x2985) + ("RIGHT WHITE PARENTHESIS" #x2986) + ("Z NOTATION LEFT IMAGE BRACKET" #x2987) + ("Z NOTATION RIGHT IMAGE BRACKET" #x2988) + ("Z NOTATION LEFT BINDING BRACKET" #x2989) + ("Z NOTATION RIGHT BINDING BRACKET" #x298A) + ("LEFT SQUARE BRACKET WITH UNDERBAR" #x298B) + ("RIGHT SQUARE BRACKET WITH UNDERBAR" #x298C) + ("LEFT SQUARE BRACKET WITH TICK IN TOP CORNER" #x298D) + ("RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298E) + ("LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298F) + ("RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER" #x2990) + ("LEFT ANGLE BRACKET WITH DOT" #x2991) + ("RIGHT ANGLE BRACKET WITH DOT" #x2992) + ("LEFT ARC LESS-THAN BRACKET" #x2993) + ("RIGHT ARC GREATER-THAN BRACKET" #x2994) + ("DOUBLE LEFT ARC GREATER-THAN BRACKET" #x2995) + ("DOUBLE RIGHT ARC LESS-THAN BRACKET" #x2996) + ("LEFT BLACK TORTOISE SHELL BRACKET" #x2997) + ("RIGHT BLACK TORTOISE SHELL BRACKET" #x2998) + ("DOTTED FENCE" #x2999) + ("VERTICAL ZIGZAG LINE" #x299A) + ("MEASURED ANGLE OPENING LEFT" #x299B) + ("RIGHT ANGLE VARIANT WITH SQUARE" #x299C) + ("MEASURED RIGHT ANGLE WITH DOT" #x299D) + ("ANGLE WITH S INSIDE" #x299E) + ("ACUTE ANGLE" #x299F) + ("SPHERICAL ANGLE OPENING LEFT" #x29A0) + ("SPHERICAL ANGLE OPENING UP" #x29A1) + ("TURNED ANGLE" #x29A2) + ("REVERSED ANGLE" #x29A3) + ("ANGLE WITH UNDERBAR" #x29A4) + ("REVERSED ANGLE WITH UNDERBAR" #x29A5) + ("OBLIQUE ANGLE OPENING UP" #x29A6) + ("OBLIQUE ANGLE OPENING DOWN" #x29A7) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT" #x29A8) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT" #x29A9) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT" #x29AA) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT" #x29AB) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP" #x29AC) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP" #x29AD) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN" #x29AE) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN" #x29AF) + ("REVERSED EMPTY SET" #x29B0) + ("EMPTY SET WITH OVERBAR" #x29B1) + ("EMPTY SET WITH SMALL CIRCLE ABOVE" #x29B2) + ("EMPTY SET WITH RIGHT ARROW ABOVE" #x29B3) + ("EMPTY SET WITH LEFT ARROW ABOVE" #x29B4) + ("CIRCLE WITH HORIZONTAL BAR" #x29B5) + ("CIRCLED VERTICAL BAR" #x29B6) + ("CIRCLED PARALLEL" #x29B7) + ("CIRCLED REVERSE SOLIDUS" #x29B8) + ("CIRCLED PERPENDICULAR" #x29B9) + ("CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR" #x29BA) + ("CIRCLE WITH SUPERIMPOSED X" #x29BB) + ("CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN" #x29BC) + ("UP ARROW THROUGH CIRCLE" #x29BD) + ("CIRCLED WHITE BULLET" #x29BE) + ("CIRCLED BULLET" #x29BF) + ("CIRCLED LESS-THAN" #x29C0) + ("CIRCLED GREATER-THAN" #x29C1) + ("CIRCLE WITH SMALL CIRCLE TO THE RIGHT" #x29C2) + ("CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT" #x29C3) + ("SQUARED RISING DIAGONAL SLASH" #x29C4) + ("SQUARED FALLING DIAGONAL SLASH" #x29C5) + ("SQUARED ASTERISK" #x29C6) + ("SQUARED SMALL CIRCLE" #x29C7) + ("SQUARED SQUARE" #x29C8) + ("TWO JOINED SQUARES" #x29C9) + ("TRIANGLE WITH DOT ABOVE" #x29CA) + ("TRIANGLE WITH UNDERBAR" #x29CB) + ("S IN TRIANGLE" #x29CC) + ("TRIANGLE WITH SERIFS AT BOTTOM" #x29CD) + ("RIGHT TRIANGLE ABOVE LEFT TRIANGLE" #x29CE) + ("LEFT TRIANGLE BESIDE VERTICAL BAR" #x29CF) + ("VERTICAL BAR BESIDE RIGHT TRIANGLE" #x29D0) + ("BOWTIE WITH LEFT HALF BLACK" #x29D1) + ("BOWTIE WITH RIGHT HALF BLACK" #x29D2) + ("BLACK BOWTIE" #x29D3) + ("TIMES WITH LEFT HALF BLACK" #x29D4) + ("TIMES WITH RIGHT HALF BLACK" #x29D5) + ("WHITE HOURGLASS" #x29D6) + ("BLACK HOURGLASS" #x29D7) + ("LEFT WIGGLY FENCE" #x29D8) + ("RIGHT WIGGLY FENCE" #x29D9) + ("LEFT DOUBLE WIGGLY FENCE" #x29DA) + ("RIGHT DOUBLE WIGGLY FENCE" #x29DB) + ("INCOMPLETE INFINITY" #x29DC) + ("TIE OVER INFINITY" #x29DD) + ("INFINITY NEGATED WITH VERTICAL BAR" #x29DE) + ("DOUBLE-ENDED MULTIMAP" #x29DF) + ("SQUARE WITH CONTOURED OUTLINE" #x29E0) + ("INCREASES AS" #x29E1) + ("SHUFFLE PRODUCT" #x29E2) + ("EQUALS SIGN AND SLANTED PARALLEL" #x29E3) + ("EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE" #x29E4) + ("IDENTICAL TO AND SLANTED PARALLEL" #x29E5) + ("GLEICH STARK" #x29E6) + ("THERMODYNAMIC" #x29E7) + ("DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK" #x29E8) + ("DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x29E9) + ("BLACK DIAMOND WITH DOWN ARROW" #x29EA) + ("BLACK LOZENGE" #x29EB) + ("WHITE CIRCLE WITH DOWN ARROW" #x29EC) + ("BLACK CIRCLE WITH DOWN ARROW" #x29ED) + ("ERROR-BARRED WHITE SQUARE" #x29EE) + ("ERROR-BARRED BLACK SQUARE" #x29EF) + ("ERROR-BARRED WHITE DIAMOND" #x29F0) + ("ERROR-BARRED BLACK DIAMOND" #x29F1) + ("ERROR-BARRED WHITE CIRCLE" #x29F2) + ("ERROR-BARRED BLACK CIRCLE" #x29F3) + ("RULE-DELAYED" #x29F4) + ("REVERSE SOLIDUS OPERATOR" #x29F5) + ("SOLIDUS WITH OVERBAR" #x29F6) + ("REVERSE SOLIDUS WITH HORIZONTAL STROKE" #x29F7) + ("BIG SOLIDUS" #x29F8) + ("BIG REVERSE SOLIDUS" #x29F9) + ("DOUBLE PLUS" #x29FA) + ("TRIPLE PLUS" #x29FB) + ("LEFT-POINTING CURVED ANGLE BRACKET" #x29FC) + ("RIGHT-POINTING CURVED ANGLE BRACKET" #x29FD) + ("TINY" #x29FE) + ("MINY" #x29FF) + )) + +;; arch-tag: 4ae3dcff-8f56-4f7e-b9f3-07108e543969 diff --git a/etc/nxml/02A00-02AFF.el b/etc/nxml/02A00-02AFF.el new file mode 100644 index 00000000000..3cdaa5d295c --- /dev/null +++ b/etc/nxml/02A00-02AFF.el @@ -0,0 +1,260 @@ +(nxml-define-char-name-set 'supplemental-mathematical-operators + '(("N-ARY CIRCLED DOT OPERATOR" #x2A00) + ("N-ARY CIRCLED PLUS OPERATOR" #x2A01) + ("N-ARY CIRCLED TIMES OPERATOR" #x2A02) + ("N-ARY UNION OPERATOR WITH DOT" #x2A03) + ("N-ARY UNION OPERATOR WITH PLUS" #x2A04) + ("N-ARY SQUARE INTERSECTION OPERATOR" #x2A05) + ("N-ARY SQUARE UNION OPERATOR" #x2A06) + ("TWO LOGICAL AND OPERATOR" #x2A07) + ("TWO LOGICAL OR OPERATOR" #x2A08) + ("N-ARY TIMES OPERATOR" #x2A09) + ("MODULO TWO SUM" #x2A0A) + ("SUMMATION WITH INTEGRAL" #x2A0B) + ("QUADRUPLE INTEGRAL OPERATOR" #x2A0C) + ("FINITE PART INTEGRAL" #x2A0D) + ("INTEGRAL WITH DOUBLE STROKE" #x2A0E) + ("INTEGRAL AVERAGE WITH SLASH" #x2A0F) + ("CIRCULATION FUNCTION" #x2A10) + ("ANTICLOCKWISE INTEGRATION" #x2A11) + ("LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE" #x2A12) + ("LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE" #x2A13) + ("LINE INTEGRATION NOT INCLUDING THE POLE" #x2A14) + ("INTEGRAL AROUND A POINT OPERATOR" #x2A15) + ("QUATERNION INTEGRAL OPERATOR" #x2A16) + ("INTEGRAL WITH LEFTWARDS ARROW WITH HOOK" #x2A17) + ("INTEGRAL WITH TIMES SIGN" #x2A18) + ("INTEGRAL WITH INTERSECTION" #x2A19) + ("INTEGRAL WITH UNION" #x2A1A) + ("INTEGRAL WITH OVERBAR" #x2A1B) + ("INTEGRAL WITH UNDERBAR" #x2A1C) + ("JOIN" #x2A1D) + ("LARGE LEFT TRIANGLE OPERATOR" #x2A1E) + ("Z NOTATION SCHEMA COMPOSITION" #x2A1F) + ("Z NOTATION SCHEMA PIPING" #x2A20) + ("Z NOTATION SCHEMA PROJECTION" #x2A21) + ("PLUS SIGN WITH SMALL CIRCLE ABOVE" #x2A22) + ("PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE" #x2A23) + ("PLUS SIGN WITH TILDE ABOVE" #x2A24) + ("PLUS SIGN WITH DOT BELOW" #x2A25) + ("PLUS SIGN WITH TILDE BELOW" #x2A26) + ("PLUS SIGN WITH SUBSCRIPT TWO" #x2A27) + ("PLUS SIGN WITH BLACK TRIANGLE" #x2A28) + ("MINUS SIGN WITH COMMA ABOVE" #x2A29) + ("MINUS SIGN WITH DOT BELOW" #x2A2A) + ("MINUS SIGN WITH FALLING DOTS" #x2A2B) + ("MINUS SIGN WITH RISING DOTS" #x2A2C) + ("PLUS SIGN IN LEFT HALF CIRCLE" #x2A2D) + ("PLUS SIGN IN RIGHT HALF CIRCLE" #x2A2E) + ("VECTOR OR CROSS PRODUCT" #x2A2F) + ("MULTIPLICATION SIGN WITH DOT ABOVE" #x2A30) + ("MULTIPLICATION SIGN WITH UNDERBAR" #x2A31) + ("SEMIDIRECT PRODUCT WITH BOTTOM CLOSED" #x2A32) + ("SMASH PRODUCT" #x2A33) + ("MULTIPLICATION SIGN IN LEFT HALF CIRCLE" #x2A34) + ("MULTIPLICATION SIGN IN RIGHT HALF CIRCLE" #x2A35) + ("CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT" #x2A36) + ("MULTIPLICATION SIGN IN DOUBLE CIRCLE" #x2A37) + ("CIRCLED DIVISION SIGN" #x2A38) + ("PLUS SIGN IN TRIANGLE" #x2A39) + ("MINUS SIGN IN TRIANGLE" #x2A3A) + ("MULTIPLICATION SIGN IN TRIANGLE" #x2A3B) + ("INTERIOR PRODUCT" #x2A3C) + ("RIGHTHAND INTERIOR PRODUCT" #x2A3D) + ("Z NOTATION RELATIONAL COMPOSITION" #x2A3E) + ("AMALGAMATION OR COPRODUCT" #x2A3F) + ("INTERSECTION WITH DOT" #x2A40) + ("UNION WITH MINUS SIGN" #x2A41) + ("UNION WITH OVERBAR" #x2A42) + ("INTERSECTION WITH OVERBAR" #x2A43) + ("INTERSECTION WITH LOGICAL AND" #x2A44) + ("UNION WITH LOGICAL OR" #x2A45) + ("UNION ABOVE INTERSECTION" #x2A46) + ("INTERSECTION ABOVE UNION" #x2A47) + ("UNION ABOVE BAR ABOVE INTERSECTION" #x2A48) + ("INTERSECTION ABOVE BAR ABOVE UNION" #x2A49) + ("UNION BESIDE AND JOINED WITH UNION" #x2A4A) + ("INTERSECTION BESIDE AND JOINED WITH INTERSECTION" #x2A4B) + ("CLOSED UNION WITH SERIFS" #x2A4C) + ("CLOSED INTERSECTION WITH SERIFS" #x2A4D) + ("DOUBLE SQUARE INTERSECTION" #x2A4E) + ("DOUBLE SQUARE UNION" #x2A4F) + ("CLOSED UNION WITH SERIFS AND SMASH PRODUCT" #x2A50) + ("LOGICAL AND WITH DOT ABOVE" #x2A51) + ("LOGICAL OR WITH DOT ABOVE" #x2A52) + ("DOUBLE LOGICAL AND" #x2A53) + ("DOUBLE LOGICAL OR" #x2A54) + ("TWO INTERSECTING LOGICAL AND" #x2A55) + ("TWO INTERSECTING LOGICAL OR" #x2A56) + ("SLOPING LARGE OR" #x2A57) + ("SLOPING LARGE AND" #x2A58) + ("LOGICAL OR OVERLAPPING LOGICAL AND" #x2A59) + ("LOGICAL AND WITH MIDDLE STEM" #x2A5A) + ("LOGICAL OR WITH MIDDLE STEM" #x2A5B) + ("LOGICAL AND WITH HORIZONTAL DASH" #x2A5C) + ("LOGICAL OR WITH HORIZONTAL DASH" #x2A5D) + ("LOGICAL AND WITH DOUBLE OVERBAR" #x2A5E) + ("LOGICAL AND WITH UNDERBAR" #x2A5F) + ("LOGICAL AND WITH DOUBLE UNDERBAR" #x2A60) + ("SMALL VEE WITH UNDERBAR" #x2A61) + ("LOGICAL OR WITH DOUBLE OVERBAR" #x2A62) + ("LOGICAL OR WITH DOUBLE UNDERBAR" #x2A63) + ("Z NOTATION DOMAIN ANTIRESTRICTION" #x2A64) + ("Z NOTATION RANGE ANTIRESTRICTION" #x2A65) + ("EQUALS SIGN WITH DOT BELOW" #x2A66) + ("IDENTICAL WITH DOT ABOVE" #x2A67) + ("TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE" #x2A68) + ("TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" #x2A69) + ("TILDE OPERATOR WITH DOT ABOVE" #x2A6A) + ("TILDE OPERATOR WITH RISING DOTS" #x2A6B) + ("SIMILAR MINUS SIMILAR" #x2A6C) + ("CONGRUENT WITH DOT ABOVE" #x2A6D) + ("EQUALS WITH ASTERISK" #x2A6E) + ("ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT" #x2A6F) + ("APPROXIMATELY EQUAL OR EQUAL TO" #x2A70) + ("EQUALS SIGN ABOVE PLUS SIGN" #x2A71) + ("PLUS SIGN ABOVE EQUALS SIGN" #x2A72) + ("EQUALS SIGN ABOVE TILDE OPERATOR" #x2A73) + ("DOUBLE COLON EQUAL" #x2A74) + ("TWO CONSECUTIVE EQUALS SIGNS" #x2A75) + ("THREE CONSECUTIVE EQUALS SIGNS" #x2A76) + ("EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW" #x2A77) + ("EQUIVALENT WITH FOUR DOTS ABOVE" #x2A78) + ("LESS-THAN WITH CIRCLE INSIDE" #x2A79) + ("GREATER-THAN WITH CIRCLE INSIDE" #x2A7A) + ("LESS-THAN WITH QUESTION MARK ABOVE" #x2A7B) + ("GREATER-THAN WITH QUESTION MARK ABOVE" #x2A7C) + ("LESS-THAN OR SLANTED EQUAL TO" #x2A7D) + ("GREATER-THAN OR SLANTED EQUAL TO" #x2A7E) + ("LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A7F) + ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A80) + ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A81) + ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A82) + ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT" #x2A83) + ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT" #x2A84) + ("LESS-THAN OR APPROXIMATE" #x2A85) + ("GREATER-THAN OR APPROXIMATE" #x2A86) + ("LESS-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A87) + ("GREATER-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A88) + ("LESS-THAN AND NOT APPROXIMATE" #x2A89) + ("GREATER-THAN AND NOT APPROXIMATE" #x2A8A) + ("LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN" #x2A8B) + ("GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN" #x2A8C) + ("LESS-THAN ABOVE SIMILAR OR EQUAL" #x2A8D) + ("GREATER-THAN ABOVE SIMILAR OR EQUAL" #x2A8E) + ("LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN" #x2A8F) + ("GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN" #x2A90) + ("LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL" #x2A91) + ("GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL" #x2A92) + ("LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL" #x2A93) + ("GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL" #x2A94) + ("SLANTED EQUAL TO OR LESS-THAN" #x2A95) + ("SLANTED EQUAL TO OR GREATER-THAN" #x2A96) + ("SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE" #x2A97) + ("SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE" #x2A98) + ("DOUBLE-LINE EQUAL TO OR LESS-THAN" #x2A99) + ("DOUBLE-LINE EQUAL TO OR GREATER-THAN" #x2A9A) + ("DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN" #x2A9B) + ("DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN" #x2A9C) + ("SIMILAR OR LESS-THAN" #x2A9D) + ("SIMILAR OR GREATER-THAN" #x2A9E) + ("SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN" #x2A9F) + ("SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN" #x2AA0) + ("DOUBLE NESTED LESS-THAN" #x2AA1) + ("DOUBLE NESTED GREATER-THAN" #x2AA2) + ("DOUBLE NESTED LESS-THAN WITH UNDERBAR" #x2AA3) + ("GREATER-THAN OVERLAPPING LESS-THAN" #x2AA4) + ("GREATER-THAN BESIDE LESS-THAN" #x2AA5) + ("LESS-THAN CLOSED BY CURVE" #x2AA6) + ("GREATER-THAN CLOSED BY CURVE" #x2AA7) + ("LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA8) + ("GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA9) + ("SMALLER THAN" #x2AAA) + ("LARGER THAN" #x2AAB) + ("SMALLER THAN OR EQUAL TO" #x2AAC) + ("LARGER THAN OR EQUAL TO" #x2AAD) + ("EQUALS SIGN WITH BUMPY ABOVE" #x2AAE) + ("PRECEDES ABOVE SINGLE-LINE EQUALS SIGN" #x2AAF) + ("SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN" #x2AB0) + ("PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB1) + ("SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB2) + ("PRECEDES ABOVE EQUALS SIGN" #x2AB3) + ("SUCCEEDS ABOVE EQUALS SIGN" #x2AB4) + ("PRECEDES ABOVE NOT EQUAL TO" #x2AB5) + ("SUCCEEDS ABOVE NOT EQUAL TO" #x2AB6) + ("PRECEDES ABOVE ALMOST EQUAL TO" #x2AB7) + ("SUCCEEDS ABOVE ALMOST EQUAL TO" #x2AB8) + ("PRECEDES ABOVE NOT ALMOST EQUAL TO" #x2AB9) + ("SUCCEEDS ABOVE NOT ALMOST EQUAL TO" #x2ABA) + ("DOUBLE PRECEDES" #x2ABB) + ("DOUBLE SUCCEEDS" #x2ABC) + ("SUBSET WITH DOT" #x2ABD) + ("SUPERSET WITH DOT" #x2ABE) + ("SUBSET WITH PLUS SIGN BELOW" #x2ABF) + ("SUPERSET WITH PLUS SIGN BELOW" #x2AC0) + ("SUBSET WITH MULTIPLICATION SIGN BELOW" #x2AC1) + ("SUPERSET WITH MULTIPLICATION SIGN BELOW" #x2AC2) + ("SUBSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC3) + ("SUPERSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC4) + ("SUBSET OF ABOVE EQUALS SIGN" #x2AC5) + ("SUPERSET OF ABOVE EQUALS SIGN" #x2AC6) + ("SUBSET OF ABOVE TILDE OPERATOR" #x2AC7) + ("SUPERSET OF ABOVE TILDE OPERATOR" #x2AC8) + ("SUBSET OF ABOVE ALMOST EQUAL TO" #x2AC9) + ("SUPERSET OF ABOVE ALMOST EQUAL TO" #x2ACA) + ("SUBSET OF ABOVE NOT EQUAL TO" #x2ACB) + ("SUPERSET OF ABOVE NOT EQUAL TO" #x2ACC) + ("SQUARE LEFT OPEN BOX OPERATOR" #x2ACD) + ("SQUARE RIGHT OPEN BOX OPERATOR" #x2ACE) + ("CLOSED SUBSET" #x2ACF) + ("CLOSED SUPERSET" #x2AD0) + ("CLOSED SUBSET OR EQUAL TO" #x2AD1) + ("CLOSED SUPERSET OR EQUAL TO" #x2AD2) + ("SUBSET ABOVE SUPERSET" #x2AD3) + ("SUPERSET ABOVE SUBSET" #x2AD4) + ("SUBSET ABOVE SUBSET" #x2AD5) + ("SUPERSET ABOVE SUPERSET" #x2AD6) + ("SUPERSET BESIDE SUBSET" #x2AD7) + ("SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET" #x2AD8) + ("ELEMENT OF OPENING DOWNWARDS" #x2AD9) + ("PITCHFORK WITH TEE TOP" #x2ADA) + ("TRANSVERSAL INTERSECTION" #x2ADB) + ("FORKING" #x2ADC) + ("NONFORKING" #x2ADD) + ("SHORT LEFT TACK" #x2ADE) + ("SHORT DOWN TACK" #x2ADF) + ("SHORT UP TACK" #x2AE0) + ("PERPENDICULAR WITH S" #x2AE1) + ("VERTICAL BAR TRIPLE RIGHT TURNSTILE" #x2AE2) + ("DOUBLE VERTICAL BAR LEFT TURNSTILE" #x2AE3) + ("VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE4) + ("DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE5) + ("LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL" #x2AE6) + ("SHORT DOWN TACK WITH OVERBAR" #x2AE7) + ("SHORT UP TACK WITH UNDERBAR" #x2AE8) + ("SHORT UP TACK ABOVE SHORT DOWN TACK" #x2AE9) + ("DOUBLE DOWN TACK" #x2AEA) + ("DOUBLE UP TACK" #x2AEB) + ("DOUBLE STROKE NOT SIGN" #x2AEC) + ("REVERSED DOUBLE STROKE NOT SIGN" #x2AED) + ("DOES NOT DIVIDE WITH REVERSED NEGATION SLASH" #x2AEE) + ("VERTICAL LINE WITH CIRCLE ABOVE" #x2AEF) + ("VERTICAL LINE WITH CIRCLE BELOW" #x2AF0) + ("DOWN TACK WITH CIRCLE BELOW" #x2AF1) + ("PARALLEL WITH HORIZONTAL STROKE" #x2AF2) + ("PARALLEL WITH TILDE OPERATOR" #x2AF3) + ("TRIPLE VERTICAL BAR BINARY RELATION" #x2AF4) + ("TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE" #x2AF5) + ("TRIPLE COLON OPERATOR" #x2AF6) + ("TRIPLE NESTED LESS-THAN" #x2AF7) + ("TRIPLE NESTED GREATER-THAN" #x2AF8) + ("DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO" #x2AF9) + ("DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO" #x2AFA) + ("TRIPLE SOLIDUS BINARY RELATION" #x2AFB) + ("LARGE TRIPLE VERTICAL BAR OPERATOR" #x2AFC) + ("DOUBLE SOLIDUS OPERATOR" #x2AFD) + ("WHITE VERTICAL BAR" #x2AFE) + ("N-ARY WHITE VERTICAL BAR" #x2AFF) + )) + +;; arch-tag: 672a8fbf-fb4a-4862-8b8e-2379b799484c diff --git a/etc/nxml/02E80-02EFF.el b/etc/nxml/02E80-02EFF.el new file mode 100644 index 00000000000..deb81105eab --- /dev/null +++ b/etc/nxml/02E80-02EFF.el @@ -0,0 +1,119 @@ +(nxml-define-char-name-set 'cjk-radicals-supplement + '(("CJK RADICAL REPEAT" #x2E80) + ("CJK RADICAL CLIFF" #x2E81) + ("CJK RADICAL SECOND ONE" #x2E82) + ("CJK RADICAL SECOND TWO" #x2E83) + ("CJK RADICAL SECOND THREE" #x2E84) + ("CJK RADICAL PERSON" #x2E85) + ("CJK RADICAL BOX" #x2E86) + ("CJK RADICAL TABLE" #x2E87) + ("CJK RADICAL KNIFE ONE" #x2E88) + ("CJK RADICAL KNIFE TWO" #x2E89) + ("CJK RADICAL DIVINATION" #x2E8A) + ("CJK RADICAL SEAL" #x2E8B) + ("CJK RADICAL SMALL ONE" #x2E8C) + ("CJK RADICAL SMALL TWO" #x2E8D) + ("CJK RADICAL LAME ONE" #x2E8E) + ("CJK RADICAL LAME TWO" #x2E8F) + ("CJK RADICAL LAME THREE" #x2E90) + ("CJK RADICAL LAME FOUR" #x2E91) + ("CJK RADICAL SNAKE" #x2E92) + ("CJK RADICAL THREAD" #x2E93) + ("CJK RADICAL SNOUT ONE" #x2E94) + ("CJK RADICAL SNOUT TWO" #x2E95) + ("CJK RADICAL HEART ONE" #x2E96) + ("CJK RADICAL HEART TWO" #x2E97) + ("CJK RADICAL HAND" #x2E98) + ("CJK RADICAL RAP" #x2E99) + ("CJK RADICAL CHOKE" #x2E9B) + ("CJK RADICAL SUN" #x2E9C) + ("CJK RADICAL MOON" #x2E9D) + ("CJK RADICAL DEATH" #x2E9E) + ("CJK RADICAL MOTHER" #x2E9F) + ("CJK RADICAL CIVILIAN" #x2EA0) + ("CJK RADICAL WATER ONE" #x2EA1) + ("CJK RADICAL WATER TWO" #x2EA2) + ("CJK RADICAL FIRE" #x2EA3) + ("CJK RADICAL PAW ONE" #x2EA4) + ("CJK RADICAL PAW TWO" #x2EA5) + ("CJK RADICAL SIMPLIFIED HALF TREE TRUNK" #x2EA6) + ("CJK RADICAL COW" #x2EA7) + ("CJK RADICAL DOG" #x2EA8) + ("CJK RADICAL JADE" #x2EA9) + ("CJK RADICAL BOLT OF CLOTH" #x2EAA) + ("CJK RADICAL EYE" #x2EAB) + ("CJK RADICAL SPIRIT ONE" #x2EAC) + ("CJK RADICAL SPIRIT TWO" #x2EAD) + ("CJK RADICAL BAMBOO" #x2EAE) + ("CJK RADICAL SILK" #x2EAF) + ("CJK RADICAL C-SIMPLIFIED SILK" #x2EB0) + ("CJK RADICAL NET ONE" #x2EB1) + ("CJK RADICAL NET TWO" #x2EB2) + ("CJK RADICAL NET THREE" #x2EB3) + ("CJK RADICAL NET FOUR" #x2EB4) + ("CJK RADICAL MESH" #x2EB5) + ("CJK RADICAL SHEEP" #x2EB6) + ("CJK RADICAL RAM" #x2EB7) + ("CJK RADICAL EWE" #x2EB8) + ("CJK RADICAL OLD" #x2EB9) + ("CJK RADICAL BRUSH ONE" #x2EBA) + ("CJK RADICAL BRUSH TWO" #x2EBB) + ("CJK RADICAL MEAT" #x2EBC) + ("CJK RADICAL MORTAR" #x2EBD) + ("CJK RADICAL GRASS ONE" #x2EBE) + ("CJK RADICAL GRASS TWO" #x2EBF) + ("CJK RADICAL GRASS THREE" #x2EC0) + ("CJK RADICAL TIGER" #x2EC1) + ("CJK RADICAL CLOTHES" #x2EC2) + ("CJK RADICAL WEST ONE" #x2EC3) + ("CJK RADICAL WEST TWO" #x2EC4) + ("CJK RADICAL C-SIMPLIFIED SEE" #x2EC5) + ("CJK RADICAL SIMPLIFIED HORN" #x2EC6) + ("CJK RADICAL HORN" #x2EC7) + ("CJK RADICAL C-SIMPLIFIED SPEECH" #x2EC8) + ("CJK RADICAL C-SIMPLIFIED SHELL" #x2EC9) + ("CJK RADICAL FOOT" #x2ECA) + ("CJK RADICAL C-SIMPLIFIED CART" #x2ECB) + ("CJK RADICAL SIMPLIFIED WALK" #x2ECC) + ("CJK RADICAL WALK ONE" #x2ECD) + ("CJK RADICAL WALK TWO" #x2ECE) + ("CJK RADICAL CITY" #x2ECF) + ("CJK RADICAL C-SIMPLIFIED GOLD" #x2ED0) + ("CJK RADICAL LONG ONE" #x2ED1) + ("CJK RADICAL LONG TWO" #x2ED2) + ("CJK RADICAL C-SIMPLIFIED LONG" #x2ED3) + ("CJK RADICAL C-SIMPLIFIED GATE" #x2ED4) + ("CJK RADICAL MOUND ONE" #x2ED5) + ("CJK RADICAL MOUND TWO" #x2ED6) + ("CJK RADICAL RAIN" #x2ED7) + ("CJK RADICAL BLUE" #x2ED8) + ("CJK RADICAL C-SIMPLIFIED TANNED LEATHER" #x2ED9) + ("CJK RADICAL C-SIMPLIFIED LEAF" #x2EDA) + ("CJK RADICAL C-SIMPLIFIED WIND" #x2EDB) + ("CJK RADICAL C-SIMPLIFIED FLY" #x2EDC) + ("CJK RADICAL EAT ONE" #x2EDD) + ("CJK RADICAL EAT TWO" #x2EDE) + ("CJK RADICAL EAT THREE" #x2EDF) + ("CJK RADICAL C-SIMPLIFIED EAT" #x2EE0) + ("CJK RADICAL HEAD" #x2EE1) + ("CJK RADICAL C-SIMPLIFIED HORSE" #x2EE2) + ("CJK RADICAL BONE" #x2EE3) + ("CJK RADICAL GHOST" #x2EE4) + ("CJK RADICAL C-SIMPLIFIED FISH" #x2EE5) + ("CJK RADICAL C-SIMPLIFIED BIRD" #x2EE6) + ("CJK RADICAL C-SIMPLIFIED SALT" #x2EE7) + ("CJK RADICAL SIMPLIFIED WHEAT" #x2EE8) + ("CJK RADICAL SIMPLIFIED YELLOW" #x2EE9) + ("CJK RADICAL C-SIMPLIFIED FROG" #x2EEA) + ("CJK RADICAL J-SIMPLIFIED EVEN" #x2EEB) + ("CJK RADICAL C-SIMPLIFIED EVEN" #x2EEC) + ("CJK RADICAL J-SIMPLIFIED TOOTH" #x2EED) + ("CJK RADICAL C-SIMPLIFIED TOOTH" #x2EEE) + ("CJK RADICAL J-SIMPLIFIED DRAGON" #x2EEF) + ("CJK RADICAL C-SIMPLIFIED DRAGON" #x2EF0) + ("CJK RADICAL TURTLE" #x2EF1) + ("CJK RADICAL J-SIMPLIFIED TURTLE" #x2EF2) + ("CJK RADICAL C-SIMPLIFIED TURTLE" #x2EF3) + )) + +;; arch-tag: 59a2c3dd-63ee-4cba-b427-1e8eb782634f diff --git a/etc/nxml/02F00-02FDF.el b/etc/nxml/02F00-02FDF.el new file mode 100644 index 00000000000..1a2448aa844 --- /dev/null +++ b/etc/nxml/02F00-02FDF.el @@ -0,0 +1,218 @@ +(nxml-define-char-name-set 'kangxi-radicals + '(("KANGXI RADICAL ONE" #x2F00) + ("KANGXI RADICAL LINE" #x2F01) + ("KANGXI RADICAL DOT" #x2F02) + ("KANGXI RADICAL SLASH" #x2F03) + ("KANGXI RADICAL SECOND" #x2F04) + ("KANGXI RADICAL HOOK" #x2F05) + ("KANGXI RADICAL TWO" #x2F06) + ("KANGXI RADICAL LID" #x2F07) + ("KANGXI RADICAL MAN" #x2F08) + ("KANGXI RADICAL LEGS" #x2F09) + ("KANGXI RADICAL ENTER" #x2F0A) + ("KANGXI RADICAL EIGHT" #x2F0B) + ("KANGXI RADICAL DOWN BOX" #x2F0C) + ("KANGXI RADICAL COVER" #x2F0D) + ("KANGXI RADICAL ICE" #x2F0E) + ("KANGXI RADICAL TABLE" #x2F0F) + ("KANGXI RADICAL OPEN BOX" #x2F10) + ("KANGXI RADICAL KNIFE" #x2F11) + ("KANGXI RADICAL POWER" #x2F12) + ("KANGXI RADICAL WRAP" #x2F13) + ("KANGXI RADICAL SPOON" #x2F14) + ("KANGXI RADICAL RIGHT OPEN BOX" #x2F15) + ("KANGXI RADICAL HIDING ENCLOSURE" #x2F16) + ("KANGXI RADICAL TEN" #x2F17) + ("KANGXI RADICAL DIVINATION" #x2F18) + ("KANGXI RADICAL SEAL" #x2F19) + ("KANGXI RADICAL CLIFF" #x2F1A) + ("KANGXI RADICAL PRIVATE" #x2F1B) + ("KANGXI RADICAL AGAIN" #x2F1C) + ("KANGXI RADICAL MOUTH" #x2F1D) + ("KANGXI RADICAL ENCLOSURE" #x2F1E) + ("KANGXI RADICAL EARTH" #x2F1F) + ("KANGXI RADICAL SCHOLAR" #x2F20) + ("KANGXI RADICAL GO" #x2F21) + ("KANGXI RADICAL GO SLOWLY" #x2F22) + ("KANGXI RADICAL EVENING" #x2F23) + ("KANGXI RADICAL BIG" #x2F24) + ("KANGXI RADICAL WOMAN" #x2F25) + ("KANGXI RADICAL CHILD" #x2F26) + ("KANGXI RADICAL ROOF" #x2F27) + ("KANGXI RADICAL INCH" #x2F28) + ("KANGXI RADICAL SMALL" #x2F29) + ("KANGXI RADICAL LAME" #x2F2A) + ("KANGXI RADICAL CORPSE" #x2F2B) + ("KANGXI RADICAL SPROUT" #x2F2C) + ("KANGXI RADICAL MOUNTAIN" #x2F2D) + ("KANGXI RADICAL RIVER" #x2F2E) + ("KANGXI RADICAL WORK" #x2F2F) + ("KANGXI RADICAL ONESELF" #x2F30) + ("KANGXI RADICAL TURBAN" #x2F31) + ("KANGXI RADICAL DRY" #x2F32) + ("KANGXI RADICAL SHORT THREAD" #x2F33) + ("KANGXI RADICAL DOTTED CLIFF" #x2F34) + ("KANGXI RADICAL LONG STRIDE" #x2F35) + ("KANGXI RADICAL TWO HANDS" #x2F36) + ("KANGXI RADICAL SHOOT" #x2F37) + ("KANGXI RADICAL BOW" #x2F38) + ("KANGXI RADICAL SNOUT" #x2F39) + ("KANGXI RADICAL BRISTLE" #x2F3A) + ("KANGXI RADICAL STEP" #x2F3B) + ("KANGXI RADICAL HEART" #x2F3C) + ("KANGXI RADICAL HALBERD" #x2F3D) + ("KANGXI RADICAL DOOR" #x2F3E) + ("KANGXI RADICAL HAND" #x2F3F) + ("KANGXI RADICAL BRANCH" #x2F40) + ("KANGXI RADICAL RAP" #x2F41) + ("KANGXI RADICAL SCRIPT" #x2F42) + ("KANGXI RADICAL DIPPER" #x2F43) + ("KANGXI RADICAL AXE" #x2F44) + ("KANGXI RADICAL SQUARE" #x2F45) + ("KANGXI RADICAL NOT" #x2F46) + ("KANGXI RADICAL SUN" #x2F47) + ("KANGXI RADICAL SAY" #x2F48) + ("KANGXI RADICAL MOON" #x2F49) + ("KANGXI RADICAL TREE" #x2F4A) + ("KANGXI RADICAL LACK" #x2F4B) + ("KANGXI RADICAL STOP" #x2F4C) + ("KANGXI RADICAL DEATH" #x2F4D) + ("KANGXI RADICAL WEAPON" #x2F4E) + ("KANGXI RADICAL DO NOT" #x2F4F) + ("KANGXI RADICAL COMPARE" #x2F50) + ("KANGXI RADICAL FUR" #x2F51) + ("KANGXI RADICAL CLAN" #x2F52) + ("KANGXI RADICAL STEAM" #x2F53) + ("KANGXI RADICAL WATER" #x2F54) + ("KANGXI RADICAL FIRE" #x2F55) + ("KANGXI RADICAL CLAW" #x2F56) + ("KANGXI RADICAL FATHER" #x2F57) + ("KANGXI RADICAL DOUBLE X" #x2F58) + ("KANGXI RADICAL HALF TREE TRUNK" #x2F59) + ("KANGXI RADICAL SLICE" #x2F5A) + ("KANGXI RADICAL FANG" #x2F5B) + ("KANGXI RADICAL COW" #x2F5C) + ("KANGXI RADICAL DOG" #x2F5D) + ("KANGXI RADICAL PROFOUND" #x2F5E) + ("KANGXI RADICAL JADE" #x2F5F) + ("KANGXI RADICAL MELON" #x2F60) + ("KANGXI RADICAL TILE" #x2F61) + ("KANGXI RADICAL SWEET" #x2F62) + ("KANGXI RADICAL LIFE" #x2F63) + ("KANGXI RADICAL USE" #x2F64) + ("KANGXI RADICAL FIELD" #x2F65) + ("KANGXI RADICAL BOLT OF CLOTH" #x2F66) + ("KANGXI RADICAL SICKNESS" #x2F67) + ("KANGXI RADICAL DOTTED TENT" #x2F68) + ("KANGXI RADICAL WHITE" #x2F69) + ("KANGXI RADICAL SKIN" #x2F6A) + ("KANGXI RADICAL DISH" #x2F6B) + ("KANGXI RADICAL EYE" #x2F6C) + ("KANGXI RADICAL SPEAR" #x2F6D) + ("KANGXI RADICAL ARROW" #x2F6E) + ("KANGXI RADICAL STONE" #x2F6F) + ("KANGXI RADICAL SPIRIT" #x2F70) + ("KANGXI RADICAL TRACK" #x2F71) + ("KANGXI RADICAL GRAIN" #x2F72) + ("KANGXI RADICAL CAVE" #x2F73) + ("KANGXI RADICAL STAND" #x2F74) + ("KANGXI RADICAL BAMBOO" #x2F75) + ("KANGXI RADICAL RICE" #x2F76) + ("KANGXI RADICAL SILK" #x2F77) + ("KANGXI RADICAL JAR" #x2F78) + ("KANGXI RADICAL NET" #x2F79) + ("KANGXI RADICAL SHEEP" #x2F7A) + ("KANGXI RADICAL FEATHER" #x2F7B) + ("KANGXI RADICAL OLD" #x2F7C) + ("KANGXI RADICAL AND" #x2F7D) + ("KANGXI RADICAL PLOW" #x2F7E) + ("KANGXI RADICAL EAR" #x2F7F) + ("KANGXI RADICAL BRUSH" #x2F80) + ("KANGXI RADICAL MEAT" #x2F81) + ("KANGXI RADICAL MINISTER" #x2F82) + ("KANGXI RADICAL SELF" #x2F83) + ("KANGXI RADICAL ARRIVE" #x2F84) + ("KANGXI RADICAL MORTAR" #x2F85) + ("KANGXI RADICAL TONGUE" #x2F86) + ("KANGXI RADICAL OPPOSE" #x2F87) + ("KANGXI RADICAL BOAT" #x2F88) + ("KANGXI RADICAL STOPPING" #x2F89) + ("KANGXI RADICAL COLOR" #x2F8A) + ("KANGXI RADICAL GRASS" #x2F8B) + ("KANGXI RADICAL TIGER" #x2F8C) + ("KANGXI RADICAL INSECT" #x2F8D) + ("KANGXI RADICAL BLOOD" #x2F8E) + ("KANGXI RADICAL WALK ENCLOSURE" #x2F8F) + ("KANGXI RADICAL CLOTHES" #x2F90) + ("KANGXI RADICAL WEST" #x2F91) + ("KANGXI RADICAL SEE" #x2F92) + ("KANGXI RADICAL HORN" #x2F93) + ("KANGXI RADICAL SPEECH" #x2F94) + ("KANGXI RADICAL VALLEY" #x2F95) + ("KANGXI RADICAL BEAN" #x2F96) + ("KANGXI RADICAL PIG" #x2F97) + ("KANGXI RADICAL BADGER" #x2F98) + ("KANGXI RADICAL SHELL" #x2F99) + ("KANGXI RADICAL RED" #x2F9A) + ("KANGXI RADICAL RUN" #x2F9B) + ("KANGXI RADICAL FOOT" #x2F9C) + ("KANGXI RADICAL BODY" #x2F9D) + ("KANGXI RADICAL CART" #x2F9E) + ("KANGXI RADICAL BITTER" #x2F9F) + ("KANGXI RADICAL MORNING" #x2FA0) + ("KANGXI RADICAL WALK" #x2FA1) + ("KANGXI RADICAL CITY" #x2FA2) + ("KANGXI RADICAL WINE" #x2FA3) + ("KANGXI RADICAL DISTINGUISH" #x2FA4) + ("KANGXI RADICAL VILLAGE" #x2FA5) + ("KANGXI RADICAL GOLD" #x2FA6) + ("KANGXI RADICAL LONG" #x2FA7) + ("KANGXI RADICAL GATE" #x2FA8) + ("KANGXI RADICAL MOUND" #x2FA9) + ("KANGXI RADICAL SLAVE" #x2FAA) + ("KANGXI RADICAL SHORT TAILED BIRD" #x2FAB) + ("KANGXI RADICAL RAIN" #x2FAC) + ("KANGXI RADICAL BLUE" #x2FAD) + ("KANGXI RADICAL WRONG" #x2FAE) + ("KANGXI RADICAL FACE" #x2FAF) + ("KANGXI RADICAL LEATHER" #x2FB0) + ("KANGXI RADICAL TANNED LEATHER" #x2FB1) + ("KANGXI RADICAL LEEK" #x2FB2) + ("KANGXI RADICAL SOUND" #x2FB3) + ("KANGXI RADICAL LEAF" #x2FB4) + ("KANGXI RADICAL WIND" #x2FB5) + ("KANGXI RADICAL FLY" #x2FB6) + ("KANGXI RADICAL EAT" #x2FB7) + ("KANGXI RADICAL HEAD" #x2FB8) + ("KANGXI RADICAL FRAGRANT" #x2FB9) + ("KANGXI RADICAL HORSE" #x2FBA) + ("KANGXI RADICAL BONE" #x2FBB) + ("KANGXI RADICAL TALL" #x2FBC) + ("KANGXI RADICAL HAIR" #x2FBD) + ("KANGXI RADICAL FIGHT" #x2FBE) + ("KANGXI RADICAL SACRIFICIAL WINE" #x2FBF) + ("KANGXI RADICAL CAULDRON" #x2FC0) + ("KANGXI RADICAL GHOST" #x2FC1) + ("KANGXI RADICAL FISH" #x2FC2) + ("KANGXI RADICAL BIRD" #x2FC3) + ("KANGXI RADICAL SALT" #x2FC4) + ("KANGXI RADICAL DEER" #x2FC5) + ("KANGXI RADICAL WHEAT" #x2FC6) + ("KANGXI RADICAL HEMP" #x2FC7) + ("KANGXI RADICAL YELLOW" #x2FC8) + ("KANGXI RADICAL MILLET" #x2FC9) + ("KANGXI RADICAL BLACK" #x2FCA) + ("KANGXI RADICAL EMBROIDERY" #x2FCB) + ("KANGXI RADICAL FROG" #x2FCC) + ("KANGXI RADICAL TRIPOD" #x2FCD) + ("KANGXI RADICAL DRUM" #x2FCE) + ("KANGXI RADICAL RAT" #x2FCF) + ("KANGXI RADICAL NOSE" #x2FD0) + ("KANGXI RADICAL EVEN" #x2FD1) + ("KANGXI RADICAL TOOTH" #x2FD2) + ("KANGXI RADICAL DRAGON" #x2FD3) + ("KANGXI RADICAL TURTLE" #x2FD4) + ("KANGXI RADICAL FLUTE" #x2FD5) + )) + +;; arch-tag: e7210935-b74b-4a42-88c6-de146c755742 diff --git a/etc/nxml/02FF0-02FFF.el b/etc/nxml/02FF0-02FFF.el new file mode 100644 index 00000000000..f94bd1fe313 --- /dev/null +++ b/etc/nxml/02FF0-02FFF.el @@ -0,0 +1,16 @@ +(nxml-define-char-name-set 'ideographic-description-characters + '(("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT" #x2FF0) + ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW" #x2FF1) + ("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT" #x2FF2) + ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW" #x2FF3) + ("IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND" #x2FF4) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE" #x2FF5) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW" #x2FF6) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT" #x2FF7) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT" #x2FF8) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT" #x2FF9) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT" #x2FFA) + ("IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID" #x2FFB) + )) + +;; arch-tag: dd6d1436-4620-4994-8da5-9140a8a6ec5b diff --git a/etc/nxml/03000-0303F.el b/etc/nxml/03000-0303F.el new file mode 100644 index 00000000000..997795f31dd --- /dev/null +++ b/etc/nxml/03000-0303F.el @@ -0,0 +1,68 @@ +(nxml-define-char-name-set 'cjk-symbols-and-punctuation + '(("IDEOGRAPHIC SPACE" #x3000) + ("IDEOGRAPHIC COMMA" #x3001) + ("IDEOGRAPHIC FULL STOP" #x3002) + ("DITTO MARK" #x3003) + ("JAPANESE INDUSTRIAL STANDARD SYMBOL" #x3004) + ("IDEOGRAPHIC ITERATION MARK" #x3005) + ("IDEOGRAPHIC CLOSING MARK" #x3006) + ("IDEOGRAPHIC NUMBER ZERO" #x3007) + ("LEFT ANGLE BRACKET" #x3008) + ("RIGHT ANGLE BRACKET" #x3009) + ("LEFT DOUBLE ANGLE BRACKET" #x300A) + ("RIGHT DOUBLE ANGLE BRACKET" #x300B) + ("LEFT CORNER BRACKET" #x300C) + ("RIGHT CORNER BRACKET" #x300D) + ("LEFT WHITE CORNER BRACKET" #x300E) + ("RIGHT WHITE CORNER BRACKET" #x300F) + ("LEFT BLACK LENTICULAR BRACKET" #x3010) + ("RIGHT BLACK LENTICULAR BRACKET" #x3011) + ("POSTAL MARK" #x3012) + ("GETA MARK" #x3013) + ("LEFT TORTOISE SHELL BRACKET" #x3014) + ("RIGHT TORTOISE SHELL BRACKET" #x3015) + ("LEFT WHITE LENTICULAR BRACKET" #x3016) + ("RIGHT WHITE LENTICULAR BRACKET" #x3017) + ("LEFT WHITE TORTOISE SHELL BRACKET" #x3018) + ("RIGHT WHITE TORTOISE SHELL BRACKET" #x3019) + ("LEFT WHITE SQUARE BRACKET" #x301A) + ("RIGHT WHITE SQUARE BRACKET" #x301B) + ("WAVE DASH" #x301C) + ("REVERSED DOUBLE PRIME QUOTATION MARK" #x301D) + ("DOUBLE PRIME QUOTATION MARK" #x301E) + ("LOW DOUBLE PRIME QUOTATION MARK" #x301F) + ("POSTAL MARK FACE" #x3020) + ("HANGZHOU NUMERAL ONE" #x3021) + ("HANGZHOU NUMERAL TWO" #x3022) + ("HANGZHOU NUMERAL THREE" #x3023) + ("HANGZHOU NUMERAL FOUR" #x3024) + ("HANGZHOU NUMERAL FIVE" #x3025) + ("HANGZHOU NUMERAL SIX" #x3026) + ("HANGZHOU NUMERAL SEVEN" #x3027) + ("HANGZHOU NUMERAL EIGHT" #x3028) + ("HANGZHOU NUMERAL NINE" #x3029) + ("IDEOGRAPHIC LEVEL TONE MARK" #x302A) + ("IDEOGRAPHIC RISING TONE MARK" #x302B) + ("IDEOGRAPHIC DEPARTING TONE MARK" #x302C) + ("IDEOGRAPHIC ENTERING TONE MARK" #x302D) + ("HANGUL SINGLE DOT TONE MARK" #x302E) + ("HANGUL DOUBLE DOT TONE MARK" #x302F) + ("WAVY DASH" #x3030) + ("VERTICAL KANA REPEAT MARK" #x3031) + ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK" #x3032) + ("VERTICAL KANA REPEAT MARK UPPER HALF" #x3033) + ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF" #x3034) + ("VERTICAL KANA REPEAT MARK LOWER HALF" #x3035) + ("CIRCLED POSTAL MARK" #x3036) + ("IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL" #x3037) + ("HANGZHOU NUMERAL TEN" #x3038) + ("HANGZHOU NUMERAL TWENTY" #x3039) + ("HANGZHOU NUMERAL THIRTY" #x303A) + ("VERTICAL IDEOGRAPHIC ITERATION MARK" #x303B) + ("MASU MARK" #x303C) + ("PART ALTERNATION MARK" #x303D) + ("IDEOGRAPHIC VARIATION INDICATOR" #x303E) + ("IDEOGRAPHIC HALF FILL SPACE" #x303F) + )) + +;; arch-tag: 05689acc-1d48-4a36-9b60-75d5abf8a065 diff --git a/etc/nxml/03040-0309F.el b/etc/nxml/03040-0309F.el new file mode 100644 index 00000000000..18cdaa0827b --- /dev/null +++ b/etc/nxml/03040-0309F.el @@ -0,0 +1,97 @@ +(nxml-define-char-name-set 'hiragana + '(("HIRAGANA LETTER SMALL A" #x3041) + ("HIRAGANA LETTER A" #x3042) + ("HIRAGANA LETTER SMALL I" #x3043) + ("HIRAGANA LETTER I" #x3044) + ("HIRAGANA LETTER SMALL U" #x3045) + ("HIRAGANA LETTER U" #x3046) + ("HIRAGANA LETTER SMALL E" #x3047) + ("HIRAGANA LETTER E" #x3048) + ("HIRAGANA LETTER SMALL O" #x3049) + ("HIRAGANA LETTER O" #x304A) + ("HIRAGANA LETTER KA" #x304B) + ("HIRAGANA LETTER GA" #x304C) + ("HIRAGANA LETTER KI" #x304D) + ("HIRAGANA LETTER GI" #x304E) + ("HIRAGANA LETTER KU" #x304F) + ("HIRAGANA LETTER GU" #x3050) + ("HIRAGANA LETTER KE" #x3051) + ("HIRAGANA LETTER GE" #x3052) + ("HIRAGANA LETTER KO" #x3053) + ("HIRAGANA LETTER GO" #x3054) + ("HIRAGANA LETTER SA" #x3055) + ("HIRAGANA LETTER ZA" #x3056) + ("HIRAGANA LETTER SI" #x3057) + ("HIRAGANA LETTER ZI" #x3058) + ("HIRAGANA LETTER SU" #x3059) + ("HIRAGANA LETTER ZU" #x305A) + ("HIRAGANA LETTER SE" #x305B) + ("HIRAGANA LETTER ZE" #x305C) + ("HIRAGANA LETTER SO" #x305D) + ("HIRAGANA LETTER ZO" #x305E) + ("HIRAGANA LETTER TA" #x305F) + ("HIRAGANA LETTER DA" #x3060) + ("HIRAGANA LETTER TI" #x3061) + ("HIRAGANA LETTER DI" #x3062) + ("HIRAGANA LETTER SMALL TU" #x3063) + ("HIRAGANA LETTER TU" #x3064) + ("HIRAGANA LETTER DU" #x3065) + ("HIRAGANA LETTER TE" #x3066) + ("HIRAGANA LETTER DE" #x3067) + ("HIRAGANA LETTER TO" #x3068) + ("HIRAGANA LETTER DO" #x3069) + ("HIRAGANA LETTER NA" #x306A) + ("HIRAGANA LETTER NI" #x306B) + ("HIRAGANA LETTER NU" #x306C) + ("HIRAGANA LETTER NE" #x306D) + ("HIRAGANA LETTER NO" #x306E) + ("HIRAGANA LETTER HA" #x306F) + ("HIRAGANA LETTER BA" #x3070) + ("HIRAGANA LETTER PA" #x3071) + ("HIRAGANA LETTER HI" #x3072) + ("HIRAGANA LETTER BI" #x3073) + ("HIRAGANA LETTER PI" #x3074) + ("HIRAGANA LETTER HU" #x3075) + ("HIRAGANA LETTER BU" #x3076) + ("HIRAGANA LETTER PU" #x3077) + ("HIRAGANA LETTER HE" #x3078) + ("HIRAGANA LETTER BE" #x3079) + ("HIRAGANA LETTER PE" #x307A) + ("HIRAGANA LETTER HO" #x307B) + ("HIRAGANA LETTER BO" #x307C) + ("HIRAGANA LETTER PO" #x307D) + ("HIRAGANA LETTER MA" #x307E) + ("HIRAGANA LETTER MI" #x307F) + ("HIRAGANA LETTER MU" #x3080) + ("HIRAGANA LETTER ME" #x3081) + ("HIRAGANA LETTER MO" #x3082) + ("HIRAGANA LETTER SMALL YA" #x3083) + ("HIRAGANA LETTER YA" #x3084) + ("HIRAGANA LETTER SMALL YU" #x3085) + ("HIRAGANA LETTER YU" #x3086) + ("HIRAGANA LETTER SMALL YO" #x3087) + ("HIRAGANA LETTER YO" #x3088) + ("HIRAGANA LETTER RA" #x3089) + ("HIRAGANA LETTER RI" #x308A) + ("HIRAGANA LETTER RU" #x308B) + ("HIRAGANA LETTER RE" #x308C) + ("HIRAGANA LETTER RO" #x308D) + ("HIRAGANA LETTER SMALL WA" #x308E) + ("HIRAGANA LETTER WA" #x308F) + ("HIRAGANA LETTER WI" #x3090) + ("HIRAGANA LETTER WE" #x3091) + ("HIRAGANA LETTER WO" #x3092) + ("HIRAGANA LETTER N" #x3093) + ("HIRAGANA LETTER VU" #x3094) + ("HIRAGANA LETTER SMALL KA" #x3095) + ("HIRAGANA LETTER SMALL KE" #x3096) + ("COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK" #x3099) + ("COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309A) + ("KATAKANA-HIRAGANA VOICED SOUND MARK" #x309B) + ("KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309C) + ("HIRAGANA ITERATION MARK" #x309D) + ("HIRAGANA VOICED ITERATION MARK" #x309E) + ("HIRAGANA DIGRAPH YORI" #x309F) + )) + +;; arch-tag: dc96b2bf-74f6-4885-adbb-4a81bd2884be diff --git a/etc/nxml/030A0-030FF.el b/etc/nxml/030A0-030FF.el new file mode 100644 index 00000000000..24070605273 --- /dev/null +++ b/etc/nxml/030A0-030FF.el @@ -0,0 +1,100 @@ +(nxml-define-char-name-set 'katakana + '(("KATAKANA-HIRAGANA DOUBLE HYPHEN" #x30A0) + ("KATAKANA LETTER SMALL A" #x30A1) + ("KATAKANA LETTER A" #x30A2) + ("KATAKANA LETTER SMALL I" #x30A3) + ("KATAKANA LETTER I" #x30A4) + ("KATAKANA LETTER SMALL U" #x30A5) + ("KATAKANA LETTER U" #x30A6) + ("KATAKANA LETTER SMALL E" #x30A7) + ("KATAKANA LETTER E" #x30A8) + ("KATAKANA LETTER SMALL O" #x30A9) + ("KATAKANA LETTER O" #x30AA) + ("KATAKANA LETTER KA" #x30AB) + ("KATAKANA LETTER GA" #x30AC) + ("KATAKANA LETTER KI" #x30AD) + ("KATAKANA LETTER GI" #x30AE) + ("KATAKANA LETTER KU" #x30AF) + ("KATAKANA LETTER GU" #x30B0) + ("KATAKANA LETTER KE" #x30B1) + ("KATAKANA LETTER GE" #x30B2) + ("KATAKANA LETTER KO" #x30B3) + ("KATAKANA LETTER GO" #x30B4) + ("KATAKANA LETTER SA" #x30B5) + ("KATAKANA LETTER ZA" #x30B6) + ("KATAKANA LETTER SI" #x30B7) + ("KATAKANA LETTER ZI" #x30B8) + ("KATAKANA LETTER SU" #x30B9) + ("KATAKANA LETTER ZU" #x30BA) + ("KATAKANA LETTER SE" #x30BB) + ("KATAKANA LETTER ZE" #x30BC) + ("KATAKANA LETTER SO" #x30BD) + ("KATAKANA LETTER ZO" #x30BE) + ("KATAKANA LETTER TA" #x30BF) + ("KATAKANA LETTER DA" #x30C0) + ("KATAKANA LETTER TI" #x30C1) + ("KATAKANA LETTER DI" #x30C2) + ("KATAKANA LETTER SMALL TU" #x30C3) + ("KATAKANA LETTER TU" #x30C4) + ("KATAKANA LETTER DU" #x30C5) + ("KATAKANA LETTER TE" #x30C6) + ("KATAKANA LETTER DE" #x30C7) + ("KATAKANA LETTER TO" #x30C8) + ("KATAKANA LETTER DO" #x30C9) + ("KATAKANA LETTER NA" #x30CA) + ("KATAKANA LETTER NI" #x30CB) + ("KATAKANA LETTER NU" #x30CC) + ("KATAKANA LETTER NE" #x30CD) + ("KATAKANA LETTER NO" #x30CE) + ("KATAKANA LETTER HA" #x30CF) + ("KATAKANA LETTER BA" #x30D0) + ("KATAKANA LETTER PA" #x30D1) + ("KATAKANA LETTER HI" #x30D2) + ("KATAKANA LETTER BI" #x30D3) + ("KATAKANA LETTER PI" #x30D4) + ("KATAKANA LETTER HU" #x30D5) + ("KATAKANA LETTER BU" #x30D6) + ("KATAKANA LETTER PU" #x30D7) + ("KATAKANA LETTER HE" #x30D8) + ("KATAKANA LETTER BE" #x30D9) + ("KATAKANA LETTER PE" #x30DA) + ("KATAKANA LETTER HO" #x30DB) + ("KATAKANA LETTER BO" #x30DC) + ("KATAKANA LETTER PO" #x30DD) + ("KATAKANA LETTER MA" #x30DE) + ("KATAKANA LETTER MI" #x30DF) + ("KATAKANA LETTER MU" #x30E0) + ("KATAKANA LETTER ME" #x30E1) + ("KATAKANA LETTER MO" #x30E2) + ("KATAKANA LETTER SMALL YA" #x30E3) + ("KATAKANA LETTER YA" #x30E4) + ("KATAKANA LETTER SMALL YU" #x30E5) + ("KATAKANA LETTER YU" #x30E6) + ("KATAKANA LETTER SMALL YO" #x30E7) + ("KATAKANA LETTER YO" #x30E8) + ("KATAKANA LETTER RA" #x30E9) + ("KATAKANA LETTER RI" #x30EA) + ("KATAKANA LETTER RU" #x30EB) + ("KATAKANA LETTER RE" #x30EC) + ("KATAKANA LETTER RO" #x30ED) + ("KATAKANA LETTER SMALL WA" #x30EE) + ("KATAKANA LETTER WA" #x30EF) + ("KATAKANA LETTER WI" #x30F0) + ("KATAKANA LETTER WE" #x30F1) + ("KATAKANA LETTER WO" #x30F2) + ("KATAKANA LETTER N" #x30F3) + ("KATAKANA LETTER VU" #x30F4) + ("KATAKANA LETTER SMALL KA" #x30F5) + ("KATAKANA LETTER SMALL KE" #x30F6) + ("KATAKANA LETTER VA" #x30F7) + ("KATAKANA LETTER VI" #x30F8) + ("KATAKANA LETTER VE" #x30F9) + ("KATAKANA LETTER VO" #x30FA) + ("KATAKANA MIDDLE DOT" #x30FB) + ("KATAKANA-HIRAGANA PROLONGED SOUND MARK" #x30FC) + ("KATAKANA ITERATION MARK" #x30FD) + ("KATAKANA VOICED ITERATION MARK" #x30FE) + ("KATAKANA DIGRAPH KOTO" #x30FF) + )) + +;; arch-tag: 58c48b02-037a-43f3-b225-9e9bf37a7fbd diff --git a/etc/nxml/03100-0312F.el b/etc/nxml/03100-0312F.el new file mode 100644 index 00000000000..f7fa151bb67 --- /dev/null +++ b/etc/nxml/03100-0312F.el @@ -0,0 +1,44 @@ +(nxml-define-char-name-set 'bopomofo + '(("BOPOMOFO LETTER B" #x3105) + ("BOPOMOFO LETTER P" #x3106) + ("BOPOMOFO LETTER M" #x3107) + ("BOPOMOFO LETTER F" #x3108) + ("BOPOMOFO LETTER D" #x3109) + ("BOPOMOFO LETTER T" #x310A) + ("BOPOMOFO LETTER N" #x310B) + ("BOPOMOFO LETTER L" #x310C) + ("BOPOMOFO LETTER G" #x310D) + ("BOPOMOFO LETTER K" #x310E) + ("BOPOMOFO LETTER H" #x310F) + ("BOPOMOFO LETTER J" #x3110) + ("BOPOMOFO LETTER Q" #x3111) + ("BOPOMOFO LETTER X" #x3112) + ("BOPOMOFO LETTER ZH" #x3113) + ("BOPOMOFO LETTER CH" #x3114) + ("BOPOMOFO LETTER SH" #x3115) + ("BOPOMOFO LETTER R" #x3116) + ("BOPOMOFO LETTER Z" #x3117) + ("BOPOMOFO LETTER C" #x3118) + ("BOPOMOFO LETTER S" #x3119) + ("BOPOMOFO LETTER A" #x311A) + ("BOPOMOFO LETTER O" #x311B) + ("BOPOMOFO LETTER E" #x311C) + ("BOPOMOFO LETTER EH" #x311D) + ("BOPOMOFO LETTER AI" #x311E) + ("BOPOMOFO LETTER EI" #x311F) + ("BOPOMOFO LETTER AU" #x3120) + ("BOPOMOFO LETTER OU" #x3121) + ("BOPOMOFO LETTER AN" #x3122) + ("BOPOMOFO LETTER EN" #x3123) + ("BOPOMOFO LETTER ANG" #x3124) + ("BOPOMOFO LETTER ENG" #x3125) + ("BOPOMOFO LETTER ER" #x3126) + ("BOPOMOFO LETTER I" #x3127) + ("BOPOMOFO LETTER U" #x3128) + ("BOPOMOFO LETTER IU" #x3129) + ("BOPOMOFO LETTER V" #x312A) + ("BOPOMOFO LETTER NG" #x312B) + ("BOPOMOFO LETTER GN" #x312C) + )) + +;; arch-tag: 0aeb6bb4-ac93-4014-a836-eb793636a168 diff --git a/etc/nxml/03130-0318F.el b/etc/nxml/03130-0318F.el new file mode 100644 index 00000000000..8bf3334371a --- /dev/null +++ b/etc/nxml/03130-0318F.el @@ -0,0 +1,98 @@ +(nxml-define-char-name-set 'hangul-compatibility-jamo + '(("HANGUL LETTER KIYEOK" #x3131) + ("HANGUL LETTER SSANGKIYEOK" #x3132) + ("HANGUL LETTER KIYEOK-SIOS" #x3133) + ("HANGUL LETTER NIEUN" #x3134) + ("HANGUL LETTER NIEUN-CIEUC" #x3135) + ("HANGUL LETTER NIEUN-HIEUH" #x3136) + ("HANGUL LETTER TIKEUT" #x3137) + ("HANGUL LETTER SSANGTIKEUT" #x3138) + ("HANGUL LETTER RIEUL" #x3139) + ("HANGUL LETTER RIEUL-KIYEOK" #x313A) + ("HANGUL LETTER RIEUL-MIEUM" #x313B) + ("HANGUL LETTER RIEUL-PIEUP" #x313C) + ("HANGUL LETTER RIEUL-SIOS" #x313D) + ("HANGUL LETTER RIEUL-THIEUTH" #x313E) + ("HANGUL LETTER RIEUL-PHIEUPH" #x313F) + ("HANGUL LETTER RIEUL-HIEUH" #x3140) + ("HANGUL LETTER MIEUM" #x3141) + ("HANGUL LETTER PIEUP" #x3142) + ("HANGUL LETTER SSANGPIEUP" #x3143) + ("HANGUL LETTER PIEUP-SIOS" #x3144) + ("HANGUL LETTER SIOS" #x3145) + ("HANGUL LETTER SSANGSIOS" #x3146) + ("HANGUL LETTER IEUNG" #x3147) + ("HANGUL LETTER CIEUC" #x3148) + ("HANGUL LETTER SSANGCIEUC" #x3149) + ("HANGUL LETTER CHIEUCH" #x314A) + ("HANGUL LETTER KHIEUKH" #x314B) + ("HANGUL LETTER THIEUTH" #x314C) + ("HANGUL LETTER PHIEUPH" #x314D) + ("HANGUL LETTER HIEUH" #x314E) + ("HANGUL LETTER A" #x314F) + ("HANGUL LETTER AE" #x3150) + ("HANGUL LETTER YA" #x3151) + ("HANGUL LETTER YAE" #x3152) + ("HANGUL LETTER EO" #x3153) + ("HANGUL LETTER E" #x3154) + ("HANGUL LETTER YEO" #x3155) + ("HANGUL LETTER YE" #x3156) + ("HANGUL LETTER O" #x3157) + ("HANGUL LETTER WA" #x3158) + ("HANGUL LETTER WAE" #x3159) + ("HANGUL LETTER OE" #x315A) + ("HANGUL LETTER YO" #x315B) + ("HANGUL LETTER U" #x315C) + ("HANGUL LETTER WEO" #x315D) + ("HANGUL LETTER WE" #x315E) + ("HANGUL LETTER WI" #x315F) + ("HANGUL LETTER YU" #x3160) + ("HANGUL LETTER EU" #x3161) + ("HANGUL LETTER YI" #x3162) + ("HANGUL LETTER I" #x3163) + ("HANGUL FILLER" #x3164) + ("HANGUL LETTER SSANGNIEUN" #x3165) + ("HANGUL LETTER NIEUN-TIKEUT" #x3166) + ("HANGUL LETTER NIEUN-SIOS" #x3167) + ("HANGUL LETTER NIEUN-PANSIOS" #x3168) + ("HANGUL LETTER RIEUL-KIYEOK-SIOS" #x3169) + ("HANGUL LETTER RIEUL-TIKEUT" #x316A) + ("HANGUL LETTER RIEUL-PIEUP-SIOS" #x316B) + ("HANGUL LETTER RIEUL-PANSIOS" #x316C) + ("HANGUL LETTER RIEUL-YEORINHIEUH" #x316D) + ("HANGUL LETTER MIEUM-PIEUP" #x316E) + ("HANGUL LETTER MIEUM-SIOS" #x316F) + ("HANGUL LETTER MIEUM-PANSIOS" #x3170) + ("HANGUL LETTER KAPYEOUNMIEUM" #x3171) + ("HANGUL LETTER PIEUP-KIYEOK" #x3172) + ("HANGUL LETTER PIEUP-TIKEUT" #x3173) + ("HANGUL LETTER PIEUP-SIOS-KIYEOK" #x3174) + ("HANGUL LETTER PIEUP-SIOS-TIKEUT" #x3175) + ("HANGUL LETTER PIEUP-CIEUC" #x3176) + ("HANGUL LETTER PIEUP-THIEUTH" #x3177) + ("HANGUL LETTER KAPYEOUNPIEUP" #x3178) + ("HANGUL LETTER KAPYEOUNSSANGPIEUP" #x3179) + ("HANGUL LETTER SIOS-KIYEOK" #x317A) + ("HANGUL LETTER SIOS-NIEUN" #x317B) + ("HANGUL LETTER SIOS-TIKEUT" #x317C) + ("HANGUL LETTER SIOS-PIEUP" #x317D) + ("HANGUL LETTER SIOS-CIEUC" #x317E) + ("HANGUL LETTER PANSIOS" #x317F) + ("HANGUL LETTER SSANGIEUNG" #x3180) + ("HANGUL LETTER YESIEUNG" #x3181) + ("HANGUL LETTER YESIEUNG-SIOS" #x3182) + ("HANGUL LETTER YESIEUNG-PANSIOS" #x3183) + ("HANGUL LETTER KAPYEOUNPHIEUPH" #x3184) + ("HANGUL LETTER SSANGHIEUH" #x3185) + ("HANGUL LETTER YEORINHIEUH" #x3186) + ("HANGUL LETTER YO-YA" #x3187) + ("HANGUL LETTER YO-YAE" #x3188) + ("HANGUL LETTER YO-I" #x3189) + ("HANGUL LETTER YU-YEO" #x318A) + ("HANGUL LETTER YU-YE" #x318B) + ("HANGUL LETTER YU-I" #x318C) + ("HANGUL LETTER ARAEA" #x318D) + ("HANGUL LETTER ARAEAE" #x318E) + )) + +;; arch-tag: 3ea3aa1e-8551-433b-8506-9591ed150673 diff --git a/etc/nxml/03190-0319F.el b/etc/nxml/03190-0319F.el new file mode 100644 index 00000000000..1fe8f164c63 --- /dev/null +++ b/etc/nxml/03190-0319F.el @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'kanbun + '(("IDEOGRAPHIC ANNOTATION LINKING MARK" #x3190) + ("IDEOGRAPHIC ANNOTATION REVERSE MARK" #x3191) + ("IDEOGRAPHIC ANNOTATION ONE MARK" #x3192) + ("IDEOGRAPHIC ANNOTATION TWO MARK" #x3193) + ("IDEOGRAPHIC ANNOTATION THREE MARK" #x3194) + ("IDEOGRAPHIC ANNOTATION FOUR MARK" #x3195) + ("IDEOGRAPHIC ANNOTATION TOP MARK" #x3196) + ("IDEOGRAPHIC ANNOTATION MIDDLE MARK" #x3197) + ("IDEOGRAPHIC ANNOTATION BOTTOM MARK" #x3198) + ("IDEOGRAPHIC ANNOTATION FIRST MARK" #x3199) + ("IDEOGRAPHIC ANNOTATION SECOND MARK" #x319A) + ("IDEOGRAPHIC ANNOTATION THIRD MARK" #x319B) + ("IDEOGRAPHIC ANNOTATION FOURTH MARK" #x319C) + ("IDEOGRAPHIC ANNOTATION HEAVEN MARK" #x319D) + ("IDEOGRAPHIC ANNOTATION EARTH MARK" #x319E) + ("IDEOGRAPHIC ANNOTATION MAN MARK" #x319F) + )) + +;; arch-tag: e25f7331-0993-4daf-a193-0fe56332f9fa diff --git a/etc/nxml/031A0-031BF.el b/etc/nxml/031A0-031BF.el new file mode 100644 index 00000000000..0119b7e78d2 --- /dev/null +++ b/etc/nxml/031A0-031BF.el @@ -0,0 +1,28 @@ +(nxml-define-char-name-set 'bopomofo-extended + '(("BOPOMOFO LETTER BU" #x31A0) + ("BOPOMOFO LETTER ZI" #x31A1) + ("BOPOMOFO LETTER JI" #x31A2) + ("BOPOMOFO LETTER GU" #x31A3) + ("BOPOMOFO LETTER EE" #x31A4) + ("BOPOMOFO LETTER ENN" #x31A5) + ("BOPOMOFO LETTER OO" #x31A6) + ("BOPOMOFO LETTER ONN" #x31A7) + ("BOPOMOFO LETTER IR" #x31A8) + ("BOPOMOFO LETTER ANN" #x31A9) + ("BOPOMOFO LETTER INN" #x31AA) + ("BOPOMOFO LETTER UNN" #x31AB) + ("BOPOMOFO LETTER IM" #x31AC) + ("BOPOMOFO LETTER NGG" #x31AD) + ("BOPOMOFO LETTER AINN" #x31AE) + ("BOPOMOFO LETTER AUNN" #x31AF) + ("BOPOMOFO LETTER AM" #x31B0) + ("BOPOMOFO LETTER OM" #x31B1) + ("BOPOMOFO LETTER ONG" #x31B2) + ("BOPOMOFO LETTER INNN" #x31B3) + ("BOPOMOFO FINAL LETTER P" #x31B4) + ("BOPOMOFO FINAL LETTER T" #x31B5) + ("BOPOMOFO FINAL LETTER K" #x31B6) + ("BOPOMOFO FINAL LETTER H" #x31B7) + )) + +;; arch-tag: 1821baca-d463-4e8e-bf3d-97a35af58fd4 diff --git a/etc/nxml/031F0-031FF.el b/etc/nxml/031F0-031FF.el new file mode 100644 index 00000000000..125d12d30f7 --- /dev/null +++ b/etc/nxml/031F0-031FF.el @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'katakana-phonetic-extensions + '(("KATAKANA LETTER SMALL KU" #x31F0) + ("KATAKANA LETTER SMALL SI" #x31F1) + ("KATAKANA LETTER SMALL SU" #x31F2) + ("KATAKANA LETTER SMALL TO" #x31F3) + ("KATAKANA LETTER SMALL NU" #x31F4) + ("KATAKANA LETTER SMALL HA" #x31F5) + ("KATAKANA LETTER SMALL HI" #x31F6) + ("KATAKANA LETTER SMALL HU" #x31F7) + ("KATAKANA LETTER SMALL HE" #x31F8) + ("KATAKANA LETTER SMALL HO" #x31F9) + ("KATAKANA LETTER SMALL MU" #x31FA) + ("KATAKANA LETTER SMALL RA" #x31FB) + ("KATAKANA LETTER SMALL RI" #x31FC) + ("KATAKANA LETTER SMALL RU" #x31FD) + ("KATAKANA LETTER SMALL RE" #x31FE) + ("KATAKANA LETTER SMALL RO" #x31FF) + )) + +;; arch-tag: 090acfb7-1a46-4b05-bebb-573bbc0d8a82 diff --git a/etc/nxml/03200-032FF.el b/etc/nxml/03200-032FF.el new file mode 100644 index 00000000000..8b8c84e07d4 --- /dev/null +++ b/etc/nxml/03200-032FF.el @@ -0,0 +1,236 @@ +(nxml-define-char-name-set 'enclosed-cjk-letters-and-months + '(("PARENTHESIZED HANGUL KIYEOK" #x3200) + ("PARENTHESIZED HANGUL NIEUN" #x3201) + ("PARENTHESIZED HANGUL TIKEUT" #x3202) + ("PARENTHESIZED HANGUL RIEUL" #x3203) + ("PARENTHESIZED HANGUL MIEUM" #x3204) + ("PARENTHESIZED HANGUL PIEUP" #x3205) + ("PARENTHESIZED HANGUL SIOS" #x3206) + ("PARENTHESIZED HANGUL IEUNG" #x3207) + ("PARENTHESIZED HANGUL CIEUC" #x3208) + ("PARENTHESIZED HANGUL CHIEUCH" #x3209) + ("PARENTHESIZED HANGUL KHIEUKH" #x320A) + ("PARENTHESIZED HANGUL THIEUTH" #x320B) + ("PARENTHESIZED HANGUL PHIEUPH" #x320C) + ("PARENTHESIZED HANGUL HIEUH" #x320D) + ("PARENTHESIZED HANGUL KIYEOK A" #x320E) + ("PARENTHESIZED HANGUL NIEUN A" #x320F) + ("PARENTHESIZED HANGUL TIKEUT A" #x3210) + ("PARENTHESIZED HANGUL RIEUL A" #x3211) + ("PARENTHESIZED HANGUL MIEUM A" #x3212) + ("PARENTHESIZED HANGUL PIEUP A" #x3213) + ("PARENTHESIZED HANGUL SIOS A" #x3214) + ("PARENTHESIZED HANGUL IEUNG A" #x3215) + ("PARENTHESIZED HANGUL CIEUC A" #x3216) + ("PARENTHESIZED HANGUL CHIEUCH A" #x3217) + ("PARENTHESIZED HANGUL KHIEUKH A" #x3218) + ("PARENTHESIZED HANGUL THIEUTH A" #x3219) + ("PARENTHESIZED HANGUL PHIEUPH A" #x321A) + ("PARENTHESIZED HANGUL HIEUH A" #x321B) + ("PARENTHESIZED HANGUL CIEUC U" #x321C) + ("PARENTHESIZED IDEOGRAPH ONE" #x3220) + ("PARENTHESIZED IDEOGRAPH TWO" #x3221) + ("PARENTHESIZED IDEOGRAPH THREE" #x3222) + ("PARENTHESIZED IDEOGRAPH FOUR" #x3223) + ("PARENTHESIZED IDEOGRAPH FIVE" #x3224) + ("PARENTHESIZED IDEOGRAPH SIX" #x3225) + ("PARENTHESIZED IDEOGRAPH SEVEN" #x3226) + ("PARENTHESIZED IDEOGRAPH EIGHT" #x3227) + ("PARENTHESIZED IDEOGRAPH NINE" #x3228) + ("PARENTHESIZED IDEOGRAPH TEN" #x3229) + ("PARENTHESIZED IDEOGRAPH MOON" #x322A) + ("PARENTHESIZED IDEOGRAPH FIRE" #x322B) + ("PARENTHESIZED IDEOGRAPH WATER" #x322C) + ("PARENTHESIZED IDEOGRAPH WOOD" #x322D) + ("PARENTHESIZED IDEOGRAPH METAL" #x322E) + ("PARENTHESIZED IDEOGRAPH EARTH" #x322F) + ("PARENTHESIZED IDEOGRAPH SUN" #x3230) + ("PARENTHESIZED IDEOGRAPH STOCK" #x3231) + ("PARENTHESIZED IDEOGRAPH HAVE" #x3232) + ("PARENTHESIZED IDEOGRAPH SOCIETY" #x3233) + ("PARENTHESIZED IDEOGRAPH NAME" #x3234) + ("PARENTHESIZED IDEOGRAPH SPECIAL" #x3235) + ("PARENTHESIZED IDEOGRAPH FINANCIAL" #x3236) + ("PARENTHESIZED IDEOGRAPH CONGRATULATION" #x3237) + ("PARENTHESIZED IDEOGRAPH LABOR" #x3238) + ("PARENTHESIZED IDEOGRAPH REPRESENT" #x3239) + ("PARENTHESIZED IDEOGRAPH CALL" #x323A) + ("PARENTHESIZED IDEOGRAPH STUDY" #x323B) + ("PARENTHESIZED IDEOGRAPH SUPERVISE" #x323C) + ("PARENTHESIZED IDEOGRAPH ENTERPRISE" #x323D) + ("PARENTHESIZED IDEOGRAPH RESOURCE" #x323E) + ("PARENTHESIZED IDEOGRAPH ALLIANCE" #x323F) + ("PARENTHESIZED IDEOGRAPH FESTIVAL" #x3240) + ("PARENTHESIZED IDEOGRAPH REST" #x3241) + ("PARENTHESIZED IDEOGRAPH SELF" #x3242) + ("PARENTHESIZED IDEOGRAPH REACH" #x3243) + ("CIRCLED NUMBER TWENTY ONE" #x3251) + ("CIRCLED NUMBER TWENTY TWO" #x3252) + ("CIRCLED NUMBER TWENTY THREE" #x3253) + ("CIRCLED NUMBER TWENTY FOUR" #x3254) + ("CIRCLED NUMBER TWENTY FIVE" #x3255) + ("CIRCLED NUMBER TWENTY SIX" #x3256) + ("CIRCLED NUMBER TWENTY SEVEN" #x3257) + ("CIRCLED NUMBER TWENTY EIGHT" #x3258) + ("CIRCLED NUMBER TWENTY NINE" #x3259) + ("CIRCLED NUMBER THIRTY" #x325A) + ("CIRCLED NUMBER THIRTY ONE" #x325B) + ("CIRCLED NUMBER THIRTY TWO" #x325C) + ("CIRCLED NUMBER THIRTY THREE" #x325D) + ("CIRCLED NUMBER THIRTY FOUR" #x325E) + ("CIRCLED NUMBER THIRTY FIVE" #x325F) + ("CIRCLED HANGUL KIYEOK" #x3260) + ("CIRCLED HANGUL NIEUN" #x3261) + ("CIRCLED HANGUL TIKEUT" #x3262) + ("CIRCLED HANGUL RIEUL" #x3263) + ("CIRCLED HANGUL MIEUM" #x3264) + ("CIRCLED HANGUL PIEUP" #x3265) + ("CIRCLED HANGUL SIOS" #x3266) + ("CIRCLED HANGUL IEUNG" #x3267) + ("CIRCLED HANGUL CIEUC" #x3268) + ("CIRCLED HANGUL CHIEUCH" #x3269) + ("CIRCLED HANGUL KHIEUKH" #x326A) + ("CIRCLED HANGUL THIEUTH" #x326B) + ("CIRCLED HANGUL PHIEUPH" #x326C) + ("CIRCLED HANGUL HIEUH" #x326D) + ("CIRCLED HANGUL KIYEOK A" #x326E) + ("CIRCLED HANGUL NIEUN A" #x326F) + ("CIRCLED HANGUL TIKEUT A" #x3270) + ("CIRCLED HANGUL RIEUL A" #x3271) + ("CIRCLED HANGUL MIEUM A" #x3272) + ("CIRCLED HANGUL PIEUP A" #x3273) + ("CIRCLED HANGUL SIOS A" #x3274) + ("CIRCLED HANGUL IEUNG A" #x3275) + ("CIRCLED HANGUL CIEUC A" #x3276) + ("CIRCLED HANGUL CHIEUCH A" #x3277) + ("CIRCLED HANGUL KHIEUKH A" #x3278) + ("CIRCLED HANGUL THIEUTH A" #x3279) + ("CIRCLED HANGUL PHIEUPH A" #x327A) + ("CIRCLED HANGUL HIEUH A" #x327B) + ("KOREAN STANDARD SYMBOL" #x327F) + ("CIRCLED IDEOGRAPH ONE" #x3280) + ("CIRCLED IDEOGRAPH TWO" #x3281) + ("CIRCLED IDEOGRAPH THREE" #x3282) + ("CIRCLED IDEOGRAPH FOUR" #x3283) + ("CIRCLED IDEOGRAPH FIVE" #x3284) + ("CIRCLED IDEOGRAPH SIX" #x3285) + ("CIRCLED IDEOGRAPH SEVEN" #x3286) + ("CIRCLED IDEOGRAPH EIGHT" #x3287) + ("CIRCLED IDEOGRAPH NINE" #x3288) + ("CIRCLED IDEOGRAPH TEN" #x3289) + ("CIRCLED IDEOGRAPH MOON" #x328A) + ("CIRCLED IDEOGRAPH FIRE" #x328B) + ("CIRCLED IDEOGRAPH WATER" #x328C) + ("CIRCLED IDEOGRAPH WOOD" #x328D) + ("CIRCLED IDEOGRAPH METAL" #x328E) + ("CIRCLED IDEOGRAPH EARTH" #x328F) + ("CIRCLED IDEOGRAPH SUN" #x3290) + ("CIRCLED IDEOGRAPH STOCK" #x3291) + ("CIRCLED IDEOGRAPH HAVE" #x3292) + ("CIRCLED IDEOGRAPH SOCIETY" #x3293) + ("CIRCLED IDEOGRAPH NAME" #x3294) + ("CIRCLED IDEOGRAPH SPECIAL" #x3295) + ("CIRCLED IDEOGRAPH FINANCIAL" #x3296) + ("CIRCLED IDEOGRAPH CONGRATULATION" #x3297) + ("CIRCLED IDEOGRAPH LABOR" #x3298) + ("CIRCLED IDEOGRAPH SECRET" #x3299) + ("CIRCLED IDEOGRAPH MALE" #x329A) + ("CIRCLED IDEOGRAPH FEMALE" #x329B) + ("CIRCLED IDEOGRAPH SUITABLE" #x329C) + ("CIRCLED IDEOGRAPH EXCELLENT" #x329D) + ("CIRCLED IDEOGRAPH PRINT" #x329E) + ("CIRCLED IDEOGRAPH ATTENTION" #x329F) + ("CIRCLED IDEOGRAPH ITEM" #x32A0) + ("CIRCLED IDEOGRAPH REST" #x32A1) + ("CIRCLED IDEOGRAPH COPY" #x32A2) + ("CIRCLED IDEOGRAPH CORRECT" #x32A3) + ("CIRCLED IDEOGRAPH HIGH" #x32A4) + ("CIRCLED IDEOGRAPH CENTRE" #x32A5) + ("CIRCLED IDEOGRAPH LOW" #x32A6) + ("CIRCLED IDEOGRAPH LEFT" #x32A7) + ("CIRCLED IDEOGRAPH RIGHT" #x32A8) + ("CIRCLED IDEOGRAPH MEDICINE" #x32A9) + ("CIRCLED IDEOGRAPH RELIGION" #x32AA) + ("CIRCLED IDEOGRAPH STUDY" #x32AB) + ("CIRCLED IDEOGRAPH SUPERVISE" #x32AC) + ("CIRCLED IDEOGRAPH ENTERPRISE" #x32AD) + ("CIRCLED IDEOGRAPH RESOURCE" #x32AE) + ("CIRCLED IDEOGRAPH ALLIANCE" #x32AF) + ("CIRCLED IDEOGRAPH NIGHT" #x32B0) + ("CIRCLED NUMBER THIRTY SIX" #x32B1) + ("CIRCLED NUMBER THIRTY SEVEN" #x32B2) + ("CIRCLED NUMBER THIRTY EIGHT" #x32B3) + ("CIRCLED NUMBER THIRTY NINE" #x32B4) + ("CIRCLED NUMBER FORTY" #x32B5) + ("CIRCLED NUMBER FORTY ONE" #x32B6) + ("CIRCLED NUMBER FORTY TWO" #x32B7) + ("CIRCLED NUMBER FORTY THREE" #x32B8) + ("CIRCLED NUMBER FORTY FOUR" #x32B9) + ("CIRCLED NUMBER FORTY FIVE" #x32BA) + ("CIRCLED NUMBER FORTY SIX" #x32BB) + ("CIRCLED NUMBER FORTY SEVEN" #x32BC) + ("CIRCLED NUMBER FORTY EIGHT" #x32BD) + ("CIRCLED NUMBER FORTY NINE" #x32BE) + ("CIRCLED NUMBER FIFTY" #x32BF) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY" #x32C0) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY" #x32C1) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH" #x32C2) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL" #x32C3) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY" #x32C4) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE" #x32C5) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY" #x32C6) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST" #x32C7) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER" #x32C8) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER" #x32C9) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER" #x32CA) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER" #x32CB) + ("CIRCLED KATAKANA A" #x32D0) + ("CIRCLED KATAKANA I" #x32D1) + ("CIRCLED KATAKANA U" #x32D2) + ("CIRCLED KATAKANA E" #x32D3) + ("CIRCLED KATAKANA O" #x32D4) + ("CIRCLED KATAKANA KA" #x32D5) + ("CIRCLED KATAKANA KI" #x32D6) + ("CIRCLED KATAKANA KU" #x32D7) + ("CIRCLED KATAKANA KE" #x32D8) + ("CIRCLED KATAKANA KO" #x32D9) + ("CIRCLED KATAKANA SA" #x32DA) + ("CIRCLED KATAKANA SI" #x32DB) + ("CIRCLED KATAKANA SU" #x32DC) + ("CIRCLED KATAKANA SE" #x32DD) + ("CIRCLED KATAKANA SO" #x32DE) + ("CIRCLED KATAKANA TA" #x32DF) + ("CIRCLED KATAKANA TI" #x32E0) + ("CIRCLED KATAKANA TU" #x32E1) + ("CIRCLED KATAKANA TE" #x32E2) + ("CIRCLED KATAKANA TO" #x32E3) + ("CIRCLED KATAKANA NA" #x32E4) + ("CIRCLED KATAKANA NI" #x32E5) + ("CIRCLED KATAKANA NU" #x32E6) + ("CIRCLED KATAKANA NE" #x32E7) + ("CIRCLED KATAKANA NO" #x32E8) + ("CIRCLED KATAKANA HA" #x32E9) + ("CIRCLED KATAKANA HI" #x32EA) + ("CIRCLED KATAKANA HU" #x32EB) + ("CIRCLED KATAKANA HE" #x32EC) + ("CIRCLED KATAKANA HO" #x32ED) + ("CIRCLED KATAKANA MA" #x32EE) + ("CIRCLED KATAKANA MI" #x32EF) + ("CIRCLED KATAKANA MU" #x32F0) + ("CIRCLED KATAKANA ME" #x32F1) + ("CIRCLED KATAKANA MO" #x32F2) + ("CIRCLED KATAKANA YA" #x32F3) + ("CIRCLED KATAKANA YU" #x32F4) + ("CIRCLED KATAKANA YO" #x32F5) + ("CIRCLED KATAKANA RA" #x32F6) + ("CIRCLED KATAKANA RI" #x32F7) + ("CIRCLED KATAKANA RU" #x32F8) + ("CIRCLED KATAKANA RE" #x32F9) + ("CIRCLED KATAKANA RO" #x32FA) + ("CIRCLED KATAKANA WA" #x32FB) + ("CIRCLED KATAKANA WI" #x32FC) + ("CIRCLED KATAKANA WE" #x32FD) + ("CIRCLED KATAKANA WO" #x32FE) + )) + +;; arch-tag: 56d35bfa-c41b-4779-be54-3999fbe11265 diff --git a/etc/nxml/03300-033FF.el b/etc/nxml/03300-033FF.el new file mode 100644 index 00000000000..acf2b6899b5 --- /dev/null +++ b/etc/nxml/03300-033FF.el @@ -0,0 +1,253 @@ +(nxml-define-char-name-set 'cjk-compatibility + '(("SQUARE APAATO" #x3300) + ("SQUARE ARUHUA" #x3301) + ("SQUARE ANPEA" #x3302) + ("SQUARE AARU" #x3303) + ("SQUARE ININGU" #x3304) + ("SQUARE INTI" #x3305) + ("SQUARE UON" #x3306) + ("SQUARE ESUKUUDO" #x3307) + ("SQUARE EEKAA" #x3308) + ("SQUARE ONSU" #x3309) + ("SQUARE OOMU" #x330A) + ("SQUARE KAIRI" #x330B) + ("SQUARE KARATTO" #x330C) + ("SQUARE KARORII" #x330D) + ("SQUARE GARON" #x330E) + ("SQUARE GANMA" #x330F) + ("SQUARE GIGA" #x3310) + ("SQUARE GINII" #x3311) + ("SQUARE KYURII" #x3312) + ("SQUARE GIRUDAA" #x3313) + ("SQUARE KIRO" #x3314) + ("SQUARE KIROGURAMU" #x3315) + ("SQUARE KIROMEETORU" #x3316) + ("SQUARE KIROWATTO" #x3317) + ("SQUARE GURAMU" #x3318) + ("SQUARE GURAMUTON" #x3319) + ("SQUARE KURUZEIRO" #x331A) + ("SQUARE KUROONE" #x331B) + ("SQUARE KEESU" #x331C) + ("SQUARE KORUNA" #x331D) + ("SQUARE KOOPO" #x331E) + ("SQUARE SAIKURU" #x331F) + ("SQUARE SANTIIMU" #x3320) + ("SQUARE SIRINGU" #x3321) + ("SQUARE SENTI" #x3322) + ("SQUARE SENTO" #x3323) + ("SQUARE DAASU" #x3324) + ("SQUARE DESI" #x3325) + ("SQUARE DORU" #x3326) + ("SQUARE TON" #x3327) + ("SQUARE NANO" #x3328) + ("SQUARE NOTTO" #x3329) + ("SQUARE HAITU" #x332A) + ("SQUARE PAASENTO" #x332B) + ("SQUARE PAATU" #x332C) + ("SQUARE BAARERU" #x332D) + ("SQUARE PIASUTORU" #x332E) + ("SQUARE PIKURU" #x332F) + ("SQUARE PIKO" #x3330) + ("SQUARE BIRU" #x3331) + ("SQUARE HUARADDO" #x3332) + ("SQUARE HUIITO" #x3333) + ("SQUARE BUSSYERU" #x3334) + ("SQUARE HURAN" #x3335) + ("SQUARE HEKUTAARU" #x3336) + ("SQUARE PESO" #x3337) + ("SQUARE PENIHI" #x3338) + ("SQUARE HERUTU" #x3339) + ("SQUARE PENSU" #x333A) + ("SQUARE PEEZI" #x333B) + ("SQUARE BEETA" #x333C) + ("SQUARE POINTO" #x333D) + ("SQUARE BORUTO" #x333E) + ("SQUARE HON" #x333F) + ("SQUARE PONDO" #x3340) + ("SQUARE HOORU" #x3341) + ("SQUARE HOON" #x3342) + ("SQUARE MAIKURO" #x3343) + ("SQUARE MAIRU" #x3344) + ("SQUARE MAHHA" #x3345) + ("SQUARE MARUKU" #x3346) + ("SQUARE MANSYON" #x3347) + ("SQUARE MIKURON" #x3348) + ("SQUARE MIRI" #x3349) + ("SQUARE MIRIBAARU" #x334A) + ("SQUARE MEGA" #x334B) + ("SQUARE MEGATON" #x334C) + ("SQUARE MEETORU" #x334D) + ("SQUARE YAADO" #x334E) + ("SQUARE YAARU" #x334F) + ("SQUARE YUAN" #x3350) + ("SQUARE RITTORU" #x3351) + ("SQUARE RIRA" #x3352) + ("SQUARE RUPII" #x3353) + ("SQUARE RUUBURU" #x3354) + ("SQUARE REMU" #x3355) + ("SQUARE RENTOGEN" #x3356) + ("SQUARE WATTO" #x3357) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO" #x3358) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE" #x3359) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO" #x335A) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE" #x335B) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR" #x335C) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE" #x335D) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX" #x335E) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN" #x335F) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT" #x3360) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE" #x3361) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN" #x3362) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN" #x3363) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE" #x3364) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN" #x3365) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN" #x3366) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN" #x3367) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN" #x3368) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN" #x3369) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN" #x336A) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN" #x336B) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY" #x336C) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE" #x336D) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO" #x336E) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE" #x336F) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR" #x3370) + ("SQUARE HPA" #x3371) + ("SQUARE DA" #x3372) + ("SQUARE AU" #x3373) + ("SQUARE BAR" #x3374) + ("SQUARE OV" #x3375) + ("SQUARE PC" #x3376) + ("SQUARE ERA NAME HEISEI" #x337B) + ("SQUARE ERA NAME SYOUWA" #x337C) + ("SQUARE ERA NAME TAISYOU" #x337D) + ("SQUARE ERA NAME MEIZI" #x337E) + ("SQUARE CORPORATION" #x337F) + ("SQUARE PA AMPS" #x3380) + ("SQUARE NA" #x3381) + ("SQUARE MU A" #x3382) + ("SQUARE MA" #x3383) + ("SQUARE KA" #x3384) + ("SQUARE KB" #x3385) + ("SQUARE MB" #x3386) + ("SQUARE GB" #x3387) + ("SQUARE CAL" #x3388) + ("SQUARE KCAL" #x3389) + ("SQUARE PF" #x338A) + ("SQUARE NF" #x338B) + ("SQUARE MU F" #x338C) + ("SQUARE MU G" #x338D) + ("SQUARE MG" #x338E) + ("SQUARE KG" #x338F) + ("SQUARE HZ" #x3390) + ("SQUARE KHZ" #x3391) + ("SQUARE MHZ" #x3392) + ("SQUARE GHZ" #x3393) + ("SQUARE THZ" #x3394) + ("SQUARE MU L" #x3395) + ("SQUARE ML" #x3396) + ("SQUARE DL" #x3397) + ("SQUARE KL" #x3398) + ("SQUARE FM" #x3399) + ("SQUARE NM" #x339A) + ("SQUARE MU M" #x339B) + ("SQUARE MM" #x339C) + ("SQUARE CM" #x339D) + ("SQUARE KM" #x339E) + ("SQUARE MM SQUARED" #x339F) + ("SQUARE CM SQUARED" #x33A0) + ("SQUARE M SQUARED" #x33A1) + ("SQUARE KM SQUARED" #x33A2) + ("SQUARE MM CUBED" #x33A3) + ("SQUARE CM CUBED" #x33A4) + ("SQUARE M CUBED" #x33A5) + ("SQUARE KM CUBED" #x33A6) + ("SQUARE M OVER S" #x33A7) + ("SQUARE M OVER S SQUARED" #x33A8) + ("SQUARE PA" #x33A9) + ("SQUARE KPA" #x33AA) + ("SQUARE MPA" #x33AB) + ("SQUARE GPA" #x33AC) + ("SQUARE RAD" #x33AD) + ("SQUARE RAD OVER S" #x33AE) + ("SQUARE RAD OVER S SQUARED" #x33AF) + ("SQUARE PS" #x33B0) + ("SQUARE NS" #x33B1) + ("SQUARE MU S" #x33B2) + ("SQUARE MS" #x33B3) + ("SQUARE PV" #x33B4) + ("SQUARE NV" #x33B5) + ("SQUARE MU V" #x33B6) + ("SQUARE MV" #x33B7) + ("SQUARE KV" #x33B8) + ("SQUARE MV MEGA" #x33B9) + ("SQUARE PW" #x33BA) + ("SQUARE NW" #x33BB) + ("SQUARE MU W" #x33BC) + ("SQUARE MW" #x33BD) + ("SQUARE KW" #x33BE) + ("SQUARE MW MEGA" #x33BF) + ("SQUARE K OHM" #x33C0) + ("SQUARE M OHM" #x33C1) + ("SQUARE AM" #x33C2) + ("SQUARE BQ" #x33C3) + ("SQUARE CC" #x33C4) + ("SQUARE CD" #x33C5) + ("SQUARE C OVER KG" #x33C6) + ("SQUARE CO" #x33C7) + ("SQUARE DB" #x33C8) + ("SQUARE GY" #x33C9) + ("SQUARE HA" #x33CA) + ("SQUARE HP" #x33CB) + ("SQUARE IN" #x33CC) + ("SQUARE KK" #x33CD) + ("SQUARE KM CAPITAL" #x33CE) + ("SQUARE KT" #x33CF) + ("SQUARE LM" #x33D0) + ("SQUARE LN" #x33D1) + ("SQUARE LOG" #x33D2) + ("SQUARE LX" #x33D3) + ("SQUARE MB SMALL" #x33D4) + ("SQUARE MIL" #x33D5) + ("SQUARE MOL" #x33D6) + ("SQUARE PH" #x33D7) + ("SQUARE PM" #x33D8) + ("SQUARE PPM" #x33D9) + ("SQUARE PR" #x33DA) + ("SQUARE SR" #x33DB) + ("SQUARE SV" #x33DC) + ("SQUARE WB" #x33DD) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE" #x33E0) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO" #x33E1) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE" #x33E2) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR" #x33E3) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE" #x33E4) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX" #x33E5) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN" #x33E6) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT" #x33E7) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE" #x33E8) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN" #x33E9) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN" #x33EA) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE" #x33EB) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN" #x33EC) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN" #x33ED) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN" #x33EE) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN" #x33EF) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN" #x33F0) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN" #x33F1) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN" #x33F2) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY" #x33F3) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE" #x33F4) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO" #x33F5) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE" #x33F6) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR" #x33F7) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE" #x33F8) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX" #x33F9) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN" #x33FA) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT" #x33FB) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE" #x33FC) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY" #x33FD) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE" #x33FE) + )) + +;; arch-tag: 818090a1-7854-485f-80bc-97e89f733e75 diff --git a/etc/nxml/03400-04DBF.el b/etc/nxml/03400-04DBF.el new file mode 100644 index 00000000000..45d69119e80 --- /dev/null +++ b/etc/nxml/03400-04DBF.el @@ -0,0 +1,4 @@ +(nxml-define-char-name-set 'cjk-unified-ideographs-extension-a + '()) + +;; arch-tag: 571a41a5-7cc5-47c4-b98c-e98a415723bb diff --git a/etc/nxml/0A000-0A48F.el b/etc/nxml/0A000-0A48F.el new file mode 100644 index 00000000000..9c54d94e55d --- /dev/null +++ b/etc/nxml/0A000-0A48F.el @@ -0,0 +1,1169 @@ +(nxml-define-char-name-set 'yi-syllables + '(("YI SYLLABLE IT" #xA000) + ("YI SYLLABLE IX" #xA001) + ("YI SYLLABLE I" #xA002) + ("YI SYLLABLE IP" #xA003) + ("YI SYLLABLE IET" #xA004) + ("YI SYLLABLE IEX" #xA005) + ("YI SYLLABLE IE" #xA006) + ("YI SYLLABLE IEP" #xA007) + ("YI SYLLABLE AT" #xA008) + ("YI SYLLABLE AX" #xA009) + ("YI SYLLABLE A" #xA00A) + ("YI SYLLABLE AP" #xA00B) + ("YI SYLLABLE UOX" #xA00C) + ("YI SYLLABLE UO" #xA00D) + ("YI SYLLABLE UOP" #xA00E) + ("YI SYLLABLE OT" #xA00F) + ("YI SYLLABLE OX" #xA010) + ("YI SYLLABLE O" #xA011) + ("YI SYLLABLE OP" #xA012) + ("YI SYLLABLE EX" #xA013) + ("YI SYLLABLE E" #xA014) + ("YI SYLLABLE WU" #xA015) + ("YI SYLLABLE BIT" #xA016) + ("YI SYLLABLE BIX" #xA017) + ("YI SYLLABLE BI" #xA018) + ("YI SYLLABLE BIP" #xA019) + ("YI SYLLABLE BIET" #xA01A) + ("YI SYLLABLE BIEX" #xA01B) + ("YI SYLLABLE BIE" #xA01C) + ("YI SYLLABLE BIEP" #xA01D) + ("YI SYLLABLE BAT" #xA01E) + ("YI SYLLABLE BAX" #xA01F) + ("YI SYLLABLE BA" #xA020) + ("YI SYLLABLE BAP" #xA021) + ("YI SYLLABLE BUOX" #xA022) + ("YI SYLLABLE BUO" #xA023) + ("YI SYLLABLE BUOP" #xA024) + ("YI SYLLABLE BOT" #xA025) + ("YI SYLLABLE BOX" #xA026) + ("YI SYLLABLE BO" #xA027) + ("YI SYLLABLE BOP" #xA028) + ("YI SYLLABLE BEX" #xA029) + ("YI SYLLABLE BE" #xA02A) + ("YI SYLLABLE BEP" #xA02B) + ("YI SYLLABLE BUT" #xA02C) + ("YI SYLLABLE BUX" #xA02D) + ("YI SYLLABLE BU" #xA02E) + ("YI SYLLABLE BUP" #xA02F) + ("YI SYLLABLE BURX" #xA030) + ("YI SYLLABLE BUR" #xA031) + ("YI SYLLABLE BYT" #xA032) + ("YI SYLLABLE BYX" #xA033) + ("YI SYLLABLE BY" #xA034) + ("YI SYLLABLE BYP" #xA035) + ("YI SYLLABLE BYRX" #xA036) + ("YI SYLLABLE BYR" #xA037) + ("YI SYLLABLE PIT" #xA038) + ("YI SYLLABLE PIX" #xA039) + ("YI SYLLABLE PI" #xA03A) + ("YI SYLLABLE PIP" #xA03B) + ("YI SYLLABLE PIEX" #xA03C) + ("YI SYLLABLE PIE" #xA03D) + ("YI SYLLABLE PIEP" #xA03E) + ("YI SYLLABLE PAT" #xA03F) + ("YI SYLLABLE PAX" #xA040) + ("YI SYLLABLE PA" #xA041) + ("YI SYLLABLE PAP" #xA042) + ("YI SYLLABLE PUOX" #xA043) + ("YI SYLLABLE PUO" #xA044) + ("YI SYLLABLE PUOP" #xA045) + ("YI SYLLABLE POT" #xA046) + ("YI SYLLABLE POX" #xA047) + ("YI SYLLABLE PO" #xA048) + ("YI SYLLABLE POP" #xA049) + ("YI SYLLABLE PUT" #xA04A) + ("YI SYLLABLE PUX" #xA04B) + ("YI SYLLABLE PU" #xA04C) + ("YI SYLLABLE PUP" #xA04D) + ("YI SYLLABLE PURX" #xA04E) + ("YI SYLLABLE PUR" #xA04F) + ("YI SYLLABLE PYT" #xA050) + ("YI SYLLABLE PYX" #xA051) + ("YI SYLLABLE PY" #xA052) + ("YI SYLLABLE PYP" #xA053) + ("YI SYLLABLE PYRX" #xA054) + ("YI SYLLABLE PYR" #xA055) + ("YI SYLLABLE BBIT" #xA056) + ("YI SYLLABLE BBIX" #xA057) + ("YI SYLLABLE BBI" #xA058) + ("YI SYLLABLE BBIP" #xA059) + ("YI SYLLABLE BBIET" #xA05A) + ("YI SYLLABLE BBIEX" #xA05B) + ("YI SYLLABLE BBIE" #xA05C) + ("YI SYLLABLE BBIEP" #xA05D) + ("YI SYLLABLE BBAT" #xA05E) + ("YI SYLLABLE BBAX" #xA05F) + ("YI SYLLABLE BBA" #xA060) + ("YI SYLLABLE BBAP" #xA061) + ("YI SYLLABLE BBUOX" #xA062) + ("YI SYLLABLE BBUO" #xA063) + ("YI SYLLABLE BBUOP" #xA064) + ("YI SYLLABLE BBOT" #xA065) + ("YI SYLLABLE BBOX" #xA066) + ("YI SYLLABLE BBO" #xA067) + ("YI SYLLABLE BBOP" #xA068) + ("YI SYLLABLE BBEX" #xA069) + ("YI SYLLABLE BBE" #xA06A) + ("YI SYLLABLE BBEP" #xA06B) + ("YI SYLLABLE BBUT" #xA06C) + ("YI SYLLABLE BBUX" #xA06D) + ("YI SYLLABLE BBU" #xA06E) + ("YI SYLLABLE BBUP" #xA06F) + ("YI SYLLABLE BBURX" #xA070) + ("YI SYLLABLE BBUR" #xA071) + ("YI SYLLABLE BBYT" #xA072) + ("YI SYLLABLE BBYX" #xA073) + ("YI SYLLABLE BBY" #xA074) + ("YI SYLLABLE BBYP" #xA075) + ("YI SYLLABLE NBIT" #xA076) + ("YI SYLLABLE NBIX" #xA077) + ("YI SYLLABLE NBI" #xA078) + ("YI SYLLABLE NBIP" #xA079) + ("YI SYLLABLE NBIEX" #xA07A) + ("YI SYLLABLE NBIE" #xA07B) + ("YI SYLLABLE NBIEP" #xA07C) + ("YI SYLLABLE NBAT" #xA07D) + ("YI SYLLABLE NBAX" #xA07E) + ("YI SYLLABLE NBA" #xA07F) + ("YI SYLLABLE NBAP" #xA080) + ("YI SYLLABLE NBOT" #xA081) + ("YI SYLLABLE NBOX" #xA082) + ("YI SYLLABLE NBO" #xA083) + ("YI SYLLABLE NBOP" #xA084) + ("YI SYLLABLE NBUT" #xA085) + ("YI SYLLABLE NBUX" #xA086) + ("YI SYLLABLE NBU" #xA087) + ("YI SYLLABLE NBUP" #xA088) + ("YI SYLLABLE NBURX" #xA089) + ("YI SYLLABLE NBUR" #xA08A) + ("YI SYLLABLE NBYT" #xA08B) + ("YI SYLLABLE NBYX" #xA08C) + ("YI SYLLABLE NBY" #xA08D) + ("YI SYLLABLE NBYP" #xA08E) + ("YI SYLLABLE NBYRX" #xA08F) + ("YI SYLLABLE NBYR" #xA090) + ("YI SYLLABLE HMIT" #xA091) + ("YI SYLLABLE HMIX" #xA092) + ("YI SYLLABLE HMI" #xA093) + ("YI SYLLABLE HMIP" #xA094) + ("YI SYLLABLE HMIEX" #xA095) + ("YI SYLLABLE HMIE" #xA096) + ("YI SYLLABLE HMIEP" #xA097) + ("YI SYLLABLE HMAT" #xA098) + ("YI SYLLABLE HMAX" #xA099) + ("YI SYLLABLE HMA" #xA09A) + ("YI SYLLABLE HMAP" #xA09B) + ("YI SYLLABLE HMUOX" #xA09C) + ("YI SYLLABLE HMUO" #xA09D) + ("YI SYLLABLE HMUOP" #xA09E) + ("YI SYLLABLE HMOT" #xA09F) + ("YI SYLLABLE HMOX" #xA0A0) + ("YI SYLLABLE HMO" #xA0A1) + ("YI SYLLABLE HMOP" #xA0A2) + ("YI SYLLABLE HMUT" #xA0A3) + ("YI SYLLABLE HMUX" #xA0A4) + ("YI SYLLABLE HMU" #xA0A5) + ("YI SYLLABLE HMUP" #xA0A6) + ("YI SYLLABLE HMURX" #xA0A7) + ("YI SYLLABLE HMUR" #xA0A8) + ("YI SYLLABLE HMYX" #xA0A9) + ("YI SYLLABLE HMY" #xA0AA) + ("YI SYLLABLE HMYP" #xA0AB) + ("YI SYLLABLE HMYRX" #xA0AC) + ("YI SYLLABLE HMYR" #xA0AD) + ("YI SYLLABLE MIT" #xA0AE) + ("YI SYLLABLE MIX" #xA0AF) + ("YI SYLLABLE MI" #xA0B0) + ("YI SYLLABLE MIP" #xA0B1) + ("YI SYLLABLE MIEX" #xA0B2) + ("YI SYLLABLE MIE" #xA0B3) + ("YI SYLLABLE MIEP" #xA0B4) + ("YI SYLLABLE MAT" #xA0B5) + ("YI SYLLABLE MAX" #xA0B6) + ("YI SYLLABLE MA" #xA0B7) + ("YI SYLLABLE MAP" #xA0B8) + ("YI SYLLABLE MUOT" #xA0B9) + ("YI SYLLABLE MUOX" #xA0BA) + ("YI SYLLABLE MUO" #xA0BB) + ("YI SYLLABLE MUOP" #xA0BC) + ("YI SYLLABLE MOT" #xA0BD) + ("YI SYLLABLE MOX" #xA0BE) + ("YI SYLLABLE MO" #xA0BF) + ("YI SYLLABLE MOP" #xA0C0) + ("YI SYLLABLE MEX" #xA0C1) + ("YI SYLLABLE ME" #xA0C2) + ("YI SYLLABLE MUT" #xA0C3) + ("YI SYLLABLE MUX" #xA0C4) + ("YI SYLLABLE MU" #xA0C5) + ("YI SYLLABLE MUP" #xA0C6) + ("YI SYLLABLE MURX" #xA0C7) + ("YI SYLLABLE MUR" #xA0C8) + ("YI SYLLABLE MYT" #xA0C9) + ("YI SYLLABLE MYX" #xA0CA) + ("YI SYLLABLE MY" #xA0CB) + ("YI SYLLABLE MYP" #xA0CC) + ("YI SYLLABLE FIT" #xA0CD) + ("YI SYLLABLE FIX" #xA0CE) + ("YI SYLLABLE FI" #xA0CF) + ("YI SYLLABLE FIP" #xA0D0) + ("YI SYLLABLE FAT" #xA0D1) + ("YI SYLLABLE FAX" #xA0D2) + ("YI SYLLABLE FA" #xA0D3) + ("YI SYLLABLE FAP" #xA0D4) + ("YI SYLLABLE FOX" #xA0D5) + ("YI SYLLABLE FO" #xA0D6) + ("YI SYLLABLE FOP" #xA0D7) + ("YI SYLLABLE FUT" #xA0D8) + ("YI SYLLABLE FUX" #xA0D9) + ("YI SYLLABLE FU" #xA0DA) + ("YI SYLLABLE FUP" #xA0DB) + ("YI SYLLABLE FURX" #xA0DC) + ("YI SYLLABLE FUR" #xA0DD) + ("YI SYLLABLE FYT" #xA0DE) + ("YI SYLLABLE FYX" #xA0DF) + ("YI SYLLABLE FY" #xA0E0) + ("YI SYLLABLE FYP" #xA0E1) + ("YI SYLLABLE VIT" #xA0E2) + ("YI SYLLABLE VIX" #xA0E3) + ("YI SYLLABLE VI" #xA0E4) + ("YI SYLLABLE VIP" #xA0E5) + ("YI SYLLABLE VIET" #xA0E6) + ("YI SYLLABLE VIEX" #xA0E7) + ("YI SYLLABLE VIE" #xA0E8) + ("YI SYLLABLE VIEP" #xA0E9) + ("YI SYLLABLE VAT" #xA0EA) + ("YI SYLLABLE VAX" #xA0EB) + ("YI SYLLABLE VA" #xA0EC) + ("YI SYLLABLE VAP" #xA0ED) + ("YI SYLLABLE VOT" #xA0EE) + ("YI SYLLABLE VOX" #xA0EF) + ("YI SYLLABLE VO" #xA0F0) + ("YI SYLLABLE VOP" #xA0F1) + ("YI SYLLABLE VEX" #xA0F2) + ("YI SYLLABLE VEP" #xA0F3) + ("YI SYLLABLE VUT" #xA0F4) + ("YI SYLLABLE VUX" #xA0F5) + ("YI SYLLABLE VU" #xA0F6) + ("YI SYLLABLE VUP" #xA0F7) + ("YI SYLLABLE VURX" #xA0F8) + ("YI SYLLABLE VUR" #xA0F9) + ("YI SYLLABLE VYT" #xA0FA) + ("YI SYLLABLE VYX" #xA0FB) + ("YI SYLLABLE VY" #xA0FC) + ("YI SYLLABLE VYP" #xA0FD) + ("YI SYLLABLE VYRX" #xA0FE) + ("YI SYLLABLE VYR" #xA0FF) + ("YI SYLLABLE DIT" #xA100) + ("YI SYLLABLE DIX" #xA101) + ("YI SYLLABLE DI" #xA102) + ("YI SYLLABLE DIP" #xA103) + ("YI SYLLABLE DIEX" #xA104) + ("YI SYLLABLE DIE" #xA105) + ("YI SYLLABLE DIEP" #xA106) + ("YI SYLLABLE DAT" #xA107) + ("YI SYLLABLE DAX" #xA108) + ("YI SYLLABLE DA" #xA109) + ("YI SYLLABLE DAP" #xA10A) + ("YI SYLLABLE DUOX" #xA10B) + ("YI SYLLABLE DUO" #xA10C) + ("YI SYLLABLE DOT" #xA10D) + ("YI SYLLABLE DOX" #xA10E) + ("YI SYLLABLE DO" #xA10F) + ("YI SYLLABLE DOP" #xA110) + ("YI SYLLABLE DEX" #xA111) + ("YI SYLLABLE DE" #xA112) + ("YI SYLLABLE DEP" #xA113) + ("YI SYLLABLE DUT" #xA114) + ("YI SYLLABLE DUX" #xA115) + ("YI SYLLABLE DU" #xA116) + ("YI SYLLABLE DUP" #xA117) + ("YI SYLLABLE DURX" #xA118) + ("YI SYLLABLE DUR" #xA119) + ("YI SYLLABLE TIT" #xA11A) + ("YI SYLLABLE TIX" #xA11B) + ("YI SYLLABLE TI" #xA11C) + ("YI SYLLABLE TIP" #xA11D) + ("YI SYLLABLE TIEX" #xA11E) + ("YI SYLLABLE TIE" #xA11F) + ("YI SYLLABLE TIEP" #xA120) + ("YI SYLLABLE TAT" #xA121) + ("YI SYLLABLE TAX" #xA122) + ("YI SYLLABLE TA" #xA123) + ("YI SYLLABLE TAP" #xA124) + ("YI SYLLABLE TUOT" #xA125) + ("YI SYLLABLE TUOX" #xA126) + ("YI SYLLABLE TUO" #xA127) + ("YI SYLLABLE TUOP" #xA128) + ("YI SYLLABLE TOT" #xA129) + ("YI SYLLABLE TOX" #xA12A) + ("YI SYLLABLE TO" #xA12B) + ("YI SYLLABLE TOP" #xA12C) + ("YI SYLLABLE TEX" #xA12D) + ("YI SYLLABLE TE" #xA12E) + ("YI SYLLABLE TEP" #xA12F) + ("YI SYLLABLE TUT" #xA130) + ("YI SYLLABLE TUX" #xA131) + ("YI SYLLABLE TU" #xA132) + ("YI SYLLABLE TUP" #xA133) + ("YI SYLLABLE TURX" #xA134) + ("YI SYLLABLE TUR" #xA135) + ("YI SYLLABLE DDIT" #xA136) + ("YI SYLLABLE DDIX" #xA137) + ("YI SYLLABLE DDI" #xA138) + ("YI SYLLABLE DDIP" #xA139) + ("YI SYLLABLE DDIEX" #xA13A) + ("YI SYLLABLE DDIE" #xA13B) + ("YI SYLLABLE DDIEP" #xA13C) + ("YI SYLLABLE DDAT" #xA13D) + ("YI SYLLABLE DDAX" #xA13E) + ("YI SYLLABLE DDA" #xA13F) + ("YI SYLLABLE DDAP" #xA140) + ("YI SYLLABLE DDUOX" #xA141) + ("YI SYLLABLE DDUO" #xA142) + ("YI SYLLABLE DDUOP" #xA143) + ("YI SYLLABLE DDOT" #xA144) + ("YI SYLLABLE DDOX" #xA145) + ("YI SYLLABLE DDO" #xA146) + ("YI SYLLABLE DDOP" #xA147) + ("YI SYLLABLE DDEX" #xA148) + ("YI SYLLABLE DDE" #xA149) + ("YI SYLLABLE DDEP" #xA14A) + ("YI SYLLABLE DDUT" #xA14B) + ("YI SYLLABLE DDUX" #xA14C) + ("YI SYLLABLE DDU" #xA14D) + ("YI SYLLABLE DDUP" #xA14E) + ("YI SYLLABLE DDURX" #xA14F) + ("YI SYLLABLE DDUR" #xA150) + ("YI SYLLABLE NDIT" #xA151) + ("YI SYLLABLE NDIX" #xA152) + ("YI SYLLABLE NDI" #xA153) + ("YI SYLLABLE NDIP" #xA154) + ("YI SYLLABLE NDIEX" #xA155) + ("YI SYLLABLE NDIE" #xA156) + ("YI SYLLABLE NDAT" #xA157) + ("YI SYLLABLE NDAX" #xA158) + ("YI SYLLABLE NDA" #xA159) + ("YI SYLLABLE NDAP" #xA15A) + ("YI SYLLABLE NDOT" #xA15B) + ("YI SYLLABLE NDOX" #xA15C) + ("YI SYLLABLE NDO" #xA15D) + ("YI SYLLABLE NDOP" #xA15E) + ("YI SYLLABLE NDEX" #xA15F) + ("YI SYLLABLE NDE" #xA160) + ("YI SYLLABLE NDEP" #xA161) + ("YI SYLLABLE NDUT" #xA162) + ("YI SYLLABLE NDUX" #xA163) + ("YI SYLLABLE NDU" #xA164) + ("YI SYLLABLE NDUP" #xA165) + ("YI SYLLABLE NDURX" #xA166) + ("YI SYLLABLE NDUR" #xA167) + ("YI SYLLABLE HNIT" #xA168) + ("YI SYLLABLE HNIX" #xA169) + ("YI SYLLABLE HNI" #xA16A) + ("YI SYLLABLE HNIP" #xA16B) + ("YI SYLLABLE HNIET" #xA16C) + ("YI SYLLABLE HNIEX" #xA16D) + ("YI SYLLABLE HNIE" #xA16E) + ("YI SYLLABLE HNIEP" #xA16F) + ("YI SYLLABLE HNAT" #xA170) + ("YI SYLLABLE HNAX" #xA171) + ("YI SYLLABLE HNA" #xA172) + ("YI SYLLABLE HNAP" #xA173) + ("YI SYLLABLE HNUOX" #xA174) + ("YI SYLLABLE HNUO" #xA175) + ("YI SYLLABLE HNOT" #xA176) + ("YI SYLLABLE HNOX" #xA177) + ("YI SYLLABLE HNOP" #xA178) + ("YI SYLLABLE HNEX" #xA179) + ("YI SYLLABLE HNE" #xA17A) + ("YI SYLLABLE HNEP" #xA17B) + ("YI SYLLABLE HNUT" #xA17C) + ("YI SYLLABLE NIT" #xA17D) + ("YI SYLLABLE NIX" #xA17E) + ("YI SYLLABLE NI" #xA17F) + ("YI SYLLABLE NIP" #xA180) + ("YI SYLLABLE NIEX" #xA181) + ("YI SYLLABLE NIE" #xA182) + ("YI SYLLABLE NIEP" #xA183) + ("YI SYLLABLE NAX" #xA184) + ("YI SYLLABLE NA" #xA185) + ("YI SYLLABLE NAP" #xA186) + ("YI SYLLABLE NUOX" #xA187) + ("YI SYLLABLE NUO" #xA188) + ("YI SYLLABLE NUOP" #xA189) + ("YI SYLLABLE NOT" #xA18A) + ("YI SYLLABLE NOX" #xA18B) + ("YI SYLLABLE NO" #xA18C) + ("YI SYLLABLE NOP" #xA18D) + ("YI SYLLABLE NEX" #xA18E) + ("YI SYLLABLE NE" #xA18F) + ("YI SYLLABLE NEP" #xA190) + ("YI SYLLABLE NUT" #xA191) + ("YI SYLLABLE NUX" #xA192) + ("YI SYLLABLE NU" #xA193) + ("YI SYLLABLE NUP" #xA194) + ("YI SYLLABLE NURX" #xA195) + ("YI SYLLABLE NUR" #xA196) + ("YI SYLLABLE HLIT" #xA197) + ("YI SYLLABLE HLIX" #xA198) + ("YI SYLLABLE HLI" #xA199) + ("YI SYLLABLE HLIP" #xA19A) + ("YI SYLLABLE HLIEX" #xA19B) + ("YI SYLLABLE HLIE" #xA19C) + ("YI SYLLABLE HLIEP" #xA19D) + ("YI SYLLABLE HLAT" #xA19E) + ("YI SYLLABLE HLAX" #xA19F) + ("YI SYLLABLE HLA" #xA1A0) + ("YI SYLLABLE HLAP" #xA1A1) + ("YI SYLLABLE HLUOX" #xA1A2) + ("YI SYLLABLE HLUO" #xA1A3) + ("YI SYLLABLE HLUOP" #xA1A4) + ("YI SYLLABLE HLOX" #xA1A5) + ("YI SYLLABLE HLO" #xA1A6) + ("YI SYLLABLE HLOP" #xA1A7) + ("YI SYLLABLE HLEX" #xA1A8) + ("YI SYLLABLE HLE" #xA1A9) + ("YI SYLLABLE HLEP" #xA1AA) + ("YI SYLLABLE HLUT" #xA1AB) + ("YI SYLLABLE HLUX" #xA1AC) + ("YI SYLLABLE HLU" #xA1AD) + ("YI SYLLABLE HLUP" #xA1AE) + ("YI SYLLABLE HLURX" #xA1AF) + ("YI SYLLABLE HLUR" #xA1B0) + ("YI SYLLABLE HLYT" #xA1B1) + ("YI SYLLABLE HLYX" #xA1B2) + ("YI SYLLABLE HLY" #xA1B3) + ("YI SYLLABLE HLYP" #xA1B4) + ("YI SYLLABLE HLYRX" #xA1B5) + ("YI SYLLABLE HLYR" #xA1B6) + ("YI SYLLABLE LIT" #xA1B7) + ("YI SYLLABLE LIX" #xA1B8) + ("YI SYLLABLE LI" #xA1B9) + ("YI SYLLABLE LIP" #xA1BA) + ("YI SYLLABLE LIET" #xA1BB) + ("YI SYLLABLE LIEX" #xA1BC) + ("YI SYLLABLE LIE" #xA1BD) + ("YI SYLLABLE LIEP" #xA1BE) + ("YI SYLLABLE LAT" #xA1BF) + ("YI SYLLABLE LAX" #xA1C0) + ("YI SYLLABLE LA" #xA1C1) + ("YI SYLLABLE LAP" #xA1C2) + ("YI SYLLABLE LUOT" #xA1C3) + ("YI SYLLABLE LUOX" #xA1C4) + ("YI SYLLABLE LUO" #xA1C5) + ("YI SYLLABLE LUOP" #xA1C6) + ("YI SYLLABLE LOT" #xA1C7) + ("YI SYLLABLE LOX" #xA1C8) + ("YI SYLLABLE LO" #xA1C9) + ("YI SYLLABLE LOP" #xA1CA) + ("YI SYLLABLE LEX" #xA1CB) + ("YI SYLLABLE LE" #xA1CC) + ("YI SYLLABLE LEP" #xA1CD) + ("YI SYLLABLE LUT" #xA1CE) + ("YI SYLLABLE LUX" #xA1CF) + ("YI SYLLABLE LU" #xA1D0) + ("YI SYLLABLE LUP" #xA1D1) + ("YI SYLLABLE LURX" #xA1D2) + ("YI SYLLABLE LUR" #xA1D3) + ("YI SYLLABLE LYT" #xA1D4) + ("YI SYLLABLE LYX" #xA1D5) + ("YI SYLLABLE LY" #xA1D6) + ("YI SYLLABLE LYP" #xA1D7) + ("YI SYLLABLE LYRX" #xA1D8) + ("YI SYLLABLE LYR" #xA1D9) + ("YI SYLLABLE GIT" #xA1DA) + ("YI SYLLABLE GIX" #xA1DB) + ("YI SYLLABLE GI" #xA1DC) + ("YI SYLLABLE GIP" #xA1DD) + ("YI SYLLABLE GIET" #xA1DE) + ("YI SYLLABLE GIEX" #xA1DF) + ("YI SYLLABLE GIE" #xA1E0) + ("YI SYLLABLE GIEP" #xA1E1) + ("YI SYLLABLE GAT" #xA1E2) + ("YI SYLLABLE GAX" #xA1E3) + ("YI SYLLABLE GA" #xA1E4) + ("YI SYLLABLE GAP" #xA1E5) + ("YI SYLLABLE GUOT" #xA1E6) + ("YI SYLLABLE GUOX" #xA1E7) + ("YI SYLLABLE GUO" #xA1E8) + ("YI SYLLABLE GUOP" #xA1E9) + ("YI SYLLABLE GOT" #xA1EA) + ("YI SYLLABLE GOX" #xA1EB) + ("YI SYLLABLE GO" #xA1EC) + ("YI SYLLABLE GOP" #xA1ED) + ("YI SYLLABLE GET" #xA1EE) + ("YI SYLLABLE GEX" #xA1EF) + ("YI SYLLABLE GE" #xA1F0) + ("YI SYLLABLE GEP" #xA1F1) + ("YI SYLLABLE GUT" #xA1F2) + ("YI SYLLABLE GUX" #xA1F3) + ("YI SYLLABLE GU" #xA1F4) + ("YI SYLLABLE GUP" #xA1F5) + ("YI SYLLABLE GURX" #xA1F6) + ("YI SYLLABLE GUR" #xA1F7) + ("YI SYLLABLE KIT" #xA1F8) + ("YI SYLLABLE KIX" #xA1F9) + ("YI SYLLABLE KI" #xA1FA) + ("YI SYLLABLE KIP" #xA1FB) + ("YI SYLLABLE KIEX" #xA1FC) + ("YI SYLLABLE KIE" #xA1FD) + ("YI SYLLABLE KIEP" #xA1FE) + ("YI SYLLABLE KAT" #xA1FF) + ("YI SYLLABLE KAX" #xA200) + ("YI SYLLABLE KA" #xA201) + ("YI SYLLABLE KAP" #xA202) + ("YI SYLLABLE KUOX" #xA203) + ("YI SYLLABLE KUO" #xA204) + ("YI SYLLABLE KUOP" #xA205) + ("YI SYLLABLE KOT" #xA206) + ("YI SYLLABLE KOX" #xA207) + ("YI SYLLABLE KO" #xA208) + ("YI SYLLABLE KOP" #xA209) + ("YI SYLLABLE KET" #xA20A) + ("YI SYLLABLE KEX" #xA20B) + ("YI SYLLABLE KE" #xA20C) + ("YI SYLLABLE KEP" #xA20D) + ("YI SYLLABLE KUT" #xA20E) + ("YI SYLLABLE KUX" #xA20F) + ("YI SYLLABLE KU" #xA210) + ("YI SYLLABLE KUP" #xA211) + ("YI SYLLABLE KURX" #xA212) + ("YI SYLLABLE KUR" #xA213) + ("YI SYLLABLE GGIT" #xA214) + ("YI SYLLABLE GGIX" #xA215) + ("YI SYLLABLE GGI" #xA216) + ("YI SYLLABLE GGIEX" #xA217) + ("YI SYLLABLE GGIE" #xA218) + ("YI SYLLABLE GGIEP" #xA219) + ("YI SYLLABLE GGAT" #xA21A) + ("YI SYLLABLE GGAX" #xA21B) + ("YI SYLLABLE GGA" #xA21C) + ("YI SYLLABLE GGAP" #xA21D) + ("YI SYLLABLE GGUOT" #xA21E) + ("YI SYLLABLE GGUOX" #xA21F) + ("YI SYLLABLE GGUO" #xA220) + ("YI SYLLABLE GGUOP" #xA221) + ("YI SYLLABLE GGOT" #xA222) + ("YI SYLLABLE GGOX" #xA223) + ("YI SYLLABLE GGO" #xA224) + ("YI SYLLABLE GGOP" #xA225) + ("YI SYLLABLE GGET" #xA226) + ("YI SYLLABLE GGEX" #xA227) + ("YI SYLLABLE GGE" #xA228) + ("YI SYLLABLE GGEP" #xA229) + ("YI SYLLABLE GGUT" #xA22A) + ("YI SYLLABLE GGUX" #xA22B) + ("YI SYLLABLE GGU" #xA22C) + ("YI SYLLABLE GGUP" #xA22D) + ("YI SYLLABLE GGURX" #xA22E) + ("YI SYLLABLE GGUR" #xA22F) + ("YI SYLLABLE MGIEX" #xA230) + ("YI SYLLABLE MGIE" #xA231) + ("YI SYLLABLE MGAT" #xA232) + ("YI SYLLABLE MGAX" #xA233) + ("YI SYLLABLE MGA" #xA234) + ("YI SYLLABLE MGAP" #xA235) + ("YI SYLLABLE MGUOX" #xA236) + ("YI SYLLABLE MGUO" #xA237) + ("YI SYLLABLE MGUOP" #xA238) + ("YI SYLLABLE MGOT" #xA239) + ("YI SYLLABLE MGOX" #xA23A) + ("YI SYLLABLE MGO" #xA23B) + ("YI SYLLABLE MGOP" #xA23C) + ("YI SYLLABLE MGEX" #xA23D) + ("YI SYLLABLE MGE" #xA23E) + ("YI SYLLABLE MGEP" #xA23F) + ("YI SYLLABLE MGUT" #xA240) + ("YI SYLLABLE MGUX" #xA241) + ("YI SYLLABLE MGU" #xA242) + ("YI SYLLABLE MGUP" #xA243) + ("YI SYLLABLE MGURX" #xA244) + ("YI SYLLABLE MGUR" #xA245) + ("YI SYLLABLE HXIT" #xA246) + ("YI SYLLABLE HXIX" #xA247) + ("YI SYLLABLE HXI" #xA248) + ("YI SYLLABLE HXIP" #xA249) + ("YI SYLLABLE HXIET" #xA24A) + ("YI SYLLABLE HXIEX" #xA24B) + ("YI SYLLABLE HXIE" #xA24C) + ("YI SYLLABLE HXIEP" #xA24D) + ("YI SYLLABLE HXAT" #xA24E) + ("YI SYLLABLE HXAX" #xA24F) + ("YI SYLLABLE HXA" #xA250) + ("YI SYLLABLE HXAP" #xA251) + ("YI SYLLABLE HXUOT" #xA252) + ("YI SYLLABLE HXUOX" #xA253) + ("YI SYLLABLE HXUO" #xA254) + ("YI SYLLABLE HXUOP" #xA255) + ("YI SYLLABLE HXOT" #xA256) + ("YI SYLLABLE HXOX" #xA257) + ("YI SYLLABLE HXO" #xA258) + ("YI SYLLABLE HXOP" #xA259) + ("YI SYLLABLE HXEX" #xA25A) + ("YI SYLLABLE HXE" #xA25B) + ("YI SYLLABLE HXEP" #xA25C) + ("YI SYLLABLE NGIEX" #xA25D) + ("YI SYLLABLE NGIE" #xA25E) + ("YI SYLLABLE NGIEP" #xA25F) + ("YI SYLLABLE NGAT" #xA260) + ("YI SYLLABLE NGAX" #xA261) + ("YI SYLLABLE NGA" #xA262) + ("YI SYLLABLE NGAP" #xA263) + ("YI SYLLABLE NGUOT" #xA264) + ("YI SYLLABLE NGUOX" #xA265) + ("YI SYLLABLE NGUO" #xA266) + ("YI SYLLABLE NGOT" #xA267) + ("YI SYLLABLE NGOX" #xA268) + ("YI SYLLABLE NGO" #xA269) + ("YI SYLLABLE NGOP" #xA26A) + ("YI SYLLABLE NGEX" #xA26B) + ("YI SYLLABLE NGE" #xA26C) + ("YI SYLLABLE NGEP" #xA26D) + ("YI SYLLABLE HIT" #xA26E) + ("YI SYLLABLE HIEX" #xA26F) + ("YI SYLLABLE HIE" #xA270) + ("YI SYLLABLE HAT" #xA271) + ("YI SYLLABLE HAX" #xA272) + ("YI SYLLABLE HA" #xA273) + ("YI SYLLABLE HAP" #xA274) + ("YI SYLLABLE HUOT" #xA275) + ("YI SYLLABLE HUOX" #xA276) + ("YI SYLLABLE HUO" #xA277) + ("YI SYLLABLE HUOP" #xA278) + ("YI SYLLABLE HOT" #xA279) + ("YI SYLLABLE HOX" #xA27A) + ("YI SYLLABLE HO" #xA27B) + ("YI SYLLABLE HOP" #xA27C) + ("YI SYLLABLE HEX" #xA27D) + ("YI SYLLABLE HE" #xA27E) + ("YI SYLLABLE HEP" #xA27F) + ("YI SYLLABLE WAT" #xA280) + ("YI SYLLABLE WAX" #xA281) + ("YI SYLLABLE WA" #xA282) + ("YI SYLLABLE WAP" #xA283) + ("YI SYLLABLE WUOX" #xA284) + ("YI SYLLABLE WUO" #xA285) + ("YI SYLLABLE WUOP" #xA286) + ("YI SYLLABLE WOX" #xA287) + ("YI SYLLABLE WO" #xA288) + ("YI SYLLABLE WOP" #xA289) + ("YI SYLLABLE WEX" #xA28A) + ("YI SYLLABLE WE" #xA28B) + ("YI SYLLABLE WEP" #xA28C) + ("YI SYLLABLE ZIT" #xA28D) + ("YI SYLLABLE ZIX" #xA28E) + ("YI SYLLABLE ZI" #xA28F) + ("YI SYLLABLE ZIP" #xA290) + ("YI SYLLABLE ZIEX" #xA291) + ("YI SYLLABLE ZIE" #xA292) + ("YI SYLLABLE ZIEP" #xA293) + ("YI SYLLABLE ZAT" #xA294) + ("YI SYLLABLE ZAX" #xA295) + ("YI SYLLABLE ZA" #xA296) + ("YI SYLLABLE ZAP" #xA297) + ("YI SYLLABLE ZUOX" #xA298) + ("YI SYLLABLE ZUO" #xA299) + ("YI SYLLABLE ZUOP" #xA29A) + ("YI SYLLABLE ZOT" #xA29B) + ("YI SYLLABLE ZOX" #xA29C) + ("YI SYLLABLE ZO" #xA29D) + ("YI SYLLABLE ZOP" #xA29E) + ("YI SYLLABLE ZEX" #xA29F) + ("YI SYLLABLE ZE" #xA2A0) + ("YI SYLLABLE ZEP" #xA2A1) + ("YI SYLLABLE ZUT" #xA2A2) + ("YI SYLLABLE ZUX" #xA2A3) + ("YI SYLLABLE ZU" #xA2A4) + ("YI SYLLABLE ZUP" #xA2A5) + ("YI SYLLABLE ZURX" #xA2A6) + ("YI SYLLABLE ZUR" #xA2A7) + ("YI SYLLABLE ZYT" #xA2A8) + ("YI SYLLABLE ZYX" #xA2A9) + ("YI SYLLABLE ZY" #xA2AA) + ("YI SYLLABLE ZYP" #xA2AB) + ("YI SYLLABLE ZYRX" #xA2AC) + ("YI SYLLABLE ZYR" #xA2AD) + ("YI SYLLABLE CIT" #xA2AE) + ("YI SYLLABLE CIX" #xA2AF) + ("YI SYLLABLE CI" #xA2B0) + ("YI SYLLABLE CIP" #xA2B1) + ("YI SYLLABLE CIET" #xA2B2) + ("YI SYLLABLE CIEX" #xA2B3) + ("YI SYLLABLE CIE" #xA2B4) + ("YI SYLLABLE CIEP" #xA2B5) + ("YI SYLLABLE CAT" #xA2B6) + ("YI SYLLABLE CAX" #xA2B7) + ("YI SYLLABLE CA" #xA2B8) + ("YI SYLLABLE CAP" #xA2B9) + ("YI SYLLABLE CUOX" #xA2BA) + ("YI SYLLABLE CUO" #xA2BB) + ("YI SYLLABLE CUOP" #xA2BC) + ("YI SYLLABLE COT" #xA2BD) + ("YI SYLLABLE COX" #xA2BE) + ("YI SYLLABLE CO" #xA2BF) + ("YI SYLLABLE COP" #xA2C0) + ("YI SYLLABLE CEX" #xA2C1) + ("YI SYLLABLE CE" #xA2C2) + ("YI SYLLABLE CEP" #xA2C3) + ("YI SYLLABLE CUT" #xA2C4) + ("YI SYLLABLE CUX" #xA2C5) + ("YI SYLLABLE CU" #xA2C6) + ("YI SYLLABLE CUP" #xA2C7) + ("YI SYLLABLE CURX" #xA2C8) + ("YI SYLLABLE CUR" #xA2C9) + ("YI SYLLABLE CYT" #xA2CA) + ("YI SYLLABLE CYX" #xA2CB) + ("YI SYLLABLE CY" #xA2CC) + ("YI SYLLABLE CYP" #xA2CD) + ("YI SYLLABLE CYRX" #xA2CE) + ("YI SYLLABLE CYR" #xA2CF) + ("YI SYLLABLE ZZIT" #xA2D0) + ("YI SYLLABLE ZZIX" #xA2D1) + ("YI SYLLABLE ZZI" #xA2D2) + ("YI SYLLABLE ZZIP" #xA2D3) + ("YI SYLLABLE ZZIET" #xA2D4) + ("YI SYLLABLE ZZIEX" #xA2D5) + ("YI SYLLABLE ZZIE" #xA2D6) + ("YI SYLLABLE ZZIEP" #xA2D7) + ("YI SYLLABLE ZZAT" #xA2D8) + ("YI SYLLABLE ZZAX" #xA2D9) + ("YI SYLLABLE ZZA" #xA2DA) + ("YI SYLLABLE ZZAP" #xA2DB) + ("YI SYLLABLE ZZOX" #xA2DC) + ("YI SYLLABLE ZZO" #xA2DD) + ("YI SYLLABLE ZZOP" #xA2DE) + ("YI SYLLABLE ZZEX" #xA2DF) + ("YI SYLLABLE ZZE" #xA2E0) + ("YI SYLLABLE ZZEP" #xA2E1) + ("YI SYLLABLE ZZUX" #xA2E2) + ("YI SYLLABLE ZZU" #xA2E3) + ("YI SYLLABLE ZZUP" #xA2E4) + ("YI SYLLABLE ZZURX" #xA2E5) + ("YI SYLLABLE ZZUR" #xA2E6) + ("YI SYLLABLE ZZYT" #xA2E7) + ("YI SYLLABLE ZZYX" #xA2E8) + ("YI SYLLABLE ZZY" #xA2E9) + ("YI SYLLABLE ZZYP" #xA2EA) + ("YI SYLLABLE ZZYRX" #xA2EB) + ("YI SYLLABLE ZZYR" #xA2EC) + ("YI SYLLABLE NZIT" #xA2ED) + ("YI SYLLABLE NZIX" #xA2EE) + ("YI SYLLABLE NZI" #xA2EF) + ("YI SYLLABLE NZIP" #xA2F0) + ("YI SYLLABLE NZIEX" #xA2F1) + ("YI SYLLABLE NZIE" #xA2F2) + ("YI SYLLABLE NZIEP" #xA2F3) + ("YI SYLLABLE NZAT" #xA2F4) + ("YI SYLLABLE NZAX" #xA2F5) + ("YI SYLLABLE NZA" #xA2F6) + ("YI SYLLABLE NZAP" #xA2F7) + ("YI SYLLABLE NZUOX" #xA2F8) + ("YI SYLLABLE NZUO" #xA2F9) + ("YI SYLLABLE NZOX" #xA2FA) + ("YI SYLLABLE NZOP" #xA2FB) + ("YI SYLLABLE NZEX" #xA2FC) + ("YI SYLLABLE NZE" #xA2FD) + ("YI SYLLABLE NZUX" #xA2FE) + ("YI SYLLABLE NZU" #xA2FF) + ("YI SYLLABLE NZUP" #xA300) + ("YI SYLLABLE NZURX" #xA301) + ("YI SYLLABLE NZUR" #xA302) + ("YI SYLLABLE NZYT" #xA303) + ("YI SYLLABLE NZYX" #xA304) + ("YI SYLLABLE NZY" #xA305) + ("YI SYLLABLE NZYP" #xA306) + ("YI SYLLABLE NZYRX" #xA307) + ("YI SYLLABLE NZYR" #xA308) + ("YI SYLLABLE SIT" #xA309) + ("YI SYLLABLE SIX" #xA30A) + ("YI SYLLABLE SI" #xA30B) + ("YI SYLLABLE SIP" #xA30C) + ("YI SYLLABLE SIEX" #xA30D) + ("YI SYLLABLE SIE" #xA30E) + ("YI SYLLABLE SIEP" #xA30F) + ("YI SYLLABLE SAT" #xA310) + ("YI SYLLABLE SAX" #xA311) + ("YI SYLLABLE SA" #xA312) + ("YI SYLLABLE SAP" #xA313) + ("YI SYLLABLE SUOX" #xA314) + ("YI SYLLABLE SUO" #xA315) + ("YI SYLLABLE SUOP" #xA316) + ("YI SYLLABLE SOT" #xA317) + ("YI SYLLABLE SOX" #xA318) + ("YI SYLLABLE SO" #xA319) + ("YI SYLLABLE SOP" #xA31A) + ("YI SYLLABLE SEX" #xA31B) + ("YI SYLLABLE SE" #xA31C) + ("YI SYLLABLE SEP" #xA31D) + ("YI SYLLABLE SUT" #xA31E) + ("YI SYLLABLE SUX" #xA31F) + ("YI SYLLABLE SU" #xA320) + ("YI SYLLABLE SUP" #xA321) + ("YI SYLLABLE SURX" #xA322) + ("YI SYLLABLE SUR" #xA323) + ("YI SYLLABLE SYT" #xA324) + ("YI SYLLABLE SYX" #xA325) + ("YI SYLLABLE SY" #xA326) + ("YI SYLLABLE SYP" #xA327) + ("YI SYLLABLE SYRX" #xA328) + ("YI SYLLABLE SYR" #xA329) + ("YI SYLLABLE SSIT" #xA32A) + ("YI SYLLABLE SSIX" #xA32B) + ("YI SYLLABLE SSI" #xA32C) + ("YI SYLLABLE SSIP" #xA32D) + ("YI SYLLABLE SSIEX" #xA32E) + ("YI SYLLABLE SSIE" #xA32F) + ("YI SYLLABLE SSIEP" #xA330) + ("YI SYLLABLE SSAT" #xA331) + ("YI SYLLABLE SSAX" #xA332) + ("YI SYLLABLE SSA" #xA333) + ("YI SYLLABLE SSAP" #xA334) + ("YI SYLLABLE SSOT" #xA335) + ("YI SYLLABLE SSOX" #xA336) + ("YI SYLLABLE SSO" #xA337) + ("YI SYLLABLE SSOP" #xA338) + ("YI SYLLABLE SSEX" #xA339) + ("YI SYLLABLE SSE" #xA33A) + ("YI SYLLABLE SSEP" #xA33B) + ("YI SYLLABLE SSUT" #xA33C) + ("YI SYLLABLE SSUX" #xA33D) + ("YI SYLLABLE SSU" #xA33E) + ("YI SYLLABLE SSUP" #xA33F) + ("YI SYLLABLE SSYT" #xA340) + ("YI SYLLABLE SSYX" #xA341) + ("YI SYLLABLE SSY" #xA342) + ("YI SYLLABLE SSYP" #xA343) + ("YI SYLLABLE SSYRX" #xA344) + ("YI SYLLABLE SSYR" #xA345) + ("YI SYLLABLE ZHAT" #xA346) + ("YI SYLLABLE ZHAX" #xA347) + ("YI SYLLABLE ZHA" #xA348) + ("YI SYLLABLE ZHAP" #xA349) + ("YI SYLLABLE ZHUOX" #xA34A) + ("YI SYLLABLE ZHUO" #xA34B) + ("YI SYLLABLE ZHUOP" #xA34C) + ("YI SYLLABLE ZHOT" #xA34D) + ("YI SYLLABLE ZHOX" #xA34E) + ("YI SYLLABLE ZHO" #xA34F) + ("YI SYLLABLE ZHOP" #xA350) + ("YI SYLLABLE ZHET" #xA351) + ("YI SYLLABLE ZHEX" #xA352) + ("YI SYLLABLE ZHE" #xA353) + ("YI SYLLABLE ZHEP" #xA354) + ("YI SYLLABLE ZHUT" #xA355) + ("YI SYLLABLE ZHUX" #xA356) + ("YI SYLLABLE ZHU" #xA357) + ("YI SYLLABLE ZHUP" #xA358) + ("YI SYLLABLE ZHURX" #xA359) + ("YI SYLLABLE ZHUR" #xA35A) + ("YI SYLLABLE ZHYT" #xA35B) + ("YI SYLLABLE ZHYX" #xA35C) + ("YI SYLLABLE ZHY" #xA35D) + ("YI SYLLABLE ZHYP" #xA35E) + ("YI SYLLABLE ZHYRX" #xA35F) + ("YI SYLLABLE ZHYR" #xA360) + ("YI SYLLABLE CHAT" #xA361) + ("YI SYLLABLE CHAX" #xA362) + ("YI SYLLABLE CHA" #xA363) + ("YI SYLLABLE CHAP" #xA364) + ("YI SYLLABLE CHUOT" #xA365) + ("YI SYLLABLE CHUOX" #xA366) + ("YI SYLLABLE CHUO" #xA367) + ("YI SYLLABLE CHUOP" #xA368) + ("YI SYLLABLE CHOT" #xA369) + ("YI SYLLABLE CHOX" #xA36A) + ("YI SYLLABLE CHO" #xA36B) + ("YI SYLLABLE CHOP" #xA36C) + ("YI SYLLABLE CHET" #xA36D) + ("YI SYLLABLE CHEX" #xA36E) + ("YI SYLLABLE CHE" #xA36F) + ("YI SYLLABLE CHEP" #xA370) + ("YI SYLLABLE CHUX" #xA371) + ("YI SYLLABLE CHU" #xA372) + ("YI SYLLABLE CHUP" #xA373) + ("YI SYLLABLE CHURX" #xA374) + ("YI SYLLABLE CHUR" #xA375) + ("YI SYLLABLE CHYT" #xA376) + ("YI SYLLABLE CHYX" #xA377) + ("YI SYLLABLE CHY" #xA378) + ("YI SYLLABLE CHYP" #xA379) + ("YI SYLLABLE CHYRX" #xA37A) + ("YI SYLLABLE CHYR" #xA37B) + ("YI SYLLABLE RRAX" #xA37C) + ("YI SYLLABLE RRA" #xA37D) + ("YI SYLLABLE RRUOX" #xA37E) + ("YI SYLLABLE RRUO" #xA37F) + ("YI SYLLABLE RROT" #xA380) + ("YI SYLLABLE RROX" #xA381) + ("YI SYLLABLE RRO" #xA382) + ("YI SYLLABLE RROP" #xA383) + ("YI SYLLABLE RRET" #xA384) + ("YI SYLLABLE RREX" #xA385) + ("YI SYLLABLE RRE" #xA386) + ("YI SYLLABLE RREP" #xA387) + ("YI SYLLABLE RRUT" #xA388) + ("YI SYLLABLE RRUX" #xA389) + ("YI SYLLABLE RRU" #xA38A) + ("YI SYLLABLE RRUP" #xA38B) + ("YI SYLLABLE RRURX" #xA38C) + ("YI SYLLABLE RRUR" #xA38D) + ("YI SYLLABLE RRYT" #xA38E) + ("YI SYLLABLE RRYX" #xA38F) + ("YI SYLLABLE RRY" #xA390) + ("YI SYLLABLE RRYP" #xA391) + ("YI SYLLABLE RRYRX" #xA392) + ("YI SYLLABLE RRYR" #xA393) + ("YI SYLLABLE NRAT" #xA394) + ("YI SYLLABLE NRAX" #xA395) + ("YI SYLLABLE NRA" #xA396) + ("YI SYLLABLE NRAP" #xA397) + ("YI SYLLABLE NROX" #xA398) + ("YI SYLLABLE NRO" #xA399) + ("YI SYLLABLE NROP" #xA39A) + ("YI SYLLABLE NRET" #xA39B) + ("YI SYLLABLE NREX" #xA39C) + ("YI SYLLABLE NRE" #xA39D) + ("YI SYLLABLE NREP" #xA39E) + ("YI SYLLABLE NRUT" #xA39F) + ("YI SYLLABLE NRUX" #xA3A0) + ("YI SYLLABLE NRU" #xA3A1) + ("YI SYLLABLE NRUP" #xA3A2) + ("YI SYLLABLE NRURX" #xA3A3) + ("YI SYLLABLE NRUR" #xA3A4) + ("YI SYLLABLE NRYT" #xA3A5) + ("YI SYLLABLE NRYX" #xA3A6) + ("YI SYLLABLE NRY" #xA3A7) + ("YI SYLLABLE NRYP" #xA3A8) + ("YI SYLLABLE NRYRX" #xA3A9) + ("YI SYLLABLE NRYR" #xA3AA) + ("YI SYLLABLE SHAT" #xA3AB) + ("YI SYLLABLE SHAX" #xA3AC) + ("YI SYLLABLE SHA" #xA3AD) + ("YI SYLLABLE SHAP" #xA3AE) + ("YI SYLLABLE SHUOX" #xA3AF) + ("YI SYLLABLE SHUO" #xA3B0) + ("YI SYLLABLE SHUOP" #xA3B1) + ("YI SYLLABLE SHOT" #xA3B2) + ("YI SYLLABLE SHOX" #xA3B3) + ("YI SYLLABLE SHO" #xA3B4) + ("YI SYLLABLE SHOP" #xA3B5) + ("YI SYLLABLE SHET" #xA3B6) + ("YI SYLLABLE SHEX" #xA3B7) + ("YI SYLLABLE SHE" #xA3B8) + ("YI SYLLABLE SHEP" #xA3B9) + ("YI SYLLABLE SHUT" #xA3BA) + ("YI SYLLABLE SHUX" #xA3BB) + ("YI SYLLABLE SHU" #xA3BC) + ("YI SYLLABLE SHUP" #xA3BD) + ("YI SYLLABLE SHURX" #xA3BE) + ("YI SYLLABLE SHUR" #xA3BF) + ("YI SYLLABLE SHYT" #xA3C0) + ("YI SYLLABLE SHYX" #xA3C1) + ("YI SYLLABLE SHY" #xA3C2) + ("YI SYLLABLE SHYP" #xA3C3) + ("YI SYLLABLE SHYRX" #xA3C4) + ("YI SYLLABLE SHYR" #xA3C5) + ("YI SYLLABLE RAT" #xA3C6) + ("YI SYLLABLE RAX" #xA3C7) + ("YI SYLLABLE RA" #xA3C8) + ("YI SYLLABLE RAP" #xA3C9) + ("YI SYLLABLE RUOX" #xA3CA) + ("YI SYLLABLE RUO" #xA3CB) + ("YI SYLLABLE RUOP" #xA3CC) + ("YI SYLLABLE ROT" #xA3CD) + ("YI SYLLABLE ROX" #xA3CE) + ("YI SYLLABLE RO" #xA3CF) + ("YI SYLLABLE ROP" #xA3D0) + ("YI SYLLABLE REX" #xA3D1) + ("YI SYLLABLE RE" #xA3D2) + ("YI SYLLABLE REP" #xA3D3) + ("YI SYLLABLE RUT" #xA3D4) + ("YI SYLLABLE RUX" #xA3D5) + ("YI SYLLABLE RU" #xA3D6) + ("YI SYLLABLE RUP" #xA3D7) + ("YI SYLLABLE RURX" #xA3D8) + ("YI SYLLABLE RUR" #xA3D9) + ("YI SYLLABLE RYT" #xA3DA) + ("YI SYLLABLE RYX" #xA3DB) + ("YI SYLLABLE RY" #xA3DC) + ("YI SYLLABLE RYP" #xA3DD) + ("YI SYLLABLE RYRX" #xA3DE) + ("YI SYLLABLE RYR" #xA3DF) + ("YI SYLLABLE JIT" #xA3E0) + ("YI SYLLABLE JIX" #xA3E1) + ("YI SYLLABLE JI" #xA3E2) + ("YI SYLLABLE JIP" #xA3E3) + ("YI SYLLABLE JIET" #xA3E4) + ("YI SYLLABLE JIEX" #xA3E5) + ("YI SYLLABLE JIE" #xA3E6) + ("YI SYLLABLE JIEP" #xA3E7) + ("YI SYLLABLE JUOT" #xA3E8) + ("YI SYLLABLE JUOX" #xA3E9) + ("YI SYLLABLE JUO" #xA3EA) + ("YI SYLLABLE JUOP" #xA3EB) + ("YI SYLLABLE JOT" #xA3EC) + ("YI SYLLABLE JOX" #xA3ED) + ("YI SYLLABLE JO" #xA3EE) + ("YI SYLLABLE JOP" #xA3EF) + ("YI SYLLABLE JUT" #xA3F0) + ("YI SYLLABLE JUX" #xA3F1) + ("YI SYLLABLE JU" #xA3F2) + ("YI SYLLABLE JUP" #xA3F3) + ("YI SYLLABLE JURX" #xA3F4) + ("YI SYLLABLE JUR" #xA3F5) + ("YI SYLLABLE JYT" #xA3F6) + ("YI SYLLABLE JYX" #xA3F7) + ("YI SYLLABLE JY" #xA3F8) + ("YI SYLLABLE JYP" #xA3F9) + ("YI SYLLABLE JYRX" #xA3FA) + ("YI SYLLABLE JYR" #xA3FB) + ("YI SYLLABLE QIT" #xA3FC) + ("YI SYLLABLE QIX" #xA3FD) + ("YI SYLLABLE QI" #xA3FE) + ("YI SYLLABLE QIP" #xA3FF) + ("YI SYLLABLE QIET" #xA400) + ("YI SYLLABLE QIEX" #xA401) + ("YI SYLLABLE QIE" #xA402) + ("YI SYLLABLE QIEP" #xA403) + ("YI SYLLABLE QUOT" #xA404) + ("YI SYLLABLE QUOX" #xA405) + ("YI SYLLABLE QUO" #xA406) + ("YI SYLLABLE QUOP" #xA407) + ("YI SYLLABLE QOT" #xA408) + ("YI SYLLABLE QOX" #xA409) + ("YI SYLLABLE QO" #xA40A) + ("YI SYLLABLE QOP" #xA40B) + ("YI SYLLABLE QUT" #xA40C) + ("YI SYLLABLE QUX" #xA40D) + ("YI SYLLABLE QU" #xA40E) + ("YI SYLLABLE QUP" #xA40F) + ("YI SYLLABLE QURX" #xA410) + ("YI SYLLABLE QUR" #xA411) + ("YI SYLLABLE QYT" #xA412) + ("YI SYLLABLE QYX" #xA413) + ("YI SYLLABLE QY" #xA414) + ("YI SYLLABLE QYP" #xA415) + ("YI SYLLABLE QYRX" #xA416) + ("YI SYLLABLE QYR" #xA417) + ("YI SYLLABLE JJIT" #xA418) + ("YI SYLLABLE JJIX" #xA419) + ("YI SYLLABLE JJI" #xA41A) + ("YI SYLLABLE JJIP" #xA41B) + ("YI SYLLABLE JJIET" #xA41C) + ("YI SYLLABLE JJIEX" #xA41D) + ("YI SYLLABLE JJIE" #xA41E) + ("YI SYLLABLE JJIEP" #xA41F) + ("YI SYLLABLE JJUOX" #xA420) + ("YI SYLLABLE JJUO" #xA421) + ("YI SYLLABLE JJUOP" #xA422) + ("YI SYLLABLE JJOT" #xA423) + ("YI SYLLABLE JJOX" #xA424) + ("YI SYLLABLE JJO" #xA425) + ("YI SYLLABLE JJOP" #xA426) + ("YI SYLLABLE JJUT" #xA427) + ("YI SYLLABLE JJUX" #xA428) + ("YI SYLLABLE JJU" #xA429) + ("YI SYLLABLE JJUP" #xA42A) + ("YI SYLLABLE JJURX" #xA42B) + ("YI SYLLABLE JJUR" #xA42C) + ("YI SYLLABLE JJYT" #xA42D) + ("YI SYLLABLE JJYX" #xA42E) + ("YI SYLLABLE JJY" #xA42F) + ("YI SYLLABLE JJYP" #xA430) + ("YI SYLLABLE NJIT" #xA431) + ("YI SYLLABLE NJIX" #xA432) + ("YI SYLLABLE NJI" #xA433) + ("YI SYLLABLE NJIP" #xA434) + ("YI SYLLABLE NJIET" #xA435) + ("YI SYLLABLE NJIEX" #xA436) + ("YI SYLLABLE NJIE" #xA437) + ("YI SYLLABLE NJIEP" #xA438) + ("YI SYLLABLE NJUOX" #xA439) + ("YI SYLLABLE NJUO" #xA43A) + ("YI SYLLABLE NJOT" #xA43B) + ("YI SYLLABLE NJOX" #xA43C) + ("YI SYLLABLE NJO" #xA43D) + ("YI SYLLABLE NJOP" #xA43E) + ("YI SYLLABLE NJUX" #xA43F) + ("YI SYLLABLE NJU" #xA440) + ("YI SYLLABLE NJUP" #xA441) + ("YI SYLLABLE NJURX" #xA442) + ("YI SYLLABLE NJUR" #xA443) + ("YI SYLLABLE NJYT" #xA444) + ("YI SYLLABLE NJYX" #xA445) + ("YI SYLLABLE NJY" #xA446) + ("YI SYLLABLE NJYP" #xA447) + ("YI SYLLABLE NJYRX" #xA448) + ("YI SYLLABLE NJYR" #xA449) + ("YI SYLLABLE NYIT" #xA44A) + ("YI SYLLABLE NYIX" #xA44B) + ("YI SYLLABLE NYI" #xA44C) + ("YI SYLLABLE NYIP" #xA44D) + ("YI SYLLABLE NYIET" #xA44E) + ("YI SYLLABLE NYIEX" #xA44F) + ("YI SYLLABLE NYIE" #xA450) + ("YI SYLLABLE NYIEP" #xA451) + ("YI SYLLABLE NYUOX" #xA452) + ("YI SYLLABLE NYUO" #xA453) + ("YI SYLLABLE NYUOP" #xA454) + ("YI SYLLABLE NYOT" #xA455) + ("YI SYLLABLE NYOX" #xA456) + ("YI SYLLABLE NYO" #xA457) + ("YI SYLLABLE NYOP" #xA458) + ("YI SYLLABLE NYUT" #xA459) + ("YI SYLLABLE NYUX" #xA45A) + ("YI SYLLABLE NYU" #xA45B) + ("YI SYLLABLE NYUP" #xA45C) + ("YI SYLLABLE XIT" #xA45D) + ("YI SYLLABLE XIX" #xA45E) + ("YI SYLLABLE XI" #xA45F) + ("YI SYLLABLE XIP" #xA460) + ("YI SYLLABLE XIET" #xA461) + ("YI SYLLABLE XIEX" #xA462) + ("YI SYLLABLE XIE" #xA463) + ("YI SYLLABLE XIEP" #xA464) + ("YI SYLLABLE XUOX" #xA465) + ("YI SYLLABLE XUO" #xA466) + ("YI SYLLABLE XOT" #xA467) + ("YI SYLLABLE XOX" #xA468) + ("YI SYLLABLE XO" #xA469) + ("YI SYLLABLE XOP" #xA46A) + ("YI SYLLABLE XYT" #xA46B) + ("YI SYLLABLE XYX" #xA46C) + ("YI SYLLABLE XY" #xA46D) + ("YI SYLLABLE XYP" #xA46E) + ("YI SYLLABLE XYRX" #xA46F) + ("YI SYLLABLE XYR" #xA470) + ("YI SYLLABLE YIT" #xA471) + ("YI SYLLABLE YIX" #xA472) + ("YI SYLLABLE YI" #xA473) + ("YI SYLLABLE YIP" #xA474) + ("YI SYLLABLE YIET" #xA475) + ("YI SYLLABLE YIEX" #xA476) + ("YI SYLLABLE YIE" #xA477) + ("YI SYLLABLE YIEP" #xA478) + ("YI SYLLABLE YUOT" #xA479) + ("YI SYLLABLE YUOX" #xA47A) + ("YI SYLLABLE YUO" #xA47B) + ("YI SYLLABLE YUOP" #xA47C) + ("YI SYLLABLE YOT" #xA47D) + ("YI SYLLABLE YOX" #xA47E) + ("YI SYLLABLE YO" #xA47F) + ("YI SYLLABLE YOP" #xA480) + ("YI SYLLABLE YUT" #xA481) + ("YI SYLLABLE YUX" #xA482) + ("YI SYLLABLE YU" #xA483) + ("YI SYLLABLE YUP" #xA484) + ("YI SYLLABLE YURX" #xA485) + ("YI SYLLABLE YUR" #xA486) + ("YI SYLLABLE YYT" #xA487) + ("YI SYLLABLE YYX" #xA488) + ("YI SYLLABLE YY" #xA489) + ("YI SYLLABLE YYP" #xA48A) + ("YI SYLLABLE YYRX" #xA48B) + ("YI SYLLABLE YYR" #xA48C) + )) + +;; arch-tag: 4c900a8b-cd84-4c41-86f4-dcb47efac01b diff --git a/etc/nxml/0A490-0A4CF.el b/etc/nxml/0A490-0A4CF.el new file mode 100644 index 00000000000..57e731ed129 --- /dev/null +++ b/etc/nxml/0A490-0A4CF.el @@ -0,0 +1,59 @@ +(nxml-define-char-name-set 'yi-radicals + '(("YI RADICAL QOT" #xA490) + ("YI RADICAL LI" #xA491) + ("YI RADICAL KIT" #xA492) + ("YI RADICAL NYIP" #xA493) + ("YI RADICAL CYP" #xA494) + ("YI RADICAL SSI" #xA495) + ("YI RADICAL GGOP" #xA496) + ("YI RADICAL GEP" #xA497) + ("YI RADICAL MI" #xA498) + ("YI RADICAL HXIT" #xA499) + ("YI RADICAL LYR" #xA49A) + ("YI RADICAL BBUT" #xA49B) + ("YI RADICAL MOP" #xA49C) + ("YI RADICAL YO" #xA49D) + ("YI RADICAL PUT" #xA49E) + ("YI RADICAL HXUO" #xA49F) + ("YI RADICAL TAT" #xA4A0) + ("YI RADICAL GA" #xA4A1) + ("YI RADICAL ZUP" #xA4A2) + ("YI RADICAL CYT" #xA4A3) + ("YI RADICAL DDUR" #xA4A4) + ("YI RADICAL BUR" #xA4A5) + ("YI RADICAL GGUO" #xA4A6) + ("YI RADICAL NYOP" #xA4A7) + ("YI RADICAL TU" #xA4A8) + ("YI RADICAL OP" #xA4A9) + ("YI RADICAL JJUT" #xA4AA) + ("YI RADICAL ZOT" #xA4AB) + ("YI RADICAL PYT" #xA4AC) + ("YI RADICAL HMO" #xA4AD) + ("YI RADICAL YIT" #xA4AE) + ("YI RADICAL VUR" #xA4AF) + ("YI RADICAL SHY" #xA4B0) + ("YI RADICAL VEP" #xA4B1) + ("YI RADICAL ZA" #xA4B2) + ("YI RADICAL JO" #xA4B3) + ("YI RADICAL NZUP" #xA4B4) + ("YI RADICAL JJY" #xA4B5) + ("YI RADICAL GOT" #xA4B6) + ("YI RADICAL JJIE" #xA4B7) + ("YI RADICAL WO" #xA4B8) + ("YI RADICAL DU" #xA4B9) + ("YI RADICAL SHUR" #xA4BA) + ("YI RADICAL LIE" #xA4BB) + ("YI RADICAL CY" #xA4BC) + ("YI RADICAL CUOP" #xA4BD) + ("YI RADICAL CIP" #xA4BE) + ("YI RADICAL HXOP" #xA4BF) + ("YI RADICAL SHAT" #xA4C0) + ("YI RADICAL ZUR" #xA4C1) + ("YI RADICAL SHOP" #xA4C2) + ("YI RADICAL CHE" #xA4C3) + ("YI RADICAL ZZIET" #xA4C4) + ("YI RADICAL NBIE" #xA4C5) + ("YI RADICAL KE" #xA4C6) + )) + +;; arch-tag: 2c93cdf1-e6f2-4a91-a798-3e1d7c094cf4 diff --git a/etc/nxml/0FB00-0FB4F.el b/etc/nxml/0FB00-0FB4F.el new file mode 100644 index 00000000000..52d47dd746a --- /dev/null +++ b/etc/nxml/0FB00-0FB4F.el @@ -0,0 +1,62 @@ +(nxml-define-char-name-set 'alphabetic-presentation-forms + '(("LATIN SMALL LIGATURE FF" #xFB00) + ("LATIN SMALL LIGATURE FI" #xFB01) + ("LATIN SMALL LIGATURE FL" #xFB02) + ("LATIN SMALL LIGATURE FFI" #xFB03) + ("LATIN SMALL LIGATURE FFL" #xFB04) + ("LATIN SMALL LIGATURE LONG S T" #xFB05) + ("LATIN SMALL LIGATURE ST" #xFB06) + ("ARMENIAN SMALL LIGATURE MEN NOW" #xFB13) + ("ARMENIAN SMALL LIGATURE MEN ECH" #xFB14) + ("ARMENIAN SMALL LIGATURE MEN INI" #xFB15) + ("ARMENIAN SMALL LIGATURE VEW NOW" #xFB16) + ("ARMENIAN SMALL LIGATURE MEN XEH" #xFB17) + ("HEBREW LETTER YOD WITH HIRIQ" #xFB1D) + ("HEBREW POINT JUDEO-SPANISH VARIKA" #xFB1E) + ("HEBREW LIGATURE YIDDISH YOD YOD PATAH" #xFB1F) + ("HEBREW LETTER ALTERNATIVE AYIN" #xFB20) + ("HEBREW LETTER WIDE ALEF" #xFB21) + ("HEBREW LETTER WIDE DALET" #xFB22) + ("HEBREW LETTER WIDE HE" #xFB23) + ("HEBREW LETTER WIDE KAF" #xFB24) + ("HEBREW LETTER WIDE LAMED" #xFB25) + ("HEBREW LETTER WIDE FINAL MEM" #xFB26) + ("HEBREW LETTER WIDE RESH" #xFB27) + ("HEBREW LETTER WIDE TAV" #xFB28) + ("HEBREW LETTER ALTERNATIVE PLUS SIGN" #xFB29) + ("HEBREW LETTER SHIN WITH SHIN DOT" #xFB2A) + ("HEBREW LETTER SHIN WITH SIN DOT" #xFB2B) + ("HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT" #xFB2C) + ("HEBREW LETTER SHIN WITH DAGESH AND SIN DOT" #xFB2D) + ("HEBREW LETTER ALEF WITH PATAH" #xFB2E) + ("HEBREW LETTER ALEF WITH QAMATS" #xFB2F) + ("HEBREW LETTER ALEF WITH MAPIQ" #xFB30) + ("HEBREW LETTER BET WITH DAGESH" #xFB31) + ("HEBREW LETTER GIMEL WITH DAGESH" #xFB32) + ("HEBREW LETTER DALET WITH DAGESH" #xFB33) + ("HEBREW LETTER HE WITH MAPIQ" #xFB34) + ("HEBREW LETTER VAV WITH DAGESH" #xFB35) + ("HEBREW LETTER ZAYIN WITH DAGESH" #xFB36) + ("HEBREW LETTER TET WITH DAGESH" #xFB38) + ("HEBREW LETTER YOD WITH DAGESH" #xFB39) + ("HEBREW LETTER FINAL KAF WITH DAGESH" #xFB3A) + ("HEBREW LETTER KAF WITH DAGESH" #xFB3B) + ("HEBREW LETTER LAMED WITH DAGESH" #xFB3C) + ("HEBREW LETTER MEM WITH DAGESH" #xFB3E) + ("HEBREW LETTER NUN WITH DAGESH" #xFB40) + ("HEBREW LETTER SAMEKH WITH DAGESH" #xFB41) + ("HEBREW LETTER FINAL PE WITH DAGESH" #xFB43) + ("HEBREW LETTER PE WITH DAGESH" #xFB44) + ("HEBREW LETTER TSADI WITH DAGESH" #xFB46) + ("HEBREW LETTER QOF WITH DAGESH" #xFB47) + ("HEBREW LETTER RESH WITH DAGESH" #xFB48) + ("HEBREW LETTER SHIN WITH DAGESH" #xFB49) + ("HEBREW LETTER TAV WITH DAGESH" #xFB4A) + ("HEBREW LETTER VAV WITH HOLAM" #xFB4B) + ("HEBREW LETTER BET WITH RAFE" #xFB4C) + ("HEBREW LETTER KAF WITH RAFE" #xFB4D) + ("HEBREW LETTER PE WITH RAFE" #xFB4E) + ("HEBREW LIGATURE ALEF LAMED" #xFB4F) + )) + +;; arch-tag: 06519b44-408f-43f4-89e6-3e5c1d2afe4d diff --git a/etc/nxml/0FB50-0FDFF.el b/etc/nxml/0FB50-0FDFF.el new file mode 100644 index 00000000000..87b83cfff06 --- /dev/null +++ b/etc/nxml/0FB50-0FDFF.el @@ -0,0 +1,598 @@ +(nxml-define-char-name-set 'arabic-presentation-forms-a + '(("ARABIC LETTER ALEF WASLA ISOLATED FORM" #xFB50) + ("ARABIC LETTER ALEF WASLA FINAL FORM" #xFB51) + ("ARABIC LETTER BEEH ISOLATED FORM" #xFB52) + ("ARABIC LETTER BEEH FINAL FORM" #xFB53) + ("ARABIC LETTER BEEH INITIAL FORM" #xFB54) + ("ARABIC LETTER BEEH MEDIAL FORM" #xFB55) + ("ARABIC LETTER PEH ISOLATED FORM" #xFB56) + ("ARABIC LETTER PEH FINAL FORM" #xFB57) + ("ARABIC LETTER PEH INITIAL FORM" #xFB58) + ("ARABIC LETTER PEH MEDIAL FORM" #xFB59) + ("ARABIC LETTER BEHEH ISOLATED FORM" #xFB5A) + ("ARABIC LETTER BEHEH FINAL FORM" #xFB5B) + ("ARABIC LETTER BEHEH INITIAL FORM" #xFB5C) + ("ARABIC LETTER BEHEH MEDIAL FORM" #xFB5D) + ("ARABIC LETTER TTEHEH ISOLATED FORM" #xFB5E) + ("ARABIC LETTER TTEHEH FINAL FORM" #xFB5F) + ("ARABIC LETTER TTEHEH INITIAL FORM" #xFB60) + ("ARABIC LETTER TTEHEH MEDIAL FORM" #xFB61) + ("ARABIC LETTER TEHEH ISOLATED FORM" #xFB62) + ("ARABIC LETTER TEHEH FINAL FORM" #xFB63) + ("ARABIC LETTER TEHEH INITIAL FORM" #xFB64) + ("ARABIC LETTER TEHEH MEDIAL FORM" #xFB65) + ("ARABIC LETTER TTEH ISOLATED FORM" #xFB66) + ("ARABIC LETTER TTEH FINAL FORM" #xFB67) + ("ARABIC LETTER TTEH INITIAL FORM" #xFB68) + ("ARABIC LETTER TTEH MEDIAL FORM" #xFB69) + ("ARABIC LETTER VEH ISOLATED FORM" #xFB6A) + ("ARABIC LETTER VEH FINAL FORM" #xFB6B) + ("ARABIC LETTER VEH INITIAL FORM" #xFB6C) + ("ARABIC LETTER VEH MEDIAL FORM" #xFB6D) + ("ARABIC LETTER PEHEH ISOLATED FORM" #xFB6E) + ("ARABIC LETTER PEHEH FINAL FORM" #xFB6F) + ("ARABIC LETTER PEHEH INITIAL FORM" #xFB70) + ("ARABIC LETTER PEHEH MEDIAL FORM" #xFB71) + ("ARABIC LETTER DYEH ISOLATED FORM" #xFB72) + ("ARABIC LETTER DYEH FINAL FORM" #xFB73) + ("ARABIC LETTER DYEH INITIAL FORM" #xFB74) + ("ARABIC LETTER DYEH MEDIAL FORM" #xFB75) + ("ARABIC LETTER NYEH ISOLATED FORM" #xFB76) + ("ARABIC LETTER NYEH FINAL FORM" #xFB77) + ("ARABIC LETTER NYEH INITIAL FORM" #xFB78) + ("ARABIC LETTER NYEH MEDIAL FORM" #xFB79) + ("ARABIC LETTER TCHEH ISOLATED FORM" #xFB7A) + ("ARABIC LETTER TCHEH FINAL FORM" #xFB7B) + ("ARABIC LETTER TCHEH INITIAL FORM" #xFB7C) + ("ARABIC LETTER TCHEH MEDIAL FORM" #xFB7D) + ("ARABIC LETTER TCHEHEH ISOLATED FORM" #xFB7E) + ("ARABIC LETTER TCHEHEH FINAL FORM" #xFB7F) + ("ARABIC LETTER TCHEHEH INITIAL FORM" #xFB80) + ("ARABIC LETTER TCHEHEH MEDIAL FORM" #xFB81) + ("ARABIC LETTER DDAHAL ISOLATED FORM" #xFB82) + ("ARABIC LETTER DDAHAL FINAL FORM" #xFB83) + ("ARABIC LETTER DAHAL ISOLATED FORM" #xFB84) + ("ARABIC LETTER DAHAL FINAL FORM" #xFB85) + ("ARABIC LETTER DUL ISOLATED FORM" #xFB86) + ("ARABIC LETTER DUL FINAL FORM" #xFB87) + ("ARABIC LETTER DDAL ISOLATED FORM" #xFB88) + ("ARABIC LETTER DDAL FINAL FORM" #xFB89) + ("ARABIC LETTER JEH ISOLATED FORM" #xFB8A) + ("ARABIC LETTER JEH FINAL FORM" #xFB8B) + ("ARABIC LETTER RREH ISOLATED FORM" #xFB8C) + ("ARABIC LETTER RREH FINAL FORM" #xFB8D) + ("ARABIC LETTER KEHEH ISOLATED FORM" #xFB8E) + ("ARABIC LETTER KEHEH FINAL FORM" #xFB8F) + ("ARABIC LETTER KEHEH INITIAL FORM" #xFB90) + ("ARABIC LETTER KEHEH MEDIAL FORM" #xFB91) + ("ARABIC LETTER GAF ISOLATED FORM" #xFB92) + ("ARABIC LETTER GAF FINAL FORM" #xFB93) + ("ARABIC LETTER GAF INITIAL FORM" #xFB94) + ("ARABIC LETTER GAF MEDIAL FORM" #xFB95) + ("ARABIC LETTER GUEH ISOLATED FORM" #xFB96) + ("ARABIC LETTER GUEH FINAL FORM" #xFB97) + ("ARABIC LETTER GUEH INITIAL FORM" #xFB98) + ("ARABIC LETTER GUEH MEDIAL FORM" #xFB99) + ("ARABIC LETTER NGOEH ISOLATED FORM" #xFB9A) + ("ARABIC LETTER NGOEH FINAL FORM" #xFB9B) + ("ARABIC LETTER NGOEH INITIAL FORM" #xFB9C) + ("ARABIC LETTER NGOEH MEDIAL FORM" #xFB9D) + ("ARABIC LETTER NOON GHUNNA ISOLATED FORM" #xFB9E) + ("ARABIC LETTER NOON GHUNNA FINAL FORM" #xFB9F) + ("ARABIC LETTER RNOON ISOLATED FORM" #xFBA0) + ("ARABIC LETTER RNOON FINAL FORM" #xFBA1) + ("ARABIC LETTER RNOON INITIAL FORM" #xFBA2) + ("ARABIC LETTER RNOON MEDIAL FORM" #xFBA3) + ("ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM" #xFBA4) + ("ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM" #xFBA5) + ("ARABIC LETTER HEH GOAL ISOLATED FORM" #xFBA6) + ("ARABIC LETTER HEH GOAL FINAL FORM" #xFBA7) + ("ARABIC LETTER HEH GOAL INITIAL FORM" #xFBA8) + ("ARABIC LETTER HEH GOAL MEDIAL FORM" #xFBA9) + ("ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM" #xFBAA) + ("ARABIC LETTER HEH DOACHASHMEE FINAL FORM" #xFBAB) + ("ARABIC LETTER HEH DOACHASHMEE INITIAL FORM" #xFBAC) + ("ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM" #xFBAD) + ("ARABIC LETTER YEH BARREE ISOLATED FORM" #xFBAE) + ("ARABIC LETTER YEH BARREE FINAL FORM" #xFBAF) + ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM" #xFBB0) + ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM" #xFBB1) + ("ARABIC LETTER NG ISOLATED FORM" #xFBD3) + ("ARABIC LETTER NG FINAL FORM" #xFBD4) + ("ARABIC LETTER NG INITIAL FORM" #xFBD5) + ("ARABIC LETTER NG MEDIAL FORM" #xFBD6) + ("ARABIC LETTER U ISOLATED FORM" #xFBD7) + ("ARABIC LETTER U FINAL FORM" #xFBD8) + ("ARABIC LETTER OE ISOLATED FORM" #xFBD9) + ("ARABIC LETTER OE FINAL FORM" #xFBDA) + ("ARABIC LETTER YU ISOLATED FORM" #xFBDB) + ("ARABIC LETTER YU FINAL FORM" #xFBDC) + ("ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" #xFBDD) + ("ARABIC LETTER VE ISOLATED FORM" #xFBDE) + ("ARABIC LETTER VE FINAL FORM" #xFBDF) + ("ARABIC LETTER KIRGHIZ OE ISOLATED FORM" #xFBE0) + ("ARABIC LETTER KIRGHIZ OE FINAL FORM" #xFBE1) + ("ARABIC LETTER KIRGHIZ YU ISOLATED FORM" #xFBE2) + ("ARABIC LETTER KIRGHIZ YU FINAL FORM" #xFBE3) + ("ARABIC LETTER E ISOLATED FORM" #xFBE4) + ("ARABIC LETTER E FINAL FORM" #xFBE5) + ("ARABIC LETTER E INITIAL FORM" #xFBE6) + ("ARABIC LETTER E MEDIAL FORM" #xFBE7) + ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM" #xFBE8) + ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM" #xFBE9) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM" #xFBEA) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM" #xFBEB) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM" #xFBEC) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM" #xFBED) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM" #xFBEE) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM" #xFBEF) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM" #xFBF0) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM" #xFBF1) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM" #xFBF2) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM" #xFBF3) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM" #xFBF4) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM" #xFBF5) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM" #xFBF6) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM" #xFBF7) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM" #xFBF8) + ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFBF9) + ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFBFA) + ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM" #xFBFB) + ("ARABIC LETTER FARSI YEH ISOLATED FORM" #xFBFC) + ("ARABIC LETTER FARSI YEH FINAL FORM" #xFBFD) + ("ARABIC LETTER FARSI YEH INITIAL FORM" #xFBFE) + ("ARABIC LETTER FARSI YEH MEDIAL FORM" #xFBFF) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM" #xFC00) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM" #xFC01) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM" #xFC02) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFC03) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM" #xFC04) + ("ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM" #xFC05) + ("ARABIC LIGATURE BEH WITH HAH ISOLATED FORM" #xFC06) + ("ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM" #xFC07) + ("ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM" #xFC08) + ("ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM" #xFC09) + ("ARABIC LIGATURE BEH WITH YEH ISOLATED FORM" #xFC0A) + ("ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM" #xFC0B) + ("ARABIC LIGATURE TEH WITH HAH ISOLATED FORM" #xFC0C) + ("ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM" #xFC0D) + ("ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM" #xFC0E) + ("ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM" #xFC0F) + ("ARABIC LIGATURE TEH WITH YEH ISOLATED FORM" #xFC10) + ("ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM" #xFC11) + ("ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" #xFC12) + ("ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM" #xFC13) + ("ARABIC LIGATURE THEH WITH YEH ISOLATED FORM" #xFC14) + ("ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM" #xFC15) + ("ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM" #xFC16) + ("ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM" #xFC17) + ("ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM" #xFC18) + ("ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM" #xFC19) + ("ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM" #xFC1A) + ("ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM" #xFC1B) + ("ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM" #xFC1C) + ("ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM" #xFC1D) + ("ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM" #xFC1E) + ("ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM" #xFC1F) + ("ARABIC LIGATURE SAD WITH HAH ISOLATED FORM" #xFC20) + ("ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM" #xFC21) + ("ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM" #xFC22) + ("ARABIC LIGATURE DAD WITH HAH ISOLATED FORM" #xFC23) + ("ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM" #xFC24) + ("ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM" #xFC25) + ("ARABIC LIGATURE TAH WITH HAH ISOLATED FORM" #xFC26) + ("ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM" #xFC27) + ("ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM" #xFC28) + ("ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM" #xFC29) + ("ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM" #xFC2A) + ("ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM" #xFC2B) + ("ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM" #xFC2C) + ("ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM" #xFC2D) + ("ARABIC LIGATURE FEH WITH HAH ISOLATED FORM" #xFC2E) + ("ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM" #xFC2F) + ("ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM" #xFC30) + ("ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM" #xFC31) + ("ARABIC LIGATURE FEH WITH YEH ISOLATED FORM" #xFC32) + ("ARABIC LIGATURE QAF WITH HAH ISOLATED FORM" #xFC33) + ("ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM" #xFC34) + ("ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM" #xFC35) + ("ARABIC LIGATURE QAF WITH YEH ISOLATED FORM" #xFC36) + ("ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM" #xFC37) + ("ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM" #xFC38) + ("ARABIC LIGATURE KAF WITH HAH ISOLATED FORM" #xFC39) + ("ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM" #xFC3A) + ("ARABIC LIGATURE KAF WITH LAM ISOLATED FORM" #xFC3B) + ("ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM" #xFC3C) + ("ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM" #xFC3D) + ("ARABIC LIGATURE KAF WITH YEH ISOLATED FORM" #xFC3E) + ("ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM" #xFC3F) + ("ARABIC LIGATURE LAM WITH HAH ISOLATED FORM" #xFC40) + ("ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM" #xFC41) + ("ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM" #xFC42) + ("ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM" #xFC43) + ("ARABIC LIGATURE LAM WITH YEH ISOLATED FORM" #xFC44) + ("ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM" #xFC45) + ("ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM" #xFC46) + ("ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM" #xFC47) + ("ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM" #xFC48) + ("ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM" #xFC49) + ("ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM" #xFC4A) + ("ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM" #xFC4B) + ("ARABIC LIGATURE NOON WITH HAH ISOLATED FORM" #xFC4C) + ("ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM" #xFC4D) + ("ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM" #xFC4E) + ("ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM" #xFC4F) + ("ARABIC LIGATURE NOON WITH YEH ISOLATED FORM" #xFC50) + ("ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM" #xFC51) + ("ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM" #xFC52) + ("ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM" #xFC53) + ("ARABIC LIGATURE HEH WITH YEH ISOLATED FORM" #xFC54) + ("ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM" #xFC55) + ("ARABIC LIGATURE YEH WITH HAH ISOLATED FORM" #xFC56) + ("ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM" #xFC57) + ("ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM" #xFC58) + ("ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM" #xFC59) + ("ARABIC LIGATURE YEH WITH YEH ISOLATED FORM" #xFC5A) + ("ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5B) + ("ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5C) + ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5D) + ("ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM" #xFC5E) + ("ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM" #xFC5F) + ("ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM" #xFC60) + ("ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM" #xFC61) + ("ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM" #xFC62) + ("ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC63) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM" #xFC64) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM" #xFC65) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" #xFC66) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM" #xFC67) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFC68) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM" #xFC69) + ("ARABIC LIGATURE BEH WITH REH FINAL FORM" #xFC6A) + ("ARABIC LIGATURE BEH WITH ZAIN FINAL FORM" #xFC6B) + ("ARABIC LIGATURE BEH WITH MEEM FINAL FORM" #xFC6C) + ("ARABIC LIGATURE BEH WITH NOON FINAL FORM" #xFC6D) + ("ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM" #xFC6E) + ("ARABIC LIGATURE BEH WITH YEH FINAL FORM" #xFC6F) + ("ARABIC LIGATURE TEH WITH REH FINAL FORM" #xFC70) + ("ARABIC LIGATURE TEH WITH ZAIN FINAL FORM" #xFC71) + ("ARABIC LIGATURE TEH WITH MEEM FINAL FORM" #xFC72) + ("ARABIC LIGATURE TEH WITH NOON FINAL FORM" #xFC73) + ("ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM" #xFC74) + ("ARABIC LIGATURE TEH WITH YEH FINAL FORM" #xFC75) + ("ARABIC LIGATURE THEH WITH REH FINAL FORM" #xFC76) + ("ARABIC LIGATURE THEH WITH ZAIN FINAL FORM" #xFC77) + ("ARABIC LIGATURE THEH WITH MEEM FINAL FORM" #xFC78) + ("ARABIC LIGATURE THEH WITH NOON FINAL FORM" #xFC79) + ("ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM" #xFC7A) + ("ARABIC LIGATURE THEH WITH YEH FINAL FORM" #xFC7B) + ("ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM" #xFC7C) + ("ARABIC LIGATURE FEH WITH YEH FINAL FORM" #xFC7D) + ("ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM" #xFC7E) + ("ARABIC LIGATURE QAF WITH YEH FINAL FORM" #xFC7F) + ("ARABIC LIGATURE KAF WITH ALEF FINAL FORM" #xFC80) + ("ARABIC LIGATURE KAF WITH LAM FINAL FORM" #xFC81) + ("ARABIC LIGATURE KAF WITH MEEM FINAL FORM" #xFC82) + ("ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM" #xFC83) + ("ARABIC LIGATURE KAF WITH YEH FINAL FORM" #xFC84) + ("ARABIC LIGATURE LAM WITH MEEM FINAL FORM" #xFC85) + ("ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM" #xFC86) + ("ARABIC LIGATURE LAM WITH YEH FINAL FORM" #xFC87) + ("ARABIC LIGATURE MEEM WITH ALEF FINAL FORM" #xFC88) + ("ARABIC LIGATURE MEEM WITH MEEM FINAL FORM" #xFC89) + ("ARABIC LIGATURE NOON WITH REH FINAL FORM" #xFC8A) + ("ARABIC LIGATURE NOON WITH ZAIN FINAL FORM" #xFC8B) + ("ARABIC LIGATURE NOON WITH MEEM FINAL FORM" #xFC8C) + ("ARABIC LIGATURE NOON WITH NOON FINAL FORM" #xFC8D) + ("ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM" #xFC8E) + ("ARABIC LIGATURE NOON WITH YEH FINAL FORM" #xFC8F) + ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM" #xFC90) + ("ARABIC LIGATURE YEH WITH REH FINAL FORM" #xFC91) + ("ARABIC LIGATURE YEH WITH ZAIN FINAL FORM" #xFC92) + ("ARABIC LIGATURE YEH WITH MEEM FINAL FORM" #xFC93) + ("ARABIC LIGATURE YEH WITH NOON FINAL FORM" #xFC94) + ("ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM" #xFC95) + ("ARABIC LIGATURE YEH WITH YEH FINAL FORM" #xFC96) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM" #xFC97) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM" #xFC98) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM" #xFC99) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM" #xFC9A) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM" #xFC9B) + ("ARABIC LIGATURE BEH WITH JEEM INITIAL FORM" #xFC9C) + ("ARABIC LIGATURE BEH WITH HAH INITIAL FORM" #xFC9D) + ("ARABIC LIGATURE BEH WITH KHAH INITIAL FORM" #xFC9E) + ("ARABIC LIGATURE BEH WITH MEEM INITIAL FORM" #xFC9F) + ("ARABIC LIGATURE BEH WITH HEH INITIAL FORM" #xFCA0) + ("ARABIC LIGATURE TEH WITH JEEM INITIAL FORM" #xFCA1) + ("ARABIC LIGATURE TEH WITH HAH INITIAL FORM" #xFCA2) + ("ARABIC LIGATURE TEH WITH KHAH INITIAL FORM" #xFCA3) + ("ARABIC LIGATURE TEH WITH MEEM INITIAL FORM" #xFCA4) + ("ARABIC LIGATURE TEH WITH HEH INITIAL FORM" #xFCA5) + ("ARABIC LIGATURE THEH WITH MEEM INITIAL FORM" #xFCA6) + ("ARABIC LIGATURE JEEM WITH HAH INITIAL FORM" #xFCA7) + ("ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM" #xFCA8) + ("ARABIC LIGATURE HAH WITH JEEM INITIAL FORM" #xFCA9) + ("ARABIC LIGATURE HAH WITH MEEM INITIAL FORM" #xFCAA) + ("ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM" #xFCAB) + ("ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM" #xFCAC) + ("ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM" #xFCAD) + ("ARABIC LIGATURE SEEN WITH HAH INITIAL FORM" #xFCAE) + ("ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM" #xFCAF) + ("ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM" #xFCB0) + ("ARABIC LIGATURE SAD WITH HAH INITIAL FORM" #xFCB1) + ("ARABIC LIGATURE SAD WITH KHAH INITIAL FORM" #xFCB2) + ("ARABIC LIGATURE SAD WITH MEEM INITIAL FORM" #xFCB3) + ("ARABIC LIGATURE DAD WITH JEEM INITIAL FORM" #xFCB4) + ("ARABIC LIGATURE DAD WITH HAH INITIAL FORM" #xFCB5) + ("ARABIC LIGATURE DAD WITH KHAH INITIAL FORM" #xFCB6) + ("ARABIC LIGATURE DAD WITH MEEM INITIAL FORM" #xFCB7) + ("ARABIC LIGATURE TAH WITH HAH INITIAL FORM" #xFCB8) + ("ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM" #xFCB9) + ("ARABIC LIGATURE AIN WITH JEEM INITIAL FORM" #xFCBA) + ("ARABIC LIGATURE AIN WITH MEEM INITIAL FORM" #xFCBB) + ("ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM" #xFCBC) + ("ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM" #xFCBD) + ("ARABIC LIGATURE FEH WITH JEEM INITIAL FORM" #xFCBE) + ("ARABIC LIGATURE FEH WITH HAH INITIAL FORM" #xFCBF) + ("ARABIC LIGATURE FEH WITH KHAH INITIAL FORM" #xFCC0) + ("ARABIC LIGATURE FEH WITH MEEM INITIAL FORM" #xFCC1) + ("ARABIC LIGATURE QAF WITH HAH INITIAL FORM" #xFCC2) + ("ARABIC LIGATURE QAF WITH MEEM INITIAL FORM" #xFCC3) + ("ARABIC LIGATURE KAF WITH JEEM INITIAL FORM" #xFCC4) + ("ARABIC LIGATURE KAF WITH HAH INITIAL FORM" #xFCC5) + ("ARABIC LIGATURE KAF WITH KHAH INITIAL FORM" #xFCC6) + ("ARABIC LIGATURE KAF WITH LAM INITIAL FORM" #xFCC7) + ("ARABIC LIGATURE KAF WITH MEEM INITIAL FORM" #xFCC8) + ("ARABIC LIGATURE LAM WITH JEEM INITIAL FORM" #xFCC9) + ("ARABIC LIGATURE LAM WITH HAH INITIAL FORM" #xFCCA) + ("ARABIC LIGATURE LAM WITH KHAH INITIAL FORM" #xFCCB) + ("ARABIC LIGATURE LAM WITH MEEM INITIAL FORM" #xFCCC) + ("ARABIC LIGATURE LAM WITH HEH INITIAL FORM" #xFCCD) + ("ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM" #xFCCE) + ("ARABIC LIGATURE MEEM WITH HAH INITIAL FORM" #xFCCF) + ("ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM" #xFCD0) + ("ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM" #xFCD1) + ("ARABIC LIGATURE NOON WITH JEEM INITIAL FORM" #xFCD2) + ("ARABIC LIGATURE NOON WITH HAH INITIAL FORM" #xFCD3) + ("ARABIC LIGATURE NOON WITH KHAH INITIAL FORM" #xFCD4) + ("ARABIC LIGATURE NOON WITH MEEM INITIAL FORM" #xFCD5) + ("ARABIC LIGATURE NOON WITH HEH INITIAL FORM" #xFCD6) + ("ARABIC LIGATURE HEH WITH JEEM INITIAL FORM" #xFCD7) + ("ARABIC LIGATURE HEH WITH MEEM INITIAL FORM" #xFCD8) + ("ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM" #xFCD9) + ("ARABIC LIGATURE YEH WITH JEEM INITIAL FORM" #xFCDA) + ("ARABIC LIGATURE YEH WITH HAH INITIAL FORM" #xFCDB) + ("ARABIC LIGATURE YEH WITH KHAH INITIAL FORM" #xFCDC) + ("ARABIC LIGATURE YEH WITH MEEM INITIAL FORM" #xFCDD) + ("ARABIC LIGATURE YEH WITH HEH INITIAL FORM" #xFCDE) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM" #xFCDF) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM" #xFCE0) + ("ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM" #xFCE1) + ("ARABIC LIGATURE BEH WITH HEH MEDIAL FORM" #xFCE2) + ("ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM" #xFCE3) + ("ARABIC LIGATURE TEH WITH HEH MEDIAL FORM" #xFCE4) + ("ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM" #xFCE5) + ("ARABIC LIGATURE THEH WITH HEH MEDIAL FORM" #xFCE6) + ("ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM" #xFCE7) + ("ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM" #xFCE8) + ("ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM" #xFCE9) + ("ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM" #xFCEA) + ("ARABIC LIGATURE KAF WITH LAM MEDIAL FORM" #xFCEB) + ("ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM" #xFCEC) + ("ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM" #xFCED) + ("ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM" #xFCEE) + ("ARABIC LIGATURE NOON WITH HEH MEDIAL FORM" #xFCEF) + ("ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM" #xFCF0) + ("ARABIC LIGATURE YEH WITH HEH MEDIAL FORM" #xFCF1) + ("ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM" #xFCF2) + ("ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM" #xFCF3) + ("ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM" #xFCF4) + ("ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM" #xFCF5) + ("ARABIC LIGATURE TAH WITH YEH ISOLATED FORM" #xFCF6) + ("ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF7) + ("ARABIC LIGATURE AIN WITH YEH ISOLATED FORM" #xFCF8) + ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF9) + ("ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM" #xFCFA) + ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFB) + ("ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM" #xFCFC) + ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFD) + ("ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM" #xFCFE) + ("ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM" #xFCFF) + ("ARABIC LIGATURE HAH WITH YEH ISOLATED FORM" #xFD00) + ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM" #xFD01) + ("ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM" #xFD02) + ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM" #xFD03) + ("ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM" #xFD04) + ("ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM" #xFD05) + ("ARABIC LIGATURE SAD WITH YEH ISOLATED FORM" #xFD06) + ("ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM" #xFD07) + ("ARABIC LIGATURE DAD WITH YEH ISOLATED FORM" #xFD08) + ("ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM" #xFD09) + ("ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM" #xFD0A) + ("ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM" #xFD0B) + ("ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM" #xFD0C) + ("ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM" #xFD0D) + ("ARABIC LIGATURE SEEN WITH REH ISOLATED FORM" #xFD0E) + ("ARABIC LIGATURE SAD WITH REH ISOLATED FORM" #xFD0F) + ("ARABIC LIGATURE DAD WITH REH ISOLATED FORM" #xFD10) + ("ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM" #xFD11) + ("ARABIC LIGATURE TAH WITH YEH FINAL FORM" #xFD12) + ("ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM" #xFD13) + ("ARABIC LIGATURE AIN WITH YEH FINAL FORM" #xFD14) + ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM" #xFD15) + ("ARABIC LIGATURE GHAIN WITH YEH FINAL FORM" #xFD16) + ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM" #xFD17) + ("ARABIC LIGATURE SEEN WITH YEH FINAL FORM" #xFD18) + ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM" #xFD19) + ("ARABIC LIGATURE SHEEN WITH YEH FINAL FORM" #xFD1A) + ("ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM" #xFD1B) + ("ARABIC LIGATURE HAH WITH YEH FINAL FORM" #xFD1C) + ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM" #xFD1D) + ("ARABIC LIGATURE JEEM WITH YEH FINAL FORM" #xFD1E) + ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM" #xFD1F) + ("ARABIC LIGATURE KHAH WITH YEH FINAL FORM" #xFD20) + ("ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM" #xFD21) + ("ARABIC LIGATURE SAD WITH YEH FINAL FORM" #xFD22) + ("ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM" #xFD23) + ("ARABIC LIGATURE DAD WITH YEH FINAL FORM" #xFD24) + ("ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM" #xFD25) + ("ARABIC LIGATURE SHEEN WITH HAH FINAL FORM" #xFD26) + ("ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM" #xFD27) + ("ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM" #xFD28) + ("ARABIC LIGATURE SHEEN WITH REH FINAL FORM" #xFD29) + ("ARABIC LIGATURE SEEN WITH REH FINAL FORM" #xFD2A) + ("ARABIC LIGATURE SAD WITH REH FINAL FORM" #xFD2B) + ("ARABIC LIGATURE DAD WITH REH FINAL FORM" #xFD2C) + ("ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM" #xFD2D) + ("ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM" #xFD2E) + ("ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM" #xFD2F) + ("ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM" #xFD30) + ("ARABIC LIGATURE SEEN WITH HEH INITIAL FORM" #xFD31) + ("ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM" #xFD32) + ("ARABIC LIGATURE TAH WITH MEEM INITIAL FORM" #xFD33) + ("ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM" #xFD34) + ("ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM" #xFD35) + ("ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM" #xFD36) + ("ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM" #xFD37) + ("ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM" #xFD38) + ("ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM" #xFD39) + ("ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM" #xFD3A) + ("ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM" #xFD3B) + ("ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM" #xFD3C) + ("ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM" #xFD3D) + ("ORNATE LEFT PARENTHESIS" #xFD3E) + ("ORNATE RIGHT PARENTHESIS" #xFD3F) + ("ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM" #xFD50) + ("ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM" #xFD51) + ("ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM" #xFD52) + ("ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM" #xFD53) + ("ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM" #xFD54) + ("ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM" #xFD55) + ("ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM" #xFD56) + ("ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM" #xFD57) + ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM" #xFD58) + ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM" #xFD59) + ("ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM" #xFD5A) + ("ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD5B) + ("ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM" #xFD5C) + ("ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM" #xFD5D) + ("ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD5E) + ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM" #xFD5F) + ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM" #xFD60) + ("ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM" #xFD61) + ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM" #xFD62) + ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD63) + ("ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM" #xFD64) + ("ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM" #xFD65) + ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM" #xFD66) + ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM" #xFD67) + ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM" #xFD68) + ("ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM" #xFD69) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM" #xFD6A) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM" #xFD6B) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM" #xFD6C) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD6D) + ("ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD6E) + ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM" #xFD6F) + ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM" #xFD70) + ("ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM" #xFD71) + ("ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM" #xFD72) + ("ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM" #xFD73) + ("ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM" #xFD74) + ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM" #xFD75) + ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM" #xFD76) + ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM" #xFD77) + ("ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD78) + ("ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM" #xFD79) + ("ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM" #xFD7A) + ("ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD7B) + ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM" #xFD7C) + ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM" #xFD7D) + ("ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM" #xFD7E) + ("ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM" #xFD7F) + ("ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM" #xFD80) + ("ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM" #xFD81) + ("ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD82) + ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM" #xFD83) + ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM" #xFD84) + ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM" #xFD85) + ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM" #xFD86) + ("ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM" #xFD87) + ("ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM" #xFD88) + ("ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM" #xFD89) + ("ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM" #xFD8A) + ("ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM" #xFD8B) + ("ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM" #xFD8C) + ("ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM" #xFD8D) + ("ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM" #xFD8E) + ("ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM" #xFD8F) + ("ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM" #xFD92) + ("ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM" #xFD93) + ("ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM" #xFD94) + ("ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM" #xFD95) + ("ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD96) + ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM" #xFD97) + ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" #xFD98) + ("ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD99) + ("ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM" #xFD9A) + ("ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD9B) + ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM" #xFD9C) + ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM" #xFD9D) + ("ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM" #xFD9E) + ("ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM" #xFD9F) + ("ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFDA0) + ("ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM" #xFDA1) + ("ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA2) + ("ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM" #xFDA3) + ("ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA4) + ("ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM" #xFDA5) + ("ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFDA6) + ("ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA7) + ("ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA8) + ("ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM" #xFDA9) + ("ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM" #xFDAA) + ("ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM" #xFDAB) + ("ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM" #xFDAC) + ("ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM" #xFDAD) + ("ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM" #xFDAE) + ("ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM" #xFDAF) + ("ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM" #xFDB0) + ("ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM" #xFDB1) + ("ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM" #xFDB2) + ("ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM" #xFDB3) + ("ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM" #xFDB4) + ("ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM" #xFDB5) + ("ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM" #xFDB6) + ("ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM" #xFDB7) + ("ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" #xFDB8) + ("ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM" #xFDB9) + ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM" #xFDBA) + ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM" #xFDBB) + ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM" #xFDBC) + ("ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM" #xFDBD) + ("ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM" #xFDBE) + ("ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM" #xFDBF) + ("ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM" #xFDC0) + ("ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM" #xFDC1) + ("ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM" #xFDC2) + ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM" #xFDC3) + ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM" #xFDC4) + ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM" #xFDC5) + ("ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM" #xFDC6) + ("ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM" #xFDC7) + ("ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF0) + ("ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF1) + ("ARABIC LIGATURE ALLAH ISOLATED FORM" #xFDF2) + ("ARABIC LIGATURE AKBAR ISOLATED FORM" #xFDF3) + ("ARABIC LIGATURE MOHAMMAD ISOLATED FORM" #xFDF4) + ("ARABIC LIGATURE SALAM ISOLATED FORM" #xFDF5) + ("ARABIC LIGATURE RASOUL ISOLATED FORM" #xFDF6) + ("ARABIC LIGATURE ALAYHE ISOLATED FORM" #xFDF7) + ("ARABIC LIGATURE WASALLAM ISOLATED FORM" #xFDF8) + ("ARABIC LIGATURE SALLA ISOLATED FORM" #xFDF9) + ("ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM" #xFDFA) + ("ARABIC LIGATURE JALLAJALALOUHOU" #xFDFB) + ("RIAL SIGN" #xFDFC) + )) + +;; arch-tag: 1fbfd997-096a-43c8-88a1-9d438ddabb57 diff --git a/etc/nxml/0FE00-0FE0F.el b/etc/nxml/0FE00-0FE0F.el new file mode 100644 index 00000000000..187b58d4e6b --- /dev/null +++ b/etc/nxml/0FE00-0FE0F.el @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'variation-selectors + '(("VARIATION SELECTOR-1" #xFE00) + ("VARIATION SELECTOR-2" #xFE01) + ("VARIATION SELECTOR-3" #xFE02) + ("VARIATION SELECTOR-4" #xFE03) + ("VARIATION SELECTOR-5" #xFE04) + ("VARIATION SELECTOR-6" #xFE05) + ("VARIATION SELECTOR-7" #xFE06) + ("VARIATION SELECTOR-8" #xFE07) + ("VARIATION SELECTOR-9" #xFE08) + ("VARIATION SELECTOR-10" #xFE09) + ("VARIATION SELECTOR-11" #xFE0A) + ("VARIATION SELECTOR-12" #xFE0B) + ("VARIATION SELECTOR-13" #xFE0C) + ("VARIATION SELECTOR-14" #xFE0D) + ("VARIATION SELECTOR-15" #xFE0E) + ("VARIATION SELECTOR-16" #xFE0F) + )) + +;; arch-tag: 591c3457-10c0-4036-8bfb-6cccd23f44dd diff --git a/etc/nxml/0FE20-0FE2F.el b/etc/nxml/0FE20-0FE2F.el new file mode 100644 index 00000000000..358dccd061e --- /dev/null +++ b/etc/nxml/0FE20-0FE2F.el @@ -0,0 +1,8 @@ +(nxml-define-char-name-set 'combining-half-marks + '(("COMBINING LIGATURE LEFT HALF" #xFE20) + ("COMBINING LIGATURE RIGHT HALF" #xFE21) + ("COMBINING DOUBLE TILDE LEFT HALF" #xFE22) + ("COMBINING DOUBLE TILDE RIGHT HALF" #xFE23) + )) + +;; arch-tag: de291a34-737a-4bbb-8d97-94f878921d05 diff --git a/etc/nxml/0FE30-0FE4F.el b/etc/nxml/0FE30-0FE4F.el new file mode 100644 index 00000000000..b7fe8c00d64 --- /dev/null +++ b/etc/nxml/0FE30-0FE4F.el @@ -0,0 +1,34 @@ +(nxml-define-char-name-set 'cjk-compatibility-forms + '(("PRESENTATION FORM FOR VERTICAL TWO DOT LEADER" #xFE30) + ("PRESENTATION FORM FOR VERTICAL EM DASH" #xFE31) + ("PRESENTATION FORM FOR VERTICAL EN DASH" #xFE32) + ("PRESENTATION FORM FOR VERTICAL LOW LINE" #xFE33) + ("PRESENTATION FORM FOR VERTICAL WAVY LOW LINE" #xFE34) + ("PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS" #xFE35) + ("PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS" #xFE36) + ("PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET" #xFE37) + ("PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET" #xFE38) + ("PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET" #xFE39) + ("PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET" #xFE3A) + ("PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET" #xFE3B) + ("PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET" #xFE3C) + ("PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET" #xFE3D) + ("PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET" #xFE3E) + ("PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET" #xFE3F) + ("PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET" #xFE40) + ("PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET" #xFE41) + ("PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET" #xFE42) + ("PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET" #xFE43) + ("PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET" #xFE44) + ("SESAME DOT" #xFE45) + ("WHITE SESAME DOT" #xFE46) + ("DASHED OVERLINE" #xFE49) + ("CENTRELINE OVERLINE" #xFE4A) + ("WAVY OVERLINE" #xFE4B) + ("DOUBLE WAVY OVERLINE" #xFE4C) + ("DASHED LOW LINE" #xFE4D) + ("CENTRELINE LOW LINE" #xFE4E) + ("WAVY LOW LINE" #xFE4F) + )) + +;; arch-tag: 6d8f4c10-304f-4d0b-b830-1e37a8386015 diff --git a/etc/nxml/0FE50-0FE6F.el b/etc/nxml/0FE50-0FE6F.el new file mode 100644 index 00000000000..966d5a21c43 --- /dev/null +++ b/etc/nxml/0FE50-0FE6F.el @@ -0,0 +1,30 @@ +(nxml-define-char-name-set 'small-form-variants + '(("SMALL COMMA" #xFE50) + ("SMALL IDEOGRAPHIC COMMA" #xFE51) + ("SMALL FULL STOP" #xFE52) + ("SMALL SEMICOLON" #xFE54) + ("SMALL COLON" #xFE55) + ("SMALL QUESTION MARK" #xFE56) + ("SMALL EXCLAMATION MARK" #xFE57) + ("SMALL EM DASH" #xFE58) + ("SMALL LEFT PARENTHESIS" #xFE59) + ("SMALL RIGHT PARENTHESIS" #xFE5A) + ("SMALL LEFT CURLY BRACKET" #xFE5B) + ("SMALL RIGHT CURLY BRACKET" #xFE5C) + ("SMALL LEFT TORTOISE SHELL BRACKET" #xFE5D) + ("SMALL RIGHT TORTOISE SHELL BRACKET" #xFE5E) + ("SMALL NUMBER SIGN" #xFE5F) + ("SMALL AMPERSAND" #xFE60) + ("SMALL ASTERISK" #xFE61) + ("SMALL PLUS SIGN" #xFE62) + ("SMALL HYPHEN-MINUS" #xFE63) + ("SMALL LESS-THAN SIGN" #xFE64) + ("SMALL GREATER-THAN SIGN" #xFE65) + ("SMALL EQUALS SIGN" #xFE66) + ("SMALL REVERSE SOLIDUS" #xFE68) + ("SMALL DOLLAR SIGN" #xFE69) + ("SMALL PERCENT SIGN" #xFE6A) + ("SMALL COMMERCIAL AT" #xFE6B) + )) + +;; arch-tag: 4facf8e4-cea2-4194-bc17-f0959c358f7f diff --git a/etc/nxml/0FE70-0FEFF.el b/etc/nxml/0FE70-0FEFF.el new file mode 100644 index 00000000000..07b03dadc7a --- /dev/null +++ b/etc/nxml/0FE70-0FEFF.el @@ -0,0 +1,145 @@ +(nxml-define-char-name-set 'arabic-presentation-forms-b + '(("ARABIC FATHATAN ISOLATED FORM" #xFE70) + ("ARABIC TATWEEL WITH FATHATAN ABOVE" #xFE71) + ("ARABIC DAMMATAN ISOLATED FORM" #xFE72) + ("ARABIC TAIL FRAGMENT" #xFE73) + ("ARABIC KASRATAN ISOLATED FORM" #xFE74) + ("ARABIC FATHA ISOLATED FORM" #xFE76) + ("ARABIC FATHA MEDIAL FORM" #xFE77) + ("ARABIC DAMMA ISOLATED FORM" #xFE78) + ("ARABIC DAMMA MEDIAL FORM" #xFE79) + ("ARABIC KASRA ISOLATED FORM" #xFE7A) + ("ARABIC KASRA MEDIAL FORM" #xFE7B) + ("ARABIC SHADDA ISOLATED FORM" #xFE7C) + ("ARABIC SHADDA MEDIAL FORM" #xFE7D) + ("ARABIC SUKUN ISOLATED FORM" #xFE7E) + ("ARABIC SUKUN MEDIAL FORM" #xFE7F) + ("ARABIC LETTER HAMZA ISOLATED FORM" #xFE80) + ("ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM" #xFE81) + ("ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM" #xFE82) + ("ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFE83) + ("ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM" #xFE84) + ("ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM" #xFE85) + ("ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM" #xFE86) + ("ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM" #xFE87) + ("ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM" #xFE88) + ("ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM" #xFE89) + ("ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM" #xFE8A) + ("ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM" #xFE8B) + ("ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM" #xFE8C) + ("ARABIC LETTER ALEF ISOLATED FORM" #xFE8D) + ("ARABIC LETTER ALEF FINAL FORM" #xFE8E) + ("ARABIC LETTER BEH ISOLATED FORM" #xFE8F) + ("ARABIC LETTER BEH FINAL FORM" #xFE90) + ("ARABIC LETTER BEH INITIAL FORM" #xFE91) + ("ARABIC LETTER BEH MEDIAL FORM" #xFE92) + ("ARABIC LETTER TEH MARBUTA ISOLATED FORM" #xFE93) + ("ARABIC LETTER TEH MARBUTA FINAL FORM" #xFE94) + ("ARABIC LETTER TEH ISOLATED FORM" #xFE95) + ("ARABIC LETTER TEH FINAL FORM" #xFE96) + ("ARABIC LETTER TEH INITIAL FORM" #xFE97) + ("ARABIC LETTER TEH MEDIAL FORM" #xFE98) + ("ARABIC LETTER THEH ISOLATED FORM" #xFE99) + ("ARABIC LETTER THEH FINAL FORM" #xFE9A) + ("ARABIC LETTER THEH INITIAL FORM" #xFE9B) + ("ARABIC LETTER THEH MEDIAL FORM" #xFE9C) + ("ARABIC LETTER JEEM ISOLATED FORM" #xFE9D) + ("ARABIC LETTER JEEM FINAL FORM" #xFE9E) + ("ARABIC LETTER JEEM INITIAL FORM" #xFE9F) + ("ARABIC LETTER JEEM MEDIAL FORM" #xFEA0) + ("ARABIC LETTER HAH ISOLATED FORM" #xFEA1) + ("ARABIC LETTER HAH FINAL FORM" #xFEA2) + ("ARABIC LETTER HAH INITIAL FORM" #xFEA3) + ("ARABIC LETTER HAH MEDIAL FORM" #xFEA4) + ("ARABIC LETTER KHAH ISOLATED FORM" #xFEA5) + ("ARABIC LETTER KHAH FINAL FORM" #xFEA6) + ("ARABIC LETTER KHAH INITIAL FORM" #xFEA7) + ("ARABIC LETTER KHAH MEDIAL FORM" #xFEA8) + ("ARABIC LETTER DAL ISOLATED FORM" #xFEA9) + ("ARABIC LETTER DAL FINAL FORM" #xFEAA) + ("ARABIC LETTER THAL ISOLATED FORM" #xFEAB) + ("ARABIC LETTER THAL FINAL FORM" #xFEAC) + ("ARABIC LETTER REH ISOLATED FORM" #xFEAD) + ("ARABIC LETTER REH FINAL FORM" #xFEAE) + ("ARABIC LETTER ZAIN ISOLATED FORM" #xFEAF) + ("ARABIC LETTER ZAIN FINAL FORM" #xFEB0) + ("ARABIC LETTER SEEN ISOLATED FORM" #xFEB1) + ("ARABIC LETTER SEEN FINAL FORM" #xFEB2) + ("ARABIC LETTER SEEN INITIAL FORM" #xFEB3) + ("ARABIC LETTER SEEN MEDIAL FORM" #xFEB4) + ("ARABIC LETTER SHEEN ISOLATED FORM" #xFEB5) + ("ARABIC LETTER SHEEN FINAL FORM" #xFEB6) + ("ARABIC LETTER SHEEN INITIAL FORM" #xFEB7) + ("ARABIC LETTER SHEEN MEDIAL FORM" #xFEB8) + ("ARABIC LETTER SAD ISOLATED FORM" #xFEB9) + ("ARABIC LETTER SAD FINAL FORM" #xFEBA) + ("ARABIC LETTER SAD INITIAL FORM" #xFEBB) + ("ARABIC LETTER SAD MEDIAL FORM" #xFEBC) + ("ARABIC LETTER DAD ISOLATED FORM" #xFEBD) + ("ARABIC LETTER DAD FINAL FORM" #xFEBE) + ("ARABIC LETTER DAD INITIAL FORM" #xFEBF) + ("ARABIC LETTER DAD MEDIAL FORM" #xFEC0) + ("ARABIC LETTER TAH ISOLATED FORM" #xFEC1) + ("ARABIC LETTER TAH FINAL FORM" #xFEC2) + ("ARABIC LETTER TAH INITIAL FORM" #xFEC3) + ("ARABIC LETTER TAH MEDIAL FORM" #xFEC4) + ("ARABIC LETTER ZAH ISOLATED FORM" #xFEC5) + ("ARABIC LETTER ZAH FINAL FORM" #xFEC6) + ("ARABIC LETTER ZAH INITIAL FORM" #xFEC7) + ("ARABIC LETTER ZAH MEDIAL FORM" #xFEC8) + ("ARABIC LETTER AIN ISOLATED FORM" #xFEC9) + ("ARABIC LETTER AIN FINAL FORM" #xFECA) + ("ARABIC LETTER AIN INITIAL FORM" #xFECB) + ("ARABIC LETTER AIN MEDIAL FORM" #xFECC) + ("ARABIC LETTER GHAIN ISOLATED FORM" #xFECD) + ("ARABIC LETTER GHAIN FINAL FORM" #xFECE) + ("ARABIC LETTER GHAIN INITIAL FORM" #xFECF) + ("ARABIC LETTER GHAIN MEDIAL FORM" #xFED0) + ("ARABIC LETTER FEH ISOLATED FORM" #xFED1) + ("ARABIC LETTER FEH FINAL FORM" #xFED2) + ("ARABIC LETTER FEH INITIAL FORM" #xFED3) + ("ARABIC LETTER FEH MEDIAL FORM" #xFED4) + ("ARABIC LETTER QAF ISOLATED FORM" #xFED5) + ("ARABIC LETTER QAF FINAL FORM" #xFED6) + ("ARABIC LETTER QAF INITIAL FORM" #xFED7) + ("ARABIC LETTER QAF MEDIAL FORM" #xFED8) + ("ARABIC LETTER KAF ISOLATED FORM" #xFED9) + ("ARABIC LETTER KAF FINAL FORM" #xFEDA) + ("ARABIC LETTER KAF INITIAL FORM" #xFEDB) + ("ARABIC LETTER KAF MEDIAL FORM" #xFEDC) + ("ARABIC LETTER LAM ISOLATED FORM" #xFEDD) + ("ARABIC LETTER LAM FINAL FORM" #xFEDE) + ("ARABIC LETTER LAM INITIAL FORM" #xFEDF) + ("ARABIC LETTER LAM MEDIAL FORM" #xFEE0) + ("ARABIC LETTER MEEM ISOLATED FORM" #xFEE1) + ("ARABIC LETTER MEEM FINAL FORM" #xFEE2) + ("ARABIC LETTER MEEM INITIAL FORM" #xFEE3) + ("ARABIC LETTER MEEM MEDIAL FORM" #xFEE4) + ("ARABIC LETTER NOON ISOLATED FORM" #xFEE5) + ("ARABIC LETTER NOON FINAL FORM" #xFEE6) + ("ARABIC LETTER NOON INITIAL FORM" #xFEE7) + ("ARABIC LETTER NOON MEDIAL FORM" #xFEE8) + ("ARABIC LETTER HEH ISOLATED FORM" #xFEE9) + ("ARABIC LETTER HEH FINAL FORM" #xFEEA) + ("ARABIC LETTER HEH INITIAL FORM" #xFEEB) + ("ARABIC LETTER HEH MEDIAL FORM" #xFEEC) + ("ARABIC LETTER WAW ISOLATED FORM" #xFEED) + ("ARABIC LETTER WAW FINAL FORM" #xFEEE) + ("ARABIC LETTER ALEF MAKSURA ISOLATED FORM" #xFEEF) + ("ARABIC LETTER ALEF MAKSURA FINAL FORM" #xFEF0) + ("ARABIC LETTER YEH ISOLATED FORM" #xFEF1) + ("ARABIC LETTER YEH FINAL FORM" #xFEF2) + ("ARABIC LETTER YEH INITIAL FORM" #xFEF3) + ("ARABIC LETTER YEH MEDIAL FORM" #xFEF4) + ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM" #xFEF5) + ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM" #xFEF6) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFEF7) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM" #xFEF8) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM" #xFEF9) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM" #xFEFA) + ("ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM" #xFEFB) + ("ARABIC LIGATURE LAM WITH ALEF FINAL FORM" #xFEFC) + ("ZERO WIDTH NO-BREAK SPACE" #xFEFF) + )) + +;; arch-tag: cdc72129-3cd8-4568-8366-c0deee767c17 diff --git a/etc/nxml/0FF00-0FFEF.el b/etc/nxml/0FF00-0FFEF.el new file mode 100644 index 00000000000..fb8dd897f19 --- /dev/null +++ b/etc/nxml/0FF00-0FFEF.el @@ -0,0 +1,229 @@ +(nxml-define-char-name-set 'halfwidth-and-fullwidth-forms + '(("FULLWIDTH EXCLAMATION MARK" #xFF01) + ("FULLWIDTH QUOTATION MARK" #xFF02) + ("FULLWIDTH NUMBER SIGN" #xFF03) + ("FULLWIDTH DOLLAR SIGN" #xFF04) + ("FULLWIDTH PERCENT SIGN" #xFF05) + ("FULLWIDTH AMPERSAND" #xFF06) + ("FULLWIDTH APOSTROPHE" #xFF07) + ("FULLWIDTH LEFT PARENTHESIS" #xFF08) + ("FULLWIDTH RIGHT PARENTHESIS" #xFF09) + ("FULLWIDTH ASTERISK" #xFF0A) + ("FULLWIDTH PLUS SIGN" #xFF0B) + ("FULLWIDTH COMMA" #xFF0C) + ("FULLWIDTH HYPHEN-MINUS" #xFF0D) + ("FULLWIDTH FULL STOP" #xFF0E) + ("FULLWIDTH SOLIDUS" #xFF0F) + ("FULLWIDTH DIGIT ZERO" #xFF10) + ("FULLWIDTH DIGIT ONE" #xFF11) + ("FULLWIDTH DIGIT TWO" #xFF12) + ("FULLWIDTH DIGIT THREE" #xFF13) + ("FULLWIDTH DIGIT FOUR" #xFF14) + ("FULLWIDTH DIGIT FIVE" #xFF15) + ("FULLWIDTH DIGIT SIX" #xFF16) + ("FULLWIDTH DIGIT SEVEN" #xFF17) + ("FULLWIDTH DIGIT EIGHT" #xFF18) + ("FULLWIDTH DIGIT NINE" #xFF19) + ("FULLWIDTH COLON" #xFF1A) + ("FULLWIDTH SEMICOLON" #xFF1B) + ("FULLWIDTH LESS-THAN SIGN" #xFF1C) + ("FULLWIDTH EQUALS SIGN" #xFF1D) + ("FULLWIDTH GREATER-THAN SIGN" #xFF1E) + ("FULLWIDTH QUESTION MARK" #xFF1F) + ("FULLWIDTH COMMERCIAL AT" #xFF20) + ("FULLWIDTH LATIN CAPITAL LETTER A" #xFF21) + ("FULLWIDTH LATIN CAPITAL LETTER B" #xFF22) + ("FULLWIDTH LATIN CAPITAL LETTER C" #xFF23) + ("FULLWIDTH LATIN CAPITAL LETTER D" #xFF24) + ("FULLWIDTH LATIN CAPITAL LETTER E" #xFF25) + ("FULLWIDTH LATIN CAPITAL LETTER F" #xFF26) + ("FULLWIDTH LATIN CAPITAL LETTER G" #xFF27) + ("FULLWIDTH LATIN CAPITAL LETTER H" #xFF28) + ("FULLWIDTH LATIN CAPITAL LETTER I" #xFF29) + ("FULLWIDTH LATIN CAPITAL LETTER J" #xFF2A) + ("FULLWIDTH LATIN CAPITAL LETTER K" #xFF2B) + ("FULLWIDTH LATIN CAPITAL LETTER L" #xFF2C) + ("FULLWIDTH LATIN CAPITAL LETTER M" #xFF2D) + ("FULLWIDTH LATIN CAPITAL LETTER N" #xFF2E) + ("FULLWIDTH LATIN CAPITAL LETTER O" #xFF2F) + ("FULLWIDTH LATIN CAPITAL LETTER P" #xFF30) + ("FULLWIDTH LATIN CAPITAL LETTER Q" #xFF31) + ("FULLWIDTH LATIN CAPITAL LETTER R" #xFF32) + ("FULLWIDTH LATIN CAPITAL LETTER S" #xFF33) + ("FULLWIDTH LATIN CAPITAL LETTER T" #xFF34) + ("FULLWIDTH LATIN CAPITAL LETTER U" #xFF35) + ("FULLWIDTH LATIN CAPITAL LETTER V" #xFF36) + ("FULLWIDTH LATIN CAPITAL LETTER W" #xFF37) + ("FULLWIDTH LATIN CAPITAL LETTER X" #xFF38) + ("FULLWIDTH LATIN CAPITAL LETTER Y" #xFF39) + ("FULLWIDTH LATIN CAPITAL LETTER Z" #xFF3A) + ("FULLWIDTH LEFT SQUARE BRACKET" #xFF3B) + ("FULLWIDTH REVERSE SOLIDUS" #xFF3C) + ("FULLWIDTH RIGHT SQUARE BRACKET" #xFF3D) + ("FULLWIDTH CIRCUMFLEX ACCENT" #xFF3E) + ("FULLWIDTH LOW LINE" #xFF3F) + ("FULLWIDTH GRAVE ACCENT" #xFF40) + ("FULLWIDTH LATIN SMALL LETTER A" #xFF41) + ("FULLWIDTH LATIN SMALL LETTER B" #xFF42) + ("FULLWIDTH LATIN SMALL LETTER C" #xFF43) + ("FULLWIDTH LATIN SMALL LETTER D" #xFF44) + ("FULLWIDTH LATIN SMALL LETTER E" #xFF45) + ("FULLWIDTH LATIN SMALL LETTER F" #xFF46) + ("FULLWIDTH LATIN SMALL LETTER G" #xFF47) + ("FULLWIDTH LATIN SMALL LETTER H" #xFF48) + ("FULLWIDTH LATIN SMALL LETTER I" #xFF49) + ("FULLWIDTH LATIN SMALL LETTER J" #xFF4A) + ("FULLWIDTH LATIN SMALL LETTER K" #xFF4B) + ("FULLWIDTH LATIN SMALL LETTER L" #xFF4C) + ("FULLWIDTH LATIN SMALL LETTER M" #xFF4D) + ("FULLWIDTH LATIN SMALL LETTER N" #xFF4E) + ("FULLWIDTH LATIN SMALL LETTER O" #xFF4F) + ("FULLWIDTH LATIN SMALL LETTER P" #xFF50) + ("FULLWIDTH LATIN SMALL LETTER Q" #xFF51) + ("FULLWIDTH LATIN SMALL LETTER R" #xFF52) + ("FULLWIDTH LATIN SMALL LETTER S" #xFF53) + ("FULLWIDTH LATIN SMALL LETTER T" #xFF54) + ("FULLWIDTH LATIN SMALL LETTER U" #xFF55) + ("FULLWIDTH LATIN SMALL LETTER V" #xFF56) + ("FULLWIDTH LATIN SMALL LETTER W" #xFF57) + ("FULLWIDTH LATIN SMALL LETTER X" #xFF58) + ("FULLWIDTH LATIN SMALL LETTER Y" #xFF59) + ("FULLWIDTH LATIN SMALL LETTER Z" #xFF5A) + ("FULLWIDTH LEFT CURLY BRACKET" #xFF5B) + ("FULLWIDTH VERTICAL LINE" #xFF5C) + ("FULLWIDTH RIGHT CURLY BRACKET" #xFF5D) + ("FULLWIDTH TILDE" #xFF5E) + ("FULLWIDTH LEFT WHITE PARENTHESIS" #xFF5F) + ("FULLWIDTH RIGHT WHITE PARENTHESIS" #xFF60) + ("HALFWIDTH IDEOGRAPHIC FULL STOP" #xFF61) + ("HALFWIDTH LEFT CORNER BRACKET" #xFF62) + ("HALFWIDTH RIGHT CORNER BRACKET" #xFF63) + ("HALFWIDTH IDEOGRAPHIC COMMA" #xFF64) + ("HALFWIDTH KATAKANA MIDDLE DOT" #xFF65) + ("HALFWIDTH KATAKANA LETTER WO" #xFF66) + ("HALFWIDTH KATAKANA LETTER SMALL A" #xFF67) + ("HALFWIDTH KATAKANA LETTER SMALL I" #xFF68) + ("HALFWIDTH KATAKANA LETTER SMALL U" #xFF69) + ("HALFWIDTH KATAKANA LETTER SMALL E" #xFF6A) + ("HALFWIDTH KATAKANA LETTER SMALL O" #xFF6B) + ("HALFWIDTH KATAKANA LETTER SMALL YA" #xFF6C) + ("HALFWIDTH KATAKANA LETTER SMALL YU" #xFF6D) + ("HALFWIDTH KATAKANA LETTER SMALL YO" #xFF6E) + ("HALFWIDTH KATAKANA LETTER SMALL TU" #xFF6F) + ("HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK" #xFF70) + ("HALFWIDTH KATAKANA LETTER A" #xFF71) + ("HALFWIDTH KATAKANA LETTER I" #xFF72) + ("HALFWIDTH KATAKANA LETTER U" #xFF73) + ("HALFWIDTH KATAKANA LETTER E" #xFF74) + ("HALFWIDTH KATAKANA LETTER O" #xFF75) + ("HALFWIDTH KATAKANA LETTER KA" #xFF76) + ("HALFWIDTH KATAKANA LETTER KI" #xFF77) + ("HALFWIDTH KATAKANA LETTER KU" #xFF78) + ("HALFWIDTH KATAKANA LETTER KE" #xFF79) + ("HALFWIDTH KATAKANA LETTER KO" #xFF7A) + ("HALFWIDTH KATAKANA LETTER SA" #xFF7B) + ("HALFWIDTH KATAKANA LETTER SI" #xFF7C) + ("HALFWIDTH KATAKANA LETTER SU" #xFF7D) + ("HALFWIDTH KATAKANA LETTER SE" #xFF7E) + ("HALFWIDTH KATAKANA LETTER SO" #xFF7F) + ("HALFWIDTH KATAKANA LETTER TA" #xFF80) + ("HALFWIDTH KATAKANA LETTER TI" #xFF81) + ("HALFWIDTH KATAKANA LETTER TU" #xFF82) + ("HALFWIDTH KATAKANA LETTER TE" #xFF83) + ("HALFWIDTH KATAKANA LETTER TO" #xFF84) + ("HALFWIDTH KATAKANA LETTER NA" #xFF85) + ("HALFWIDTH KATAKANA LETTER NI" #xFF86) + ("HALFWIDTH KATAKANA LETTER NU" #xFF87) + ("HALFWIDTH KATAKANA LETTER NE" #xFF88) + ("HALFWIDTH KATAKANA LETTER NO" #xFF89) + ("HALFWIDTH KATAKANA LETTER HA" #xFF8A) + ("HALFWIDTH KATAKANA LETTER HI" #xFF8B) + ("HALFWIDTH KATAKANA LETTER HU" #xFF8C) + ("HALFWIDTH KATAKANA LETTER HE" #xFF8D) + ("HALFWIDTH KATAKANA LETTER HO" #xFF8E) + ("HALFWIDTH KATAKANA LETTER MA" #xFF8F) + ("HALFWIDTH KATAKANA LETTER MI" #xFF90) + ("HALFWIDTH KATAKANA LETTER MU" #xFF91) + ("HALFWIDTH KATAKANA LETTER ME" #xFF92) + ("HALFWIDTH KATAKANA LETTER MO" #xFF93) + ("HALFWIDTH KATAKANA LETTER YA" #xFF94) + ("HALFWIDTH KATAKANA LETTER YU" #xFF95) + ("HALFWIDTH KATAKANA LETTER YO" #xFF96) + ("HALFWIDTH KATAKANA LETTER RA" #xFF97) + ("HALFWIDTH KATAKANA LETTER RI" #xFF98) + ("HALFWIDTH KATAKANA LETTER RU" #xFF99) + ("HALFWIDTH KATAKANA LETTER RE" #xFF9A) + ("HALFWIDTH KATAKANA LETTER RO" #xFF9B) + ("HALFWIDTH KATAKANA LETTER WA" #xFF9C) + ("HALFWIDTH KATAKANA LETTER N" #xFF9D) + ("HALFWIDTH KATAKANA VOICED SOUND MARK" #xFF9E) + ("HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK" #xFF9F) + ("HALFWIDTH HANGUL FILLER" #xFFA0) + ("HALFWIDTH HANGUL LETTER KIYEOK" #xFFA1) + ("HALFWIDTH HANGUL LETTER SSANGKIYEOK" #xFFA2) + ("HALFWIDTH HANGUL LETTER KIYEOK-SIOS" #xFFA3) + ("HALFWIDTH HANGUL LETTER NIEUN" #xFFA4) + ("HALFWIDTH HANGUL LETTER NIEUN-CIEUC" #xFFA5) + ("HALFWIDTH HANGUL LETTER NIEUN-HIEUH" #xFFA6) + ("HALFWIDTH HANGUL LETTER TIKEUT" #xFFA7) + ("HALFWIDTH HANGUL LETTER SSANGTIKEUT" #xFFA8) + ("HALFWIDTH HANGUL LETTER RIEUL" #xFFA9) + ("HALFWIDTH HANGUL LETTER RIEUL-KIYEOK" #xFFAA) + ("HALFWIDTH HANGUL LETTER RIEUL-MIEUM" #xFFAB) + ("HALFWIDTH HANGUL LETTER RIEUL-PIEUP" #xFFAC) + ("HALFWIDTH HANGUL LETTER RIEUL-SIOS" #xFFAD) + ("HALFWIDTH HANGUL LETTER RIEUL-THIEUTH" #xFFAE) + ("HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH" #xFFAF) + ("HALFWIDTH HANGUL LETTER RIEUL-HIEUH" #xFFB0) + ("HALFWIDTH HANGUL LETTER MIEUM" #xFFB1) + ("HALFWIDTH HANGUL LETTER PIEUP" #xFFB2) + ("HALFWIDTH HANGUL LETTER SSANGPIEUP" #xFFB3) + ("HALFWIDTH HANGUL LETTER PIEUP-SIOS" #xFFB4) + ("HALFWIDTH HANGUL LETTER SIOS" #xFFB5) + ("HALFWIDTH HANGUL LETTER SSANGSIOS" #xFFB6) + ("HALFWIDTH HANGUL LETTER IEUNG" #xFFB7) + ("HALFWIDTH HANGUL LETTER CIEUC" #xFFB8) + ("HALFWIDTH HANGUL LETTER SSANGCIEUC" #xFFB9) + ("HALFWIDTH HANGUL LETTER CHIEUCH" #xFFBA) + ("HALFWIDTH HANGUL LETTER KHIEUKH" #xFFBB) + ("HALFWIDTH HANGUL LETTER THIEUTH" #xFFBC) + ("HALFWIDTH HANGUL LETTER PHIEUPH" #xFFBD) + ("HALFWIDTH HANGUL LETTER HIEUH" #xFFBE) + ("HALFWIDTH HANGUL LETTER A" #xFFC2) + ("HALFWIDTH HANGUL LETTER AE" #xFFC3) + ("HALFWIDTH HANGUL LETTER YA" #xFFC4) + ("HALFWIDTH HANGUL LETTER YAE" #xFFC5) + ("HALFWIDTH HANGUL LETTER EO" #xFFC6) + ("HALFWIDTH HANGUL LETTER E" #xFFC7) + ("HALFWIDTH HANGUL LETTER YEO" #xFFCA) + ("HALFWIDTH HANGUL LETTER YE" #xFFCB) + ("HALFWIDTH HANGUL LETTER O" #xFFCC) + ("HALFWIDTH HANGUL LETTER WA" #xFFCD) + ("HALFWIDTH HANGUL LETTER WAE" #xFFCE) + ("HALFWIDTH HANGUL LETTER OE" #xFFCF) + ("HALFWIDTH HANGUL LETTER YO" #xFFD2) + ("HALFWIDTH HANGUL LETTER U" #xFFD3) + ("HALFWIDTH HANGUL LETTER WEO" #xFFD4) + ("HALFWIDTH HANGUL LETTER WE" #xFFD5) + ("HALFWIDTH HANGUL LETTER WI" #xFFD6) + ("HALFWIDTH HANGUL LETTER YU" #xFFD7) + ("HALFWIDTH HANGUL LETTER EU" #xFFDA) + ("HALFWIDTH HANGUL LETTER YI" #xFFDB) + ("HALFWIDTH HANGUL LETTER I" #xFFDC) + ("FULLWIDTH CENT SIGN" #xFFE0) + ("FULLWIDTH POUND SIGN" #xFFE1) + ("FULLWIDTH NOT SIGN" #xFFE2) + ("FULLWIDTH MACRON" #xFFE3) + ("FULLWIDTH BROKEN BAR" #xFFE4) + ("FULLWIDTH YEN SIGN" #xFFE5) + ("FULLWIDTH WON SIGN" #xFFE6) + ("HALFWIDTH FORMS LIGHT VERTICAL" #xFFE8) + ("HALFWIDTH LEFTWARDS ARROW" #xFFE9) + ("HALFWIDTH UPWARDS ARROW" #xFFEA) + ("HALFWIDTH RIGHTWARDS ARROW" #xFFEB) + ("HALFWIDTH DOWNWARDS ARROW" #xFFEC) + ("HALFWIDTH BLACK SQUARE" #xFFED) + ("HALFWIDTH WHITE CIRCLE" #xFFEE) + )) + +;; arch-tag: 8af7a95d-6e71-47da-9679-b516b6e2f01a diff --git a/etc/nxml/0FFF0-0FFFF.el b/etc/nxml/0FFF0-0FFFF.el new file mode 100644 index 00000000000..392312be01e --- /dev/null +++ b/etc/nxml/0FFF0-0FFFF.el @@ -0,0 +1,9 @@ +(nxml-define-char-name-set 'specials + '(("INTERLINEAR ANNOTATION ANCHOR" #xFFF9) + ("INTERLINEAR ANNOTATION SEPARATOR" #xFFFA) + ("INTERLINEAR ANNOTATION TERMINATOR" #xFFFB) + ("OBJECT REPLACEMENT CHARACTER" #xFFFC) + ("REPLACEMENT CHARACTER" #xFFFD) + )) + +;; arch-tag: 0bef6e81-4857-4032-a18a-18784233cc81 diff --git a/etc/nxml/10300-1032F.el b/etc/nxml/10300-1032F.el new file mode 100644 index 00000000000..95d26005525 --- /dev/null +++ b/etc/nxml/10300-1032F.el @@ -0,0 +1,39 @@ +(nxml-define-char-name-set 'old-italic + '(("OLD ITALIC LETTER A" #x10300) + ("OLD ITALIC LETTER BE" #x10301) + ("OLD ITALIC LETTER KE" #x10302) + ("OLD ITALIC LETTER DE" #x10303) + ("OLD ITALIC LETTER E" #x10304) + ("OLD ITALIC LETTER VE" #x10305) + ("OLD ITALIC LETTER ZE" #x10306) + ("OLD ITALIC LETTER HE" #x10307) + ("OLD ITALIC LETTER THE" #x10308) + ("OLD ITALIC LETTER I" #x10309) + ("OLD ITALIC LETTER KA" #x1030A) + ("OLD ITALIC LETTER EL" #x1030B) + ("OLD ITALIC LETTER EM" #x1030C) + ("OLD ITALIC LETTER EN" #x1030D) + ("OLD ITALIC LETTER ESH" #x1030E) + ("OLD ITALIC LETTER O" #x1030F) + ("OLD ITALIC LETTER PE" #x10310) + ("OLD ITALIC LETTER SHE" #x10311) + ("OLD ITALIC LETTER KU" #x10312) + ("OLD ITALIC LETTER ER" #x10313) + ("OLD ITALIC LETTER ES" #x10314) + ("OLD ITALIC LETTER TE" #x10315) + ("OLD ITALIC LETTER U" #x10316) + ("OLD ITALIC LETTER EKS" #x10317) + ("OLD ITALIC LETTER PHE" #x10318) + ("OLD ITALIC LETTER KHE" #x10319) + ("OLD ITALIC LETTER EF" #x1031A) + ("OLD ITALIC LETTER ERS" #x1031B) + ("OLD ITALIC LETTER CHE" #x1031C) + ("OLD ITALIC LETTER II" #x1031D) + ("OLD ITALIC LETTER UU" #x1031E) + ("OLD ITALIC NUMERAL ONE" #x10320) + ("OLD ITALIC NUMERAL FIVE" #x10321) + ("OLD ITALIC NUMERAL TEN" #x10322) + ("OLD ITALIC NUMERAL FIFTY" #x10323) + )) + +;; arch-tag: 823cbcc4-a815-4f82-a1e9-348c2f5d237e diff --git a/etc/nxml/10330-1034F.el b/etc/nxml/10330-1034F.el new file mode 100644 index 00000000000..edd9de4050c --- /dev/null +++ b/etc/nxml/10330-1034F.el @@ -0,0 +1,31 @@ +(nxml-define-char-name-set 'gothic + '(("GOTHIC LETTER AHSA" #x10330) + ("GOTHIC LETTER BAIRKAN" #x10331) + ("GOTHIC LETTER GIBA" #x10332) + ("GOTHIC LETTER DAGS" #x10333) + ("GOTHIC LETTER AIHVUS" #x10334) + ("GOTHIC LETTER QAIRTHRA" #x10335) + ("GOTHIC LETTER IUJA" #x10336) + ("GOTHIC LETTER HAGL" #x10337) + ("GOTHIC LETTER THIUTH" #x10338) + ("GOTHIC LETTER EIS" #x10339) + ("GOTHIC LETTER KUSMA" #x1033A) + ("GOTHIC LETTER LAGUS" #x1033B) + ("GOTHIC LETTER MANNA" #x1033C) + ("GOTHIC LETTER NAUTHS" #x1033D) + ("GOTHIC LETTER JER" #x1033E) + ("GOTHIC LETTER URUS" #x1033F) + ("GOTHIC LETTER PAIRTHRA" #x10340) + ("GOTHIC LETTER NINETY" #x10341) + ("GOTHIC LETTER RAIDA" #x10342) + ("GOTHIC LETTER SAUIL" #x10343) + ("GOTHIC LETTER TEIWS" #x10344) + ("GOTHIC LETTER WINJA" #x10345) + ("GOTHIC LETTER FAIHU" #x10346) + ("GOTHIC LETTER IGGWS" #x10347) + ("GOTHIC LETTER HWAIR" #x10348) + ("GOTHIC LETTER OTHAL" #x10349) + ("GOTHIC LETTER NINE HUNDRED" #x1034A) + )) + +;; arch-tag: 29caddb6-76f0-44bc-83f9-6cef55c20600 diff --git a/etc/nxml/10400-1044F.el b/etc/nxml/10400-1044F.el new file mode 100644 index 00000000000..a26005a3953 --- /dev/null +++ b/etc/nxml/10400-1044F.el @@ -0,0 +1,80 @@ +(nxml-define-char-name-set 'deseret + '(("DESERET CAPITAL LETTER LONG I" #x10400) + ("DESERET CAPITAL LETTER LONG E" #x10401) + ("DESERET CAPITAL LETTER LONG A" #x10402) + ("DESERET CAPITAL LETTER LONG AH" #x10403) + ("DESERET CAPITAL LETTER LONG O" #x10404) + ("DESERET CAPITAL LETTER LONG OO" #x10405) + ("DESERET CAPITAL LETTER SHORT I" #x10406) + ("DESERET CAPITAL LETTER SHORT E" #x10407) + ("DESERET CAPITAL LETTER SHORT A" #x10408) + ("DESERET CAPITAL LETTER SHORT AH" #x10409) + ("DESERET CAPITAL LETTER SHORT O" #x1040A) + ("DESERET CAPITAL LETTER SHORT OO" #x1040B) + ("DESERET CAPITAL LETTER AY" #x1040C) + ("DESERET CAPITAL LETTER OW" #x1040D) + ("DESERET CAPITAL LETTER WU" #x1040E) + ("DESERET CAPITAL LETTER YEE" #x1040F) + ("DESERET CAPITAL LETTER H" #x10410) + ("DESERET CAPITAL LETTER PEE" #x10411) + ("DESERET CAPITAL LETTER BEE" #x10412) + ("DESERET CAPITAL LETTER TEE" #x10413) + ("DESERET CAPITAL LETTER DEE" #x10414) + ("DESERET CAPITAL LETTER CHEE" #x10415) + ("DESERET CAPITAL LETTER JEE" #x10416) + ("DESERET CAPITAL LETTER KAY" #x10417) + ("DESERET CAPITAL LETTER GAY" #x10418) + ("DESERET CAPITAL LETTER EF" #x10419) + ("DESERET CAPITAL LETTER VEE" #x1041A) + ("DESERET CAPITAL LETTER ETH" #x1041B) + ("DESERET CAPITAL LETTER THEE" #x1041C) + ("DESERET CAPITAL LETTER ES" #x1041D) + ("DESERET CAPITAL LETTER ZEE" #x1041E) + ("DESERET CAPITAL LETTER ESH" #x1041F) + ("DESERET CAPITAL LETTER ZHEE" #x10420) + ("DESERET CAPITAL LETTER ER" #x10421) + ("DESERET CAPITAL LETTER EL" #x10422) + ("DESERET CAPITAL LETTER EM" #x10423) + ("DESERET CAPITAL LETTER EN" #x10424) + ("DESERET CAPITAL LETTER ENG" #x10425) + ("DESERET SMALL LETTER LONG I" #x10428) + ("DESERET SMALL LETTER LONG E" #x10429) + ("DESERET SMALL LETTER LONG A" #x1042A) + ("DESERET SMALL LETTER LONG AH" #x1042B) + ("DESERET SMALL LETTER LONG O" #x1042C) + ("DESERET SMALL LETTER LONG OO" #x1042D) + ("DESERET SMALL LETTER SHORT I" #x1042E) + ("DESERET SMALL LETTER SHORT E" #x1042F) + ("DESERET SMALL LETTER SHORT A" #x10430) + ("DESERET SMALL LETTER SHORT AH" #x10431) + ("DESERET SMALL LETTER SHORT O" #x10432) + ("DESERET SMALL LETTER SHORT OO" #x10433) + ("DESERET SMALL LETTER AY" #x10434) + ("DESERET SMALL LETTER OW" #x10435) + ("DESERET SMALL LETTER WU" #x10436) + ("DESERET SMALL LETTER YEE" #x10437) + ("DESERET SMALL LETTER H" #x10438) + ("DESERET SMALL LETTER PEE" #x10439) + ("DESERET SMALL LETTER BEE" #x1043A) + ("DESERET SMALL LETTER TEE" #x1043B) + ("DESERET SMALL LETTER DEE" #x1043C) + ("DESERET SMALL LETTER CHEE" #x1043D) + ("DESERET SMALL LETTER JEE" #x1043E) + ("DESERET SMALL LETTER KAY" #x1043F) + ("DESERET SMALL LETTER GAY" #x10440) + ("DESERET SMALL LETTER EF" #x10441) + ("DESERET SMALL LETTER VEE" #x10442) + ("DESERET SMALL LETTER ETH" #x10443) + ("DESERET SMALL LETTER THEE" #x10444) + ("DESERET SMALL LETTER ES" #x10445) + ("DESERET SMALL LETTER ZEE" #x10446) + ("DESERET SMALL LETTER ESH" #x10447) + ("DESERET SMALL LETTER ZHEE" #x10448) + ("DESERET SMALL LETTER ER" #x10449) + ("DESERET SMALL LETTER EL" #x1044A) + ("DESERET SMALL LETTER EM" #x1044B) + ("DESERET SMALL LETTER EN" #x1044C) + ("DESERET SMALL LETTER ENG" #x1044D) + )) + +;; arch-tag: 0fbf6586-41cf-41b2-88e9-d113db5d933e diff --git a/etc/nxml/1D000-1D0FF.el b/etc/nxml/1D000-1D0FF.el new file mode 100644 index 00000000000..1c76fd0eff0 --- /dev/null +++ b/etc/nxml/1D000-1D0FF.el @@ -0,0 +1,250 @@ +(nxml-define-char-name-set 'byzantine-musical-symbols + '(("BYZANTINE MUSICAL SYMBOL PSILI" #x1D000) + ("BYZANTINE MUSICAL SYMBOL DASEIA" #x1D001) + ("BYZANTINE MUSICAL SYMBOL PERISPOMENI" #x1D002) + ("BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON" #x1D003) + ("BYZANTINE MUSICAL SYMBOL OXEIA DIPLI" #x1D004) + ("BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON" #x1D005) + ("BYZANTINE MUSICAL SYMBOL VAREIA DIPLI" #x1D006) + ("BYZANTINE MUSICAL SYMBOL KATHISTI" #x1D007) + ("BYZANTINE MUSICAL SYMBOL SYRMATIKI" #x1D008) + ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI" #x1D009) + ("BYZANTINE MUSICAL SYMBOL YPOKRISIS" #x1D00A) + ("BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI" #x1D00B) + ("BYZANTINE MUSICAL SYMBOL KREMASTI" #x1D00C) + ("BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON" #x1D00D) + ("BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON" #x1D00E) + ("BYZANTINE MUSICAL SYMBOL TELEIA" #x1D00F) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA" #x1D010) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOS" #x1D011) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI" #x1D012) + ("BYZANTINE MUSICAL SYMBOL SYNEVMA" #x1D013) + ("BYZANTINE MUSICAL SYMBOL THITA" #x1D014) + ("BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION" #x1D015) + ("BYZANTINE MUSICAL SYMBOL GORGON ARCHAION" #x1D016) + ("BYZANTINE MUSICAL SYMBOL PSILON" #x1D017) + ("BYZANTINE MUSICAL SYMBOL CHAMILON" #x1D018) + ("BYZANTINE MUSICAL SYMBOL VATHY" #x1D019) + ("BYZANTINE MUSICAL SYMBOL ISON ARCHAION" #x1D01A) + ("BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION" #x1D01B) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION" #x1D01C) + ("BYZANTINE MUSICAL SYMBOL SAXIMATA" #x1D01D) + ("BYZANTINE MUSICAL SYMBOL PARICHON" #x1D01E) + ("BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA" #x1D01F) + ("BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION" #x1D020) + ("BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION" #x1D021) + ("BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION" #x1D022) + ("BYZANTINE MUSICAL SYMBOL APOTHEMA" #x1D023) + ("BYZANTINE MUSICAL SYMBOL KLASMA" #x1D024) + ("BYZANTINE MUSICAL SYMBOL REVMA" #x1D025) + ("BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION" #x1D026) + ("BYZANTINE MUSICAL SYMBOL TINAGMA" #x1D027) + ("BYZANTINE MUSICAL SYMBOL ANATRICHISMA" #x1D028) + ("BYZANTINE MUSICAL SYMBOL SEISMA" #x1D029) + ("BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION" #x1D02A) + ("BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU" #x1D02B) + ("BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION" #x1D02C) + ("BYZANTINE MUSICAL SYMBOL THEMA" #x1D02D) + ("BYZANTINE MUSICAL SYMBOL LEMOI" #x1D02E) + ("BYZANTINE MUSICAL SYMBOL DYO" #x1D02F) + ("BYZANTINE MUSICAL SYMBOL TRIA" #x1D030) + ("BYZANTINE MUSICAL SYMBOL TESSERA" #x1D031) + ("BYZANTINE MUSICAL SYMBOL KRATIMATA" #x1D032) + ("BYZANTINE MUSICAL SYMBOL APESO EXO NEO" #x1D033) + ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION" #x1D034) + ("BYZANTINE MUSICAL SYMBOL IMIFTHORA" #x1D035) + ("BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION" #x1D036) + ("BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON" #x1D037) + ("BYZANTINE MUSICAL SYMBOL PELASTON" #x1D038) + ("BYZANTINE MUSICAL SYMBOL PSIFISTON" #x1D039) + ("BYZANTINE MUSICAL SYMBOL KONTEVMA" #x1D03A) + ("BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION" #x1D03B) + ("BYZANTINE MUSICAL SYMBOL RAPISMA" #x1D03C) + ("BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION" #x1D03D) + ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION" #x1D03E) + ("BYZANTINE MUSICAL SYMBOL ICHADIN" #x1D03F) + ("BYZANTINE MUSICAL SYMBOL NANA" #x1D040) + ("BYZANTINE MUSICAL SYMBOL PETASMA" #x1D041) + ("BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO" #x1D042) + ("BYZANTINE MUSICAL SYMBOL TROMIKON ALLO" #x1D043) + ("BYZANTINE MUSICAL SYMBOL STRAGGISMATA" #x1D044) + ("BYZANTINE MUSICAL SYMBOL GRONTHISMATA" #x1D045) + ("BYZANTINE MUSICAL SYMBOL ISON NEO" #x1D046) + ("BYZANTINE MUSICAL SYMBOL OLIGON NEO" #x1D047) + ("BYZANTINE MUSICAL SYMBOL OXEIA NEO" #x1D048) + ("BYZANTINE MUSICAL SYMBOL PETASTI" #x1D049) + ("BYZANTINE MUSICAL SYMBOL KOUFISMA" #x1D04A) + ("BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA" #x1D04B) + ("BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA" #x1D04C) + ("BYZANTINE MUSICAL SYMBOL PELASTON NEO" #x1D04D) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO" #x1D04E) + ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO" #x1D04F) + ("BYZANTINE MUSICAL SYMBOL YPSILI" #x1D050) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO" #x1D051) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO" #x1D052) + ("BYZANTINE MUSICAL SYMBOL YPORROI" #x1D053) + ("BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON" #x1D054) + ("BYZANTINE MUSICAL SYMBOL ELAFRON" #x1D055) + ("BYZANTINE MUSICAL SYMBOL CHAMILI" #x1D056) + ("BYZANTINE MUSICAL SYMBOL MIKRON ISON" #x1D057) + ("BYZANTINE MUSICAL SYMBOL VAREIA NEO" #x1D058) + ("BYZANTINE MUSICAL SYMBOL PIASMA NEO" #x1D059) + ("BYZANTINE MUSICAL SYMBOL PSIFISTON NEO" #x1D05A) + ("BYZANTINE MUSICAL SYMBOL OMALON" #x1D05B) + ("BYZANTINE MUSICAL SYMBOL ANTIKENOMA" #x1D05C) + ("BYZANTINE MUSICAL SYMBOL LYGISMA" #x1D05D) + ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO" #x1D05E) + ("BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO" #x1D05F) + ("BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA" #x1D060) + ("BYZANTINE MUSICAL SYMBOL KYLISMA" #x1D061) + ("BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA" #x1D062) + ("BYZANTINE MUSICAL SYMBOL TROMIKON NEO" #x1D063) + ("BYZANTINE MUSICAL SYMBOL EKSTREPTON" #x1D064) + ("BYZANTINE MUSICAL SYMBOL SYNAGMA NEO" #x1D065) + ("BYZANTINE MUSICAL SYMBOL SYRMA" #x1D066) + ("BYZANTINE MUSICAL SYMBOL CHOREVMA NEO" #x1D067) + ("BYZANTINE MUSICAL SYMBOL EPEGERMA" #x1D068) + ("BYZANTINE MUSICAL SYMBOL SEISMA NEO" #x1D069) + ("BYZANTINE MUSICAL SYMBOL XIRON KLASMA" #x1D06A) + ("BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON" #x1D06B) + ("BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA" #x1D06C) + ("BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA" #x1D06D) + ("BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA" #x1D06E) + ("BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA" #x1D06F) + ("BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA" #x1D070) + ("BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA" #x1D071) + ("BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON" #x1D072) + ("BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON" #x1D073) + ("BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON" #x1D074) + ("BYZANTINE MUSICAL SYMBOL OYRANISMA NEO" #x1D075) + ("BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO" #x1D076) + ("BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO" #x1D077) + ("BYZANTINE MUSICAL SYMBOL THEMA APLOUN" #x1D078) + ("BYZANTINE MUSICAL SYMBOL THES KAI APOTHES" #x1D079) + ("BYZANTINE MUSICAL SYMBOL KATAVASMA" #x1D07A) + ("BYZANTINE MUSICAL SYMBOL ENDOFONON" #x1D07B) + ("BYZANTINE MUSICAL SYMBOL YFEN KATO" #x1D07C) + ("BYZANTINE MUSICAL SYMBOL YFEN ANO" #x1D07D) + ("BYZANTINE MUSICAL SYMBOL STAVROS" #x1D07E) + ("BYZANTINE MUSICAL SYMBOL KLASMA ANO" #x1D07F) + ("BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION" #x1D080) + ("BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION" #x1D081) + ("BYZANTINE MUSICAL SYMBOL KRATIMA ALLO" #x1D082) + ("BYZANTINE MUSICAL SYMBOL KRATIMA NEO" #x1D083) + ("BYZANTINE MUSICAL SYMBOL APODERMA NEO" #x1D084) + ("BYZANTINE MUSICAL SYMBOL APLI" #x1D085) + ("BYZANTINE MUSICAL SYMBOL DIPLI" #x1D086) + ("BYZANTINE MUSICAL SYMBOL TRIPLI" #x1D087) + ("BYZANTINE MUSICAL SYMBOL TETRAPLI" #x1D088) + ("BYZANTINE MUSICAL SYMBOL KORONIS" #x1D089) + ("BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU" #x1D08A) + ("BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON" #x1D08B) + ("BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON" #x1D08C) + ("BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON" #x1D08D) + ("BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU" #x1D08E) + ("BYZANTINE MUSICAL SYMBOL GORGON NEO ANO" #x1D08F) + ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA" #x1D090) + ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA" #x1D091) + ("BYZANTINE MUSICAL SYMBOL DIGORGON" #x1D092) + ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO" #x1D093) + ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO" #x1D094) + ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA" #x1D095) + ("BYZANTINE MUSICAL SYMBOL TRIGORGON" #x1D096) + ("BYZANTINE MUSICAL SYMBOL ARGON" #x1D097) + ("BYZANTINE MUSICAL SYMBOL IMIDIARGON" #x1D098) + ("BYZANTINE MUSICAL SYMBOL DIARGON" #x1D099) + ("BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI" #x1D09A) + ("BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI" #x1D09B) + ("BYZANTINE MUSICAL SYMBOL AGOGI ARGI" #x1D09C) + ("BYZANTINE MUSICAL SYMBOL AGOGI METRIA" #x1D09D) + ("BYZANTINE MUSICAL SYMBOL AGOGI MESI" #x1D09E) + ("BYZANTINE MUSICAL SYMBOL AGOGI GORGI" #x1D09F) + ("BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI" #x1D0A0) + ("BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI" #x1D0A1) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS" #x1D0A2) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS" #x1D0A3) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS" #x1D0A4) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS" #x1D0A5) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS" #x1D0A6) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS" #x1D0A7) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS" #x1D0A8) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS" #x1D0A9) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS" #x1D0AA) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS" #x1D0AB) + ("BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS" #x1D0AC) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS" #x1D0AD) + ("BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" #x1D0AE) + ("BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS" #x1D0AF) + ("BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS" #x1D0B0) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS" #x1D0B1) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS" #x1D0B2) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS" #x1D0B3) + ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN" #x1D0B4) + ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN" #x1D0B5) + ("BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU" #x1D0B6) + ("BYZANTINE MUSICAL SYMBOL IMIFONON" #x1D0B7) + ("BYZANTINE MUSICAL SYMBOL IMIFTHORON" #x1D0B8) + ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU" #x1D0B9) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA" #x1D0BA) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA" #x1D0BB) + ("BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS" #x1D0BC) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI" #x1D0BD) + ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI" #x1D0BE) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE" #x1D0BF) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO" #x1D0C0) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO" #x1D0C1) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO" #x1D0C2) + ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS" #x1D0C3) + ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS" #x1D0C4) + ("BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS" #x1D0C5) + ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI" #x1D0C6) + ("BYZANTINE MUSICAL SYMBOL FTHORA NENANO" #x1D0C7) + ("BYZANTINE MUSICAL SYMBOL CHROA ZYGOS" #x1D0C8) + ("BYZANTINE MUSICAL SYMBOL CHROA KLITON" #x1D0C9) + ("BYZANTINE MUSICAL SYMBOL CHROA SPATHI" #x1D0CA) + ("BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION" #x1D0CB) + ("BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA" #x1D0CC) + ("BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION" #x1D0CD) + ("BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION" #x1D0CE) + ("BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" #x1D0CF) + ("BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA" #x1D0D0) + ("BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D1) + ("BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA" #x1D0D2) + ("BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D3) + ("BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA" #x1D0D4) + ("BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D5) + ("BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA" #x1D0D6) + ("BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D7) + ("BYZANTINE MUSICAL SYMBOL GENIKI DIESIS" #x1D0D8) + ("BYZANTINE MUSICAL SYMBOL GENIKI YFESIS" #x1D0D9) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI" #x1D0DA) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI" #x1D0DB) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI" #x1D0DC) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS" #x1D0DD) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS" #x1D0DE) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU" #x1D0DF) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU" #x1D0E0) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU" #x1D0E1) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS" #x1D0E2) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU" #x1D0E3) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU" #x1D0E4) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU" #x1D0E5) + ("BYZANTINE MUSICAL SYMBOL DIGRAMMA GG" #x1D0E6) + ("BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU" #x1D0E7) + ("BYZANTINE MUSICAL SYMBOL STIGMA" #x1D0E8) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO PA" #x1D0E9) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO VOU" #x1D0EA) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO GA" #x1D0EB) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO DI" #x1D0EC) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO KE" #x1D0ED) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO ZO" #x1D0EE) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO NI" #x1D0EF) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO" #x1D0F0) + ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO" #x1D0F1) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO" #x1D0F2) + ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO" #x1D0F3) + ("BYZANTINE MUSICAL SYMBOL KLASMA KATO" #x1D0F4) + ("BYZANTINE MUSICAL SYMBOL GORGON NEO KATO" #x1D0F5) + )) + +;; arch-tag: 2b360fc3-2760-43c9-9d3e-2ef3fd8452b5 diff --git a/etc/nxml/1D100-1D1FF.el b/etc/nxml/1D100-1D1FF.el new file mode 100644 index 00000000000..1bfbf2608dd --- /dev/null +++ b/etc/nxml/1D100-1D1FF.el @@ -0,0 +1,223 @@ +(nxml-define-char-name-set 'musical-symbols + '(("MUSICAL SYMBOL SINGLE BARLINE" #x1D100) + ("MUSICAL SYMBOL DOUBLE BARLINE" #x1D101) + ("MUSICAL SYMBOL FINAL BARLINE" #x1D102) + ("MUSICAL SYMBOL REVERSE FINAL BARLINE" #x1D103) + ("MUSICAL SYMBOL DASHED BARLINE" #x1D104) + ("MUSICAL SYMBOL SHORT BARLINE" #x1D105) + ("MUSICAL SYMBOL LEFT REPEAT SIGN" #x1D106) + ("MUSICAL SYMBOL RIGHT REPEAT SIGN" #x1D107) + ("MUSICAL SYMBOL REPEAT DOTS" #x1D108) + ("MUSICAL SYMBOL DAL SEGNO" #x1D109) + ("MUSICAL SYMBOL DA CAPO" #x1D10A) + ("MUSICAL SYMBOL SEGNO" #x1D10B) + ("MUSICAL SYMBOL CODA" #x1D10C) + ("MUSICAL SYMBOL REPEATED FIGURE-1" #x1D10D) + ("MUSICAL SYMBOL REPEATED FIGURE-2" #x1D10E) + ("MUSICAL SYMBOL REPEATED FIGURE-3" #x1D10F) + ("MUSICAL SYMBOL FERMATA" #x1D110) + ("MUSICAL SYMBOL FERMATA BELOW" #x1D111) + ("MUSICAL SYMBOL BREATH MARK" #x1D112) + ("MUSICAL SYMBOL CAESURA" #x1D113) + ("MUSICAL SYMBOL BRACE" #x1D114) + ("MUSICAL SYMBOL BRACKET" #x1D115) + ("MUSICAL SYMBOL ONE-LINE STAFF" #x1D116) + ("MUSICAL SYMBOL TWO-LINE STAFF" #x1D117) + ("MUSICAL SYMBOL THREE-LINE STAFF" #x1D118) + ("MUSICAL SYMBOL FOUR-LINE STAFF" #x1D119) + ("MUSICAL SYMBOL FIVE-LINE STAFF" #x1D11A) + ("MUSICAL SYMBOL SIX-LINE STAFF" #x1D11B) + ("MUSICAL SYMBOL SIX-STRING FRETBOARD" #x1D11C) + ("MUSICAL SYMBOL FOUR-STRING FRETBOARD" #x1D11D) + ("MUSICAL SYMBOL G CLEF" #x1D11E) + ("MUSICAL SYMBOL G CLEF OTTAVA ALTA" #x1D11F) + ("MUSICAL SYMBOL G CLEF OTTAVA BASSA" #x1D120) + ("MUSICAL SYMBOL C CLEF" #x1D121) + ("MUSICAL SYMBOL F CLEF" #x1D122) + ("MUSICAL SYMBOL F CLEF OTTAVA ALTA" #x1D123) + ("MUSICAL SYMBOL F CLEF OTTAVA BASSA" #x1D124) + ("MUSICAL SYMBOL DRUM CLEF-1" #x1D125) + ("MUSICAL SYMBOL DRUM CLEF-2" #x1D126) + ("MUSICAL SYMBOL DOUBLE SHARP" #x1D12A) + ("MUSICAL SYMBOL DOUBLE FLAT" #x1D12B) + ("MUSICAL SYMBOL FLAT UP" #x1D12C) + ("MUSICAL SYMBOL FLAT DOWN" #x1D12D) + ("MUSICAL SYMBOL NATURAL UP" #x1D12E) + ("MUSICAL SYMBOL NATURAL DOWN" #x1D12F) + ("MUSICAL SYMBOL SHARP UP" #x1D130) + ("MUSICAL SYMBOL SHARP DOWN" #x1D131) + ("MUSICAL SYMBOL QUARTER TONE SHARP" #x1D132) + ("MUSICAL SYMBOL QUARTER TONE FLAT" #x1D133) + ("MUSICAL SYMBOL COMMON TIME" #x1D134) + ("MUSICAL SYMBOL CUT TIME" #x1D135) + ("MUSICAL SYMBOL OTTAVA ALTA" #x1D136) + ("MUSICAL SYMBOL OTTAVA BASSA" #x1D137) + ("MUSICAL SYMBOL QUINDICESIMA ALTA" #x1D138) + ("MUSICAL SYMBOL QUINDICESIMA BASSA" #x1D139) + ("MUSICAL SYMBOL MULTI REST" #x1D13A) + ("MUSICAL SYMBOL WHOLE REST" #x1D13B) + ("MUSICAL SYMBOL HALF REST" #x1D13C) + ("MUSICAL SYMBOL QUARTER REST" #x1D13D) + ("MUSICAL SYMBOL EIGHTH REST" #x1D13E) + ("MUSICAL SYMBOL SIXTEENTH REST" #x1D13F) + ("MUSICAL SYMBOL THIRTY-SECOND REST" #x1D140) + ("MUSICAL SYMBOL SIXTY-FOURTH REST" #x1D141) + ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST" #x1D142) + ("MUSICAL SYMBOL X NOTEHEAD" #x1D143) + ("MUSICAL SYMBOL PLUS NOTEHEAD" #x1D144) + ("MUSICAL SYMBOL CIRCLE X NOTEHEAD" #x1D145) + ("MUSICAL SYMBOL SQUARE NOTEHEAD WHITE" #x1D146) + ("MUSICAL SYMBOL SQUARE NOTEHEAD BLACK" #x1D147) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE" #x1D148) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK" #x1D149) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE" #x1D14A) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK" #x1D14B) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE" #x1D14C) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" #x1D14D) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE" #x1D14E) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK" #x1D14F) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE" #x1D150) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK" #x1D151) + ("MUSICAL SYMBOL MOON NOTEHEAD WHITE" #x1D152) + ("MUSICAL SYMBOL MOON NOTEHEAD BLACK" #x1D153) + ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE" #x1D154) + ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK" #x1D155) + ("MUSICAL SYMBOL PARENTHESIS NOTEHEAD" #x1D156) + ("MUSICAL SYMBOL VOID NOTEHEAD" #x1D157) + ("MUSICAL SYMBOL NOTEHEAD BLACK" #x1D158) + ("MUSICAL SYMBOL NULL NOTEHEAD" #x1D159) + ("MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE" #x1D15A) + ("MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK" #x1D15B) + ("MUSICAL SYMBOL BREVE" #x1D15C) + ("MUSICAL SYMBOL WHOLE NOTE" #x1D15D) + ("MUSICAL SYMBOL HALF NOTE" #x1D15E) + ("MUSICAL SYMBOL QUARTER NOTE" #x1D15F) + ("MUSICAL SYMBOL EIGHTH NOTE" #x1D160) + ("MUSICAL SYMBOL SIXTEENTH NOTE" #x1D161) + ("MUSICAL SYMBOL THIRTY-SECOND NOTE" #x1D162) + ("MUSICAL SYMBOL SIXTY-FOURTH NOTE" #x1D163) + ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE" #x1D164) + ("MUSICAL SYMBOL COMBINING STEM" #x1D165) + ("MUSICAL SYMBOL COMBINING SPRECHGESANG STEM" #x1D166) + ("MUSICAL SYMBOL COMBINING TREMOLO-1" #x1D167) + ("MUSICAL SYMBOL COMBINING TREMOLO-2" #x1D168) + ("MUSICAL SYMBOL COMBINING TREMOLO-3" #x1D169) + ("MUSICAL SYMBOL FINGERED TREMOLO-1" #x1D16A) + ("MUSICAL SYMBOL FINGERED TREMOLO-2" #x1D16B) + ("MUSICAL SYMBOL FINGERED TREMOLO-3" #x1D16C) + ("MUSICAL SYMBOL COMBINING AUGMENTATION DOT" #x1D16D) + ("MUSICAL SYMBOL COMBINING FLAG-1" #x1D16E) + ("MUSICAL SYMBOL COMBINING FLAG-2" #x1D16F) + ("MUSICAL SYMBOL COMBINING FLAG-3" #x1D170) + ("MUSICAL SYMBOL COMBINING FLAG-4" #x1D171) + ("MUSICAL SYMBOL COMBINING FLAG-5" #x1D172) + ("MUSICAL SYMBOL BEGIN BEAM" #x1D173) + ("MUSICAL SYMBOL END BEAM" #x1D174) + ("MUSICAL SYMBOL BEGIN TIE" #x1D175) + ("MUSICAL SYMBOL END TIE" #x1D176) + ("MUSICAL SYMBOL BEGIN SLUR" #x1D177) + ("MUSICAL SYMBOL END SLUR" #x1D178) + ("MUSICAL SYMBOL BEGIN PHRASE" #x1D179) + ("MUSICAL SYMBOL END PHRASE" #x1D17A) + ("MUSICAL SYMBOL COMBINING ACCENT" #x1D17B) + ("MUSICAL SYMBOL COMBINING STACCATO" #x1D17C) + ("MUSICAL SYMBOL COMBINING TENUTO" #x1D17D) + ("MUSICAL SYMBOL COMBINING STACCATISSIMO" #x1D17E) + ("MUSICAL SYMBOL COMBINING MARCATO" #x1D17F) + ("MUSICAL SYMBOL COMBINING MARCATO-STACCATO" #x1D180) + ("MUSICAL SYMBOL COMBINING ACCENT-STACCATO" #x1D181) + ("MUSICAL SYMBOL COMBINING LOURE" #x1D182) + ("MUSICAL SYMBOL ARPEGGIATO UP" #x1D183) + ("MUSICAL SYMBOL ARPEGGIATO DOWN" #x1D184) + ("MUSICAL SYMBOL COMBINING DOIT" #x1D185) + ("MUSICAL SYMBOL COMBINING RIP" #x1D186) + ("MUSICAL SYMBOL COMBINING FLIP" #x1D187) + ("MUSICAL SYMBOL COMBINING SMEAR" #x1D188) + ("MUSICAL SYMBOL COMBINING BEND" #x1D189) + ("MUSICAL SYMBOL COMBINING DOUBLE TONGUE" #x1D18A) + ("MUSICAL SYMBOL COMBINING TRIPLE TONGUE" #x1D18B) + ("MUSICAL SYMBOL RINFORZANDO" #x1D18C) + ("MUSICAL SYMBOL SUBITO" #x1D18D) + ("MUSICAL SYMBOL Z" #x1D18E) + ("MUSICAL SYMBOL PIANO" #x1D18F) + ("MUSICAL SYMBOL MEZZO" #x1D190) + ("MUSICAL SYMBOL FORTE" #x1D191) + ("MUSICAL SYMBOL CRESCENDO" #x1D192) + ("MUSICAL SYMBOL DECRESCENDO" #x1D193) + ("MUSICAL SYMBOL GRACE NOTE SLASH" #x1D194) + ("MUSICAL SYMBOL GRACE NOTE NO SLASH" #x1D195) + ("MUSICAL SYMBOL TR" #x1D196) + ("MUSICAL SYMBOL TURN" #x1D197) + ("MUSICAL SYMBOL INVERTED TURN" #x1D198) + ("MUSICAL SYMBOL TURN SLASH" #x1D199) + ("MUSICAL SYMBOL TURN UP" #x1D19A) + ("MUSICAL SYMBOL ORNAMENT STROKE-1" #x1D19B) + ("MUSICAL SYMBOL ORNAMENT STROKE-2" #x1D19C) + ("MUSICAL SYMBOL ORNAMENT STROKE-3" #x1D19D) + ("MUSICAL SYMBOL ORNAMENT STROKE-4" #x1D19E) + ("MUSICAL SYMBOL ORNAMENT STROKE-5" #x1D19F) + ("MUSICAL SYMBOL ORNAMENT STROKE-6" #x1D1A0) + ("MUSICAL SYMBOL ORNAMENT STROKE-7" #x1D1A1) + ("MUSICAL SYMBOL ORNAMENT STROKE-8" #x1D1A2) + ("MUSICAL SYMBOL ORNAMENT STROKE-9" #x1D1A3) + ("MUSICAL SYMBOL ORNAMENT STROKE-10" #x1D1A4) + ("MUSICAL SYMBOL ORNAMENT STROKE-11" #x1D1A5) + ("MUSICAL SYMBOL HAUPTSTIMME" #x1D1A6) + ("MUSICAL SYMBOL NEBENSTIMME" #x1D1A7) + ("MUSICAL SYMBOL END OF STIMME" #x1D1A8) + ("MUSICAL SYMBOL DEGREE SLASH" #x1D1A9) + ("MUSICAL SYMBOL COMBINING DOWN BOW" #x1D1AA) + ("MUSICAL SYMBOL COMBINING UP BOW" #x1D1AB) + ("MUSICAL SYMBOL COMBINING HARMONIC" #x1D1AC) + ("MUSICAL SYMBOL COMBINING SNAP PIZZICATO" #x1D1AD) + ("MUSICAL SYMBOL PEDAL MARK" #x1D1AE) + ("MUSICAL SYMBOL PEDAL UP MARK" #x1D1AF) + ("MUSICAL SYMBOL HALF PEDAL MARK" #x1D1B0) + ("MUSICAL SYMBOL GLISSANDO UP" #x1D1B1) + ("MUSICAL SYMBOL GLISSANDO DOWN" #x1D1B2) + ("MUSICAL SYMBOL WITH FINGERNAILS" #x1D1B3) + ("MUSICAL SYMBOL DAMP" #x1D1B4) + ("MUSICAL SYMBOL DAMP ALL" #x1D1B5) + ("MUSICAL SYMBOL MAXIMA" #x1D1B6) + ("MUSICAL SYMBOL LONGA" #x1D1B7) + ("MUSICAL SYMBOL BREVIS" #x1D1B8) + ("MUSICAL SYMBOL SEMIBREVIS WHITE" #x1D1B9) + ("MUSICAL SYMBOL SEMIBREVIS BLACK" #x1D1BA) + ("MUSICAL SYMBOL MINIMA" #x1D1BB) + ("MUSICAL SYMBOL MINIMA BLACK" #x1D1BC) + ("MUSICAL SYMBOL SEMIMINIMA WHITE" #x1D1BD) + ("MUSICAL SYMBOL SEMIMINIMA BLACK" #x1D1BE) + ("MUSICAL SYMBOL FUSA WHITE" #x1D1BF) + ("MUSICAL SYMBOL FUSA BLACK" #x1D1C0) + ("MUSICAL SYMBOL LONGA PERFECTA REST" #x1D1C1) + ("MUSICAL SYMBOL LONGA IMPERFECTA REST" #x1D1C2) + ("MUSICAL SYMBOL BREVIS REST" #x1D1C3) + ("MUSICAL SYMBOL SEMIBREVIS REST" #x1D1C4) + ("MUSICAL SYMBOL MINIMA REST" #x1D1C5) + ("MUSICAL SYMBOL SEMIMINIMA REST" #x1D1C6) + ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA" #x1D1C7) + ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1C8) + ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1" #x1D1C9) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA" #x1D1CA) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1CB) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1" #x1D1CC) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2" #x1D1CD) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3" #x1D1CE) + ("MUSICAL SYMBOL CROIX" #x1D1CF) + ("MUSICAL SYMBOL GREGORIAN C CLEF" #x1D1D0) + ("MUSICAL SYMBOL GREGORIAN F CLEF" #x1D1D1) + ("MUSICAL SYMBOL SQUARE B" #x1D1D2) + ("MUSICAL SYMBOL VIRGA" #x1D1D3) + ("MUSICAL SYMBOL PODATUS" #x1D1D4) + ("MUSICAL SYMBOL CLIVIS" #x1D1D5) + ("MUSICAL SYMBOL SCANDICUS" #x1D1D6) + ("MUSICAL SYMBOL CLIMACUS" #x1D1D7) + ("MUSICAL SYMBOL TORCULUS" #x1D1D8) + ("MUSICAL SYMBOL PORRECTUS" #x1D1D9) + ("MUSICAL SYMBOL PORRECTUS FLEXUS" #x1D1DA) + ("MUSICAL SYMBOL SCANDICUS FLEXUS" #x1D1DB) + ("MUSICAL SYMBOL TORCULUS RESUPINUS" #x1D1DC) + ("MUSICAL SYMBOL PES SUBPUNCTIS" #x1D1DD) + )) + +;; arch-tag: 4e6bd082-bedb-46a2-81be-06f86fbb74f4 diff --git a/etc/nxml/1D400-1D7FF.el b/etc/nxml/1D400-1D7FF.el new file mode 100644 index 00000000000..f702765c55f --- /dev/null +++ b/etc/nxml/1D400-1D7FF.el @@ -0,0 +1,995 @@ +(nxml-define-char-name-set 'mathematical-alphanumeric-symbols + '(("MATHEMATICAL BOLD CAPITAL A" #x1D400) + ("MATHEMATICAL BOLD CAPITAL B" #x1D401) + ("MATHEMATICAL BOLD CAPITAL C" #x1D402) + ("MATHEMATICAL BOLD CAPITAL D" #x1D403) + ("MATHEMATICAL BOLD CAPITAL E" #x1D404) + ("MATHEMATICAL BOLD CAPITAL F" #x1D405) + ("MATHEMATICAL BOLD CAPITAL G" #x1D406) + ("MATHEMATICAL BOLD CAPITAL H" #x1D407) + ("MATHEMATICAL BOLD CAPITAL I" #x1D408) + ("MATHEMATICAL BOLD CAPITAL J" #x1D409) + ("MATHEMATICAL BOLD CAPITAL K" #x1D40A) + ("MATHEMATICAL BOLD CAPITAL L" #x1D40B) + ("MATHEMATICAL BOLD CAPITAL M" #x1D40C) + ("MATHEMATICAL BOLD CAPITAL N" #x1D40D) + ("MATHEMATICAL BOLD CAPITAL O" #x1D40E) + ("MATHEMATICAL BOLD CAPITAL P" #x1D40F) + ("MATHEMATICAL BOLD CAPITAL Q" #x1D410) + ("MATHEMATICAL BOLD CAPITAL R" #x1D411) + ("MATHEMATICAL BOLD CAPITAL S" #x1D412) + ("MATHEMATICAL BOLD CAPITAL T" #x1D413) + ("MATHEMATICAL BOLD CAPITAL U" #x1D414) + ("MATHEMATICAL BOLD CAPITAL V" #x1D415) + ("MATHEMATICAL BOLD CAPITAL W" #x1D416) + ("MATHEMATICAL BOLD CAPITAL X" #x1D417) + ("MATHEMATICAL BOLD CAPITAL Y" #x1D418) + ("MATHEMATICAL BOLD CAPITAL Z" #x1D419) + ("MATHEMATICAL BOLD SMALL A" #x1D41A) + ("MATHEMATICAL BOLD SMALL B" #x1D41B) + ("MATHEMATICAL BOLD SMALL C" #x1D41C) + ("MATHEMATICAL BOLD SMALL D" #x1D41D) + ("MATHEMATICAL BOLD SMALL E" #x1D41E) + ("MATHEMATICAL BOLD SMALL F" #x1D41F) + ("MATHEMATICAL BOLD SMALL G" #x1D420) + ("MATHEMATICAL BOLD SMALL H" #x1D421) + ("MATHEMATICAL BOLD SMALL I" #x1D422) + ("MATHEMATICAL BOLD SMALL J" #x1D423) + ("MATHEMATICAL BOLD SMALL K" #x1D424) + ("MATHEMATICAL BOLD SMALL L" #x1D425) + ("MATHEMATICAL BOLD SMALL M" #x1D426) + ("MATHEMATICAL BOLD SMALL N" #x1D427) + ("MATHEMATICAL BOLD SMALL O" #x1D428) + ("MATHEMATICAL BOLD SMALL P" #x1D429) + ("MATHEMATICAL BOLD SMALL Q" #x1D42A) + ("MATHEMATICAL BOLD SMALL R" #x1D42B) + ("MATHEMATICAL BOLD SMALL S" #x1D42C) + ("MATHEMATICAL BOLD SMALL T" #x1D42D) + ("MATHEMATICAL BOLD SMALL U" #x1D42E) + ("MATHEMATICAL BOLD SMALL V" #x1D42F) + ("MATHEMATICAL BOLD SMALL W" #x1D430) + ("MATHEMATICAL BOLD SMALL X" #x1D431) + ("MATHEMATICAL BOLD SMALL Y" #x1D432) + ("MATHEMATICAL BOLD SMALL Z" #x1D433) + ("MATHEMATICAL ITALIC CAPITAL A" #x1D434) + ("MATHEMATICAL ITALIC CAPITAL B" #x1D435) + ("MATHEMATICAL ITALIC CAPITAL C" #x1D436) + ("MATHEMATICAL ITALIC CAPITAL D" #x1D437) + ("MATHEMATICAL ITALIC CAPITAL E" #x1D438) + ("MATHEMATICAL ITALIC CAPITAL F" #x1D439) + ("MATHEMATICAL ITALIC CAPITAL G" #x1D43A) + ("MATHEMATICAL ITALIC CAPITAL H" #x1D43B) + ("MATHEMATICAL ITALIC CAPITAL I" #x1D43C) + ("MATHEMATICAL ITALIC CAPITAL J" #x1D43D) + ("MATHEMATICAL ITALIC CAPITAL K" #x1D43E) + ("MATHEMATICAL ITALIC CAPITAL L" #x1D43F) + ("MATHEMATICAL ITALIC CAPITAL M" #x1D440) + ("MATHEMATICAL ITALIC CAPITAL N" #x1D441) + ("MATHEMATICAL ITALIC CAPITAL O" #x1D442) + ("MATHEMATICAL ITALIC CAPITAL P" #x1D443) + ("MATHEMATICAL ITALIC CAPITAL Q" #x1D444) + ("MATHEMATICAL ITALIC CAPITAL R" #x1D445) + ("MATHEMATICAL ITALIC CAPITAL S" #x1D446) + ("MATHEMATICAL ITALIC CAPITAL T" #x1D447) + ("MATHEMATICAL ITALIC CAPITAL U" #x1D448) + ("MATHEMATICAL ITALIC CAPITAL V" #x1D449) + ("MATHEMATICAL ITALIC CAPITAL W" #x1D44A) + ("MATHEMATICAL ITALIC CAPITAL X" #x1D44B) + ("MATHEMATICAL ITALIC CAPITAL Y" #x1D44C) + ("MATHEMATICAL ITALIC CAPITAL Z" #x1D44D) + ("MATHEMATICAL ITALIC SMALL A" #x1D44E) + ("MATHEMATICAL ITALIC SMALL B" #x1D44F) + ("MATHEMATICAL ITALIC SMALL C" #x1D450) + ("MATHEMATICAL ITALIC SMALL D" #x1D451) + ("MATHEMATICAL ITALIC SMALL E" #x1D452) + ("MATHEMATICAL ITALIC SMALL F" #x1D453) + ("MATHEMATICAL ITALIC SMALL G" #x1D454) + ("MATHEMATICAL ITALIC SMALL I" #x1D456) + ("MATHEMATICAL ITALIC SMALL J" #x1D457) + ("MATHEMATICAL ITALIC SMALL K" #x1D458) + ("MATHEMATICAL ITALIC SMALL L" #x1D459) + ("MATHEMATICAL ITALIC SMALL M" #x1D45A) + ("MATHEMATICAL ITALIC SMALL N" #x1D45B) + ("MATHEMATICAL ITALIC SMALL O" #x1D45C) + ("MATHEMATICAL ITALIC SMALL P" #x1D45D) + ("MATHEMATICAL ITALIC SMALL Q" #x1D45E) + ("MATHEMATICAL ITALIC SMALL R" #x1D45F) + ("MATHEMATICAL ITALIC SMALL S" #x1D460) + ("MATHEMATICAL ITALIC SMALL T" #x1D461) + ("MATHEMATICAL ITALIC SMALL U" #x1D462) + ("MATHEMATICAL ITALIC SMALL V" #x1D463) + ("MATHEMATICAL ITALIC SMALL W" #x1D464) + ("MATHEMATICAL ITALIC SMALL X" #x1D465) + ("MATHEMATICAL ITALIC SMALL Y" #x1D466) + ("MATHEMATICAL ITALIC SMALL Z" #x1D467) + ("MATHEMATICAL BOLD ITALIC CAPITAL A" #x1D468) + ("MATHEMATICAL BOLD ITALIC CAPITAL B" #x1D469) + ("MATHEMATICAL BOLD ITALIC CAPITAL C" #x1D46A) + ("MATHEMATICAL BOLD ITALIC CAPITAL D" #x1D46B) + ("MATHEMATICAL BOLD ITALIC CAPITAL E" #x1D46C) + ("MATHEMATICAL BOLD ITALIC CAPITAL F" #x1D46D) + ("MATHEMATICAL BOLD ITALIC CAPITAL G" #x1D46E) + ("MATHEMATICAL BOLD ITALIC CAPITAL H" #x1D46F) + ("MATHEMATICAL BOLD ITALIC CAPITAL I" #x1D470) + ("MATHEMATICAL BOLD ITALIC CAPITAL J" #x1D471) + ("MATHEMATICAL BOLD ITALIC CAPITAL K" #x1D472) + ("MATHEMATICAL BOLD ITALIC CAPITAL L" #x1D473) + ("MATHEMATICAL BOLD ITALIC CAPITAL M" #x1D474) + ("MATHEMATICAL BOLD ITALIC CAPITAL N" #x1D475) + ("MATHEMATICAL BOLD ITALIC CAPITAL O" #x1D476) + ("MATHEMATICAL BOLD ITALIC CAPITAL P" #x1D477) + ("MATHEMATICAL BOLD ITALIC CAPITAL Q" #x1D478) + ("MATHEMATICAL BOLD ITALIC CAPITAL R" #x1D479) + ("MATHEMATICAL BOLD ITALIC CAPITAL S" #x1D47A) + ("MATHEMATICAL BOLD ITALIC CAPITAL T" #x1D47B) + ("MATHEMATICAL BOLD ITALIC CAPITAL U" #x1D47C) + ("MATHEMATICAL BOLD ITALIC CAPITAL V" #x1D47D) + ("MATHEMATICAL BOLD ITALIC CAPITAL W" #x1D47E) + ("MATHEMATICAL BOLD ITALIC CAPITAL X" #x1D47F) + ("MATHEMATICAL BOLD ITALIC CAPITAL Y" #x1D480) + ("MATHEMATICAL BOLD ITALIC CAPITAL Z" #x1D481) + ("MATHEMATICAL BOLD ITALIC SMALL A" #x1D482) + ("MATHEMATICAL BOLD ITALIC SMALL B" #x1D483) + ("MATHEMATICAL BOLD ITALIC SMALL C" #x1D484) + ("MATHEMATICAL BOLD ITALIC SMALL D" #x1D485) + ("MATHEMATICAL BOLD ITALIC SMALL E" #x1D486) + ("MATHEMATICAL BOLD ITALIC SMALL F" #x1D487) + ("MATHEMATICAL BOLD ITALIC SMALL G" #x1D488) + ("MATHEMATICAL BOLD ITALIC SMALL H" #x1D489) + ("MATHEMATICAL BOLD ITALIC SMALL I" #x1D48A) + ("MATHEMATICAL BOLD ITALIC SMALL J" #x1D48B) + ("MATHEMATICAL BOLD ITALIC SMALL K" #x1D48C) + ("MATHEMATICAL BOLD ITALIC SMALL L" #x1D48D) + ("MATHEMATICAL BOLD ITALIC SMALL M" #x1D48E) + ("MATHEMATICAL BOLD ITALIC SMALL N" #x1D48F) + ("MATHEMATICAL BOLD ITALIC SMALL O" #x1D490) + ("MATHEMATICAL BOLD ITALIC SMALL P" #x1D491) + ("MATHEMATICAL BOLD ITALIC SMALL Q" #x1D492) + ("MATHEMATICAL BOLD ITALIC SMALL R" #x1D493) + ("MATHEMATICAL BOLD ITALIC SMALL S" #x1D494) + ("MATHEMATICAL BOLD ITALIC SMALL T" #x1D495) + ("MATHEMATICAL BOLD ITALIC SMALL U" #x1D496) + ("MATHEMATICAL BOLD ITALIC SMALL V" #x1D497) + ("MATHEMATICAL BOLD ITALIC SMALL W" #x1D498) + ("MATHEMATICAL BOLD ITALIC SMALL X" #x1D499) + ("MATHEMATICAL BOLD ITALIC SMALL Y" #x1D49A) + ("MATHEMATICAL BOLD ITALIC SMALL Z" #x1D49B) + ("MATHEMATICAL SCRIPT CAPITAL A" #x1D49C) + ("MATHEMATICAL SCRIPT CAPITAL C" #x1D49E) + ("MATHEMATICAL SCRIPT CAPITAL D" #x1D49F) + ("MATHEMATICAL SCRIPT CAPITAL G" #x1D4A2) + ("MATHEMATICAL SCRIPT CAPITAL J" #x1D4A5) + ("MATHEMATICAL SCRIPT CAPITAL K" #x1D4A6) + ("MATHEMATICAL SCRIPT CAPITAL N" #x1D4A9) + ("MATHEMATICAL SCRIPT CAPITAL O" #x1D4AA) + ("MATHEMATICAL SCRIPT CAPITAL P" #x1D4AB) + ("MATHEMATICAL SCRIPT CAPITAL Q" #x1D4AC) + ("MATHEMATICAL SCRIPT CAPITAL S" #x1D4AE) + ("MATHEMATICAL SCRIPT CAPITAL T" #x1D4AF) + ("MATHEMATICAL SCRIPT CAPITAL U" #x1D4B0) + ("MATHEMATICAL SCRIPT CAPITAL V" #x1D4B1) + ("MATHEMATICAL SCRIPT CAPITAL W" #x1D4B2) + ("MATHEMATICAL SCRIPT CAPITAL X" #x1D4B3) + ("MATHEMATICAL SCRIPT CAPITAL Y" #x1D4B4) + ("MATHEMATICAL SCRIPT CAPITAL Z" #x1D4B5) + ("MATHEMATICAL SCRIPT SMALL A" #x1D4B6) + ("MATHEMATICAL SCRIPT SMALL B" #x1D4B7) + ("MATHEMATICAL SCRIPT SMALL C" #x1D4B8) + ("MATHEMATICAL SCRIPT SMALL D" #x1D4B9) + ("MATHEMATICAL SCRIPT SMALL F" #x1D4BB) + ("MATHEMATICAL SCRIPT SMALL H" #x1D4BD) + ("MATHEMATICAL SCRIPT SMALL I" #x1D4BE) + ("MATHEMATICAL SCRIPT SMALL J" #x1D4BF) + ("MATHEMATICAL SCRIPT SMALL K" #x1D4C0) + ("MATHEMATICAL SCRIPT SMALL M" #x1D4C2) + ("MATHEMATICAL SCRIPT SMALL N" #x1D4C3) + ("MATHEMATICAL SCRIPT SMALL P" #x1D4C5) + ("MATHEMATICAL SCRIPT SMALL Q" #x1D4C6) + ("MATHEMATICAL SCRIPT SMALL R" #x1D4C7) + ("MATHEMATICAL SCRIPT SMALL S" #x1D4C8) + ("MATHEMATICAL SCRIPT SMALL T" #x1D4C9) + ("MATHEMATICAL SCRIPT SMALL U" #x1D4CA) + ("MATHEMATICAL SCRIPT SMALL V" #x1D4CB) + ("MATHEMATICAL SCRIPT SMALL W" #x1D4CC) + ("MATHEMATICAL SCRIPT SMALL X" #x1D4CD) + ("MATHEMATICAL SCRIPT SMALL Y" #x1D4CE) + ("MATHEMATICAL SCRIPT SMALL Z" #x1D4CF) + ("MATHEMATICAL BOLD SCRIPT CAPITAL A" #x1D4D0) + ("MATHEMATICAL BOLD SCRIPT CAPITAL B" #x1D4D1) + ("MATHEMATICAL BOLD SCRIPT CAPITAL C" #x1D4D2) + ("MATHEMATICAL BOLD SCRIPT CAPITAL D" #x1D4D3) + ("MATHEMATICAL BOLD SCRIPT CAPITAL E" #x1D4D4) + ("MATHEMATICAL BOLD SCRIPT CAPITAL F" #x1D4D5) + ("MATHEMATICAL BOLD SCRIPT CAPITAL G" #x1D4D6) + ("MATHEMATICAL BOLD SCRIPT CAPITAL H" #x1D4D7) + ("MATHEMATICAL BOLD SCRIPT CAPITAL I" #x1D4D8) + ("MATHEMATICAL BOLD SCRIPT CAPITAL J" #x1D4D9) + ("MATHEMATICAL BOLD SCRIPT CAPITAL K" #x1D4DA) + ("MATHEMATICAL BOLD SCRIPT CAPITAL L" #x1D4DB) + ("MATHEMATICAL BOLD SCRIPT CAPITAL M" #x1D4DC) + ("MATHEMATICAL BOLD SCRIPT CAPITAL N" #x1D4DD) + ("MATHEMATICAL BOLD SCRIPT CAPITAL O" #x1D4DE) + ("MATHEMATICAL BOLD SCRIPT CAPITAL P" #x1D4DF) + ("MATHEMATICAL BOLD SCRIPT CAPITAL Q" #x1D4E0) + ("MATHEMATICAL BOLD SCRIPT CAPITAL R" #x1D4E1) + ("MATHEMATICAL BOLD SCRIPT CAPITAL S" #x1D4E2) + ("MATHEMATICAL BOLD SCRIPT CAPITAL T" #x1D4E3) + ("MATHEMATICAL BOLD SCRIPT CAPITAL U" #x1D4E4) + ("MATHEMATICAL BOLD SCRIPT CAPITAL V" #x1D4E5) + ("MATHEMATICAL BOLD SCRIPT CAPITAL W" #x1D4E6) + ("MATHEMATICAL BOLD SCRIPT CAPITAL X" #x1D4E7) + ("MATHEMATICAL BOLD SCRIPT CAPITAL Y" #x1D4E8) + ("MATHEMATICAL BOLD SCRIPT CAPITAL Z" #x1D4E9) + ("MATHEMATICAL BOLD SCRIPT SMALL A" #x1D4EA) + ("MATHEMATICAL BOLD SCRIPT SMALL B" #x1D4EB) + ("MATHEMATICAL BOLD SCRIPT SMALL C" #x1D4EC) + ("MATHEMATICAL BOLD SCRIPT SMALL D" #x1D4ED) + ("MATHEMATICAL BOLD SCRIPT SMALL E" #x1D4EE) + ("MATHEMATICAL BOLD SCRIPT SMALL F" #x1D4EF) + ("MATHEMATICAL BOLD SCRIPT SMALL G" #x1D4F0) + ("MATHEMATICAL BOLD SCRIPT SMALL H" #x1D4F1) + ("MATHEMATICAL BOLD SCRIPT SMALL I" #x1D4F2) + ("MATHEMATICAL BOLD SCRIPT SMALL J" #x1D4F3) + ("MATHEMATICAL BOLD SCRIPT SMALL K" #x1D4F4) + ("MATHEMATICAL BOLD SCRIPT SMALL L" #x1D4F5) + ("MATHEMATICAL BOLD SCRIPT SMALL M" #x1D4F6) + ("MATHEMATICAL BOLD SCRIPT SMALL N" #x1D4F7) + ("MATHEMATICAL BOLD SCRIPT SMALL O" #x1D4F8) + ("MATHEMATICAL BOLD SCRIPT SMALL P" #x1D4F9) + ("MATHEMATICAL BOLD SCRIPT SMALL Q" #x1D4FA) + ("MATHEMATICAL BOLD SCRIPT SMALL R" #x1D4FB) + ("MATHEMATICAL BOLD SCRIPT SMALL S" #x1D4FC) + ("MATHEMATICAL BOLD SCRIPT SMALL T" #x1D4FD) + ("MATHEMATICAL BOLD SCRIPT SMALL U" #x1D4FE) + ("MATHEMATICAL BOLD SCRIPT SMALL V" #x1D4FF) + ("MATHEMATICAL BOLD SCRIPT SMALL W" #x1D500) + ("MATHEMATICAL BOLD SCRIPT SMALL X" #x1D501) + ("MATHEMATICAL BOLD SCRIPT SMALL Y" #x1D502) + ("MATHEMATICAL BOLD SCRIPT SMALL Z" #x1D503) + ("MATHEMATICAL FRAKTUR CAPITAL A" #x1D504) + ("MATHEMATICAL FRAKTUR CAPITAL B" #x1D505) + ("MATHEMATICAL FRAKTUR CAPITAL D" #x1D507) + ("MATHEMATICAL FRAKTUR CAPITAL E" #x1D508) + ("MATHEMATICAL FRAKTUR CAPITAL F" #x1D509) + ("MATHEMATICAL FRAKTUR CAPITAL G" #x1D50A) + ("MATHEMATICAL FRAKTUR CAPITAL J" #x1D50D) + ("MATHEMATICAL FRAKTUR CAPITAL K" #x1D50E) + ("MATHEMATICAL FRAKTUR CAPITAL L" #x1D50F) + ("MATHEMATICAL FRAKTUR CAPITAL M" #x1D510) + ("MATHEMATICAL FRAKTUR CAPITAL N" #x1D511) + ("MATHEMATICAL FRAKTUR CAPITAL O" #x1D512) + ("MATHEMATICAL FRAKTUR CAPITAL P" #x1D513) + ("MATHEMATICAL FRAKTUR CAPITAL Q" #x1D514) + ("MATHEMATICAL FRAKTUR CAPITAL S" #x1D516) + ("MATHEMATICAL FRAKTUR CAPITAL T" #x1D517) + ("MATHEMATICAL FRAKTUR CAPITAL U" #x1D518) + ("MATHEMATICAL FRAKTUR CAPITAL V" #x1D519) + ("MATHEMATICAL FRAKTUR CAPITAL W" #x1D51A) + ("MATHEMATICAL FRAKTUR CAPITAL X" #x1D51B) + ("MATHEMATICAL FRAKTUR CAPITAL Y" #x1D51C) + ("MATHEMATICAL FRAKTUR SMALL A" #x1D51E) + ("MATHEMATICAL FRAKTUR SMALL B" #x1D51F) + ("MATHEMATICAL FRAKTUR SMALL C" #x1D520) + ("MATHEMATICAL FRAKTUR SMALL D" #x1D521) + ("MATHEMATICAL FRAKTUR SMALL E" #x1D522) + ("MATHEMATICAL FRAKTUR SMALL F" #x1D523) + ("MATHEMATICAL FRAKTUR SMALL G" #x1D524) + ("MATHEMATICAL FRAKTUR SMALL H" #x1D525) + ("MATHEMATICAL FRAKTUR SMALL I" #x1D526) + ("MATHEMATICAL FRAKTUR SMALL J" #x1D527) + ("MATHEMATICAL FRAKTUR SMALL K" #x1D528) + ("MATHEMATICAL FRAKTUR SMALL L" #x1D529) + ("MATHEMATICAL FRAKTUR SMALL M" #x1D52A) + ("MATHEMATICAL FRAKTUR SMALL N" #x1D52B) + ("MATHEMATICAL FRAKTUR SMALL O" #x1D52C) + ("MATHEMATICAL FRAKTUR SMALL P" #x1D52D) + ("MATHEMATICAL FRAKTUR SMALL Q" #x1D52E) + ("MATHEMATICAL FRAKTUR SMALL R" #x1D52F) + ("MATHEMATICAL FRAKTUR SMALL S" #x1D530) + ("MATHEMATICAL FRAKTUR SMALL T" #x1D531) + ("MATHEMATICAL FRAKTUR SMALL U" #x1D532) + ("MATHEMATICAL FRAKTUR SMALL V" #x1D533) + ("MATHEMATICAL FRAKTUR SMALL W" #x1D534) + ("MATHEMATICAL FRAKTUR SMALL X" #x1D535) + ("MATHEMATICAL FRAKTUR SMALL Y" #x1D536) + ("MATHEMATICAL FRAKTUR SMALL Z" #x1D537) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL A" #x1D538) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL B" #x1D539) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL D" #x1D53B) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL E" #x1D53C) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL F" #x1D53D) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL G" #x1D53E) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL I" #x1D540) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL J" #x1D541) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL K" #x1D542) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL L" #x1D543) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL M" #x1D544) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL O" #x1D546) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL S" #x1D54A) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL T" #x1D54B) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL U" #x1D54C) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL V" #x1D54D) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL W" #x1D54E) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL X" #x1D54F) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL Y" #x1D550) + ("MATHEMATICAL DOUBLE-STRUCK SMALL A" #x1D552) + ("MATHEMATICAL DOUBLE-STRUCK SMALL B" #x1D553) + ("MATHEMATICAL DOUBLE-STRUCK SMALL C" #x1D554) + ("MATHEMATICAL DOUBLE-STRUCK SMALL D" #x1D555) + ("MATHEMATICAL DOUBLE-STRUCK SMALL E" #x1D556) + ("MATHEMATICAL DOUBLE-STRUCK SMALL F" #x1D557) + ("MATHEMATICAL DOUBLE-STRUCK SMALL G" #x1D558) + ("MATHEMATICAL DOUBLE-STRUCK SMALL H" #x1D559) + ("MATHEMATICAL DOUBLE-STRUCK SMALL I" #x1D55A) + ("MATHEMATICAL DOUBLE-STRUCK SMALL J" #x1D55B) + ("MATHEMATICAL DOUBLE-STRUCK SMALL K" #x1D55C) + ("MATHEMATICAL DOUBLE-STRUCK SMALL L" #x1D55D) + ("MATHEMATICAL DOUBLE-STRUCK SMALL M" #x1D55E) + ("MATHEMATICAL DOUBLE-STRUCK SMALL N" #x1D55F) + ("MATHEMATICAL DOUBLE-STRUCK SMALL O" #x1D560) + ("MATHEMATICAL DOUBLE-STRUCK SMALL P" #x1D561) + ("MATHEMATICAL DOUBLE-STRUCK SMALL Q" #x1D562) + ("MATHEMATICAL DOUBLE-STRUCK SMALL R" #x1D563) + ("MATHEMATICAL DOUBLE-STRUCK SMALL S" #x1D564) + ("MATHEMATICAL DOUBLE-STRUCK SMALL T" #x1D565) + ("MATHEMATICAL DOUBLE-STRUCK SMALL U" #x1D566) + ("MATHEMATICAL DOUBLE-STRUCK SMALL V" #x1D567) + ("MATHEMATICAL DOUBLE-STRUCK SMALL W" #x1D568) + ("MATHEMATICAL DOUBLE-STRUCK SMALL X" #x1D569) + ("MATHEMATICAL DOUBLE-STRUCK SMALL Y" #x1D56A) + ("MATHEMATICAL DOUBLE-STRUCK SMALL Z" #x1D56B) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL A" #x1D56C) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL B" #x1D56D) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL C" #x1D56E) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL D" #x1D56F) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL E" #x1D570) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL F" #x1D571) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL G" #x1D572) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL H" #x1D573) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL I" #x1D574) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL J" #x1D575) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL K" #x1D576) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL L" #x1D577) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL M" #x1D578) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL N" #x1D579) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL O" #x1D57A) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL P" #x1D57B) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL Q" #x1D57C) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL R" #x1D57D) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL S" #x1D57E) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL T" #x1D57F) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL U" #x1D580) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL V" #x1D581) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL W" #x1D582) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL X" #x1D583) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL Y" #x1D584) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL Z" #x1D585) + ("MATHEMATICAL BOLD FRAKTUR SMALL A" #x1D586) + ("MATHEMATICAL BOLD FRAKTUR SMALL B" #x1D587) + ("MATHEMATICAL BOLD FRAKTUR SMALL C" #x1D588) + ("MATHEMATICAL BOLD FRAKTUR SMALL D" #x1D589) + ("MATHEMATICAL BOLD FRAKTUR SMALL E" #x1D58A) + ("MATHEMATICAL BOLD FRAKTUR SMALL F" #x1D58B) + ("MATHEMATICAL BOLD FRAKTUR SMALL G" #x1D58C) + ("MATHEMATICAL BOLD FRAKTUR SMALL H" #x1D58D) + ("MATHEMATICAL BOLD FRAKTUR SMALL I" #x1D58E) + ("MATHEMATICAL BOLD FRAKTUR SMALL J" #x1D58F) + ("MATHEMATICAL BOLD FRAKTUR SMALL K" #x1D590) + ("MATHEMATICAL BOLD FRAKTUR SMALL L" #x1D591) + ("MATHEMATICAL BOLD FRAKTUR SMALL M" #x1D592) + ("MATHEMATICAL BOLD FRAKTUR SMALL N" #x1D593) + ("MATHEMATICAL BOLD FRAKTUR SMALL O" #x1D594) + ("MATHEMATICAL BOLD FRAKTUR SMALL P" #x1D595) + ("MATHEMATICAL BOLD FRAKTUR SMALL Q" #x1D596) + ("MATHEMATICAL BOLD FRAKTUR SMALL R" #x1D597) + ("MATHEMATICAL BOLD FRAKTUR SMALL S" #x1D598) + ("MATHEMATICAL BOLD FRAKTUR SMALL T" #x1D599) + ("MATHEMATICAL BOLD FRAKTUR SMALL U" #x1D59A) + ("MATHEMATICAL BOLD FRAKTUR SMALL V" #x1D59B) + ("MATHEMATICAL BOLD FRAKTUR SMALL W" #x1D59C) + ("MATHEMATICAL BOLD FRAKTUR SMALL X" #x1D59D) + ("MATHEMATICAL BOLD FRAKTUR SMALL Y" #x1D59E) + ("MATHEMATICAL BOLD FRAKTUR SMALL Z" #x1D59F) + ("MATHEMATICAL SANS-SERIF CAPITAL A" #x1D5A0) + ("MATHEMATICAL SANS-SERIF CAPITAL B" #x1D5A1) + ("MATHEMATICAL SANS-SERIF CAPITAL C" #x1D5A2) + ("MATHEMATICAL SANS-SERIF CAPITAL D" #x1D5A3) + ("MATHEMATICAL SANS-SERIF CAPITAL E" #x1D5A4) + ("MATHEMATICAL SANS-SERIF CAPITAL F" #x1D5A5) + ("MATHEMATICAL SANS-SERIF CAPITAL G" #x1D5A6) + ("MATHEMATICAL SANS-SERIF CAPITAL H" #x1D5A7) + ("MATHEMATICAL SANS-SERIF CAPITAL I" #x1D5A8) + ("MATHEMATICAL SANS-SERIF CAPITAL J" #x1D5A9) + ("MATHEMATICAL SANS-SERIF CAPITAL K" #x1D5AA) + ("MATHEMATICAL SANS-SERIF CAPITAL L" #x1D5AB) + ("MATHEMATICAL SANS-SERIF CAPITAL M" #x1D5AC) + ("MATHEMATICAL SANS-SERIF CAPITAL N" #x1D5AD) + ("MATHEMATICAL SANS-SERIF CAPITAL O" #x1D5AE) + ("MATHEMATICAL SANS-SERIF CAPITAL P" #x1D5AF) + ("MATHEMATICAL SANS-SERIF CAPITAL Q" #x1D5B0) + ("MATHEMATICAL SANS-SERIF CAPITAL R" #x1D5B1) + ("MATHEMATICAL SANS-SERIF CAPITAL S" #x1D5B2) + ("MATHEMATICAL SANS-SERIF CAPITAL T" #x1D5B3) + ("MATHEMATICAL SANS-SERIF CAPITAL U" #x1D5B4) + ("MATHEMATICAL SANS-SERIF CAPITAL V" #x1D5B5) + ("MATHEMATICAL SANS-SERIF CAPITAL W" #x1D5B6) + ("MATHEMATICAL SANS-SERIF CAPITAL X" #x1D5B7) + ("MATHEMATICAL SANS-SERIF CAPITAL Y" #x1D5B8) + ("MATHEMATICAL SANS-SERIF CAPITAL Z" #x1D5B9) + ("MATHEMATICAL SANS-SERIF SMALL A" #x1D5BA) + ("MATHEMATICAL SANS-SERIF SMALL B" #x1D5BB) + ("MATHEMATICAL SANS-SERIF SMALL C" #x1D5BC) + ("MATHEMATICAL SANS-SERIF SMALL D" #x1D5BD) + ("MATHEMATICAL SANS-SERIF SMALL E" #x1D5BE) + ("MATHEMATICAL SANS-SERIF SMALL F" #x1D5BF) + ("MATHEMATICAL SANS-SERIF SMALL G" #x1D5C0) + ("MATHEMATICAL SANS-SERIF SMALL H" #x1D5C1) + ("MATHEMATICAL SANS-SERIF SMALL I" #x1D5C2) + ("MATHEMATICAL SANS-SERIF SMALL J" #x1D5C3) + ("MATHEMATICAL SANS-SERIF SMALL K" #x1D5C4) + ("MATHEMATICAL SANS-SERIF SMALL L" #x1D5C5) + ("MATHEMATICAL SANS-SERIF SMALL M" #x1D5C6) + ("MATHEMATICAL SANS-SERIF SMALL N" #x1D5C7) + ("MATHEMATICAL SANS-SERIF SMALL O" #x1D5C8) + ("MATHEMATICAL SANS-SERIF SMALL P" #x1D5C9) + ("MATHEMATICAL SANS-SERIF SMALL Q" #x1D5CA) + ("MATHEMATICAL SANS-SERIF SMALL R" #x1D5CB) + ("MATHEMATICAL SANS-SERIF SMALL S" #x1D5CC) + ("MATHEMATICAL SANS-SERIF SMALL T" #x1D5CD) + ("MATHEMATICAL SANS-SERIF SMALL U" #x1D5CE) + ("MATHEMATICAL SANS-SERIF SMALL V" #x1D5CF) + ("MATHEMATICAL SANS-SERIF SMALL W" #x1D5D0) + ("MATHEMATICAL SANS-SERIF SMALL X" #x1D5D1) + ("MATHEMATICAL SANS-SERIF SMALL Y" #x1D5D2) + ("MATHEMATICAL SANS-SERIF SMALL Z" #x1D5D3) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL A" #x1D5D4) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL B" #x1D5D5) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL C" #x1D5D6) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL D" #x1D5D7) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL E" #x1D5D8) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL F" #x1D5D9) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL G" #x1D5DA) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL H" #x1D5DB) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL I" #x1D5DC) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL J" #x1D5DD) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL K" #x1D5DE) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL L" #x1D5DF) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL M" #x1D5E0) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL N" #x1D5E1) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL O" #x1D5E2) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL P" #x1D5E3) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Q" #x1D5E4) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL R" #x1D5E5) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL S" #x1D5E6) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL T" #x1D5E7) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL U" #x1D5E8) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL V" #x1D5E9) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL W" #x1D5EA) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL X" #x1D5EB) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Y" #x1D5EC) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Z" #x1D5ED) + ("MATHEMATICAL SANS-SERIF BOLD SMALL A" #x1D5EE) + ("MATHEMATICAL SANS-SERIF BOLD SMALL B" #x1D5EF) + ("MATHEMATICAL SANS-SERIF BOLD SMALL C" #x1D5F0) + ("MATHEMATICAL SANS-SERIF BOLD SMALL D" #x1D5F1) + ("MATHEMATICAL SANS-SERIF BOLD SMALL E" #x1D5F2) + ("MATHEMATICAL SANS-SERIF BOLD SMALL F" #x1D5F3) + ("MATHEMATICAL SANS-SERIF BOLD SMALL G" #x1D5F4) + ("MATHEMATICAL SANS-SERIF BOLD SMALL H" #x1D5F5) + ("MATHEMATICAL SANS-SERIF BOLD SMALL I" #x1D5F6) + ("MATHEMATICAL SANS-SERIF BOLD SMALL J" #x1D5F7) + ("MATHEMATICAL SANS-SERIF BOLD SMALL K" #x1D5F8) + ("MATHEMATICAL SANS-SERIF BOLD SMALL L" #x1D5F9) + ("MATHEMATICAL SANS-SERIF BOLD SMALL M" #x1D5FA) + ("MATHEMATICAL SANS-SERIF BOLD SMALL N" #x1D5FB) + ("MATHEMATICAL SANS-SERIF BOLD SMALL O" #x1D5FC) + ("MATHEMATICAL SANS-SERIF BOLD SMALL P" #x1D5FD) + ("MATHEMATICAL SANS-SERIF BOLD SMALL Q" #x1D5FE) + ("MATHEMATICAL SANS-SERIF BOLD SMALL R" #x1D5FF) + ("MATHEMATICAL SANS-SERIF BOLD SMALL S" #x1D600) + ("MATHEMATICAL SANS-SERIF BOLD SMALL T" #x1D601) + ("MATHEMATICAL SANS-SERIF BOLD SMALL U" #x1D602) + ("MATHEMATICAL SANS-SERIF BOLD SMALL V" #x1D603) + ("MATHEMATICAL SANS-SERIF BOLD SMALL W" #x1D604) + ("MATHEMATICAL SANS-SERIF BOLD SMALL X" #x1D605) + ("MATHEMATICAL SANS-SERIF BOLD SMALL Y" #x1D606) + ("MATHEMATICAL SANS-SERIF BOLD SMALL Z" #x1D607) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL A" #x1D608) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL B" #x1D609) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL C" #x1D60A) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL D" #x1D60B) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL E" #x1D60C) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL F" #x1D60D) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL G" #x1D60E) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL H" #x1D60F) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL I" #x1D610) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL J" #x1D611) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL K" #x1D612) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL L" #x1D613) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL M" #x1D614) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL N" #x1D615) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL O" #x1D616) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL P" #x1D617) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q" #x1D618) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL R" #x1D619) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL S" #x1D61A) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL T" #x1D61B) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL U" #x1D61C) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL V" #x1D61D) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL W" #x1D61E) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL X" #x1D61F) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y" #x1D620) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z" #x1D621) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL A" #x1D622) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL B" #x1D623) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL C" #x1D624) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL D" #x1D625) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL E" #x1D626) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL F" #x1D627) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL G" #x1D628) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL H" #x1D629) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL I" #x1D62A) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL J" #x1D62B) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL K" #x1D62C) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL L" #x1D62D) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL M" #x1D62E) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL N" #x1D62F) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL O" #x1D630) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL P" #x1D631) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL Q" #x1D632) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL R" #x1D633) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL S" #x1D634) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL T" #x1D635) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL U" #x1D636) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL V" #x1D637) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL W" #x1D638) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL X" #x1D639) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL Y" #x1D63A) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL Z" #x1D63B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A" #x1D63C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B" #x1D63D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" #x1D63E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D" #x1D63F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E" #x1D640) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F" #x1D641) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G" #x1D642) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H" #x1D643) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I" #x1D644) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J" #x1D645) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" #x1D646) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L" #x1D647) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M" #x1D648) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N" #x1D649) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O" #x1D64A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P" #x1D64B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q" #x1D64C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R" #x1D64D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" #x1D64E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T" #x1D64F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U" #x1D650) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V" #x1D651) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W" #x1D652) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X" #x1D653) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y" #x1D654) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z" #x1D655) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A" #x1D656) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B" #x1D657) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C" #x1D658) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D" #x1D659) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E" #x1D65A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F" #x1D65B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G" #x1D65C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H" #x1D65D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I" #x1D65E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J" #x1D65F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K" #x1D660) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L" #x1D661) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M" #x1D662) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N" #x1D663) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O" #x1D664) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P" #x1D665) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q" #x1D666) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R" #x1D667) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S" #x1D668) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T" #x1D669) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U" #x1D66A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V" #x1D66B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W" #x1D66C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X" #x1D66D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y" #x1D66E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z" #x1D66F) + ("MATHEMATICAL MONOSPACE CAPITAL A" #x1D670) + ("MATHEMATICAL MONOSPACE CAPITAL B" #x1D671) + ("MATHEMATICAL MONOSPACE CAPITAL C" #x1D672) + ("MATHEMATICAL MONOSPACE CAPITAL D" #x1D673) + ("MATHEMATICAL MONOSPACE CAPITAL E" #x1D674) + ("MATHEMATICAL MONOSPACE CAPITAL F" #x1D675) + ("MATHEMATICAL MONOSPACE CAPITAL G" #x1D676) + ("MATHEMATICAL MONOSPACE CAPITAL H" #x1D677) + ("MATHEMATICAL MONOSPACE CAPITAL I" #x1D678) + ("MATHEMATICAL MONOSPACE CAPITAL J" #x1D679) + ("MATHEMATICAL MONOSPACE CAPITAL K" #x1D67A) + ("MATHEMATICAL MONOSPACE CAPITAL L" #x1D67B) + ("MATHEMATICAL MONOSPACE CAPITAL M" #x1D67C) + ("MATHEMATICAL MONOSPACE CAPITAL N" #x1D67D) + ("MATHEMATICAL MONOSPACE CAPITAL O" #x1D67E) + ("MATHEMATICAL MONOSPACE CAPITAL P" #x1D67F) + ("MATHEMATICAL MONOSPACE CAPITAL Q" #x1D680) + ("MATHEMATICAL MONOSPACE CAPITAL R" #x1D681) + ("MATHEMATICAL MONOSPACE CAPITAL S" #x1D682) + ("MATHEMATICAL MONOSPACE CAPITAL T" #x1D683) + ("MATHEMATICAL MONOSPACE CAPITAL U" #x1D684) + ("MATHEMATICAL MONOSPACE CAPITAL V" #x1D685) + ("MATHEMATICAL MONOSPACE CAPITAL W" #x1D686) + ("MATHEMATICAL MONOSPACE CAPITAL X" #x1D687) + ("MATHEMATICAL MONOSPACE CAPITAL Y" #x1D688) + ("MATHEMATICAL MONOSPACE CAPITAL Z" #x1D689) + ("MATHEMATICAL MONOSPACE SMALL A" #x1D68A) + ("MATHEMATICAL MONOSPACE SMALL B" #x1D68B) + ("MATHEMATICAL MONOSPACE SMALL C" #x1D68C) + ("MATHEMATICAL MONOSPACE SMALL D" #x1D68D) + ("MATHEMATICAL MONOSPACE SMALL E" #x1D68E) + ("MATHEMATICAL MONOSPACE SMALL F" #x1D68F) + ("MATHEMATICAL MONOSPACE SMALL G" #x1D690) + ("MATHEMATICAL MONOSPACE SMALL H" #x1D691) + ("MATHEMATICAL MONOSPACE SMALL I" #x1D692) + ("MATHEMATICAL MONOSPACE SMALL J" #x1D693) + ("MATHEMATICAL MONOSPACE SMALL K" #x1D694) + ("MATHEMATICAL MONOSPACE SMALL L" #x1D695) + ("MATHEMATICAL MONOSPACE SMALL M" #x1D696) + ("MATHEMATICAL MONOSPACE SMALL N" #x1D697) + ("MATHEMATICAL MONOSPACE SMALL O" #x1D698) + ("MATHEMATICAL MONOSPACE SMALL P" #x1D699) + ("MATHEMATICAL MONOSPACE SMALL Q" #x1D69A) + ("MATHEMATICAL MONOSPACE SMALL R" #x1D69B) + ("MATHEMATICAL MONOSPACE SMALL S" #x1D69C) + ("MATHEMATICAL MONOSPACE SMALL T" #x1D69D) + ("MATHEMATICAL MONOSPACE SMALL U" #x1D69E) + ("MATHEMATICAL MONOSPACE SMALL V" #x1D69F) + ("MATHEMATICAL MONOSPACE SMALL W" #x1D6A0) + ("MATHEMATICAL MONOSPACE SMALL X" #x1D6A1) + ("MATHEMATICAL MONOSPACE SMALL Y" #x1D6A2) + ("MATHEMATICAL MONOSPACE SMALL Z" #x1D6A3) + ("MATHEMATICAL BOLD CAPITAL ALPHA" #x1D6A8) + ("MATHEMATICAL BOLD CAPITAL BETA" #x1D6A9) + ("MATHEMATICAL BOLD CAPITAL GAMMA" #x1D6AA) + ("MATHEMATICAL BOLD CAPITAL DELTA" #x1D6AB) + ("MATHEMATICAL BOLD CAPITAL EPSILON" #x1D6AC) + ("MATHEMATICAL BOLD CAPITAL ZETA" #x1D6AD) + ("MATHEMATICAL BOLD CAPITAL ETA" #x1D6AE) + ("MATHEMATICAL BOLD CAPITAL THETA" #x1D6AF) + ("MATHEMATICAL BOLD CAPITAL IOTA" #x1D6B0) + ("MATHEMATICAL BOLD CAPITAL KAPPA" #x1D6B1) + ("MATHEMATICAL BOLD CAPITAL LAMDA" #x1D6B2) + ("MATHEMATICAL BOLD CAPITAL MU" #x1D6B3) + ("MATHEMATICAL BOLD CAPITAL NU" #x1D6B4) + ("MATHEMATICAL BOLD CAPITAL XI" #x1D6B5) + ("MATHEMATICAL BOLD CAPITAL OMICRON" #x1D6B6) + ("MATHEMATICAL BOLD CAPITAL PI" #x1D6B7) + ("MATHEMATICAL BOLD CAPITAL RHO" #x1D6B8) + ("MATHEMATICAL BOLD CAPITAL THETA SYMBOL" #x1D6B9) + ("MATHEMATICAL BOLD CAPITAL SIGMA" #x1D6BA) + ("MATHEMATICAL BOLD CAPITAL TAU" #x1D6BB) + ("MATHEMATICAL BOLD CAPITAL UPSILON" #x1D6BC) + ("MATHEMATICAL BOLD CAPITAL PHI" #x1D6BD) + ("MATHEMATICAL BOLD CAPITAL CHI" #x1D6BE) + ("MATHEMATICAL BOLD CAPITAL PSI" #x1D6BF) + ("MATHEMATICAL BOLD CAPITAL OMEGA" #x1D6C0) + ("MATHEMATICAL BOLD NABLA" #x1D6C1) + ("MATHEMATICAL BOLD SMALL ALPHA" #x1D6C2) + ("MATHEMATICAL BOLD SMALL BETA" #x1D6C3) + ("MATHEMATICAL BOLD SMALL GAMMA" #x1D6C4) + ("MATHEMATICAL BOLD SMALL DELTA" #x1D6C5) + ("MATHEMATICAL BOLD SMALL EPSILON" #x1D6C6) + ("MATHEMATICAL BOLD SMALL ZETA" #x1D6C7) + ("MATHEMATICAL BOLD SMALL ETA" #x1D6C8) + ("MATHEMATICAL BOLD SMALL THETA" #x1D6C9) + ("MATHEMATICAL BOLD SMALL IOTA" #x1D6CA) + ("MATHEMATICAL BOLD SMALL KAPPA" #x1D6CB) + ("MATHEMATICAL BOLD SMALL LAMDA" #x1D6CC) + ("MATHEMATICAL BOLD SMALL MU" #x1D6CD) + ("MATHEMATICAL BOLD SMALL NU" #x1D6CE) + ("MATHEMATICAL BOLD SMALL XI" #x1D6CF) + ("MATHEMATICAL BOLD SMALL OMICRON" #x1D6D0) + ("MATHEMATICAL BOLD SMALL PI" #x1D6D1) + ("MATHEMATICAL BOLD SMALL RHO" #x1D6D2) + ("MATHEMATICAL BOLD SMALL FINAL SIGMA" #x1D6D3) + ("MATHEMATICAL BOLD SMALL SIGMA" #x1D6D4) + ("MATHEMATICAL BOLD SMALL TAU" #x1D6D5) + ("MATHEMATICAL BOLD SMALL UPSILON" #x1D6D6) + ("MATHEMATICAL BOLD SMALL PHI" #x1D6D7) + ("MATHEMATICAL BOLD SMALL CHI" #x1D6D8) + ("MATHEMATICAL BOLD SMALL PSI" #x1D6D9) + ("MATHEMATICAL BOLD SMALL OMEGA" #x1D6DA) + ("MATHEMATICAL BOLD PARTIAL DIFFERENTIAL" #x1D6DB) + ("MATHEMATICAL BOLD EPSILON SYMBOL" #x1D6DC) + ("MATHEMATICAL BOLD THETA SYMBOL" #x1D6DD) + ("MATHEMATICAL BOLD KAPPA SYMBOL" #x1D6DE) + ("MATHEMATICAL BOLD PHI SYMBOL" #x1D6DF) + ("MATHEMATICAL BOLD RHO SYMBOL" #x1D6E0) + ("MATHEMATICAL BOLD PI SYMBOL" #x1D6E1) + ("MATHEMATICAL ITALIC CAPITAL ALPHA" #x1D6E2) + ("MATHEMATICAL ITALIC CAPITAL BETA" #x1D6E3) + ("MATHEMATICAL ITALIC CAPITAL GAMMA" #x1D6E4) + ("MATHEMATICAL ITALIC CAPITAL DELTA" #x1D6E5) + ("MATHEMATICAL ITALIC CAPITAL EPSILON" #x1D6E6) + ("MATHEMATICAL ITALIC CAPITAL ZETA" #x1D6E7) + ("MATHEMATICAL ITALIC CAPITAL ETA" #x1D6E8) + ("MATHEMATICAL ITALIC CAPITAL THETA" #x1D6E9) + ("MATHEMATICAL ITALIC CAPITAL IOTA" #x1D6EA) + ("MATHEMATICAL ITALIC CAPITAL KAPPA" #x1D6EB) + ("MATHEMATICAL ITALIC CAPITAL LAMDA" #x1D6EC) + ("MATHEMATICAL ITALIC CAPITAL MU" #x1D6ED) + ("MATHEMATICAL ITALIC CAPITAL NU" #x1D6EE) + ("MATHEMATICAL ITALIC CAPITAL XI" #x1D6EF) + ("MATHEMATICAL ITALIC CAPITAL OMICRON" #x1D6F0) + ("MATHEMATICAL ITALIC CAPITAL PI" #x1D6F1) + ("MATHEMATICAL ITALIC CAPITAL RHO" #x1D6F2) + ("MATHEMATICAL ITALIC CAPITAL THETA SYMBOL" #x1D6F3) + ("MATHEMATICAL ITALIC CAPITAL SIGMA" #x1D6F4) + ("MATHEMATICAL ITALIC CAPITAL TAU" #x1D6F5) + ("MATHEMATICAL ITALIC CAPITAL UPSILON" #x1D6F6) + ("MATHEMATICAL ITALIC CAPITAL PHI" #x1D6F7) + ("MATHEMATICAL ITALIC CAPITAL CHI" #x1D6F8) + ("MATHEMATICAL ITALIC CAPITAL PSI" #x1D6F9) + ("MATHEMATICAL ITALIC CAPITAL OMEGA" #x1D6FA) + ("MATHEMATICAL ITALIC NABLA" #x1D6FB) + ("MATHEMATICAL ITALIC SMALL ALPHA" #x1D6FC) + ("MATHEMATICAL ITALIC SMALL BETA" #x1D6FD) + ("MATHEMATICAL ITALIC SMALL GAMMA" #x1D6FE) + ("MATHEMATICAL ITALIC SMALL DELTA" #x1D6FF) + ("MATHEMATICAL ITALIC SMALL EPSILON" #x1D700) + ("MATHEMATICAL ITALIC SMALL ZETA" #x1D701) + ("MATHEMATICAL ITALIC SMALL ETA" #x1D702) + ("MATHEMATICAL ITALIC SMALL THETA" #x1D703) + ("MATHEMATICAL ITALIC SMALL IOTA" #x1D704) + ("MATHEMATICAL ITALIC SMALL KAPPA" #x1D705) + ("MATHEMATICAL ITALIC SMALL LAMDA" #x1D706) + ("MATHEMATICAL ITALIC SMALL MU" #x1D707) + ("MATHEMATICAL ITALIC SMALL NU" #x1D708) + ("MATHEMATICAL ITALIC SMALL XI" #x1D709) + ("MATHEMATICAL ITALIC SMALL OMICRON" #x1D70A) + ("MATHEMATICAL ITALIC SMALL PI" #x1D70B) + ("MATHEMATICAL ITALIC SMALL RHO" #x1D70C) + ("MATHEMATICAL ITALIC SMALL FINAL SIGMA" #x1D70D) + ("MATHEMATICAL ITALIC SMALL SIGMA" #x1D70E) + ("MATHEMATICAL ITALIC SMALL TAU" #x1D70F) + ("MATHEMATICAL ITALIC SMALL UPSILON" #x1D710) + ("MATHEMATICAL ITALIC SMALL PHI" #x1D711) + ("MATHEMATICAL ITALIC SMALL CHI" #x1D712) + ("MATHEMATICAL ITALIC SMALL PSI" #x1D713) + ("MATHEMATICAL ITALIC SMALL OMEGA" #x1D714) + ("MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL" #x1D715) + ("MATHEMATICAL ITALIC EPSILON SYMBOL" #x1D716) + ("MATHEMATICAL ITALIC THETA SYMBOL" #x1D717) + ("MATHEMATICAL ITALIC KAPPA SYMBOL" #x1D718) + ("MATHEMATICAL ITALIC PHI SYMBOL" #x1D719) + ("MATHEMATICAL ITALIC RHO SYMBOL" #x1D71A) + ("MATHEMATICAL ITALIC PI SYMBOL" #x1D71B) + ("MATHEMATICAL BOLD ITALIC CAPITAL ALPHA" #x1D71C) + ("MATHEMATICAL BOLD ITALIC CAPITAL BETA" #x1D71D) + ("MATHEMATICAL BOLD ITALIC CAPITAL GAMMA" #x1D71E) + ("MATHEMATICAL BOLD ITALIC CAPITAL DELTA" #x1D71F) + ("MATHEMATICAL BOLD ITALIC CAPITAL EPSILON" #x1D720) + ("MATHEMATICAL BOLD ITALIC CAPITAL ZETA" #x1D721) + ("MATHEMATICAL BOLD ITALIC CAPITAL ETA" #x1D722) + ("MATHEMATICAL BOLD ITALIC CAPITAL THETA" #x1D723) + ("MATHEMATICAL BOLD ITALIC CAPITAL IOTA" #x1D724) + ("MATHEMATICAL BOLD ITALIC CAPITAL KAPPA" #x1D725) + ("MATHEMATICAL BOLD ITALIC CAPITAL LAMDA" #x1D726) + ("MATHEMATICAL BOLD ITALIC CAPITAL MU" #x1D727) + ("MATHEMATICAL BOLD ITALIC CAPITAL NU" #x1D728) + ("MATHEMATICAL BOLD ITALIC CAPITAL XI" #x1D729) + ("MATHEMATICAL BOLD ITALIC CAPITAL OMICRON" #x1D72A) + ("MATHEMATICAL BOLD ITALIC CAPITAL PI" #x1D72B) + ("MATHEMATICAL BOLD ITALIC CAPITAL RHO" #x1D72C) + ("MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL" #x1D72D) + ("MATHEMATICAL BOLD ITALIC CAPITAL SIGMA" #x1D72E) + ("MATHEMATICAL BOLD ITALIC CAPITAL TAU" #x1D72F) + ("MATHEMATICAL BOLD ITALIC CAPITAL UPSILON" #x1D730) + ("MATHEMATICAL BOLD ITALIC CAPITAL PHI" #x1D731) + ("MATHEMATICAL BOLD ITALIC CAPITAL CHI" #x1D732) + ("MATHEMATICAL BOLD ITALIC CAPITAL PSI" #x1D733) + ("MATHEMATICAL BOLD ITALIC CAPITAL OMEGA" #x1D734) + ("MATHEMATICAL BOLD ITALIC NABLA" #x1D735) + ("MATHEMATICAL BOLD ITALIC SMALL ALPHA" #x1D736) + ("MATHEMATICAL BOLD ITALIC SMALL BETA" #x1D737) + ("MATHEMATICAL BOLD ITALIC SMALL GAMMA" #x1D738) + ("MATHEMATICAL BOLD ITALIC SMALL DELTA" #x1D739) + ("MATHEMATICAL BOLD ITALIC SMALL EPSILON" #x1D73A) + ("MATHEMATICAL BOLD ITALIC SMALL ZETA" #x1D73B) + ("MATHEMATICAL BOLD ITALIC SMALL ETA" #x1D73C) + ("MATHEMATICAL BOLD ITALIC SMALL THETA" #x1D73D) + ("MATHEMATICAL BOLD ITALIC SMALL IOTA" #x1D73E) + ("MATHEMATICAL BOLD ITALIC SMALL KAPPA" #x1D73F) + ("MATHEMATICAL BOLD ITALIC SMALL LAMDA" #x1D740) + ("MATHEMATICAL BOLD ITALIC SMALL MU" #x1D741) + ("MATHEMATICAL BOLD ITALIC SMALL NU" #x1D742) + ("MATHEMATICAL BOLD ITALIC SMALL XI" #x1D743) + ("MATHEMATICAL BOLD ITALIC SMALL OMICRON" #x1D744) + ("MATHEMATICAL BOLD ITALIC SMALL PI" #x1D745) + ("MATHEMATICAL BOLD ITALIC SMALL RHO" #x1D746) + ("MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA" #x1D747) + ("MATHEMATICAL BOLD ITALIC SMALL SIGMA" #x1D748) + ("MATHEMATICAL BOLD ITALIC SMALL TAU" #x1D749) + ("MATHEMATICAL BOLD ITALIC SMALL UPSILON" #x1D74A) + ("MATHEMATICAL BOLD ITALIC SMALL PHI" #x1D74B) + ("MATHEMATICAL BOLD ITALIC SMALL CHI" #x1D74C) + ("MATHEMATICAL BOLD ITALIC SMALL PSI" #x1D74D) + ("MATHEMATICAL BOLD ITALIC SMALL OMEGA" #x1D74E) + ("MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D74F) + ("MATHEMATICAL BOLD ITALIC EPSILON SYMBOL" #x1D750) + ("MATHEMATICAL BOLD ITALIC THETA SYMBOL" #x1D751) + ("MATHEMATICAL BOLD ITALIC KAPPA SYMBOL" #x1D752) + ("MATHEMATICAL BOLD ITALIC PHI SYMBOL" #x1D753) + ("MATHEMATICAL BOLD ITALIC RHO SYMBOL" #x1D754) + ("MATHEMATICAL BOLD ITALIC PI SYMBOL" #x1D755) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA" #x1D756) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA" #x1D757) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA" #x1D758) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA" #x1D759) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON" #x1D75A) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA" #x1D75B) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA" #x1D75C) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA" #x1D75D) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA" #x1D75E) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA" #x1D75F) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA" #x1D760) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL MU" #x1D761) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL NU" #x1D762) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL XI" #x1D763) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON" #x1D764) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PI" #x1D765) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO" #x1D766) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL" #x1D767) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA" #x1D768) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU" #x1D769) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON" #x1D76A) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI" #x1D76B) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI" #x1D76C) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI" #x1D76D) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA" #x1D76E) + ("MATHEMATICAL SANS-SERIF BOLD NABLA" #x1D76F) + ("MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA" #x1D770) + ("MATHEMATICAL SANS-SERIF BOLD SMALL BETA" #x1D771) + ("MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA" #x1D772) + ("MATHEMATICAL SANS-SERIF BOLD SMALL DELTA" #x1D773) + ("MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON" #x1D774) + ("MATHEMATICAL SANS-SERIF BOLD SMALL ZETA" #x1D775) + ("MATHEMATICAL SANS-SERIF BOLD SMALL ETA" #x1D776) + ("MATHEMATICAL SANS-SERIF BOLD SMALL THETA" #x1D777) + ("MATHEMATICAL SANS-SERIF BOLD SMALL IOTA" #x1D778) + ("MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA" #x1D779) + ("MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA" #x1D77A) + ("MATHEMATICAL SANS-SERIF BOLD SMALL MU" #x1D77B) + ("MATHEMATICAL SANS-SERIF BOLD SMALL NU" #x1D77C) + ("MATHEMATICAL SANS-SERIF BOLD SMALL XI" #x1D77D) + ("MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON" #x1D77E) + ("MATHEMATICAL SANS-SERIF BOLD SMALL PI" #x1D77F) + ("MATHEMATICAL SANS-SERIF BOLD SMALL RHO" #x1D780) + ("MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA" #x1D781) + ("MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA" #x1D782) + ("MATHEMATICAL SANS-SERIF BOLD SMALL TAU" #x1D783) + ("MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON" #x1D784) + ("MATHEMATICAL SANS-SERIF BOLD SMALL PHI" #x1D785) + ("MATHEMATICAL SANS-SERIF BOLD SMALL CHI" #x1D786) + ("MATHEMATICAL SANS-SERIF BOLD SMALL PSI" #x1D787) + ("MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA" #x1D788) + ("MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL" #x1D789) + ("MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL" #x1D78A) + ("MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL" #x1D78B) + ("MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL" #x1D78C) + ("MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL" #x1D78D) + ("MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL" #x1D78E) + ("MATHEMATICAL SANS-SERIF BOLD PI SYMBOL" #x1D78F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA" #x1D790) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA" #x1D791) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA" #x1D792) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA" #x1D793) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON" #x1D794) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA" #x1D795) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA" #x1D796) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA" #x1D797) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA" #x1D798) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA" #x1D799) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA" #x1D79A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU" #x1D79B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU" #x1D79C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI" #x1D79D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON" #x1D79E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI" #x1D79F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO" #x1D7A0) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL" #x1D7A1) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA" #x1D7A2) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU" #x1D7A3) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON" #x1D7A4) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI" #x1D7A5) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI" #x1D7A6) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI" #x1D7A7) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA" #x1D7A8) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA" #x1D7A9) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA" #x1D7AA) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA" #x1D7AB) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA" #x1D7AC) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA" #x1D7AD) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON" #x1D7AE) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA" #x1D7AF) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA" #x1D7B0) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA" #x1D7B1) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA" #x1D7B2) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA" #x1D7B3) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA" #x1D7B4) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU" #x1D7B5) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU" #x1D7B6) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI" #x1D7B7) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON" #x1D7B8) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI" #x1D7B9) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO" #x1D7BA) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA" #x1D7BB) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA" #x1D7BC) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU" #x1D7BD) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON" #x1D7BE) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI" #x1D7BF) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI" #x1D7C0) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI" #x1D7C1) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA" #x1D7C2) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D7C3) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL" #x1D7C4) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL" #x1D7C5) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL" #x1D7C6) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL" #x1D7C7) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL" #x1D7C8) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL" #x1D7C9) + ("MATHEMATICAL BOLD DIGIT ZERO" #x1D7CE) + ("MATHEMATICAL BOLD DIGIT ONE" #x1D7CF) + ("MATHEMATICAL BOLD DIGIT TWO" #x1D7D0) + ("MATHEMATICAL BOLD DIGIT THREE" #x1D7D1) + ("MATHEMATICAL BOLD DIGIT FOUR" #x1D7D2) + ("MATHEMATICAL BOLD DIGIT FIVE" #x1D7D3) + ("MATHEMATICAL BOLD DIGIT SIX" #x1D7D4) + ("MATHEMATICAL BOLD DIGIT SEVEN" #x1D7D5) + ("MATHEMATICAL BOLD DIGIT EIGHT" #x1D7D6) + ("MATHEMATICAL BOLD DIGIT NINE" #x1D7D7) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO" #x1D7D8) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT ONE" #x1D7D9) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT TWO" #x1D7DA) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT THREE" #x1D7DB) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR" #x1D7DC) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE" #x1D7DD) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT SIX" #x1D7DE) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN" #x1D7DF) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT" #x1D7E0) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT NINE" #x1D7E1) + ("MATHEMATICAL SANS-SERIF DIGIT ZERO" #x1D7E2) + ("MATHEMATICAL SANS-SERIF DIGIT ONE" #x1D7E3) + ("MATHEMATICAL SANS-SERIF DIGIT TWO" #x1D7E4) + ("MATHEMATICAL SANS-SERIF DIGIT THREE" #x1D7E5) + ("MATHEMATICAL SANS-SERIF DIGIT FOUR" #x1D7E6) + ("MATHEMATICAL SANS-SERIF DIGIT FIVE" #x1D7E7) + ("MATHEMATICAL SANS-SERIF DIGIT SIX" #x1D7E8) + ("MATHEMATICAL SANS-SERIF DIGIT SEVEN" #x1D7E9) + ("MATHEMATICAL SANS-SERIF DIGIT EIGHT" #x1D7EA) + ("MATHEMATICAL SANS-SERIF DIGIT NINE" #x1D7EB) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO" #x1D7EC) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT ONE" #x1D7ED) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT TWO" #x1D7EE) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT THREE" #x1D7EF) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR" #x1D7F0) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE" #x1D7F1) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT SIX" #x1D7F2) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN" #x1D7F3) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT" #x1D7F4) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT NINE" #x1D7F5) + ("MATHEMATICAL MONOSPACE DIGIT ZERO" #x1D7F6) + ("MATHEMATICAL MONOSPACE DIGIT ONE" #x1D7F7) + ("MATHEMATICAL MONOSPACE DIGIT TWO" #x1D7F8) + ("MATHEMATICAL MONOSPACE DIGIT THREE" #x1D7F9) + ("MATHEMATICAL MONOSPACE DIGIT FOUR" #x1D7FA) + ("MATHEMATICAL MONOSPACE DIGIT FIVE" #x1D7FB) + ("MATHEMATICAL MONOSPACE DIGIT SIX" #x1D7FC) + ("MATHEMATICAL MONOSPACE DIGIT SEVEN" #x1D7FD) + ("MATHEMATICAL MONOSPACE DIGIT EIGHT" #x1D7FE) + ("MATHEMATICAL MONOSPACE DIGIT NINE" #x1D7FF) + )) + +;; arch-tag: af730f58-d05e-4cd5-8a94-f914444a5351 diff --git a/etc/nxml/E0000-E007F.el b/etc/nxml/E0000-E007F.el new file mode 100644 index 00000000000..1f4da35df29 --- /dev/null +++ b/etc/nxml/E0000-E007F.el @@ -0,0 +1,101 @@ +(nxml-define-char-name-set 'tags + '(("LANGUAGE TAG" #xE0001) + ("TAG SPACE" #xE0020) + ("TAG EXCLAMATION MARK" #xE0021) + ("TAG QUOTATION MARK" #xE0022) + ("TAG NUMBER SIGN" #xE0023) + ("TAG DOLLAR SIGN" #xE0024) + ("TAG PERCENT SIGN" #xE0025) + ("TAG AMPERSAND" #xE0026) + ("TAG APOSTROPHE" #xE0027) + ("TAG LEFT PARENTHESIS" #xE0028) + ("TAG RIGHT PARENTHESIS" #xE0029) + ("TAG ASTERISK" #xE002A) + ("TAG PLUS SIGN" #xE002B) + ("TAG COMMA" #xE002C) + ("TAG HYPHEN-MINUS" #xE002D) + ("TAG FULL STOP" #xE002E) + ("TAG SOLIDUS" #xE002F) + ("TAG DIGIT ZERO" #xE0030) + ("TAG DIGIT ONE" #xE0031) + ("TAG DIGIT TWO" #xE0032) + ("TAG DIGIT THREE" #xE0033) + ("TAG DIGIT FOUR" #xE0034) + ("TAG DIGIT FIVE" #xE0035) + ("TAG DIGIT SIX" #xE0036) + ("TAG DIGIT SEVEN" #xE0037) + ("TAG DIGIT EIGHT" #xE0038) + ("TAG DIGIT NINE" #xE0039) + ("TAG COLON" #xE003A) + ("TAG SEMICOLON" #xE003B) + ("TAG LESS-THAN SIGN" #xE003C) + ("TAG EQUALS SIGN" #xE003D) + ("TAG GREATER-THAN SIGN" #xE003E) + ("TAG QUESTION MARK" #xE003F) + ("TAG COMMERCIAL AT" #xE0040) + ("TAG LATIN CAPITAL LETTER A" #xE0041) + ("TAG LATIN CAPITAL LETTER B" #xE0042) + ("TAG LATIN CAPITAL LETTER C" #xE0043) + ("TAG LATIN CAPITAL LETTER D" #xE0044) + ("TAG LATIN CAPITAL LETTER E" #xE0045) + ("TAG LATIN CAPITAL LETTER F" #xE0046) + ("TAG LATIN CAPITAL LETTER G" #xE0047) + ("TAG LATIN CAPITAL LETTER H" #xE0048) + ("TAG LATIN CAPITAL LETTER I" #xE0049) + ("TAG LATIN CAPITAL LETTER J" #xE004A) + ("TAG LATIN CAPITAL LETTER K" #xE004B) + ("TAG LATIN CAPITAL LETTER L" #xE004C) + ("TAG LATIN CAPITAL LETTER M" #xE004D) + ("TAG LATIN CAPITAL LETTER N" #xE004E) + ("TAG LATIN CAPITAL LETTER O" #xE004F) + ("TAG LATIN CAPITAL LETTER P" #xE0050) + ("TAG LATIN CAPITAL LETTER Q" #xE0051) + ("TAG LATIN CAPITAL LETTER R" #xE0052) + ("TAG LATIN CAPITAL LETTER S" #xE0053) + ("TAG LATIN CAPITAL LETTER T" #xE0054) + ("TAG LATIN CAPITAL LETTER U" #xE0055) + ("TAG LATIN CAPITAL LETTER V" #xE0056) + ("TAG LATIN CAPITAL LETTER W" #xE0057) + ("TAG LATIN CAPITAL LETTER X" #xE0058) + ("TAG LATIN CAPITAL LETTER Y" #xE0059) + ("TAG LATIN CAPITAL LETTER Z" #xE005A) + ("TAG LEFT SQUARE BRACKET" #xE005B) + ("TAG REVERSE SOLIDUS" #xE005C) + ("TAG RIGHT SQUARE BRACKET" #xE005D) + ("TAG CIRCUMFLEX ACCENT" #xE005E) + ("TAG LOW LINE" #xE005F) + ("TAG GRAVE ACCENT" #xE0060) + ("TAG LATIN SMALL LETTER A" #xE0061) + ("TAG LATIN SMALL LETTER B" #xE0062) + ("TAG LATIN SMALL LETTER C" #xE0063) + ("TAG LATIN SMALL LETTER D" #xE0064) + ("TAG LATIN SMALL LETTER E" #xE0065) + ("TAG LATIN SMALL LETTER F" #xE0066) + ("TAG LATIN SMALL LETTER G" #xE0067) + ("TAG LATIN SMALL LETTER H" #xE0068) + ("TAG LATIN SMALL LETTER I" #xE0069) + ("TAG LATIN SMALL LETTER J" #xE006A) + ("TAG LATIN SMALL LETTER K" #xE006B) + ("TAG LATIN SMALL LETTER L" #xE006C) + ("TAG LATIN SMALL LETTER M" #xE006D) + ("TAG LATIN SMALL LETTER N" #xE006E) + ("TAG LATIN SMALL LETTER O" #xE006F) + ("TAG LATIN SMALL LETTER P" #xE0070) + ("TAG LATIN SMALL LETTER Q" #xE0071) + ("TAG LATIN SMALL LETTER R" #xE0072) + ("TAG LATIN SMALL LETTER S" #xE0073) + ("TAG LATIN SMALL LETTER T" #xE0074) + ("TAG LATIN SMALL LETTER U" #xE0075) + ("TAG LATIN SMALL LETTER V" #xE0076) + ("TAG LATIN SMALL LETTER W" #xE0077) + ("TAG LATIN SMALL LETTER X" #xE0078) + ("TAG LATIN SMALL LETTER Y" #xE0079) + ("TAG LATIN SMALL LETTER Z" #xE007A) + ("TAG LEFT CURLY BRACKET" #xE007B) + ("TAG VERTICAL LINE" #xE007C) + ("TAG RIGHT CURLY BRACKET" #xE007D) + ("TAG TILDE" #xE007E) + ("CANCEL TAG" #xE007F) + )) + +;; arch-tag: e79cd51a-999f-4f8c-8f11-a5eeb5c2de4c diff --git a/etc/nxml/README b/etc/nxml/README new file mode 100644 index 00000000000..27101217410 --- /dev/null +++ b/etc/nxml/README @@ -0,0 +1 @@ +These data files are used by the nxml package. diff --git a/etc/schema/calstbl.rnc b/etc/schema/calstbl.rnc new file mode 100644 index 00000000000..df71a7cb1fe --- /dev/null +++ b/etc/schema/calstbl.rnc @@ -0,0 +1,184 @@ +# This file was generated automatically by Trang, and then manually +# edited to add back definitions for overridden parameter entities and +# undefined elements, specifically: bodyatt, secur, paracon, +# tbl.table.mdl, tbl.entry.mdl, caution, graphic, legend, note, para, +# title, warning. This makes the semantics of this module as close as +# possible to the original DTD and also allows this schema to be used +# independently of DocBook. + +# ...................................................................... + +# DocBook CALS Table Model V4.2 ........................................ + +# File calstblx.mod .................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# This DTD is based on the CALS Table Model +# PUBLIC "-//USA-DOD//DTD Table Model 951010//EN" +# +# $Id: calstbl.rnc,v 1.1 2007/11/23 06:57:43 hexmode Exp $ +# +# Permission to use, copy, modify and distribute the DocBook DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the definitions for the CALS Table Model +# converted to XML. + +# These definitions are not directly related to the table model, but are +# used in the default CALS table model and are usually defined elsewhere +# (and prior to the inclusion of this table module) in a CALS DTD. + +bodyatt = empty +secur = empty + +# no if zero(s), +# yes if any other digits value + +yesorno = string +titles = title? +# default for use in entry content +paracon = text + +# The parameter entities as defined below provide the CALS table model +# as published (as part of the Example DTD) in MIL-HDBK-28001. +# +# These following declarations provide the CALS-compliant default definitions +# for these entities. However, these entities can and should be redefined +# (by giving the appropriate parameter entity declaration(s) prior to the +# reference to this Table Model declaration set entity) to fit the needs +# of the current application. +tbl.table-titles.mdl = titles +tbl.table-main.mdl = tgroup+ | graphic+ +tbl.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl +tbl.table.att = + attribute tabstyle { text }?, + attribute tocentry { yesorno }?, + attribute shortentry { yesorno }?, + attribute orient { "port" | "land" }?, + attribute pgwide { yesorno }? +tbl.tgroup.mdl = colspec*, spanspec*, thead?, tfoot?, tbody +tbl.tgroup.att = attribute tgroupstyle { text }? +tbl.hdft.mdl = colspec*, row+ +tbl.row.mdl = (entry | entrytbl)+ +tbl.entrytbl.mdl = colspec*, spanspec*, thead?, tbody +tbl.entry.mdl = paracon | para | warning | caution | note | legend +# ===== Element and attribute declarations follow. ===== +start = table +table = element table { table.attlist, tbl.table.mdl } +table.attlist &= + attribute frame { + "top" | "bottom" | "topbot" | "all" | "sides" | "none" + }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + tbl.table.att, + bodyatt, + secur +tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl } +tgroup.attlist &= + attribute cols { text }, + tbl.tgroup.att, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }?, + secur +colspec = element colspec { colspec.attlist, empty } +colspec.attlist &= + attribute colnum { text }?, + attribute colname { text }?, + attribute colwidth { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }? +spanspec = element spanspec { spanspec.attlist, empty } +spanspec.attlist &= + attribute namest { text }, + attribute nameend { text }, + attribute spanname { text }, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }? +thead = element thead { thead.attlist, tbl.hdft.mdl } +thead.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + secur +tfoot = element tfoot { tfoot.attlist, tbl.hdft.mdl } +tfoot.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + secur +tbody = element tbody { tbody.attlist, row+ } +tbody.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + secur +row = element row { row.attlist, tbl.row.mdl } +row.attlist &= + attribute rowsep { yesorno }?, + attribute valign { "top" | "middle" | "bottom" }?, + secur +entrytbl = element entrytbl { entrytbl.attlist, tbl.entrytbl.mdl } +entrytbl.attlist &= + attribute cols { text }, + tbl.tgroup.att, + attribute colname { text }?, + attribute spanname { text }?, + attribute namest { text }?, + attribute nameend { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }?, + secur +entry = element entry { entry.attlist, tbl.entry.mdl* } +entry.attlist &= + attribute colname { text }?, + attribute namest { text }?, + attribute nameend { text }?, + attribute spanname { text }?, + attribute morerows { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }?, + attribute rotate { yesorno }?, + attribute valign { "top" | "middle" | "bottom" }?, + secur +caution |= notAllowed +graphic |= notAllowed +legend |= notAllowed +note |= notAllowed +para |= notAllowed +title |= notAllowed +warning |= notAllowed + +# End of DocBook CALS Table Model V4.2 ................................. + +# ...................................................................... diff --git a/etc/schema/dbcalstbl.rnc b/etc/schema/dbcalstbl.rnc new file mode 100644 index 00000000000..9841df2d734 --- /dev/null +++ b/etc/schema/dbcalstbl.rnc @@ -0,0 +1,25 @@ +# Definitions specific to the CALS Table Model. + +# Reference CALS Table Model +include "calstbl.rnc" { + # Override definition of start + start |= notAllowed + # Add label and role attributes to table and informaltable + bodyatt = label.attrib + # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, + # EntryTbl, and Entry (and InformalTable element). + secur = common.attrib, tables.role.attrib + # Content model for Table. + tbl.table.mdl = + blockinfo?, + formalobject.title.content, + ndxterm.class*, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = para.char.mix | tabentry.mix +} + +common.table.attribs = bodyatt, secur + +# end of table.module diff --git a/etc/schema/dbdyntbl.rnc b/etc/schema/dbdyntbl.rnc new file mode 100644 index 00000000000..8e859145fd0 --- /dev/null +++ b/etc/schema/dbdyntbl.rnc @@ -0,0 +1,116 @@ +# This is an alternative to dbsoextbl.rnc and dbcalstbl.rnc that +# allows the table model to be selected dynamically based on the +# definitions of cals.table.module and exchange.table.module. +# +# To use this copy, docbook.rnc to docbook-dyntbl.rnc replacing +# "dbcalstbl.rnc" by "dbdyntbl.rnc". Then, you can override the +# choice of table model by doing +# +# include "docbook-dyntbl.rnc" { +# cals.table.model = IGNORE +# exchange.table.model = INCLUDE +# } + +INCLUDE = empty +IGNORE = notAllowed +cals.table.module = INCLUDE +exchange.table.module = IGNORE + +# Add common attributes and the Label attribute to Table and +# InformalTable. +bodyatt = common.attrib, label.attrib, tables.role.attrib + +# Content model for Table. +tbl.table.mdl = + blockinfo?, + formalobject.title.content, + ndxterm.class*, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + +table = cals.table | exchange.table + +cals.table = + cals.table.module, + grammar { + # Reference CALS Table Model + include "calstbl.rnc" { + # Add label and role attributes to table and informaltable + bodyatt = parent label.attrib + # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, + # EntryTbl, and Entry (and InformalTable element). + secur = parent common.attrib, parent tables.role.attrib + tbl.table.mdl = parent tbl.table.mdl + } + } + +exchange.table = + exchange.table.module, + grammar { + # Reference OASIS Exchange Table Model + include "soextbl.rnc" { + # Add common attributes and the Label attribute to Table and + # InformalTable. + bodyatt = parent bodyatt + tbl.table.mdl = parent tbl.table.mdl + } + } + +tgroup = cals.tgroup | exchange.tgroup + +cals.tgroup = + cals.table.module, + grammar { + # Reference CALS Table Model + include "calstbl.rnc" { + start = tgroup + # Add label and role attributes to table and informaltable + bodyatt = parent label.attrib + # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, + # EntryTbl, and Entry (and InformalTable element). + secur = parent common.attrib, parent tables.role.attrib + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = parent para.char.mix | parent tabentry.mix + } + } + +exchange.tgroup = + exchange.table.module, + grammar { + # Reference OASIS Exchange Table Model + include "soextbl.rnc" { + start = tgroup + bodyatt = parent bodyatt + # Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry + tbl.tgroup.att = parent common.attrib + tbl.colspec.att = parent common.attrib + tbl.tbody.att = parent common.attrib + tbl.thead.att = parent common.attrib + tbl.row.att = parent common.attrib + tbl.entry.att = parent common.attrib + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = (parent para.char.mix | parent tabentry.mix)* + } + } + +tbl.table.att = cals.tbl.table.att | exchange.tbl.table.att + +cals.tbl.table.att = + cals.table.module, + grammar { + include "calstbl.rnc" { + start = tbl.table.att + } + } + +exchange.tbl.table.att = + exchange.table.module, + grammar { + include "soextbl.rnc" { + start = tbl.table.att + } + } + +common.table.attribs = bodyatt + +# end of table.module diff --git a/etc/schema/dbhier.rnc b/etc/schema/dbhier.rnc new file mode 100644 index 00000000000..fd735bc62da --- /dev/null +++ b/etc/schema/dbhier.rnc @@ -0,0 +1,1467 @@ +# ...................................................................... + +# DocBook document hierarchy module V4.2 ............................... + +# File dbhierx.mod ..................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# $Id: dbhier.rnc,v 1.1 2007/11/23 06:57:44 hexmode Exp $ +# +# Permission to use, copy, modify and distribute the DocBook DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the definitions for the overall document +# hierarchies of DocBook documents. It covers computer documentation +# manuals and manual fragments, as well as reference entries (such as +# man pages) and technical journals or anthologies containing +# articles. +# +# This module depends on the DocBook information pool module. All +# elements and entities referenced but not defined here are assumed +# to be defined in the information pool module. +# +# In DTD driver files referring to this module, please use an entity +# declaration that uses the public identifier shown below: +# +# +# %dbhier; +# +# See the documentation for detailed information on the parameter +# entity and module scheme used in DocBook, customizing DocBook and +# planning for interchange, and changes made since the last release +# of DocBook. + +# ...................................................................... + +# Entities for module inclusions ....................................... + +# ...................................................................... + +# Entities for element classes ......................................... + +local.appendix.class = notAllowed +appendix.class = appendix | local.appendix.class +local.article.class = notAllowed +article.class = article | local.article.class +local.book.class = notAllowed +book.class = book | local.book.class +local.chapter.class = notAllowed +chapter.class = chapter | local.chapter.class +local.index.class = notAllowed +index.class = index | setindex | local.index.class +local.refentry.class = notAllowed +refentry.class = refentry | local.refentry.class +local.section.class = notAllowed +section.class = section | local.section.class +local.nav.class = notAllowed +nav.class = + toc | lot | index | glossary | bibliography | local.nav.class +# Redeclaration placeholder ............................................ + +# For redeclaring entities that are declared after this point while +# retaining their references to the entities that are declared before +# this point + +# ...................................................................... + +# Entities for element mixtures ........................................ + +# The DocBook TC may produce an official forms module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +forms.hook = notAllowed +local.divcomponent.mix = notAllowed +divcomponent.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | compound.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | forms.hook + | local.divcomponent.mix +local.refcomponent.mix = notAllowed +refcomponent.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | compound.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | local.refcomponent.mix +local.indexdivcomponent.mix = notAllowed +indexdivcomponent.mix = + itemizedlist + | orderedlist + | variablelist + | simplelist + | linespecific.class + | synop.class + | para.class + | informal.class + | anchor + | remark + | link.char.class + | beginpage + | local.indexdivcomponent.mix +local.refname.char.mix = notAllowed +refname.char.mix = text | tech.char.class | local.refname.char.mix +local.partcontent.mix = notAllowed +partcontent.mix = + appendix.class + | chapter.class + | nav.class + | article.class + | preface + | refentry.class + | reference + | local.partcontent.mix +local.refinline.char.mix = notAllowed +refinline.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | ndxterm.class + | beginpage + | local.refinline.char.mix +local.refclass.char.mix = notAllowed +refclass.char.mix = text | application | local.refclass.char.mix +# Redeclaration placeholder 2 .......................................... + +# For redeclaring entities that are declared after this point while +# retaining their references to the entities that are declared before +# this point + +# ...................................................................... + +# Entities for content models .......................................... +div.title.content = title, subtitle?, titleabbrev? +bookcomponent.title.content = title, subtitle?, titleabbrev? +sect.title.content = title, subtitle?, titleabbrev? +refsect.title.content = title, subtitle?, titleabbrev? +bookcomponent.content = + (divcomponent.mix+, + (sect1* | refentry.class* | simplesect* | section.class*)) + | (sect1+ | refentry.class+ | simplesect+ | section.class+) +# ...................................................................... + +# Set and SetInfo ...................................................... +local.set.attrib = empty +set.role.attrib = role.attrib +set = + element set { + set.attlist, + div.title.content?, + setinfo?, + toc?, + book.class+, + setindex? + } +# end of set.element + +# FPI: SGML formal public identifier +set.attlist &= + attribute fpi { text }?, + status.attrib, + common.attrib, + set.role.attrib, + local.set.attrib +# end of set.attlist + +# end of set.module +local.setinfo.attrib = empty +setinfo.role.attrib = role.attrib +setinfo = element setinfo { setinfo.attlist, info.class+ } +# end of setinfo.element + +# Contents: IDs of the ToC, Books, and SetIndex that comprise +# the set, in the order of their appearance +setinfo.attlist &= + attribute contents { xsd:IDREFS }?, + common.attrib, + setinfo.role.attrib, + local.setinfo.attrib +# end of setinfo.attlist + +# end of setinfo.module + +# end of set.content.module + +# ...................................................................... + +# Book and BookInfo .................................................... +local.book.attrib = empty +book.role.attrib = role.attrib +book = + element book { + book.attlist, + div.title.content?, + bookinfo?, + (dedication + | toc + | lot + | glossary + | bibliography + | preface + | chapter.class + | reference + | part + | article.class + | appendix.class + | index.class + | colophon)* + } +# end of book.element + +# FPI: SGML formal public identifier +book.attlist &= + attribute fpi { text }?, + label.attrib, + status.attrib, + common.attrib, + book.role.attrib, + local.book.attrib +# end of book.attlist + +# end of book.module +local.bookinfo.attrib = empty +bookinfo.role.attrib = role.attrib +bookinfo = element bookinfo { bookinfo.attlist, info.class+ } +# end of bookinfo.element + +# Contents: IDs of the ToC, LoTs, Prefaces, Parts, Chapters, +# Appendixes, References, GLossary, Bibliography, and indexes +# comprising the Book, in the order of their appearance +bookinfo.attlist &= + attribute contents { xsd:IDREFS }?, + common.attrib, + bookinfo.role.attrib, + local.bookinfo.attrib +# end of bookinfo.attlist + +# end of bookinfo.module + +# end of book.content.module + +# ...................................................................... + +# Dedication, ToC, and LoT ............................................. +local.dedication.attrib = empty +dedication.role.attrib = role.attrib +dedication = + element dedication { + dedication.attlist, sect.title.content?, legalnotice.mix+ + } +# end of dedication.element +dedication.attlist &= + status.attrib, + common.attrib, + dedication.role.attrib, + local.dedication.attrib +# end of dedication.attlist + +# end of dedication.module +local.colophon.attrib = empty +colophon.role.attrib = role.attrib +colophon = + element colophon { + colophon.attlist, sect.title.content?, textobject.mix+ + } +# end of colophon.element +colophon.attlist &= + status.attrib, + common.attrib, + colophon.role.attrib, + local.colophon.attrib +# end of colophon.attlist + +# end of colophon.module +local.toc.attrib = empty +toc.role.attrib = role.attrib +toc = + element toc { + toc.attlist, + beginpage?, + bookcomponent.title.content?, + tocfront*, + (tocpart | tocchap)*, + tocback* + } +# end of toc.element +toc.attlist &= + pagenum.attrib, common.attrib, toc.role.attrib, local.toc.attrib +# end of toc.attlist + +# end of toc.module +local.tocfront.attrib = empty +tocfront.role.attrib = role.attrib +tocfront = element tocfront { tocfront.attlist, para.char.mix* } +# end of tocfront.element + +# to element that this entry represents +tocfront.attlist &= + label.attrib, + linkend.attrib, + pagenum.attrib, + common.attrib, + tocfront.role.attrib, + local.tocfront.attrib +# end of tocfront.attlist + +# end of tocfront.module +local.tocentry.attrib = empty +tocentry.role.attrib = role.attrib +tocentry = element tocentry { tocentry.attlist, para.char.mix* } +# end of tocentry.element + +# to element that this entry represents +tocentry.attlist &= + linkend.attrib, + pagenum.attrib, + common.attrib, + tocentry.role.attrib, + local.tocentry.attrib +# end of tocentry.attlist + +# end of tocentry.module +local.tocpart.attrib = empty +tocpart.role.attrib = role.attrib +tocpart = element tocpart { tocpart.attlist, tocentry+, tocchap* } +# end of tocpart.element +tocpart.attlist &= + common.attrib, tocpart.role.attrib, local.tocpart.attrib +# end of tocpart.attlist + +# end of tocpart.module +local.tocchap.attrib = empty +tocchap.role.attrib = role.attrib +tocchap = element tocchap { tocchap.attlist, tocentry+, toclevel1* } +# end of tocchap.element +tocchap.attlist &= + label.attrib, common.attrib, tocchap.role.attrib, local.tocchap.attrib +# end of tocchap.attlist + +# end of tocchap.module +local.toclevel1.attrib = empty +toclevel1.role.attrib = role.attrib +toclevel1 = + element toclevel1 { toclevel1.attlist, tocentry+, toclevel2* } +# end of toclevel1.element +toclevel1.attlist &= + common.attrib, toclevel1.role.attrib, local.toclevel1.attrib +# end of toclevel1.attlist + +# end of toclevel1.module +local.toclevel2.attrib = empty +toclevel2.role.attrib = role.attrib +toclevel2 = + element toclevel2 { toclevel2.attlist, tocentry+, toclevel3* } +# end of toclevel2.element +toclevel2.attlist &= + common.attrib, toclevel2.role.attrib, local.toclevel2.attrib +# end of toclevel2.attlist + +# end of toclevel2.module +local.toclevel3.attrib = empty +toclevel3.role.attrib = role.attrib +toclevel3 = + element toclevel3 { toclevel3.attlist, tocentry+, toclevel4* } +# end of toclevel3.element +toclevel3.attlist &= + common.attrib, toclevel3.role.attrib, local.toclevel3.attrib +# end of toclevel3.attlist + +# end of toclevel3.module +local.toclevel4.attrib = empty +toclevel4.role.attrib = role.attrib +toclevel4 = + element toclevel4 { toclevel4.attlist, tocentry+, toclevel5* } +# end of toclevel4.element +toclevel4.attlist &= + common.attrib, toclevel4.role.attrib, local.toclevel4.attrib +# end of toclevel4.attlist + +# end of toclevel4.module +local.toclevel5.attrib = empty +toclevel5.role.attrib = role.attrib +toclevel5 = element toclevel5 { toclevel5.attlist, tocentry+ } +# end of toclevel5.element +toclevel5.attlist &= + common.attrib, toclevel5.role.attrib, local.toclevel5.attrib +# end of toclevel5.attlist + +# end of toclevel5.module +local.tocback.attrib = empty +tocback.role.attrib = role.attrib +tocback = element tocback { tocback.attlist, para.char.mix* } +# end of tocback.element + +# to element that this entry represents +tocback.attlist &= + label.attrib, + linkend.attrib, + pagenum.attrib, + common.attrib, + tocback.role.attrib, + local.tocback.attrib +# end of tocback.attlist + +# end of tocback.module + +# end of toc.content.module +local.lot.attrib = empty +lot.role.attrib = role.attrib +lot = + element lot { + lot.attlist, beginpage?, bookcomponent.title.content?, lotentry* + } +# end of lot.element +lot.attlist &= + label.attrib, common.attrib, lot.role.attrib, local.lot.attrib +# end of lot.attlist + +# end of lot.module +local.lotentry.attrib = empty +lotentry.role.attrib = role.attrib +lotentry = element lotentry { lotentry.attlist, para.char.mix* } +# end of lotentry.element + +# SrcCredit: Information about the source of the entry, +# as for a list of illustrations + +# linkend: to element that this entry represents +lotentry.attlist &= + linkend.attrib, + pagenum.attrib, + attribute srccredit { text }?, + common.attrib, + lotentry.role.attrib, + local.lotentry.attrib +# end of lotentry.attlist + +# end of lotentry.module + +# end of lot.content.module + +# ...................................................................... + +# Appendix, Chapter, Part, Preface, Reference, PartIntro ............... +local.appendix.attrib = empty +appendix.role.attrib = role.attrib +appendix = + element appendix { + appendix.attlist, + beginpage?, + appendixinfo?, + bookcomponent.title.content, + nav.class*, + tocchap?, + bookcomponent.content, + nav.class* + } +# end of appendix.element +appendix.attlist &= + label.attrib, + status.attrib, + common.attrib, + appendix.role.attrib, + local.appendix.attrib +# end of appendix.attlist + +# end of appendix.module +local.chapter.attrib = empty +chapter.role.attrib = role.attrib +chapter = + element chapter { + chapter.attlist, + beginpage?, + chapterinfo?, + bookcomponent.title.content, + nav.class*, + tocchap?, + bookcomponent.content, + nav.class* + } +# end of chapter.element +chapter.attlist &= + label.attrib, + status.attrib, + common.attrib, + chapter.role.attrib, + local.chapter.attrib +# end of chapter.attlist + +# end of chapter.module + +# Note that Part was to have its content model reduced in V4.2. This +# change will not be made after all. +local.part.attrib = empty +part.role.attrib = role.attrib +part = + element part { + part.attlist, + beginpage?, + partinfo?, + bookcomponent.title.content, + partintro?, + partcontent.mix+ + } +# end of part.element +part.attlist &= + label.attrib, + status.attrib, + common.attrib, + part.role.attrib, + local.part.attrib +# end of part.attlist + +# ELEMENT PartIntro (defined below) + +# end of part.module +local.preface.attrib = empty +preface.role.attrib = role.attrib +preface = + element preface { + preface.attlist, + beginpage?, + prefaceinfo?, + bookcomponent.title.content, + nav.class*, + tocchap?, + bookcomponent.content, + nav.class* + } +# end of preface.element +preface.attlist &= + status.attrib, + common.attrib, + preface.role.attrib, + local.preface.attrib +# end of preface.attlist + +# end of preface.module +local.reference.attrib = empty +reference.role.attrib = role.attrib +reference = + element reference { + reference.attlist, + beginpage?, + referenceinfo?, + bookcomponent.title.content, + partintro?, + refentry.class+ + } +# end of reference.element +reference.attlist &= + label.attrib, + status.attrib, + common.attrib, + reference.role.attrib, + local.reference.attrib +# end of reference.attlist + +# ELEMENT PartIntro (defined below) + +# end of reference.module +local.partintro.attrib = empty +partintro.role.attrib = role.attrib +partintro = + element partintro { + partintro.attlist, div.title.content?, bookcomponent.content + } +# end of partintro.element +partintro.attlist &= + label.attrib, + common.attrib, + partintro.role.attrib, + local.partintro.attrib +# end of partintro.attlist + +# end of partintro.module + +# ...................................................................... + +# Other Info elements .................................................. +local.appendixinfo.attrib = empty +appendixinfo.role.attrib = role.attrib +appendixinfo = + element appendixinfo { appendixinfo.attlist, info.class+ } +# end of appendixinfo.element +appendixinfo.attlist &= + common.attrib, appendixinfo.role.attrib, local.appendixinfo.attrib +# end of appendixinfo.attlist + +# end of appendixinfo.module +local.bibliographyinfo.attrib = empty +bibliographyinfo.role.attrib = role.attrib +bibliographyinfo = + element bibliographyinfo { bibliographyinfo.attlist, info.class+ } +# end of bibliographyinfo.element +bibliographyinfo.attlist &= + common.attrib, + bibliographyinfo.role.attrib, + local.bibliographyinfo.attrib +# end of bibliographyinfo.attlist + +# end of bibliographyinfo.module +local.chapterinfo.attrib = empty +chapterinfo.role.attrib = role.attrib +chapterinfo = element chapterinfo { chapterinfo.attlist, info.class+ } +# end of chapterinfo.element +chapterinfo.attlist &= + common.attrib, chapterinfo.role.attrib, local.chapterinfo.attrib +# end of chapterinfo.attlist + +# end of chapterinfo.module +local.glossaryinfo.attrib = empty +glossaryinfo.role.attrib = role.attrib +glossaryinfo = + element glossaryinfo { glossaryinfo.attlist, info.class+ } +# end of glossaryinfo.element +glossaryinfo.attlist &= + common.attrib, glossaryinfo.role.attrib, local.glossaryinfo.attrib +# end of glossaryinfo.attlist + +# end of glossaryinfo.module +local.indexinfo.attrib = empty +indexinfo.role.attrib = role.attrib +indexinfo = element indexinfo { indexinfo.attlist, info.class+ } +# end of indexinfo.element +indexinfo.attlist &= + common.attrib, indexinfo.role.attrib, local.indexinfo.attrib +# end of indexinfo.attlist + +# end of indexinfo.module +local.setindexinfo.attrib = empty +setindexinfo.role.attrib = role.attrib +setindexinfo = + element setindexinfo { setindexinfo.attlist, info.class+ } +# end of setindexinfo.element +setindexinfo.attlist &= + common.attrib, setindexinfo.role.attrib, local.setindexinfo.attrib +# end of setindexinfo.attlist + +# end of setindexinfo.module +local.partinfo.attrib = empty +partinfo.role.attrib = role.attrib +partinfo = element partinfo { partinfo.attlist, info.class+ } +# end of partinfo.element +partinfo.attlist &= + common.attrib, partinfo.role.attrib, local.partinfo.attrib +# end of partinfo.attlist + +# end of partinfo.module +local.prefaceinfo.attrib = empty +prefaceinfo.role.attrib = role.attrib +prefaceinfo = element prefaceinfo { prefaceinfo.attlist, info.class+ } +# end of prefaceinfo.element +prefaceinfo.attlist &= + common.attrib, prefaceinfo.role.attrib, local.prefaceinfo.attrib +# end of prefaceinfo.attlist + +# end of prefaceinfo.module +local.refentryinfo.attrib = empty +refentryinfo.role.attrib = role.attrib +refentryinfo = + element refentryinfo { refentryinfo.attlist, info.class+ } +# end of refentryinfo.element +refentryinfo.attlist &= + common.attrib, refentryinfo.role.attrib, local.refentryinfo.attrib +# end of refentryinfo.attlist + +# end of refentryinfo.module +local.refsectioninfo.attrib = empty +refsectioninfo.role.attrib = role.attrib +refsectioninfo = + element refsectioninfo { refsectioninfo.attlist, info.class+ } +# end of refsectioninfo.element +refsectioninfo.attlist &= + common.attrib, refsectioninfo.role.attrib, local.refsectioninfo.attrib +# end of refsectioninfo.attlist + +# end of refsectioninfo.module +local.refsect1info.attrib = empty +refsect1info.role.attrib = role.attrib +refsect1info = + element refsect1info { refsect1info.attlist, info.class+ } +# end of refsect1info.element +refsect1info.attlist &= + common.attrib, refsect1info.role.attrib, local.refsect1info.attrib +# end of refsect1info.attlist + +# end of refsect1info.module +local.refsect2info.attrib = empty +refsect2info.role.attrib = role.attrib +refsect2info = + element refsect2info { refsect2info.attlist, info.class+ } +# end of refsect2info.element +refsect2info.attlist &= + common.attrib, refsect2info.role.attrib, local.refsect2info.attrib +# end of refsect2info.attlist + +# end of refsect2info.module +local.refsect3info.attrib = empty +refsect3info.role.attrib = role.attrib +refsect3info = + element refsect3info { refsect3info.attlist, info.class+ } +# end of refsect3info.element +refsect3info.attlist &= + common.attrib, refsect3info.role.attrib, local.refsect3info.attrib +# end of refsect3info.attlist + +# end of refsect3info.module +local.refsynopsisdivinfo.attrib = empty +refsynopsisdivinfo.role.attrib = role.attrib +refsynopsisdivinfo = + element refsynopsisdivinfo { refsynopsisdivinfo.attlist, info.class+ } +# end of refsynopsisdivinfo.element +refsynopsisdivinfo.attlist &= + common.attrib, + refsynopsisdivinfo.role.attrib, + local.refsynopsisdivinfo.attrib +# end of refsynopsisdivinfo.attlist + +# end of refsynopsisdivinfo.module +local.referenceinfo.attrib = empty +referenceinfo.role.attrib = role.attrib +referenceinfo = + element referenceinfo { referenceinfo.attlist, info.class+ } +# end of referenceinfo.element +referenceinfo.attlist &= + common.attrib, referenceinfo.role.attrib, local.referenceinfo.attrib +# end of referenceinfo.attlist + +# end of referenceinfo.module +local.sect1info.attrib = empty +sect1info.role.attrib = role.attrib +sect1info = element sect1info { sect1info.attlist, info.class+ } +# end of sect1info.element +sect1info.attlist &= + common.attrib, sect1info.role.attrib, local.sect1info.attrib +# end of sect1info.attlist +local.sect2info.attrib = empty +sect2info.role.attrib = role.attrib +sect2info = element sect2info { sect2info.attlist, info.class+ } +# end of sect2info.element +sect2info.attlist &= + common.attrib, sect2info.role.attrib, local.sect2info.attrib +# end of sect2info.attlist +local.sect3info.attrib = empty +sect3info.role.attrib = role.attrib +sect3info = element sect3info { sect3info.attlist, info.class+ } +# end of sect3info.element +sect3info.attlist &= + common.attrib, sect3info.role.attrib, local.sect3info.attrib +# end of sect3info.attlist +local.sect4info.attrib = empty +sect4info.role.attrib = role.attrib +sect4info = element sect4info { sect4info.attlist, info.class+ } +# end of sect4info.element +sect4info.attlist &= + common.attrib, sect4info.role.attrib, local.sect4info.attrib +# end of sect4info.attlist +local.sect5info.attrib = empty +sect5info.role.attrib = role.attrib +sect5info = element sect5info { sect5info.attlist, info.class+ } +# end of sect5info.element +sect5info.attlist &= + common.attrib, sect5info.role.attrib, local.sect5info.attrib +# end of sect5info.attlist + +# ...................................................................... + +# Section (parallel to Sect*) ......................................... +local.section.attrib = empty +section.role.attrib = role.attrib +section = + element section { + section.attlist, + sectioninfo?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, + (refentry.class* | section.class* | simplesect*)) + | refentry.class+ + | section.class+ + | simplesect+), + nav.class* + } +# end of section.element +section.attlist &= + label.attrib, + status.attrib, + common.attrib, + section.role.attrib, + local.section.attrib +# end of section.attlist + +# end of section.module +sectioninfo.role.attrib = role.attrib +local.sectioninfo.attrib = empty +sectioninfo = element sectioninfo { sectioninfo.attlist, info.class+ } +# end of sectioninfo.element +sectioninfo.attlist &= + common.attrib, sectioninfo.role.attrib, local.sectioninfo.attrib +# end of sectioninfo.attlist + +# end of sectioninfo.module + +# end of section.content.module + +# ...................................................................... + +# Sect1, Sect2, Sect3, Sect4, Sect5 .................................... +local.sect1.attrib = empty +sect1.role.attrib = role.attrib +sect1 = + element sect1 { + sect1.attlist, + sect1info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect2* | simplesect*)) + | refentry.class+ + | sect2+ + | simplesect+), + nav.class* + } +# end of sect1.element + +# Renderas: Indicates the format in which the heading should +# appear +sect1.attlist &= + attribute renderas { "sect2" | "sect3" | "sect4" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect1.role.attrib, + local.sect1.attrib +# end of sect1.attlist + +# end of sect1.module +local.sect2.attrib = empty +sect2.role.attrib = role.attrib +sect2 = + element sect2 { + sect2.attlist, + sect2info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect3* | simplesect*)) + | refentry.class+ + | sect3+ + | simplesect+), + nav.class* + } +# end of sect2.element + +# Renderas: Indicates the format in which the heading should +# appear +sect2.attlist &= + attribute renderas { "sect1" | "sect3" | "sect4" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect2.role.attrib, + local.sect2.attrib +# end of sect2.attlist + +# end of sect2.module +local.sect3.attrib = empty +sect3.role.attrib = role.attrib +sect3 = + element sect3 { + sect3.attlist, + sect3info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect4* | simplesect*)) + | refentry.class+ + | sect4+ + | simplesect+), + nav.class* + } +# end of sect3.element + +# Renderas: Indicates the format in which the heading should +# appear +sect3.attlist &= + attribute renderas { "sect1" | "sect2" | "sect4" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect3.role.attrib, + local.sect3.attrib +# end of sect3.attlist + +# end of sect3.module +local.sect4.attrib = empty +sect4.role.attrib = role.attrib +sect4 = + element sect4 { + sect4.attlist, + sect4info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect5* | simplesect*)) + | refentry.class+ + | sect5+ + | simplesect+), + nav.class* + } +# end of sect4.element + +# Renderas: Indicates the format in which the heading should +# appear +sect4.attlist &= + attribute renderas { "sect1" | "sect2" | "sect3" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect4.role.attrib, + local.sect4.attrib +# end of sect4.attlist + +# end of sect4.module +local.sect5.attrib = empty +sect5.role.attrib = role.attrib +sect5 = + element sect5 { + sect5.attlist, + sect5info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | simplesect*)) + | refentry.class+ + | simplesect+), + nav.class* + } +# end of sect5.element + +# Renderas: Indicates the format in which the heading should +# appear +sect5.attlist &= + attribute renderas { "sect1" | "sect2" | "sect3" | "sect4" }?, + label.attrib, + status.attrib, + common.attrib, + sect5.role.attrib, + local.sect5.attrib +# end of sect5.attlist + +# end of sect5.module +local.simplesect.attrib = empty +simplesect.role.attrib = role.attrib +simplesect = + element simplesect { + simplesect.attlist, sect.title.content, divcomponent.mix+ + } +# end of simplesect.element +simplesect.attlist &= + common.attrib, simplesect.role.attrib, local.simplesect.attrib +# end of simplesect.attlist + +# end of simplesect.module + +# ...................................................................... + +# Bibliography ......................................................... +local.bibliography.attrib = empty +bibliography.role.attrib = role.attrib +bibliography = + element bibliography { + bibliography.attlist, + bibliographyinfo?, + bookcomponent.title.content?, + component.mix*, + (bibliodiv+ | (biblioentry | bibliomixed)+) + } +# end of bibliography.element +bibliography.attlist &= + status.attrib, + common.attrib, + bibliography.role.attrib, + local.bibliography.attrib +# end of bibliography.attlist + +# end of bibliography.module +local.bibliodiv.attrib = empty +bibliodiv.role.attrib = role.attrib +bibliodiv = + element bibliodiv { + bibliodiv.attlist, + sect.title.content?, + component.mix*, + (biblioentry | bibliomixed)+ + } +# end of bibliodiv.element +bibliodiv.attlist &= + status.attrib, + common.attrib, + bibliodiv.role.attrib, + local.bibliodiv.attrib +# end of bibliodiv.attlist + +# end of bibliodiv.module + +# end of bibliography.content.module + +# ...................................................................... + +# Glossary ............................................................. +local.glossary.attrib = empty +glossary.role.attrib = role.attrib +glossary = + element glossary { + glossary.attlist, + glossaryinfo?, + bookcomponent.title.content?, + component.mix*, + (glossdiv+ | glossentry+), + bibliography? + } +# end of glossary.element +glossary.attlist &= + status.attrib, + common.attrib, + glossary.role.attrib, + local.glossary.attrib +# end of glossary.attlist + +# end of glossary.module +local.glossdiv.attrib = empty +glossdiv.role.attrib = role.attrib +glossdiv = + element glossdiv { + glossdiv.attlist, sect.title.content, component.mix*, glossentry+ + } +# end of glossdiv.element +glossdiv.attlist &= + status.attrib, + common.attrib, + glossdiv.role.attrib, + local.glossdiv.attrib +# end of glossdiv.attlist + +# end of glossdiv.module + +# end of glossary.content.module + +# ...................................................................... + +# Index and SetIndex ................................................... +local.indexes.attrib = empty +indexes.role.attrib = role.attrib +index = + element index { + index.attlist, + indexinfo?, + bookcomponent.title.content?, + component.mix*, + (indexdiv* | indexentry*) + } +# end of index.element +index.attlist &= + common.attrib, indexes.role.attrib, local.indexes.attrib +# end of index.attlist +setindex = + element setindex { + setindex.attlist, + setindexinfo?, + bookcomponent.title.content?, + component.mix*, + (indexdiv* | indexentry*) + } +# end of setindex.element +setindex.attlist &= + common.attrib, indexes.role.attrib, local.indexes.attrib +# end of setindex.attlist + +# end of indexes.module + +# SegmentedList in this content is useful for marking up permuted +# indices. +local.indexdiv.attrib = empty +indexdiv.role.attrib = role.attrib +indexdiv = + element indexdiv { + indexdiv.attlist, + sect.title.content?, + (indexdivcomponent.mix*, (indexentry+ | segmentedlist)) + } +# end of indexdiv.element +indexdiv.attlist &= + common.attrib, indexdiv.role.attrib, local.indexdiv.attrib +# end of indexdiv.attlist + +# end of indexdiv.module + +# Index entries appear in the index, not the text. +local.indexentry.attrib = empty +indexentry.role.attrib = role.attrib +indexentry = + element indexentry { + indexentry.attlist, + primaryie, + (seeie | seealsoie)*, + (secondaryie, (seeie | seealsoie | tertiaryie)*)* + } +# end of indexentry.element +indexentry.attlist &= + common.attrib, indexentry.role.attrib, local.indexentry.attrib +# end of indexentry.attlist + +# end of indexentry.module +local.primsecterie.attrib = empty +primsecterie.role.attrib = role.attrib +primaryie = element primaryie { primaryie.attlist, ndxterm.char.mix* } +# end of primaryie.element + +# to IndexTerms that these entries represent +primaryie.attlist &= + linkends.attrib, + common.attrib, + primsecterie.role.attrib, + local.primsecterie.attrib +# end of primaryie.attlist +secondaryie = + element secondaryie { secondaryie.attlist, ndxterm.char.mix* } +# end of secondaryie.element + +# to IndexTerms that these entries represent +secondaryie.attlist &= + linkends.attrib, + common.attrib, + primsecterie.role.attrib, + local.primsecterie.attrib +# end of secondaryie.attlist +tertiaryie = + element tertiaryie { tertiaryie.attlist, ndxterm.char.mix* } +# end of tertiaryie.element + +# to IndexTerms that these entries represent +tertiaryie.attlist &= + linkends.attrib, + common.attrib, + primsecterie.role.attrib, + local.primsecterie.attrib +# end of tertiaryie.attlist + +# end of primsecterie.module +local.seeie.attrib = empty +seeie.role.attrib = role.attrib +seeie = element seeie { seeie.attlist, ndxterm.char.mix* } +# end of seeie.element + +# to IndexEntry to look up +seeie.attlist &= + linkend.attrib, common.attrib, seeie.role.attrib, local.seeie.attrib +# end of seeie.attlist + +# end of seeie.module +local.seealsoie.attrib = empty +seealsoie.role.attrib = role.attrib +seealsoie = element seealsoie { seealsoie.attlist, ndxterm.char.mix* } +# end of seealsoie.element + +# to related IndexEntries +seealsoie.attlist &= + linkends.attrib, + common.attrib, + seealsoie.role.attrib, + local.seealsoie.attrib +# end of seealsoie.attlist + +# end of seealsoie.module + +# end of index.content.module + +# ...................................................................... + +# RefEntry ............................................................. +local.refentry.attrib = empty +refentry.role.attrib = role.attrib +refentry = + element refentry { + refentry.attlist, + beginpage?, + ndxterm.class*, + refentryinfo?, + refmeta?, + (remark | link.char.class)*, + refnamediv, + refsynopsisdiv?, + (refsect1+ | refsection+) + } +# end of refentry.element +refentry.attlist &= + status.attrib, + common.attrib, + refentry.role.attrib, + local.refentry.attrib +# end of refentry.attlist + +# end of refentry.module +local.refmeta.attrib = empty +refmeta.role.attrib = role.attrib +refmeta = + element refmeta { + refmeta.attlist, + ndxterm.class*, + refentrytitle, + manvolnum?, + refmiscinfo*, + ndxterm.class* + } +# end of refmeta.element +refmeta.attlist &= + common.attrib, refmeta.role.attrib, local.refmeta.attrib +# end of refmeta.attlist + +# end of refmeta.module +local.refmiscinfo.attrib = empty +refmiscinfo.role.attrib = role.attrib +refmiscinfo = + element refmiscinfo { refmiscinfo.attlist, docinfo.char.mix* } +# end of refmiscinfo.element + +# Class: Freely assignable parameter; no default +refmiscinfo.attlist &= + attribute class { text }?, + common.attrib, + refmiscinfo.role.attrib, + local.refmiscinfo.attrib +# end of refmiscinfo.attlist + +# end of refmiscinfo.module +local.refnamediv.attrib = empty +refnamediv.role.attrib = role.attrib +refnamediv = + element refnamediv { + refnamediv.attlist, + refdescriptor?, + refname+, + refpurpose, + refclass*, + (remark | link.char.class)* + } +# end of refnamediv.element +refnamediv.attlist &= + common.attrib, refnamediv.role.attrib, local.refnamediv.attrib +# end of refnamediv.attlist + +# end of refnamediv.module +local.refdescriptor.attrib = empty +refdescriptor.role.attrib = role.attrib +refdescriptor = + element refdescriptor { refdescriptor.attlist, refname.char.mix* } +# end of refdescriptor.element +refdescriptor.attlist &= + common.attrib, refdescriptor.role.attrib, local.refdescriptor.attrib +# end of refdescriptor.attlist + +# end of refdescriptor.module +local.refname.attrib = empty +refname.role.attrib = role.attrib +refname = element refname { refname.attlist, refname.char.mix* } +# end of refname.element +refname.attlist &= + common.attrib, refname.role.attrib, local.refname.attrib +# end of refname.attlist + +# end of refname.module +local.refpurpose.attrib = empty +refpurpose.role.attrib = role.attrib +refpurpose = + element refpurpose { refpurpose.attlist, refinline.char.mix* } +# end of refpurpose.element +refpurpose.attlist &= + common.attrib, refpurpose.role.attrib, local.refpurpose.attrib +# end of refpurpose.attlist + +# end of refpurpose.module +local.refclass.attrib = empty +refclass.role.attrib = role.attrib +refclass = element refclass { refclass.attlist, refclass.char.mix* } +# end of refclass.element +refclass.attlist &= + common.attrib, refclass.role.attrib, local.refclass.attrib +# end of refclass.attlist + +# end of refclass.module +local.refsynopsisdiv.attrib = empty +refsynopsisdiv.role.attrib = role.attrib +refsynopsisdiv = + element refsynopsisdiv { + refsynopsisdiv.attlist, + refsynopsisdivinfo?, + refsect.title.content?, + ((refcomponent.mix+, refsect2*) | refsect2+) + } +# end of refsynopsisdiv.element +refsynopsisdiv.attlist &= + common.attrib, refsynopsisdiv.role.attrib, local.refsynopsisdiv.attrib +# end of refsynopsisdiv.attlist + +# end of refsynopsisdiv.module +local.refsection.attrib = empty +refsection.role.attrib = role.attrib +refsection = + element refsection { + refsection.attlist, + refsectioninfo?, + refsect.title.content, + ((refcomponent.mix+, refsection*) | refsection+) + } +# end of refsection.element +refsection.attlist &= + status.attrib, + common.attrib, + refsection.role.attrib, + local.refsection.attrib +# end of refsection.attlist + +# end of refsection.module +local.refsect1.attrib = empty +refsect1.role.attrib = role.attrib +refsect1 = + element refsect1 { + refsect1.attlist, + refsect1info?, + refsect.title.content, + ((refcomponent.mix+, refsect2*) | refsect2+) + } +# end of refsect1.element +refsect1.attlist &= + status.attrib, + common.attrib, + refsect1.role.attrib, + local.refsect1.attrib +# end of refsect1.attlist + +# end of refsect1.module +local.refsect2.attrib = empty +refsect2.role.attrib = role.attrib +refsect2 = + element refsect2 { + refsect2.attlist, + refsect2info?, + refsect.title.content, + ((refcomponent.mix+, refsect3*) | refsect3+) + } +# end of refsect2.element +refsect2.attlist &= + status.attrib, + common.attrib, + refsect2.role.attrib, + local.refsect2.attrib +# end of refsect2.attlist + +# end of refsect2.module +local.refsect3.attrib = empty +refsect3.role.attrib = role.attrib +refsect3 = + element refsect3 { + refsect3.attlist, + refsect3info?, + refsect.title.content, + refcomponent.mix+ + } +# end of refsect3.element +refsect3.attlist &= + status.attrib, + common.attrib, + refsect3.role.attrib, + local.refsect3.attrib +# end of refsect3.attlist + +# end of refsect3.module + +# end of refentry.content.module + +# ...................................................................... + +# Article .............................................................. + +# An Article is a chapter-level, stand-alone document that is often, +# but need not be, collected into a Book. +local.article.attrib = empty +article.role.attrib = role.attrib +article = + element article { + article.attlist, + div.title.content?, + articleinfo?, + tocchap?, + lot*, + bookcomponent.content, + (nav.class | appendix.class | ackno)* + } +# end of article.element + +# Class: Indicates the type of a particular article; +# all articles have the same structure and general purpose. +# No default. + +# ParentBook: ID of the enclosing Book +article.attlist &= + attribute class { + "journalarticle" + | "productsheet" + | "whitepaper" + | "techreport" + | "specification" + | "faq" + }?, + attribute parentbook { xsd:IDREF }?, + status.attrib, + common.attrib, + article.role.attrib, + local.article.attrib +# end of article.attlist + +# end of article.module + +# End of DocBook document hierarchy module V4.2 ........................ + +# ...................................................................... diff --git a/etc/schema/dbnotn.rnc b/etc/schema/dbnotn.rnc new file mode 100644 index 00000000000..bb1116fc19f --- /dev/null +++ b/etc/schema/dbnotn.rnc @@ -0,0 +1,84 @@ +# ...................................................................... + +# DocBook notations module V4.2 ........................................ + +# File dbnotnx.mod ..................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# $Id: dbnotn.rnc,v 1.1 2007/11/23 06:57:44 hexmode Exp $ +# +# Permission to use, copy, modify and distribute the DocBook DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the entity declarations for the standard ISO +# entity sets used by DocBook. +# +# In DTD driver files referring to this module, please use an entity +# declaration that uses the public identifier shown below: +# +# +# %dbnotn; +# +# See the documentation for detailed information on the parameter +# entity and module scheme used in DocBook, customizing DocBook and +# planning for interchange, and changes made since the last release +# of DocBook. + +local.notation.class = notAllowed +notation.class = + "BMP" + | "CGM-CHAR" + | "CGM-BINARY" + | "CGM-CLEAR" + | "DITROFF" + | "DVI" + | "EPS" + | "EQN" + | "FAX" + | "GIF" + | "GIF87a" + | "GIF89a" + | "JPG" + | "JPEG" + | "IGES" + | "PCX" + | "PIC" + | "PNG" + | "PS" + | "SGML" + | "TBL" + | "TEX" + | "TIFF" + | "WMF" + | "WPG" + | "SVG" + | "linespecific" + | local.notation.class +# WordPerfect Graphic format + +# End of DocBook notations module V4.2 ................................. + +# ...................................................................... diff --git a/etc/schema/dbpool.rnc b/etc/schema/dbpool.rnc new file mode 100644 index 00000000000..ec99516700e --- /dev/null +++ b/etc/schema/dbpool.rnc @@ -0,0 +1,5083 @@ +# This file was generated automatically by Trang. The table model +# dependent definitions have been moved into separate files. + +# ...................................................................... + +# DocBook XML information pool module V4.2 ............................. + +# File dbpoolx.mod ..................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# $Id: dbpool.rnc,v 1.1 2007/11/23 06:57:44 hexmode Exp $ +# +# Permission to use, copy, modify and distribute the DocBook XML DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook XML DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the definitions for the objects, inline +# elements, and so on that are available to be used as the main +# content of DocBook documents. Some elements are useful for general +# publishing, and others are useful specifically for computer +# documentation. +# +# This module has the following dependencies on other modules: +# +# o It assumes that a %notation.class; entity is defined by the +# driver file or other high-level module. This entity is +# referenced in the NOTATION attributes for the graphic-related and +# ModeSpec elements. +# +# o It assumes that an appropriately parameterized table module is +# available for use with the table-related elements. +# +# In DTD driver files referring to this module, please use an entity +# declaration that uses the public identifier shown below: +# +# +# %dbpool; +# +# See the documentation for detailed information on the parameter +# entity and module scheme used in DocBook, customizing DocBook and +# planning for interchange, and changes made since the last release +# of DocBook. + +# ...................................................................... + +# General-purpose semantics entities ................................... + +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" + +yesorno.attvals = string +# ...................................................................... + +# Entities for module inclusions ....................................... + +# ...................................................................... + +# Entities for element classes and mixtures ............................ + +# "Ubiquitous" classes: ndxterm.class and beginpage +local.ndxterm.class = notAllowed +ndxterm.class = indexterm | local.ndxterm.class +# Object-level classes ................................................. +local.list.class = notAllowed +list.class = + calloutlist + | glosslist + | itemizedlist + | orderedlist + | segmentedlist + | simplelist + | variablelist + | local.list.class +local.admon.class = notAllowed +admon.class = + caution | important | note | tip | warning | local.admon.class +local.linespecific.class = notAllowed +linespecific.class = + literallayout + | programlisting + | programlistingco + | screen + | screenco + | screenshot + | local.linespecific.class +local.method.synop.class = notAllowed +method.synop.class = + constructorsynopsis + | destructorsynopsis + | methodsynopsis + | local.method.synop.class +local.synop.class = notAllowed +synop.class = + synopsis + | cmdsynopsis + | funcsynopsis + | classsynopsis + | fieldsynopsis + | method.synop.class + | local.synop.class +local.para.class = notAllowed +para.class = formalpara | para | simpara | local.para.class +local.informal.class = notAllowed +informal.class = + address + | blockquote + | graphic + | graphicco + | mediaobject + | mediaobjectco + | informalequation + | informalexample + | informalfigure + | informaltable + | local.informal.class +local.formal.class = notAllowed +formal.class = equation | example | figure | table | local.formal.class +# The DocBook TC may produce an official EBNF module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +ebnf.block.hook = notAllowed +local.compound.class = notAllowed +compound.class = + msgset + | procedure + | sidebar + | qandaset + | ebnf.block.hook + | local.compound.class +local.genobj.class = notAllowed +genobj.class = + anchor | bridgehead | remark | highlights | local.genobj.class +local.descobj.class = notAllowed +descobj.class = abstract | authorblurb | epigraph | local.descobj.class +# Character-level classes .............................................. +local.xref.char.class = notAllowed +xref.char.class = footnoteref | xref | local.xref.char.class +local.gen.char.class = notAllowed +gen.char.class = + abbrev + | acronym + | citation + | citerefentry + | citetitle + | emphasis + | firstterm + | foreignphrase + | glossterm + | footnote + | phrase + | quote + | trademark + | wordasword + | personname + | local.gen.char.class +local.link.char.class = notAllowed +link.char.class = link | olink | ulink | local.link.char.class +# The DocBook TC may produce an official EBNF module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +ebnf.inline.hook = notAllowed +local.tech.char.class = notAllowed +tech.char.class = + action + | application + | classname + | methodname + | interfacename + | exceptionname + | ooclass + | oointerface + | ooexception + | command + | computeroutput + | database + | email + | envar + | errorcode + | errorname + | errortype + | errortext + | filename + | function + | guibutton + | guiicon + | guilabel + | guimenu + | guimenuitem + | guisubmenu + | hardware + | interface + | keycap + | keycode + | keycombo + | keysym + | literal + | constant + | markup + | medialabel + | menuchoice + | mousebutton + | option + | optional + | parameter + | prompt + | property + | replaceable + | returnvalue + | sgmltag + | structfield + | structname + | symbol + | systemitem + | \token + | type + | userinput + | varname + | ebnf.inline.hook + | local.tech.char.class +local.base.char.class = notAllowed +base.char.class = anchor | local.base.char.class +local.docinfo.char.class = notAllowed +docinfo.char.class = + author + | authorinitials + | corpauthor + | modespec + | othercredit + | productname + | productnumber + | revhistory + | local.docinfo.char.class +local.other.char.class = notAllowed +other.char.class = + remark | subscript | superscript | local.other.char.class +local.inlineobj.char.class = notAllowed +inlineobj.char.class = + inlinegraphic + | inlinemediaobject + | inlineequation + | local.inlineobj.char.class +# ...................................................................... + +# Entities for content models .......................................... +formalobject.title.content = title, titleabbrev? +# Redeclaration placeholder ............................................ + +# For redeclaring entities that are declared after this point while +# retaining their references to the entities that are declared before +# this point + +# Object-level mixtures ................................................ + +# list admn line synp para infm form cmpd gen desc +# Component mixture X X X X X X X X X X +# Sidebar mixture X X X X X X X a X +# Footnote mixture X X X X X +# Example mixture X X X X X +# Highlights mixture X X X +# Paragraph mixture X X X X +# Admonition mixture X X X X X X b c +# Figure mixture X X X +# Table entry mixture X X X X d +# Glossary def mixture X X X X X e +# Legal notice mixture X X X X f +# +# a. Just Procedure; not Sidebar itself or MsgSet. +# b. No MsgSet. +# c. No Highlights. +# d. Just Graphic; no other informal objects. +# e. No Anchor, BridgeHead, or Highlights. +# f. Just BlockQuote; no other informal objects. +local.component.mix = notAllowed +component.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | compound.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | local.component.mix +local.sidebar.mix = notAllowed +sidebar.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | genobj.class + | ndxterm.class + | beginpage + | local.sidebar.mix +local.qandaset.mix = notAllowed +qandaset.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | genobj.class + | ndxterm.class + | local.qandaset.mix +local.revdescription.mix = notAllowed +revdescription.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | genobj.class + | ndxterm.class + | local.revdescription.mix +local.footnote.mix = notAllowed +footnote.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | local.footnote.mix +local.example.mix = notAllowed +example.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | ndxterm.class + | beginpage + | local.example.mix +local.highlights.mix = notAllowed +highlights.mix = + list.class + | admon.class + | para.class + | ndxterm.class + | local.highlights.mix +# %formal.class; is explicitly excluded from many contexts in which +# paragraphs are used +local.para.mix = notAllowed +para.mix = + list.class + | admon.class + | linespecific.class + | informal.class + | formal.class + | local.para.mix +local.admon.mix = notAllowed +admon.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | sidebar + | anchor + | bridgehead + | remark + | ndxterm.class + | beginpage + | local.admon.mix +local.figure.mix = notAllowed +figure.mix = + linespecific.class + | synop.class + | informal.class + | ndxterm.class + | beginpage + | local.figure.mix +local.tabentry.mix = notAllowed +tabentry.mix = + list.class + | admon.class + | linespecific.class + | para.class + | graphic + | mediaobject + | local.tabentry.mix +local.glossdef.mix = notAllowed +glossdef.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | remark + | ndxterm.class + | beginpage + | local.glossdef.mix +local.legalnotice.mix = notAllowed +legalnotice.mix = + list.class + | admon.class + | linespecific.class + | para.class + | blockquote + | ndxterm.class + | beginpage + | local.legalnotice.mix +local.textobject.mix = notAllowed +textobject.mix = + list.class + | admon.class + | linespecific.class + | para.class + | blockquote + | local.textobject.mix +local.mediaobject.mix = notAllowed +mediaobject.mix = + videoobject + | audioobject + | imageobject + | textobject + | local.mediaobject.mix +local.listpreamble.mix = notAllowed +listpreamble.mix = + admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | local.listpreamble.mix +# Character-level mixtures ............................................. + +# sgml.features + +# not [sgml.features[ + +# ]] not sgml.features + +# #PCD xref word link cptr base dnfo othr inob (synop) +# para.char.mix X X X X X X X X X +# title.char.mix X X X X X X X X X +# ndxterm.char.mix X X X X X X X X a +# cptr.char.mix X X X X X a +# smallcptr.char.mix X b a +# word.char.mix X c X X X a +# docinfo.char.mix X d X b X a +# +# a. Just InlineGraphic; no InlineEquation. +# b. Just Replaceable; no other computer terms. +# c. Just Emphasis and Trademark; no other word elements. +# d. Just Acronym, Emphasis, and Trademark; no other word elements. + +# The DocBook TC may produce an official forms module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +forminlines.hook = notAllowed +local.para.char.mix = notAllowed +para.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | inlineobj.char.class + | synop.class + | ndxterm.class + | beginpage + | forminlines.hook + | local.para.char.mix +local.title.char.mix = notAllowed +title.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | inlineobj.char.class + | ndxterm.class + | local.title.char.mix +local.ndxterm.char.mix = notAllowed +ndxterm.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | local.ndxterm.char.mix +local.cptr.char.mix = notAllowed +cptr.char.mix = + text + | link.char.class + | tech.char.class + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | beginpage + | local.cptr.char.mix +local.smallcptr.char.mix = notAllowed +smallcptr.char.mix = + text + | replaceable + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | beginpage + | local.smallcptr.char.mix +local.word.char.mix = notAllowed +word.char.mix = + text + | acronym + | emphasis + | trademark + | link.char.class + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | beginpage + | local.word.char.mix +local.docinfo.char.mix = notAllowed +docinfo.char.mix = + text + | link.char.class + | emphasis + | trademark + | replaceable + | other.char.class + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | local.docinfo.char.mix +# ENTITY % bibliocomponent.mix (see Bibliographic section, below) + +# ENTITY % person.ident.mix (see Bibliographic section, below) + +# ...................................................................... + +# Entities for attributes and attribute components ..................... + +# Effectivity attributes ............................................... + +# Arch: Computer or chip architecture to which element applies; no +# default +arch.attrib = attribute arch { text }? +# Condition: General-purpose effectivity attribute +condition.attrib = attribute condition { text }? +# Conformance: Standards conformance characteristics +conformance.attrib = attribute conformance { xsd:NMTOKENS }? +# OS: Operating system to which element applies; no default +os.attrib = attribute os { text }? +# Revision: Editorial revision to which element belongs; no default +revision.attrib = attribute revision { text }? +# Security: Security classification; no default +security.attrib = attribute security { text }? +# UserLevel: Level of user experience to which element applies; no +# default +userlevel.attrib = attribute userlevel { text }? +# Vendor: Computer vendor to which element applies; no default +vendor.attrib = attribute vendor { text }? +local.effectivity.attrib = empty +effectivity.attrib = + arch.attrib, + condition.attrib, + conformance.attrib, + os.attrib, + revision.attrib, + security.attrib, + userlevel.attrib, + vendor.attrib, + local.effectivity.attrib +# Common attributes .................................................... + +# Id: Unique identifier of element; no default +id.attrib = attribute id { xsd:ID }? +# Id: Unique identifier of element; a value must be supplied; no +# default +idreq.attrib = attribute id { xsd:ID } +# Lang: Indicator of language in which element is written, for +# translation, character set management, etc.; no default +lang.attrib = attribute lang { text }? +# Remap: Previous role of element before conversion; no default +remap.attrib = attribute remap { text }? +# Role: New role of element in local environment; no default +role.attrib = attribute role { text }? +# XRefLabel: Alternate labeling string for XRef text generation; +# default is usually title or other appropriate label text already +# contained in element +xreflabel.attrib = attribute xreflabel { text }? +# RevisionFlag: Revision status of element; default is that element +# wasn't revised +revisionflag.attrib = + attribute revisionflag { "changed" | "added" | "deleted" | "off" }? +local.common.attrib = empty +# Role is included explicitly on each element +common.attrib = + id.attrib, + lang.attrib, + remap.attrib, + xreflabel.attrib, + revisionflag.attrib, + effectivity.attrib, + local.common.attrib +# Role is included explicitly on each element +idreq.common.attrib = + idreq.attrib, + lang.attrib, + remap.attrib, + xreflabel.attrib, + revisionflag.attrib, + effectivity.attrib, + local.common.attrib +# Semi-common attributes and other attribute entities .................. +local.graphics.attrib = empty +# EntityRef: Name of an external entity containing the content +# of the graphic + +# FileRef: Filename, qualified by a pathname if desired, +# designating the file containing the content of the graphic + +# Format: Notation of the element content, if any + +# SrcCredit: Information about the source of the Graphic + +# Width: Same as CALS reprowid (desired width) + +# Depth: Same as CALS reprodep (desired depth) + +# Align: Same as CALS hplace with 'none' removed; #IMPLIED means +# application-specific + +# Scale: Conflation of CALS hscale and vscale + +# Scalefit: Same as CALS scalefit +graphics.attrib = + attribute entityref { xsd:ENTITY }?, + attribute fileref { text }?, + attribute format { notation.class }?, + attribute srccredit { text }?, + attribute width { text }?, + attribute contentwidth { text }?, + attribute depth { text }?, + attribute contentdepth { text }?, + attribute align { "left" | "right" | "center" }?, + attribute valign { "top" | "middle" | "bottom" }?, + attribute scale { text }?, + attribute scalefit { yesorno.attvals }?, + local.graphics.attrib +local.keyaction.attrib = empty +# Action: Key combination type; default is unspecified if one +# child element, Simul if there is more than one; if value is +# Other, the OtherAction attribute must have a nonempty value + +# OtherAction: User-defined key combination type +keyaction.attrib = + attribute action { + "click" | "double-click" | "press" | "seq" | "simul" | "other" + }?, + attribute otheraction { text }?, + local.keyaction.attrib +# Label: Identifying number or string; default is usually the +# appropriate number or string autogenerated by a formatter +label.attrib = attribute label { text }? +# Format: whether element is assumed to contain significant white +# space +linespecific.attrib = + [ a:defaultValue = "linespecific" ] + attribute format { "linespecific" }?, + attribute linenumbering { "numbered" | "unnumbered" }? +# Linkend: link to related information; no default +linkend.attrib = attribute linkend { xsd:IDREF }? +# Linkend: required link to related information +linkendreq.attrib = attribute linkend { xsd:IDREF } +# Linkends: link to one or more sets of related information; no +# default +linkends.attrib = attribute linkends { xsd:IDREFS }? +local.mark.attrib = empty +mark.attrib = + attribute mark { text }?, + local.mark.attrib +# MoreInfo: whether element's content has an associated RefEntry +moreinfo.attrib = + [ a:defaultValue = "none" ] + attribute moreinfo { "refentry" | "none" }? +# Pagenum: number of page on which element appears; no default +pagenum.attrib = attribute pagenum { text }? +local.status.attrib = empty +# Status: Editorial or publication status of the element +# it applies to, such as "in review" or "approved for distribution" +status.attrib = + attribute status { text }?, + local.status.attrib +# Width: width of the longest line in the element to which it +# pertains, in number of characters +width.attrib = attribute width { text }? +# ...................................................................... + +# Title elements ....................................................... +local.title.attrib = empty +title.role.attrib = role.attrib +title = element title { title.attlist, title.char.mix* } +# end of title.element +title.attlist &= + pagenum.attrib, common.attrib, title.role.attrib, local.title.attrib +# end of title.attlist + +# end of title.module +local.titleabbrev.attrib = empty +titleabbrev.role.attrib = role.attrib +titleabbrev = + element titleabbrev { titleabbrev.attlist, title.char.mix* } +# end of titleabbrev.element +titleabbrev.attlist &= + common.attrib, titleabbrev.role.attrib, local.titleabbrev.attrib +# end of titleabbrev.attlist + +# end of titleabbrev.module +local.subtitle.attrib = empty +subtitle.role.attrib = role.attrib +subtitle = element subtitle { subtitle.attlist, title.char.mix* } +# end of subtitle.element +subtitle.attlist &= + common.attrib, subtitle.role.attrib, local.subtitle.attrib +# end of subtitle.attlist + +# end of subtitle.module + +# ...................................................................... + +# Bibliographic entities and elements .................................. + +# The bibliographic elements are typically used in the document +# hierarchy. They do not appear in content models of information +# pool elements. See also the document information elements, +# below. +local.person.ident.mix = notAllowed +person.ident.mix = + honorific + | firstname + | surname + | lineage + | othername + | affiliation + | authorblurb + | contrib + | local.person.ident.mix +local.bibliocomponent.mix = notAllowed +bibliocomponent.mix = + abbrev + | abstract + | address + | artpagenums + | author + | authorgroup + | authorinitials + | bibliomisc + | biblioset + | collab + | confgroup + | contractnum + | contractsponsor + | copyright + | corpauthor + | corpname + | date + | edition + | editor + | invpartnumber + | isbn + | issn + | issuenum + | orgname + | biblioid + | citebiblioid + | bibliosource + | bibliorelation + | bibliocoverage + | othercredit + | pagenums + | printhistory + | productname + | productnumber + | pubdate + | publisher + | publishername + | pubsnumber + | releaseinfo + | revhistory + | seriesvolnums + | subtitle + | title + | titleabbrev + | volumenum + | citetitle + | personname + | person.ident.mix + | ndxterm.class + | local.bibliocomponent.mix +# I don't think this is well placed, but it needs to be here because of + +# the reference to bibliocomponent.mix +local.info.class = notAllowed +info.class = + graphic + | mediaobject + | legalnotice + | modespec + | subjectset + | keywordset + | itermset + | bibliocomponent.mix + | local.info.class +local.biblioentry.attrib = empty +biblioentry.role.attrib = role.attrib +biblioentry = + element biblioentry { + biblioentry.attlist, (articleinfo | bibliocomponent.mix)+ + } +# end of biblioentry.element +biblioentry.attlist &= + common.attrib, biblioentry.role.attrib, local.biblioentry.attrib +# end of biblioentry.attlist + +# end of biblioentry.module +local.bibliomixed.attrib = empty +bibliomixed.role.attrib = role.attrib +bibliomixed = + element bibliomixed { + bibliomixed.attlist, (text | bibliocomponent.mix | bibliomset)* + } +# end of bibliomixed.element +bibliomixed.attlist &= + common.attrib, bibliomixed.role.attrib, local.bibliomixed.attrib +# end of bibliomixed.attlist + +# end of bibliomixed.module +local.articleinfo.attrib = empty +articleinfo.role.attrib = role.attrib +articleinfo = element articleinfo { articleinfo.attlist, info.class+ } +# end of articleinfo.element +articleinfo.attlist &= + common.attrib, articleinfo.role.attrib, local.articleinfo.attrib +# end of articleinfo.attlist + +# end of articleinfo.module +local.biblioset.attrib = empty +biblioset.role.attrib = role.attrib +biblioset = + element biblioset { biblioset.attlist, bibliocomponent.mix+ } +# end of biblioset.element + +# Relation: Relationship of elements contained within BiblioSet +biblioset.attlist &= + attribute relation { text }?, + common.attrib, + biblioset.role.attrib, + local.biblioset.attrib +# end of biblioset.attlist + +# end of biblioset.module +bibliomset.role.attrib = role.attrib +local.bibliomset.attrib = empty +bibliomset = + element bibliomset { + bibliomset.attlist, (text | bibliocomponent.mix | bibliomset)* + } +# end of bibliomset.element + +# Relation: Relationship of elements contained within BiblioMSet +bibliomset.attlist &= + attribute relation { text }?, + common.attrib, + bibliomset.role.attrib, + local.bibliomset.attrib +# end of bibliomset.attlist + +# end of bibliomset.module +local.bibliomisc.attrib = empty +bibliomisc.role.attrib = role.attrib +bibliomisc = element bibliomisc { bibliomisc.attlist, para.char.mix* } +# end of bibliomisc.element +bibliomisc.attlist &= + common.attrib, bibliomisc.role.attrib, local.bibliomisc.attrib +# end of bibliomisc.attlist + +# end of bibliomisc.module + +# ...................................................................... + +# Subject, Keyword, and ITermSet elements .............................. +local.subjectset.attrib = empty +subjectset.role.attrib = role.attrib +subjectset = element subjectset { subjectset.attlist, subject+ } +# end of subjectset.element + +# Scheme: Controlled vocabulary employed in SubjectTerms +subjectset.attlist &= + attribute scheme { xsd:NMTOKEN }?, + common.attrib, + subjectset.role.attrib, + local.subjectset.attrib +# end of subjectset.attlist + +# end of subjectset.module +local.subject.attrib = empty +subject.role.attrib = role.attrib +subject = element subject { subject.attlist, subjectterm+ } +# end of subject.element + +# Weight: Ranking of this group of SubjectTerms relative +# to others, 0 is low, no highest value specified +subject.attlist &= + attribute weight { text }?, + common.attrib, + subject.role.attrib, + local.subject.attrib +# end of subject.attlist + +# end of subject.module +local.subjectterm.attrib = empty +subjectterm.role.attrib = role.attrib +subjectterm = element subjectterm { subjectterm.attlist, text } +# end of subjectterm.element +subjectterm.attlist &= + common.attrib, subjectterm.role.attrib, local.subjectterm.attrib +# end of subjectterm.attlist + +# end of subjectterm.module + +# end of subjectset.content.module +local.keywordset.attrib = empty +keywordset.role.attrib = role.attrib +keywordset = element keywordset { keywordset.attlist, keyword+ } +# end of keywordset.element +keywordset.attlist &= + common.attrib, keywordset.role.attrib, local.keywordset.attrib +# end of keywordset.attlist + +# end of keywordset.module +local.keyword.attrib = empty +keyword.role.attrib = role.attrib +keyword = element keyword { keyword.attlist, text } +# end of keyword.element +keyword.attlist &= + common.attrib, keyword.role.attrib, local.keyword.attrib +# end of keyword.attlist + +# end of keyword.module + +# end of keywordset.content.module +local.itermset.attrib = empty +itermset.role.attrib = role.attrib +itermset = element itermset { itermset.attlist, indexterm+ } +# end of itermset.element +itermset.attlist &= + common.attrib, itermset.role.attrib, local.itermset.attrib +# end of itermset.attlist + +# end of itermset.module + +# Bibliographic info for "blocks" +local.blockinfo.attrib = empty +blockinfo.role.attrib = role.attrib +blockinfo = element blockinfo { blockinfo.attlist, info.class+ } +# end of blockinfo.element +blockinfo.attlist &= + common.attrib, blockinfo.role.attrib, local.blockinfo.attrib +# end of blockinfo.attlist + +# end of blockinfo.module + +# ...................................................................... + +# Compound (section-ish) elements ...................................... + +# Message set ...................... +local.msgset.attrib = empty +msgset.role.attrib = role.attrib +msgset = + element msgset { + msgset.attlist, + blockinfo?, + formalobject.title.content?, + (msgentry+ | simplemsgentry+) + } +# end of msgset.element +msgset.attlist &= common.attrib, msgset.role.attrib, local.msgset.attrib +# end of msgset.attlist + +# end of msgset.module +local.msgentry.attrib = empty +msgentry.role.attrib = role.attrib +msgentry = + element msgentry { msgentry.attlist, msg+, msginfo?, msgexplan* } +# end of msgentry.element +msgentry.attlist &= + common.attrib, msgentry.role.attrib, local.msgentry.attrib +# end of msgentry.attlist + +# end of msgentry.module +local.simplemsgentry.attrib = empty +simplemsgentry.role.attrib = role.attrib +simplemsgentry = + element simplemsgentry { simplemsgentry.attlist, msgtext, msgexplan+ } +# end of simplemsgentry.element +simplemsgentry.attlist &= + attribute audience { text }?, + attribute level { text }?, + attribute origin { text }?, + common.attrib, + simplemsgentry.role.attrib, + local.simplemsgentry.attrib +# end of simplemsgentry.attlist + +# end of simplemsgentry.module +local.msg.attrib = empty +msg.role.attrib = role.attrib +msg = element msg { msg.attlist, title?, msgmain, (msgsub | msgrel)* } +# end of msg.element +msg.attlist &= common.attrib, msg.role.attrib, local.msg.attrib +# end of msg.attlist + +# end of msg.module +local.msgmain.attrib = empty +msgmain.role.attrib = role.attrib +msgmain = element msgmain { msgmain.attlist, title?, msgtext } +# end of msgmain.element +msgmain.attlist &= + common.attrib, msgmain.role.attrib, local.msgmain.attrib +# end of msgmain.attlist + +# end of msgmain.module +local.msgsub.attrib = empty +msgsub.role.attrib = role.attrib +msgsub = element msgsub { msgsub.attlist, title?, msgtext } +# end of msgsub.element +msgsub.attlist &= common.attrib, msgsub.role.attrib, local.msgsub.attrib +# end of msgsub.attlist + +# end of msgsub.module +local.msgrel.attrib = empty +msgrel.role.attrib = role.attrib +msgrel = element msgrel { msgrel.attlist, title?, msgtext } +# end of msgrel.element +msgrel.attlist &= common.attrib, msgrel.role.attrib, local.msgrel.attrib +# end of msgrel.attlist + +# end of msgrel.module + +# MsgText (defined in the Inlines section, below) +local.msginfo.attrib = empty +msginfo.role.attrib = role.attrib +msginfo = + element msginfo { msginfo.attlist, (msglevel | msgorig | msgaud)* } +# end of msginfo.element +msginfo.attlist &= + common.attrib, msginfo.role.attrib, local.msginfo.attrib +# end of msginfo.attlist + +# end of msginfo.module +local.msglevel.attrib = empty +msglevel.role.attrib = role.attrib +msglevel = element msglevel { msglevel.attlist, smallcptr.char.mix* } +# end of msglevel.element +msglevel.attlist &= + common.attrib, msglevel.role.attrib, local.msglevel.attrib +# end of msglevel.attlist + +# end of msglevel.module +local.msgorig.attrib = empty +msgorig.role.attrib = role.attrib +msgorig = element msgorig { msgorig.attlist, smallcptr.char.mix* } +# end of msgorig.element +msgorig.attlist &= + common.attrib, msgorig.role.attrib, local.msgorig.attrib +# end of msgorig.attlist + +# end of msgorig.module +local.msgaud.attrib = empty +msgaud.role.attrib = role.attrib +msgaud = element msgaud { msgaud.attlist, para.char.mix* } +# end of msgaud.element +msgaud.attlist &= common.attrib, msgaud.role.attrib, local.msgaud.attrib +# end of msgaud.attlist + +# end of msgaud.module +local.msgexplan.attrib = empty +msgexplan.role.attrib = role.attrib +msgexplan = + element msgexplan { msgexplan.attlist, title?, component.mix+ } +# end of msgexplan.element +msgexplan.attlist &= + common.attrib, msgexplan.role.attrib, local.msgexplan.attrib +# end of msgexplan.attlist + +# end of msgexplan.module + +# end of msgset.content.module + +# QandASet ........................ +local.qandaset.attrib = empty +qandaset.role.attrib = role.attrib +qandaset = + element qandaset { + qandaset.attlist, + blockinfo?, + formalobject.title.content?, + qandaset.mix*, + (qandadiv+ | qandaentry+) + } +# end of qandaset.element +qandaset.attlist &= + attribute defaultlabel { "qanda" | "number" | "none" }?, + common.attrib, + qandaset.role.attrib, + local.qandaset.attrib +# end of qandaset.attlist + +# end of qandaset.module +local.qandadiv.attrib = empty +qandadiv.role.attrib = role.attrib +qandadiv = + element qandadiv { + qandadiv.attlist, + blockinfo?, + formalobject.title.content?, + qandaset.mix*, + (qandadiv+ | qandaentry+) + } +# end of qandadiv.element +qandadiv.attlist &= + common.attrib, qandadiv.role.attrib, local.qandadiv.attrib +# end of qandadiv.attlist + +# end of qandadiv.module +local.qandaentry.attrib = empty +qandaentry.role.attrib = role.attrib +qandaentry = + element qandaentry { + qandaentry.attlist, blockinfo?, revhistory?, question, answer* + } +# end of qandaentry.element +qandaentry.attlist &= + common.attrib, qandaentry.role.attrib, local.qandaentry.attrib +# end of qandaentry.attlist + +# end of qandaentry.module +local.question.attrib = empty +question.role.attrib = role.attrib +question = element question { question.attlist, label?, qandaset.mix+ } +# end of question.element +question.attlist &= + common.attrib, question.role.attrib, local.question.attrib +# end of question.attlist + +# end of question.module +local.answer.attrib = empty +answer.role.attrib = role.attrib +answer = + element answer { answer.attlist, label?, qandaset.mix*, qandaentry* } +# end of answer.element +answer.attlist &= common.attrib, answer.role.attrib, local.answer.attrib +# end of answer.attlist + +# end of answer.module +local.label.attrib = empty +label.role.attrib = role.attrib +label = element label { label.attlist, word.char.mix* } +# end of label.element +label.attlist &= common.attrib, label.role.attrib, local.label.attrib +# end of label.attlist + +# end of label.module + +# end of qandaset.content.module + +# Procedure ........................ +local.procedure.attrib = empty +procedure.role.attrib = role.attrib +procedure = + element procedure { + procedure.attlist, + blockinfo?, + formalobject.title.content?, + component.mix*, + step+ + } +# end of procedure.element +procedure.attlist &= + common.attrib, procedure.role.attrib, local.procedure.attrib +# end of procedure.attlist + +# end of procedure.module +local.step.attrib = empty +step.role.attrib = role.attrib +step = + element step { + step.attlist, + title?, + ((component.mix+, (substeps, component.mix*)?) + | (substeps, component.mix*)) + } +# end of step.element + +# Performance: Whether the Step must be performed + +# not #REQUIRED! +step.attlist &= + [ a:defaultValue = "required" ] + attribute performance { "optional" | "required" }?, + common.attrib, + step.role.attrib, + local.step.attrib +# end of step.attlist + +# end of step.module +local.substeps.attrib = empty +substeps.role.attrib = role.attrib +substeps = element substeps { substeps.attlist, step+ } +# end of substeps.element + +# Performance: whether entire set of substeps must be performed + +# not #REQUIRED! +substeps.attlist &= + [ a:defaultValue = "required" ] + attribute performance { "optional" | "required" }?, + common.attrib, + substeps.role.attrib, + local.substeps.attrib +# end of substeps.attlist + +# end of substeps.module + +# end of procedure.content.module + +# Sidebar .......................... +local.sidebarinfo.attrib = empty +sidebarinfo.role.attrib = role.attrib +sidebarinfo = element sidebarinfo { sidebarinfo.attlist, info.class+ } +# end of sidebarinfo.element +sidebarinfo.attlist &= + common.attrib, sidebarinfo.role.attrib, local.sidebarinfo.attrib +# end of sidebarinfo.attlist + +# end of sidebarinfo.module +local.sidebar.attrib = empty +sidebar.role.attrib = role.attrib +sidebar = + element sidebar { + sidebar.attlist, + sidebarinfo?, + formalobject.title.content?, + sidebar.mix+ + } +# end of sidebar.element +sidebar.attlist &= + common.attrib, sidebar.role.attrib, local.sidebar.attrib +# end of sidebar.attlist + +# end of sidebar.module + +# end of sidebar.content.model + +# ...................................................................... + +# Paragraph-related elements ........................................... +local.abstract.attrib = empty +abstract.role.attrib = role.attrib +abstract = element abstract { abstract.attlist, title?, para.class+ } +# end of abstract.element +abstract.attlist &= + common.attrib, abstract.role.attrib, local.abstract.attrib +# end of abstract.attlist + +# end of abstract.module +local.authorblurb.attrib = empty +authorblurb.role.attrib = role.attrib +authorblurb = + element authorblurb { authorblurb.attlist, title?, para.class+ } +# end of authorblurb.element +authorblurb.attlist &= + common.attrib, authorblurb.role.attrib, local.authorblurb.attrib +# end of authorblurb.attlist + +# end of authorblurb.module +local.personblurb.attrib = empty +personblurb.role.attrib = role.attrib +personblurb = + element personblurb { personblurb.attlist, title?, para.class+ } +# end of personblurb.element +personblurb.attlist &= + common.attrib, personblurb.role.attrib, local.personblurb.attrib +# end of personblurb.attlist + +# end of personblurb.module +local.blockquote.attrib = empty +blockquote.role.attrib = role.attrib +blockquote = + element blockquote { + blockquote.attlist, title?, attribution?, component.mix+ + } +# end of blockquote.element +blockquote.attlist &= + common.attrib, blockquote.role.attrib, local.blockquote.attrib +# end of blockquote.attlist + +# end of blockquote.module +local.attribution.attrib = empty +attribution.role.attrib = role.attrib +attribution = + element attribution { attribution.attlist, para.char.mix* } +# end of attribution.element +attribution.attlist &= + common.attrib, attribution.role.attrib, local.attribution.attrib +# end of attribution.attlist + +# end of attribution.module +local.bridgehead.attrib = empty +bridgehead.role.attrib = role.attrib +bridgehead = element bridgehead { bridgehead.attlist, title.char.mix* } +# end of bridgehead.element + +# Renderas: Indicates the format in which the BridgeHead +# should appear +bridgehead.attlist &= + attribute renderas { + "other" | "sect1" | "sect2" | "sect3" | "sect4" | "sect5" + }?, + common.attrib, + bridgehead.role.attrib, + local.bridgehead.attrib +# end of bridgehead.attlist + +# end of bridgehead.module +local.remark.attrib = empty +remark.role.attrib = role.attrib +remark = element remark { remark.attlist, para.char.mix* } +# end of remark.element +remark.attlist &= common.attrib, remark.role.attrib, local.remark.attrib +# end of remark.attlist + +# end of remark.module +local.epigraph.attrib = empty +epigraph.role.attrib = role.attrib +epigraph = + element epigraph { + epigraph.attlist, attribution?, (para.class | literallayout)+ + } +# end of epigraph.element +epigraph.attlist &= + common.attrib, epigraph.role.attrib, local.epigraph.attrib +# end of epigraph.attlist + +# Attribution (defined above) + +# end of epigraph.module +local.footnote.attrib = empty +footnote.role.attrib = role.attrib +footnote = element footnote { footnote.attlist, footnote.mix+ } +# end of footnote.element +footnote.attlist &= + label.attrib, + common.attrib, + footnote.role.attrib, + local.footnote.attrib +# end of footnote.attlist + +# end of footnote.module +local.highlights.attrib = empty +highlights.role.attrib = role.attrib +highlights = element highlights { highlights.attlist, highlights.mix+ } +# end of highlights.element +highlights.attlist &= + common.attrib, highlights.role.attrib, local.highlights.attrib +# end of highlights.attlist + +# end of highlights.module +local.formalpara.attrib = empty +formalpara.role.attrib = role.attrib +formalpara = + element formalpara { formalpara.attlist, title, ndxterm.class*, para } +# end of formalpara.element +formalpara.attlist &= + common.attrib, formalpara.role.attrib, local.formalpara.attrib +# end of formalpara.attlist + +# end of formalpara.module +local.para.attrib = empty +para.role.attrib = role.attrib +para = element para { para.attlist, (para.char.mix | para.mix)* } +# end of para.element +para.attlist &= common.attrib, para.role.attrib, local.para.attrib +# end of para.attlist + +# end of para.module +local.simpara.attrib = empty +simpara.role.attrib = role.attrib +simpara = element simpara { simpara.attlist, para.char.mix* } +# end of simpara.element +simpara.attlist &= + common.attrib, simpara.role.attrib, local.simpara.attrib +# end of simpara.attlist + +# end of simpara.module +local.admon.attrib = empty +admon.role.attrib = role.attrib +caution = element caution { caution.attlist, title?, admon.mix+ } +# end of caution.element +caution.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of caution.attlist +important = element important { important.attlist, title?, admon.mix+ } +# end of important.element +important.attlist &= + common.attrib, admon.role.attrib, local.admon.attrib +# end of important.attlist +note = element note { note.attlist, title?, admon.mix+ } +# end of note.element +note.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of note.attlist +tip = element tip { tip.attlist, title?, admon.mix+ } +# end of tip.element +tip.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of tip.attlist +warning = element warning { warning.attlist, title?, admon.mix+ } +# end of warning.element +warning.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of warning.attlist + +# end of admon.module + +# ...................................................................... + +# Lists ................................................................ + +# GlossList ........................ +local.glosslist.attrib = empty +glosslist.role.attrib = role.attrib +glosslist = element glosslist { glosslist.attlist, glossentry+ } +# end of glosslist.element +glosslist.attlist &= + common.attrib, glosslist.role.attrib, local.glosslist.attrib +# end of glosslist.attlist + +# end of glosslist.module +local.glossentry.attrib = empty +glossentry.role.attrib = role.attrib +glossentry = + element glossentry { + glossentry.attlist, + glossterm, + acronym?, + abbrev?, + ndxterm.class*, + revhistory?, + (glosssee | glossdef+) + } +# end of glossentry.element + +# SortAs: String by which the GlossEntry is to be sorted +# (alphabetized) in lieu of its proper content +glossentry.attlist &= + attribute sortas { text }?, + common.attrib, + glossentry.role.attrib, + local.glossentry.attrib +# end of glossentry.attlist + +# end of glossentry.module + +# GlossTerm (defined in the Inlines section, below) +local.glossdef.attrib = empty +glossdef.role.attrib = role.attrib +glossdef = + element glossdef { glossdef.attlist, glossdef.mix+, glossseealso* } +# end of glossdef.element + +# Subject: List of subjects; keywords for the definition +glossdef.attlist &= + attribute subject { text }?, + common.attrib, + glossdef.role.attrib, + local.glossdef.attrib +# end of glossdef.attlist + +# end of glossdef.module +local.glosssee.attrib = empty +glosssee.role.attrib = role.attrib +glosssee = element glosssee { glosssee.attlist, para.char.mix* } +# end of glosssee.element + +# OtherTerm: Reference to the GlossEntry whose GlossTerm +# should be displayed at the point of the GlossSee +glosssee.attlist &= + attribute otherterm { xsd:IDREF }?, + common.attrib, + glosssee.role.attrib, + local.glosssee.attrib +# end of glosssee.attlist + +# end of glosssee.module +local.glossseealso.attrib = empty +glossseealso.role.attrib = role.attrib +glossseealso = + element glossseealso { glossseealso.attlist, para.char.mix* } +# end of glossseealso.element + +# OtherTerm: Reference to the GlossEntry whose GlossTerm +# should be displayed at the point of the GlossSeeAlso +glossseealso.attlist &= + attribute otherterm { xsd:IDREF }?, + common.attrib, + glossseealso.role.attrib, + local.glossseealso.attrib +# end of glossseealso.attlist + +# end of glossseealso.module + +# end of glossentry.content.module + +# ItemizedList and OrderedList ..... +local.itemizedlist.attrib = empty +itemizedlist.role.attrib = role.attrib +itemizedlist = + element itemizedlist { + itemizedlist.attlist, + blockinfo?, + formalobject.title.content?, + listpreamble.mix*, + listitem+ + } +# end of itemizedlist.element + +# Spacing: Whether the vertical space in the list should be +# compressed + +# Mark: Keyword, e.g., bullet, dash, checkbox, none; +# list of keywords and defaults are implementation specific +itemizedlist.attlist &= + attribute spacing { "normal" | "compact" }?, + mark.attrib, + common.attrib, + itemizedlist.role.attrib, + local.itemizedlist.attrib +# end of itemizedlist.attlist + +# end of itemizedlist.module +local.orderedlist.attrib = empty +orderedlist.role.attrib = role.attrib +orderedlist = + element orderedlist { + orderedlist.attlist, + blockinfo?, + formalobject.title.content?, + listpreamble.mix*, + listitem+ + } +# end of orderedlist.element + +# Numeration: Style of ListItem numbered; default is expected +# to be Arabic + +# InheritNum: Specifies for a nested list that the numbering +# of ListItems should include the number of the item +# within which they are nested (e.g., 1a and 1b within 1, +# rather than a and b) + +# Continuation: Where list numbering begins afresh (Restarts, +# the default) or continues that of the immediately preceding +# list (Continues) + +# Spacing: Whether the vertical space in the list should be +# compressed +orderedlist.attlist &= + attribute numeration { + "arabic" | "upperalpha" | "loweralpha" | "upperroman" | "lowerroman" + }?, + [ a:defaultValue = "ignore" ] + attribute inheritnum { "inherit" | "ignore" }?, + [ a:defaultValue = "restarts" ] + attribute continuation { "continues" | "restarts" }?, + attribute spacing { "normal" | "compact" }?, + common.attrib, + orderedlist.role.attrib, + local.orderedlist.attrib +# end of orderedlist.attlist + +# end of orderedlist.module +local.listitem.attrib = empty +listitem.role.attrib = role.attrib +listitem = element listitem { listitem.attlist, component.mix+ } +# end of listitem.element + +# Override: Indicates the mark to be used for this ListItem +# instead of the default mark or the mark specified by +# the Mark attribute on the enclosing ItemizedList +listitem.attlist &= + attribute override { text }?, + common.attrib, + listitem.role.attrib, + local.listitem.attrib +# end of listitem.attlist + +# end of listitem.module + +# SegmentedList .................... +local.segmentedlist.attrib = empty +segmentedlist.role.attrib = role.attrib +segmentedlist = + element segmentedlist { + segmentedlist.attlist, + formalobject.title.content?, + segtitle+, + seglistitem+ + } +# end of segmentedlist.element +segmentedlist.attlist &= + common.attrib, segmentedlist.role.attrib, local.segmentedlist.attrib +# end of segmentedlist.attlist + +# end of segmentedlist.module +local.segtitle.attrib = empty +segtitle.role.attrib = role.attrib +segtitle = element segtitle { segtitle.attlist, title.char.mix* } +# end of segtitle.element +segtitle.attlist &= + common.attrib, segtitle.role.attrib, local.segtitle.attrib +# end of segtitle.attlist + +# end of segtitle.module +local.seglistitem.attrib = empty +seglistitem.role.attrib = role.attrib +seglistitem = element seglistitem { seglistitem.attlist, seg+ } +# end of seglistitem.element +seglistitem.attlist &= + common.attrib, seglistitem.role.attrib, local.seglistitem.attrib +# end of seglistitem.attlist + +# end of seglistitem.module +local.seg.attrib = empty +seg.role.attrib = role.attrib +seg = element seg { seg.attlist, para.char.mix* } +# end of seg.element +seg.attlist &= common.attrib, seg.role.attrib, local.seg.attrib +# end of seg.attlist + +# end of seg.module + +# end of segmentedlist.content.module + +# SimpleList ....................... +local.simplelist.attrib = empty +simplelist.role.attrib = role.attrib +simplelist = element simplelist { simplelist.attlist, member+ } +# end of simplelist.element + +# Columns: The number of columns the array should contain + +# Type: How the Members of the SimpleList should be +# formatted: Inline (members separated with commas etc. +# inline), Vert (top to bottom in n Columns), or Horiz (in +# the direction of text flow) in n Columns. If Column +# is 1 or implied, Type=Vert and Type=Horiz give the same +# results. +simplelist.attlist &= + attribute columns { text }?, + [ a:defaultValue = "vert" ] + attribute type { "inline" | "vert" | "horiz" }?, + common.attrib, + simplelist.role.attrib, + local.simplelist.attrib +# end of simplelist.attlist + +# end of simplelist.module +local.member.attrib = empty +member.role.attrib = role.attrib +member = element member { member.attlist, para.char.mix* } +# end of member.element +member.attlist &= common.attrib, member.role.attrib, local.member.attrib +# end of member.attlist + +# end of member.module + +# end of simplelist.content.module + +# VariableList ..................... +local.variablelist.attrib = empty +variablelist.role.attrib = role.attrib +variablelist = + element variablelist { + variablelist.attlist, + blockinfo?, + formalobject.title.content?, + listpreamble.mix*, + varlistentry+ + } +# end of variablelist.element + +# TermLength: Length beyond which the presentation engine +# may consider the Term too long and select an alternate +# presentation of the Term and, or, its associated ListItem. +variablelist.attlist &= + attribute termlength { text }?, + common.attrib, + variablelist.role.attrib, + local.variablelist.attrib +# end of variablelist.attlist + +# end of variablelist.module +local.varlistentry.attrib = empty +varlistentry.role.attrib = role.attrib +varlistentry = + element varlistentry { varlistentry.attlist, term+, listitem } +# end of varlistentry.element +varlistentry.attlist &= + common.attrib, varlistentry.role.attrib, local.varlistentry.attrib +# end of varlistentry.attlist + +# end of varlistentry.module +local.term.attrib = empty +term.role.attrib = role.attrib +term = element term { term.attlist, para.char.mix* } +# end of term.element +term.attlist &= common.attrib, term.role.attrib, local.term.attrib +# end of term.attlist + +# end of term.module + +# ListItem (defined above) + +# end of variablelist.content.module + +# CalloutList ...................... +local.calloutlist.attrib = empty +calloutlist.role.attrib = role.attrib +calloutlist = + element calloutlist { + calloutlist.attlist, formalobject.title.content?, callout+ + } +# end of calloutlist.element +calloutlist.attlist &= + common.attrib, calloutlist.role.attrib, local.calloutlist.attrib +# end of calloutlist.attlist + +# end of calloutlist.module +local.callout.attrib = empty +callout.role.attrib = role.attrib +callout = element callout { callout.attlist, component.mix+ } +# end of callout.element + +# AreaRefs: IDs of one or more Areas or AreaSets described +# by this Callout +callout.attlist &= + attribute arearefs { xsd:IDREFS }, + common.attrib, + callout.role.attrib, + local.callout.attrib +# end of callout.attlist + +# end of callout.module + +# end of calloutlist.content.module + +# ...................................................................... + +# Objects .............................................................. + +# Examples etc. .................... +local.example.attrib = empty +example.role.attrib = role.attrib +example = + element example { + example.attlist, + blockinfo?, + formalobject.title.content, + example.mix+ + } +# end of example.element +example.attlist &= + label.attrib, + width.attrib, + common.attrib, + example.role.attrib, + local.example.attrib +# end of example.attlist + +# end of example.module +local.informalexample.attrib = empty +informalexample.role.attrib = role.attrib +informalexample = + element informalexample { + informalexample.attlist, blockinfo?, example.mix+ + } +# end of informalexample.element +informalexample.attlist &= + width.attrib, + common.attrib, + informalexample.role.attrib, + local.informalexample.attrib +# end of informalexample.attlist + +# end of informalexample.module +local.programlistingco.attrib = empty +programlistingco.role.attrib = role.attrib +programlistingco = + element programlistingco { + programlistingco.attlist, areaspec, programlisting, calloutlist* + } +# end of programlistingco.element +programlistingco.attlist &= + common.attrib, + programlistingco.role.attrib, + local.programlistingco.attrib +# end of programlistingco.attlist + +# CalloutList (defined above in Lists) + +# end of informalexample.module +local.areaspec.attrib = empty +areaspec.role.attrib = role.attrib +areaspec = element areaspec { areaspec.attlist, (area | areaset)+ } +# end of areaspec.element + +# Units: global unit of measure in which coordinates in +# this spec are expressed: +# +# - CALSPair "x1,y1 x2,y2": lower-left and upper-right +# coordinates in a rectangle describing repro area in which +# graphic is placed, where X and Y dimensions are each some +# number 0..10000 (taken from CALS graphic attributes) +# +# - LineColumn "line column": line number and column number +# at which to start callout text in "linespecific" content +# +# - LineRange "startline endline": whole lines from startline +# to endline in "linespecific" content +# +# - LineColumnPair "line1 col1 line2 col2": starting and ending +# points of area in "linespecific" content that starts at +# first position and ends at second position (including the +# beginnings of any intervening lines) +# +# - Other: directive to look at value of OtherUnits attribute +# to get implementation-specific keyword +# +# The default is implementation-specific; usually dependent on +# the parent element (GraphicCO gets CALSPair, ProgramListingCO +# and ScreenCO get LineColumn) + +# OtherUnits: User-defined units +areaspec.attlist &= + attribute units { + "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other" + }?, + attribute otherunits { xsd:NMTOKEN }?, + common.attrib, + areaspec.role.attrib, + local.areaspec.attrib +# end of areaspec.attlist + +# end of areaspec.module +local.area.attrib = empty +area.role.attrib = role.attrib +area = element area { area.attlist, empty } +# end of area.element + +# bug number/symbol override or initialization + +# to any related information + +# Units: unit of measure in which coordinates in this +# area are expressed; inherits from AreaSet and AreaSpec + +# OtherUnits: User-defined units +area.attlist &= + label.attrib, + linkends.attrib, + attribute units { + "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other" + }?, + attribute otherunits { xsd:NMTOKEN }?, + attribute coords { text }, + idreq.common.attrib, + area.role.attrib, + local.area.attrib +# end of area.attlist + +# end of area.module +local.areaset.attrib = empty +areaset.role.attrib = role.attrib +areaset = element areaset { areaset.attlist, area+ } +# end of areaset.element + +# bug number/symbol override or initialization + +# Units: unit of measure in which coordinates in this +# area are expressed; inherits from AreaSpec +areaset.attlist &= + label.attrib, + attribute units { + "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other" + }?, + attribute otherunits { xsd:NMTOKEN }?, + attribute coords { text }, + idreq.common.attrib, + areaset.role.attrib, + local.areaset.attrib +# end of areaset.attlist + +# end of areaset.module + +# end of areaspec.content.module +local.programlisting.attrib = empty +programlisting.role.attrib = role.attrib +programlisting = + element programlisting { + programlisting.attlist, + (para.char.mix | co | coref | lineannotation | textobject)* + } +# end of programlisting.element +programlisting.attlist &= + width.attrib, + linespecific.attrib, + common.attrib, + programlisting.role.attrib, + local.programlisting.attrib +# end of programlisting.attlist + +# end of programlisting.module +local.literallayout.attrib = empty +literallayout.role.attrib = role.attrib +literallayout = + element literallayout { + literallayout.attlist, + (para.char.mix | co | coref | textobject | lineannotation)* + } +# end of literallayout.element +literallayout.attlist &= + width.attrib, + linespecific.attrib, + [ a:defaultValue = "normal" ] + attribute class { "monospaced" | "normal" }?, + common.attrib, + literallayout.role.attrib, + local.literallayout.attrib +# end of literallayout.attlist + +# LineAnnotation (defined in the Inlines section, below) + +# end of literallayout.module +local.screenco.attrib = empty +screenco.role.attrib = role.attrib +screenco = + element screenco { screenco.attlist, areaspec, screen, calloutlist* } +# end of screenco.element +screenco.attlist &= + common.attrib, screenco.role.attrib, local.screenco.attrib +# end of screenco.attlist + +# AreaSpec (defined above) + +# CalloutList (defined above in Lists) + +# end of screenco.module +local.screen.attrib = empty +screen.role.attrib = role.attrib +screen = + element screen { + screen.attlist, + (para.char.mix | co | coref | textobject | lineannotation)* + } +# end of screen.element +screen.attlist &= + width.attrib, + linespecific.attrib, + common.attrib, + screen.role.attrib, + local.screen.attrib +# end of screen.attlist + +# end of screen.module +local.screenshot.attrib = empty +screenshot.role.attrib = role.attrib +screenshot = + element screenshot { + screenshot.attlist, + screeninfo?, + (graphic | graphicco | mediaobject | mediaobjectco) + } +# end of screenshot.element +screenshot.attlist &= + common.attrib, screenshot.role.attrib, local.screenshot.attrib +# end of screenshot.attlist + +# end of screenshot.module +local.screeninfo.attrib = empty +screeninfo.role.attrib = role.attrib +screeninfo = element screeninfo { screeninfo.attlist, para.char.mix* } +# end of screeninfo.element +screeninfo.attlist &= + common.attrib, screeninfo.role.attrib, local.screeninfo.attrib +# end of screeninfo.attlist + +# end of screeninfo.module + +# end of screenshot.content.module + +# Figures etc. ..................... +local.figure.attrib = empty +figure.role.attrib = role.attrib +figure = + element figure { + figure.attlist, + blockinfo?, + formalobject.title.content, + (figure.mix | link.char.class)+ + } +# end of figure.element + +# Float: Whether the Figure is supposed to be rendered +# where convenient (yes (1) value) or at the place it occurs +# in the text (no (0) value, the default) +figure.attlist &= + [ a:defaultValue = "0" ] attribute float { yesorno.attvals }?, + attribute pgwide { yesorno.attvals }?, + label.attrib, + common.attrib, + figure.role.attrib, + local.figure.attrib +# end of figure.attlist + +# end of figure.module +local.informalfigure.attrib = empty +informalfigure.role.attrib = role.attrib +informalfigure = + element informalfigure { + informalfigure.attlist, blockinfo?, (figure.mix | link.char.class)+ + } +# end of informalfigure.element + +# Float: Whether the Figure is supposed to be rendered +# where convenient (yes (1) value) or at the place it occurs +# in the text (no (0) value, the default) +informalfigure.attlist &= + [ a:defaultValue = "0" ] attribute float { yesorno.attvals }?, + attribute pgwide { yesorno.attvals }?, + label.attrib, + common.attrib, + informalfigure.role.attrib, + local.informalfigure.attrib +# end of informalfigure.attlist + +# end of informalfigure.module +local.graphicco.attrib = empty +graphicco.role.attrib = role.attrib +graphicco = + element graphicco { + graphicco.attlist, areaspec, graphic, calloutlist* + } +# end of graphicco.element +graphicco.attlist &= + common.attrib, graphicco.role.attrib, local.graphicco.attrib +# end of graphicco.attlist + +# AreaSpec (defined above in Examples) + +# CalloutList (defined above in Lists) + +# end of graphicco.module + +# Graphical data can be the content of Graphic, or you can reference +# an external file either as an entity (Entitref) or a filename +# (Fileref). +local.graphic.attrib = empty +graphic.role.attrib = role.attrib +graphic = element graphic { graphic.attlist, empty } +# end of graphic.element +graphic.attlist &= + graphics.attrib, + common.attrib, + graphic.role.attrib, + local.graphic.attrib +# end of graphic.attlist + +# end of graphic.module +local.inlinegraphic.attrib = empty +inlinegraphic.role.attrib = role.attrib +inlinegraphic = element inlinegraphic { inlinegraphic.attlist, empty } +# end of inlinegraphic.element +inlinegraphic.attlist &= + graphics.attrib, + common.attrib, + inlinegraphic.role.attrib, + local.inlinegraphic.attrib +# end of inlinegraphic.attlist + +# end of inlinegraphic.module +local.mediaobject.attrib = empty +mediaobject.role.attrib = role.attrib +mediaobject = + element mediaobject { + mediaobject.attlist, objectinfo?, mediaobject.mix+, caption? + } +# end of mediaobject.element +mediaobject.attlist &= + common.attrib, mediaobject.role.attrib, local.mediaobject.attrib +# end of mediaobject.attlist + +# end of mediaobject.module +local.inlinemediaobject.attrib = empty +inlinemediaobject.role.attrib = role.attrib +inlinemediaobject = + element inlinemediaobject { + inlinemediaobject.attlist, objectinfo?, mediaobject.mix+ + } +# end of inlinemediaobject.element +inlinemediaobject.attlist &= + common.attrib, + inlinemediaobject.role.attrib, + local.inlinemediaobject.attrib +# end of inlinemediaobject.attlist + +# end of inlinemediaobject.module +local.videoobject.attrib = empty +videoobject.role.attrib = role.attrib +videoobject = + element videoobject { videoobject.attlist, objectinfo?, videodata } +# end of videoobject.element +videoobject.attlist &= + common.attrib, videoobject.role.attrib, local.videoobject.attrib +# end of videoobject.attlist + +# end of videoobject.module +local.audioobject.attrib = empty +audioobject.role.attrib = role.attrib +audioobject = + element audioobject { audioobject.attlist, objectinfo?, audiodata } +# end of audioobject.element +audioobject.attlist &= + common.attrib, audioobject.role.attrib, local.audioobject.attrib +# end of audioobject.attlist + +# end of audioobject.module +local.imageobject.attrib = empty +imageobject.role.attrib = role.attrib +imageobject = + element imageobject { imageobject.attlist, objectinfo?, imagedata } +# end of imageobject.element +imageobject.attlist &= + common.attrib, imageobject.role.attrib, local.imageobject.attrib +# end of imageobject.attlist + +# end of imageobject.module +local.textobject.attrib = empty +textobject.role.attrib = role.attrib +textobject = + element textobject { + textobject.attlist, + objectinfo?, + (phrase | textdata | textobject.mix+) + } +# end of textobject.element +textobject.attlist &= + common.attrib, textobject.role.attrib, local.textobject.attrib +# end of textobject.attlist + +# end of textobject.module +local.objectinfo.attrib = empty +objectinfo.role.attrib = role.attrib +objectinfo = element objectinfo { objectinfo.attlist, info.class+ } +# end of objectinfo.element +objectinfo.attlist &= + common.attrib, objectinfo.role.attrib, local.objectinfo.attrib +# end of objectinfo.attlist + +# end of objectinfo.module + +# EntityRef: Name of an external entity containing the content +# of the object data + +# FileRef: Filename, qualified by a pathname if desired, +# designating the file containing the content of the object data + +# Format: Notation of the element content, if any + +# SrcCredit: Information about the source of the image +local.objectdata.attrib = empty +objectdata.attrib = + attribute entityref { xsd:ENTITY }?, + attribute fileref { text }?, + attribute format { notation.class }?, + attribute srccredit { text }?, + local.objectdata.attrib +local.videodata.attrib = empty +videodata.role.attrib = role.attrib +videodata = element videodata { videodata.attlist, empty } +# end of videodata.element + +# Width: Same as CALS reprowid (desired width) + +# Depth: Same as CALS reprodep (desired depth) + +# Align: Same as CALS hplace with 'none' removed; #IMPLIED means +# application-specific + +# Scale: Conflation of CALS hscale and vscale + +# Scalefit: Same as CALS scalefit +videodata.attlist &= + attribute width { text }?, + attribute contentwidth { text }?, + attribute depth { text }?, + attribute contentdepth { text }?, + attribute align { "left" | "right" | "center" }?, + attribute valign { "top" | "middle" | "bottom" }?, + attribute scale { text }?, + attribute scalefit { yesorno.attvals }?, + objectdata.attrib, + common.attrib, + videodata.role.attrib, + local.videodata.attrib +# end of videodata.attlist + +# end of videodata.module +local.audiodata.attrib = empty +audiodata.role.attrib = role.attrib +audiodata = element audiodata { audiodata.attlist, empty } +# end of audiodata.element +audiodata.attlist &= + objectdata.attrib, + common.attrib, + audiodata.role.attrib, + local.audiodata.attrib +# end of audiodata.attlist + +# end of audiodata.module +local.imagedata.attrib = empty +imagedata.role.attrib = role.attrib +imagedata = element imagedata { imagedata.attlist, empty } +# end of imagedata.element + +# Width: Same as CALS reprowid (desired width) + +# Depth: Same as CALS reprodep (desired depth) + +# Align: Same as CALS hplace with 'none' removed; #IMPLIED means +# application-specific + +# Scale: Conflation of CALS hscale and vscale + +# Scalefit: Same as CALS scalefit +imagedata.attlist &= + attribute width { text }?, + attribute contentwidth { text }?, + attribute depth { text }?, + attribute contentdepth { text }?, + attribute align { "left" | "right" | "center" }?, + attribute valign { "top" | "middle" | "bottom" }?, + attribute scale { text }?, + attribute scalefit { yesorno.attvals }?, + objectdata.attrib, + common.attrib, + imagedata.role.attrib, + local.imagedata.attrib +# end of imagedata.attlist + +# end of imagedata.module +local.textdata.attrib = empty +textdata.role.attrib = role.attrib +textdata = element textdata { textdata.attlist, empty } +# end of textdata.element +textdata.attlist &= + attribute encoding { text }?, + objectdata.attrib, + common.attrib, + textdata.role.attrib, + local.textdata.attrib +# end of textdata.attlist + +# end of textdata.module +local.caption.attrib = empty +caption.role.attrib = role.attrib +caption = element caption { caption.attlist, textobject.mix* } +# end of caption.element +caption.attlist &= + common.attrib, caption.role.attrib, local.caption.attrib +# end of caption.attlist + +# end of caption.module +local.mediaobjectco.attrib = empty +mediaobjectco.role.attrib = role.attrib +mediaobjectco = + element mediaobjectco { + mediaobjectco.attlist, + objectinfo?, + imageobjectco, + (imageobjectco | textobject)* + } +# end of mediaobjectco.element +mediaobjectco.attlist &= + common.attrib, mediaobjectco.role.attrib, local.mediaobjectco.attrib +# end of mediaobjectco.attlist + +# end of mediaobjectco.module +local.imageobjectco.attrib = empty +imageobjectco.role.attrib = role.attrib +imageobjectco = + element imageobjectco { + imageobjectco.attlist, areaspec, imageobject, calloutlist* + } +# end of imageobjectco.element +imageobjectco.attlist &= + common.attrib, imageobjectco.role.attrib, local.imageobjectco.attrib +# end of imageobjectco.attlist + +# end of imageobjectco.module + +# end of mediaobject.content.module + +# Equations ........................ + +# This PE provides a mechanism for replacing equation content, + +# perhaps adding a new or different model (e.g., MathML) +equation.content = alt?, (graphic+ | mediaobject+) +inlineequation.content = alt?, (graphic+ | inlinemediaobject+) +local.equation.attrib = empty +equation.role.attrib = role.attrib +equation = + element equation { + equation.attlist, + blockinfo?, + formalobject.title.content?, + (informalequation | equation.content) + } +# end of equation.element +equation.attlist &= + label.attrib, + common.attrib, + equation.role.attrib, + local.equation.attrib +# end of equation.attlist + +# end of equation.module +local.informalequation.attrib = empty +informalequation.role.attrib = role.attrib +informalequation = + element informalequation { + informalequation.attlist, blockinfo?, equation.content + } +# end of informalequation.element +informalequation.attlist &= + common.attrib, + informalequation.role.attrib, + local.informalequation.attrib +# end of informalequation.attlist + +# end of informalequation.module +local.inlineequation.attrib = empty +inlineequation.role.attrib = role.attrib +inlineequation = + element inlineequation { + inlineequation.attlist, inlineequation.content + } +# end of inlineequation.element +inlineequation.attlist &= + common.attrib, inlineequation.role.attrib, local.inlineequation.attrib +# end of inlineequation.attlist + +# end of inlineequation.module +local.alt.attrib = empty +alt.role.attrib = role.attrib +alt = element alt { alt.attlist, text } +# end of alt.element +alt.attlist &= common.attrib, alt.role.attrib, local.alt.attrib +# end of alt.attlist + +# end of alt.module + +# Tables ........................... + +tables.role.attrib = role.attrib + +# Note that InformalTable is dependent on some of the entity +# declarations that customize Table. +local.informaltable.attrib = empty +informaltable = + element informaltable { + informaltable.attlist, + blockinfo?, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + } +# end of informaltable.element + +# Frame, Colsep, and Rowsep must be repeated because +# they are not in entities in the table module. + +# includes TabStyle, ToCentry, ShortEntry, +# Orient, PgWide + +# includes Label + +# includes common attributes +informaltable.attlist &= + attribute frame { + "top" | "bottom" | "topbot" | "all" | "sides" | "none" + }?, + attribute colsep { yesorno.attvals }?, + attribute rowsep { yesorno.attvals }?, + common.table.attribs, + tbl.table.att, + local.informaltable.attrib +# end of informaltable.attlist + +# end of informaltable.module + +# ...................................................................... + +# Synopses ............................................................. + +# Synopsis ......................... +local.synopsis.attrib = empty +synopsis.role.attrib = role.attrib +synopsis = + element synopsis { + synopsis.attlist, + (para.char.mix + | graphic + | mediaobject + | co + | coref + | textobject + | lineannotation)* + } +# end of synopsis.element +synopsis.attlist &= + label.attrib, + linespecific.attrib, + common.attrib, + synopsis.role.attrib, + local.synopsis.attrib +# end of synopsis.attlist + +# LineAnnotation (defined in the Inlines section, below) + +# end of synopsis.module + +# CmdSynopsis ...................... +local.cmdsynopsis.attrib = empty +cmdsynopsis.role.attrib = role.attrib +cmdsynopsis = + element cmdsynopsis { + cmdsynopsis.attlist, (command | arg | group | sbr)+, synopfragment* + } +# end of cmdsynopsis.element + +# Sepchar: Character that should separate command and all +# top-level arguments; alternate value might be e.g., Δ +cmdsynopsis.attlist &= + label.attrib, + [ a:defaultValue = " " ] attribute sepchar { text }?, + attribute cmdlength { text }?, + common.attrib, + cmdsynopsis.role.attrib, + local.cmdsynopsis.attrib +# end of cmdsynopsis.attlist + +# end of cmdsynopsis.module +local.arg.attrib = empty +arg.role.attrib = role.attrib +arg = + element arg { + arg.attlist, + (text + | arg + | group + | option + | synopfragmentref + | replaceable + | sbr)* + } +# end of arg.element + +# Choice: Whether Arg must be supplied: Opt (optional to +# supply, e.g. [arg]; the default), Req (required to supply, +# e.g. {arg}), or Plain (required to supply, e.g. arg) + +# Rep: whether Arg is repeatable: Norepeat (e.g. arg without +# ellipsis; the default), or Repeat (e.g. arg...) +arg.attlist &= + [ a:defaultValue = "opt" ] + attribute choice { "opt" | "req" | "plain" }?, + [ a:defaultValue = "norepeat" ] + attribute rep { "norepeat" | "repeat" }?, + common.attrib, + arg.role.attrib, + local.arg.attrib +# end of arg.attlist + +# end of arg.module +local.group.attrib = empty +group.role.attrib = role.attrib +group = + element group { + group.attlist, + (arg | group | option | synopfragmentref | replaceable | sbr)+ + } +# end of group.element + +# Choice: Whether Group must be supplied: Opt (optional to +# supply, e.g. [g1|g2|g3]; the default), Req (required to +# supply, e.g. {g1|g2|g3}), Plain (required to supply, +# e.g. g1|g2|g3), OptMult (can supply zero or more, e.g. +# [[g1|g2|g3]]), or ReqMult (must supply one or more, e.g. +# {{g1|g2|g3}}) + +# Rep: whether Group is repeatable: Norepeat (e.g. group +# without ellipsis; the default), or Repeat (e.g. group...) +group.attlist &= + [ a:defaultValue = "opt" ] + attribute choice { "opt" | "req" | "plain" }?, + [ a:defaultValue = "norepeat" ] + attribute rep { "norepeat" | "repeat" }?, + common.attrib, + group.role.attrib, + local.group.attrib +# end of group.attlist + +# end of group.module +local.sbr.attrib = empty +# Synopsis break +sbr.role.attrib = role.attrib +sbr = element sbr { sbr.attlist, empty } +# end of sbr.element +sbr.attlist &= common.attrib, sbr.role.attrib, local.sbr.attrib +# end of sbr.attlist + +# end of sbr.module +local.synopfragmentref.attrib = empty +synopfragmentref.role.attrib = role.attrib +synopfragmentref = + element synopfragmentref { synopfragmentref.attlist, text } +# end of synopfragmentref.element + +# to SynopFragment of complex synopsis +# material for separate referencing +synopfragmentref.attlist &= + linkendreq.attrib, + common.attrib, + synopfragmentref.role.attrib, + local.synopfragmentref.attrib +# end of synopfragmentref.attlist + +# end of synopfragmentref.module +local.synopfragment.attrib = empty +synopfragment.role.attrib = role.attrib +synopfragment = + element synopfragment { synopfragment.attlist, (arg | group)+ } +# end of synopfragment.element +synopfragment.attlist &= + idreq.common.attrib, + synopfragment.role.attrib, + local.synopfragment.attrib +# end of synopfragment.attlist + +# end of synopfragment.module + +# Command (defined in the Inlines section, below) + +# Option (defined in the Inlines section, below) + +# Replaceable (defined in the Inlines section, below) + +# end of cmdsynopsis.content.module + +# FuncSynopsis ..................... +local.funcsynopsis.attrib = empty +funcsynopsis.role.attrib = role.attrib +funcsynopsis = + element funcsynopsis { + funcsynopsis.attlist, (funcsynopsisinfo | funcprototype)+ + } +# end of funcsynopsis.element +funcsynopsis.attlist &= + label.attrib, + common.attrib, + funcsynopsis.role.attrib, + local.funcsynopsis.attrib +# end of funcsynopsis.attlist + +# end of funcsynopsis.module +local.funcsynopsisinfo.attrib = empty +funcsynopsisinfo.role.attrib = role.attrib +funcsynopsisinfo = + element funcsynopsisinfo { + funcsynopsisinfo.attlist, + (cptr.char.mix | textobject | lineannotation)* + } +# end of funcsynopsisinfo.element +funcsynopsisinfo.attlist &= + linespecific.attrib, + common.attrib, + funcsynopsisinfo.role.attrib, + local.funcsynopsisinfo.attrib +# end of funcsynopsisinfo.attlist + +# end of funcsynopsisinfo.module +local.funcprototype.attrib = empty +funcprototype.role.attrib = role.attrib +funcprototype = + element funcprototype { + funcprototype.attlist, funcdef, (void | varargs | paramdef+) + } +# end of funcprototype.element +funcprototype.attlist &= + common.attrib, funcprototype.role.attrib, local.funcprototype.attrib +# end of funcprototype.attlist + +# end of funcprototype.module +local.funcdef.attrib = empty +funcdef.role.attrib = role.attrib +funcdef = + element funcdef { + funcdef.attlist, (text | type | replaceable | function)* + } +# end of funcdef.element +funcdef.attlist &= + common.attrib, funcdef.role.attrib, local.funcdef.attrib +# end of funcdef.attlist + +# end of funcdef.module +local.void.attrib = empty +void.role.attrib = role.attrib +void = element void { void.attlist, empty } +# end of void.element +void.attlist &= common.attrib, void.role.attrib, local.void.attrib +# end of void.attlist + +# end of void.module +local.varargs.attrib = empty +varargs.role.attrib = role.attrib +varargs = element varargs { varargs.attlist, empty } +# end of varargs.element +varargs.attlist &= + common.attrib, varargs.role.attrib, local.varargs.attrib +# end of varargs.attlist + +# end of varargs.module + +# Processing assumes that only one Parameter will appear in a +# ParamDef, and that FuncParams will be used at most once, for +# providing information on the "inner parameters" for parameters that +# are pointers to functions. +local.paramdef.attrib = empty +paramdef.role.attrib = role.attrib +paramdef = + element paramdef { + paramdef.attlist, + (text | type | replaceable | parameter | funcparams)* + } +# end of paramdef.element +paramdef.attlist &= + common.attrib, paramdef.role.attrib, local.paramdef.attrib +# end of paramdef.attlist + +# end of paramdef.module +local.funcparams.attrib = empty +funcparams.role.attrib = role.attrib +funcparams = element funcparams { funcparams.attlist, cptr.char.mix* } +# end of funcparams.element +funcparams.attlist &= + common.attrib, funcparams.role.attrib, local.funcparams.attrib +# end of funcparams.attlist + +# end of funcparams.module + +# LineAnnotation (defined in the Inlines section, below) + +# Replaceable (defined in the Inlines section, below) + +# Function (defined in the Inlines section, below) + +# Parameter (defined in the Inlines section, below) + +# end of funcsynopsis.content.module + +# ClassSynopsis ..................... +local.classsynopsis.attrib = empty +classsynopsis.role.attrib = role.attrib +classsynopsis = + element classsynopsis { + classsynopsis.attlist, + (ooclass | oointerface | ooexception)+, + (classsynopsisinfo | fieldsynopsis | method.synop.class)* + } +# end of classsynopsis.element +classsynopsis.attlist &= + attribute language { text }?, + [ a:defaultValue = "class" ] + attribute class { "class" | "interface" }?, + common.attrib, + classsynopsis.role.attrib, + local.classsynopsis.attrib +# end of classsynopsis.attlist + +# end of classsynopsis.module +local.classsynopsisinfo.attrib = empty +classsynopsisinfo.role.attrib = role.attrib +classsynopsisinfo = + element classsynopsisinfo { + classsynopsisinfo.attlist, + (cptr.char.mix | textobject | lineannotation)* + } +# end of classsynopsisinfo.element +classsynopsisinfo.attlist &= + linespecific.attrib, + common.attrib, + classsynopsisinfo.role.attrib, + local.classsynopsisinfo.attrib +# end of classsynopsisinfo.attlist + +# end of classsynopsisinfo.module +local.ooclass.attrib = empty +ooclass.role.attrib = role.attrib +ooclass = element ooclass { ooclass.attlist, modifier*, classname } +# end of ooclass.element +ooclass.attlist &= + common.attrib, ooclass.role.attrib, local.ooclass.attrib +# end of ooclass.attlist + +# end of ooclass.module +local.oointerface.attrib = empty +oointerface.role.attrib = role.attrib +oointerface = + element oointerface { oointerface.attlist, modifier*, interfacename } +# end of oointerface.element +oointerface.attlist &= + common.attrib, oointerface.role.attrib, local.oointerface.attrib +# end of oointerface.attlist + +# end of oointerface.module +local.ooexception.attrib = empty +ooexception.role.attrib = role.attrib +ooexception = + element ooexception { ooexception.attlist, modifier*, exceptionname } +# end of ooexception.element +ooexception.attlist &= + common.attrib, ooexception.role.attrib, local.ooexception.attrib +# end of ooexception.attlist + +# end of ooexception.module +local.modifier.attrib = empty +modifier.role.attrib = role.attrib +modifier = element modifier { modifier.attlist, smallcptr.char.mix* } +# end of modifier.element +modifier.attlist &= + common.attrib, modifier.role.attrib, local.modifier.attrib +# end of modifier.attlist + +# end of modifier.module +local.interfacename.attrib = empty +interfacename.role.attrib = role.attrib +interfacename = + element interfacename { interfacename.attlist, cptr.char.mix* } +# end of interfacename.element +interfacename.attlist &= + common.attrib, interfacename.role.attrib, local.interfacename.attrib +# end of interfacename.attlist + +# end of interfacename.module +local.exceptionname.attrib = empty +exceptionname.role.attrib = role.attrib +exceptionname = + element exceptionname { exceptionname.attlist, smallcptr.char.mix* } +# end of exceptionname.element +exceptionname.attlist &= + common.attrib, exceptionname.role.attrib, local.exceptionname.attrib +# end of exceptionname.attlist + +# end of exceptionname.module +local.fieldsynopsis.attrib = empty +fieldsynopsis.role.attrib = role.attrib +fieldsynopsis = + element fieldsynopsis { + fieldsynopsis.attlist, modifier*, type?, varname, initializer? + } +# end of fieldsynopsis.element +fieldsynopsis.attlist &= + attribute language { text }?, + common.attrib, + fieldsynopsis.role.attrib, + local.fieldsynopsis.attrib +# end of fieldsynopsis.attlist + +# end of fieldsynopsis.module +local.initializer.attrib = empty +initializer.role.attrib = role.attrib +initializer = + element initializer { initializer.attlist, smallcptr.char.mix* } +# end of initializer.element +initializer.attlist &= + common.attrib, initializer.role.attrib, local.initializer.attrib +# end of initializer.attlist + +# end of initializer.module +local.constructorsynopsis.attrib = empty +constructorsynopsis.role.attrib = role.attrib +constructorsynopsis = + element constructorsynopsis { + constructorsynopsis.attlist, + modifier*, + methodname?, + (methodparam+ | void), + exceptionname* + } +# end of constructorsynopsis.element +constructorsynopsis.attlist &= + attribute language { text }?, + common.attrib, + constructorsynopsis.role.attrib, + local.constructorsynopsis.attrib +# end of constructorsynopsis.attlist + +# end of constructorsynopsis.module +local.destructorsynopsis.attrib = empty +destructorsynopsis.role.attrib = role.attrib +destructorsynopsis = + element destructorsynopsis { + destructorsynopsis.attlist, + modifier*, + methodname?, + (methodparam+ | void), + exceptionname* + } +# end of destructorsynopsis.element +destructorsynopsis.attlist &= + attribute language { text }?, + common.attrib, + destructorsynopsis.role.attrib, + local.destructorsynopsis.attrib +# end of destructorsynopsis.attlist + +# end of destructorsynopsis.module +local.methodsynopsis.attrib = empty +methodsynopsis.role.attrib = role.attrib +methodsynopsis = + element methodsynopsis { + methodsynopsis.attlist, + modifier*, + (type | void)?, + methodname, + (methodparam+ | void), + exceptionname*, + modifier* + } +# end of methodsynopsis.element +methodsynopsis.attlist &= + attribute language { text }?, + common.attrib, + methodsynopsis.role.attrib, + local.methodsynopsis.attrib +# end of methodsynopsis.attlist + +# end of methodsynopsis.module +local.methodname.attrib = empty +methodname.role.attrib = role.attrib +methodname = + element methodname { methodname.attlist, smallcptr.char.mix* } +# end of methodname.element +methodname.attlist &= + common.attrib, methodname.role.attrib, local.methodname.attrib +# end of methodname.attlist + +# end of methodname.module +local.methodparam.attrib = empty +methodparam.role.attrib = role.attrib +methodparam = + element methodparam { + methodparam.attlist, + modifier*, + type?, + ((parameter, initializer?) | funcparams), + modifier* + } +# end of methodparam.element +methodparam.attlist &= + [ a:defaultValue = "req" ] + attribute choice { "opt" | "req" | "plain" }?, + [ a:defaultValue = "norepeat" ] + attribute rep { "norepeat" | "repeat" }?, + common.attrib, + methodparam.role.attrib, + local.methodparam.attrib +# end of methodparam.attlist + +# end of methodparam.module + +# end of classsynopsis.content.module + +# ...................................................................... + +# Document information entities and elements ........................... + +# The document information elements include some elements that are +# currently used only in the document hierarchy module. They are +# defined here so that they will be available for use in customized +# document hierarchies. + +# .................................. + +# Ackno ............................ +local.ackno.attrib = empty +ackno.role.attrib = role.attrib +ackno = element ackno { ackno.attlist, docinfo.char.mix* } +# end of ackno.element +ackno.attlist &= common.attrib, ackno.role.attrib, local.ackno.attrib +# end of ackno.attlist + +# end of ackno.module + +# Address .......................... +local.address.attrib = empty +address.role.attrib = role.attrib +address = + element address { + address.attlist, + (text + | personname + | person.ident.mix + | street + | pob + | postcode + | city + | state + | country + | phone + | fax + | email + | otheraddr)* + } +# end of address.element +address.attlist &= + linespecific.attrib, + common.attrib, + address.role.attrib, + local.address.attrib +# end of address.attlist + +# end of address.module +local.street.attrib = empty +street.role.attrib = role.attrib +street = element street { street.attlist, docinfo.char.mix* } +# end of street.element +street.attlist &= common.attrib, street.role.attrib, local.street.attrib +# end of street.attlist + +# end of street.module +local.pob.attrib = empty +pob.role.attrib = role.attrib +pob = element pob { pob.attlist, docinfo.char.mix* } +# end of pob.element +pob.attlist &= common.attrib, pob.role.attrib, local.pob.attrib +# end of pob.attlist + +# end of pob.module +local.postcode.attrib = empty +postcode.role.attrib = role.attrib +postcode = element postcode { postcode.attlist, docinfo.char.mix* } +# end of postcode.element +postcode.attlist &= + common.attrib, postcode.role.attrib, local.postcode.attrib +# end of postcode.attlist + +# end of postcode.module +local.city.attrib = empty +city.role.attrib = role.attrib +city = element city { city.attlist, docinfo.char.mix* } +# end of city.element +city.attlist &= common.attrib, city.role.attrib, local.city.attrib +# end of city.attlist + +# end of city.module +local.state.attrib = empty +state.role.attrib = role.attrib +state = element state { state.attlist, docinfo.char.mix* } +# end of state.element +state.attlist &= common.attrib, state.role.attrib, local.state.attrib +# end of state.attlist + +# end of state.module +local.country.attrib = empty +country.role.attrib = role.attrib +country = element country { country.attlist, docinfo.char.mix* } +# end of country.element +country.attlist &= + common.attrib, country.role.attrib, local.country.attrib +# end of country.attlist + +# end of country.module +local.phone.attrib = empty +phone.role.attrib = role.attrib +phone = element phone { phone.attlist, docinfo.char.mix* } +# end of phone.element +phone.attlist &= common.attrib, phone.role.attrib, local.phone.attrib +# end of phone.attlist + +# end of phone.module +local.fax.attrib = empty +fax.role.attrib = role.attrib +fax = element fax { fax.attlist, docinfo.char.mix* } +# end of fax.element +fax.attlist &= common.attrib, fax.role.attrib, local.fax.attrib +# end of fax.attlist + +# end of fax.module + +# Email (defined in the Inlines section, below) +local.otheraddr.attrib = empty +otheraddr.role.attrib = role.attrib +otheraddr = element otheraddr { otheraddr.attlist, docinfo.char.mix* } +# end of otheraddr.element +otheraddr.attlist &= + common.attrib, otheraddr.role.attrib, local.otheraddr.attrib +# end of otheraddr.attlist + +# end of otheraddr.module + +# end of address.content.module + +# Affiliation ...................... +local.affiliation.attrib = empty +affiliation.role.attrib = role.attrib +affiliation = + element affiliation { + affiliation.attlist, + shortaffil?, + jobtitle*, + orgname?, + orgdiv*, + address* + } +# end of affiliation.element +affiliation.attlist &= + common.attrib, affiliation.role.attrib, local.affiliation.attrib +# end of affiliation.attlist + +# end of affiliation.module +local.shortaffil.attrib = empty +shortaffil.role.attrib = role.attrib +shortaffil = + element shortaffil { shortaffil.attlist, docinfo.char.mix* } +# end of shortaffil.element +shortaffil.attlist &= + common.attrib, shortaffil.role.attrib, local.shortaffil.attrib +# end of shortaffil.attlist + +# end of shortaffil.module +local.jobtitle.attrib = empty +jobtitle.role.attrib = role.attrib +jobtitle = element jobtitle { jobtitle.attlist, docinfo.char.mix* } +# end of jobtitle.element +jobtitle.attlist &= + common.attrib, jobtitle.role.attrib, local.jobtitle.attrib +# end of jobtitle.attlist + +# end of jobtitle.module + +# OrgName (defined elsewhere in this section) +local.orgdiv.attrib = empty +orgdiv.role.attrib = role.attrib +orgdiv = element orgdiv { orgdiv.attlist, docinfo.char.mix* } +# end of orgdiv.element +orgdiv.attlist &= common.attrib, orgdiv.role.attrib, local.orgdiv.attrib +# end of orgdiv.attlist + +# end of orgdiv.module + +# Address (defined elsewhere in this section) + +# end of affiliation.content.module + +# ArtPageNums ...................... +local.artpagenums.attrib = empty +artpagenums.role.attrib = role.attrib +artpagenums = + element artpagenums { artpagenums.attlist, docinfo.char.mix* } +# end of artpagenums.element +artpagenums.attlist &= + common.attrib, artpagenums.role.attrib, local.artpagenums.attrib +# end of artpagenums.attlist + +# end of artpagenums.module + +# PersonName +local.personname.attrib = empty +personname.role.attrib = role.attrib +personname = + element personname { + personname.attlist, + (honorific | firstname | surname | lineage | othername)+ + } +# end of personname.element +personname.attlist &= + common.attrib, personname.role.attrib, local.personname.attrib +# end of personname.attlist + +# end of personname.module + +# Author ........................... +local.author.attrib = empty +author.role.attrib = role.attrib +author = + element author { + author.attlist, + (personname | person.ident.mix+), + (personblurb | email | address)* + } +# end of author.element +author.attlist &= common.attrib, author.role.attrib, local.author.attrib +# end of author.attlist + +# (see "Personal identity elements" for %person.ident.mix;) + +# end of author.module + +# AuthorGroup ...................... +local.authorgroup.attrib = empty +authorgroup.role.attrib = role.attrib +authorgroup = + element authorgroup { + authorgroup.attlist, + (author | editor | collab | corpauthor | othercredit)+ + } +# end of authorgroup.element +authorgroup.attlist &= + common.attrib, authorgroup.role.attrib, local.authorgroup.attrib +# end of authorgroup.attlist + +# end of authorgroup.module + +# Author (defined elsewhere in this section) + +# Editor (defined elsewhere in this section) +local.collab.attrib = empty +collab.role.attrib = role.attrib +collab = element collab { collab.attlist, collabname, affiliation* } +# end of collab.element +collab.attlist &= common.attrib, collab.role.attrib, local.collab.attrib +# end of collab.attlist + +# end of collab.module +local.collabname.attrib = empty +collabname.role.attrib = role.attrib +collabname = + element collabname { collabname.attlist, docinfo.char.mix* } +# end of collabname.element +collabname.attlist &= + common.attrib, collabname.role.attrib, local.collabname.attrib +# end of collabname.attlist + +# end of collabname.module + +# Affiliation (defined elsewhere in this section) + +# end of collab.content.module + +# CorpAuthor (defined elsewhere in this section) + +# OtherCredit (defined elsewhere in this section) + +# end of authorgroup.content.module + +# AuthorInitials ................... +local.authorinitials.attrib = empty +authorinitials.role.attrib = role.attrib +authorinitials = + element authorinitials { authorinitials.attlist, docinfo.char.mix* } +# end of authorinitials.element +authorinitials.attlist &= + common.attrib, authorinitials.role.attrib, local.authorinitials.attrib +# end of authorinitials.attlist + +# end of authorinitials.module + +# ConfGroup ........................ +local.confgroup.attrib = empty +confgroup.role.attrib = role.attrib +confgroup = + element confgroup { + confgroup.attlist, + (confdates | conftitle | confnum | address | confsponsor)* + } +# end of confgroup.element +confgroup.attlist &= + common.attrib, confgroup.role.attrib, local.confgroup.attrib +# end of confgroup.attlist + +# end of confgroup.module +local.confdates.attrib = empty +confdates.role.attrib = role.attrib +confdates = element confdates { confdates.attlist, docinfo.char.mix* } +# end of confdates.element +confdates.attlist &= + common.attrib, confdates.role.attrib, local.confdates.attrib +# end of confdates.attlist + +# end of confdates.module +local.conftitle.attrib = empty +conftitle.role.attrib = role.attrib +conftitle = element conftitle { conftitle.attlist, docinfo.char.mix* } +# end of conftitle.element +conftitle.attlist &= + common.attrib, conftitle.role.attrib, local.conftitle.attrib +# end of conftitle.attlist + +# end of conftitle.module +local.confnum.attrib = empty +confnum.role.attrib = role.attrib +confnum = element confnum { confnum.attlist, docinfo.char.mix* } +# end of confnum.element +confnum.attlist &= + common.attrib, confnum.role.attrib, local.confnum.attrib +# end of confnum.attlist + +# end of confnum.module + +# Address (defined elsewhere in this section) +local.confsponsor.attrib = empty +confsponsor.role.attrib = role.attrib +confsponsor = + element confsponsor { confsponsor.attlist, docinfo.char.mix* } +# end of confsponsor.element +confsponsor.attlist &= + common.attrib, confsponsor.role.attrib, local.confsponsor.attrib +# end of confsponsor.attlist + +# end of confsponsor.module + +# end of confgroup.content.module + +# ContractNum ...................... +local.contractnum.attrib = empty +contractnum.role.attrib = role.attrib +contractnum = + element contractnum { contractnum.attlist, docinfo.char.mix* } +# end of contractnum.element +contractnum.attlist &= + common.attrib, contractnum.role.attrib, local.contractnum.attrib +# end of contractnum.attlist + +# end of contractnum.module + +# ContractSponsor .................. +local.contractsponsor.attrib = empty +contractsponsor.role.attrib = role.attrib +contractsponsor = + element contractsponsor { contractsponsor.attlist, docinfo.char.mix* } +# end of contractsponsor.element +contractsponsor.attlist &= + common.attrib, + contractsponsor.role.attrib, + local.contractsponsor.attrib +# end of contractsponsor.attlist + +# end of contractsponsor.module + +# Copyright ........................ +local.copyright.attrib = empty +copyright.role.attrib = role.attrib +copyright = element copyright { copyright.attlist, year+, holder* } +# end of copyright.element +copyright.attlist &= + common.attrib, copyright.role.attrib, local.copyright.attrib +# end of copyright.attlist + +# end of copyright.module +local.year.attrib = empty +year.role.attrib = role.attrib +year = element year { year.attlist, docinfo.char.mix* } +# end of year.element +year.attlist &= common.attrib, year.role.attrib, local.year.attrib +# end of year.attlist + +# end of year.module +local.holder.attrib = empty +holder.role.attrib = role.attrib +holder = element holder { holder.attlist, docinfo.char.mix* } +# end of holder.element +holder.attlist &= common.attrib, holder.role.attrib, local.holder.attrib +# end of holder.attlist + +# end of holder.module + +# end of copyright.content.module + +# CorpAuthor ....................... +local.corpauthor.attrib = empty +corpauthor.role.attrib = role.attrib +corpauthor = + element corpauthor { corpauthor.attlist, docinfo.char.mix* } +# end of corpauthor.element +corpauthor.attlist &= + common.attrib, corpauthor.role.attrib, local.corpauthor.attrib +# end of corpauthor.attlist + +# end of corpauthor.module + +# CorpName ......................... +local.corpname.attrib = empty +corpname = element corpname { corpname.attlist, docinfo.char.mix* } +# end of corpname.element +corpname.role.attrib = role.attrib +corpname.attlist &= + common.attrib, corpname.role.attrib, local.corpname.attrib +# end of corpname.attlist + +# end of corpname.module + +# Date ............................. +local.date.attrib = empty +date.role.attrib = role.attrib +date = element date { date.attlist, docinfo.char.mix* } +# end of date.element +date.attlist &= common.attrib, date.role.attrib, local.date.attrib +# end of date.attlist + +# end of date.module + +# Edition .......................... +local.edition.attrib = empty +edition.role.attrib = role.attrib +edition = element edition { edition.attlist, docinfo.char.mix* } +# end of edition.element +edition.attlist &= + common.attrib, edition.role.attrib, local.edition.attrib +# end of edition.attlist + +# end of edition.module + +# Editor ........................... +local.editor.attrib = empty +editor.role.attrib = role.attrib +editor = + element editor { + editor.attlist, + (personname | person.ident.mix+), + (personblurb | email | address)* + } +# end of editor.element +editor.attlist &= common.attrib, editor.role.attrib, local.editor.attrib +# end of editor.attlist + +# (see "Personal identity elements" for %person.ident.mix;) + +# end of editor.module + +# ISBN ............................. +local.isbn.attrib = empty +isbn.role.attrib = role.attrib +isbn = element isbn { isbn.attlist, docinfo.char.mix* } +# end of isbn.element +isbn.attlist &= common.attrib, isbn.role.attrib, local.isbn.attrib +# end of isbn.attlist + +# end of isbn.module + +# ISSN ............................. +local.issn.attrib = empty +issn.role.attrib = role.attrib +issn = element issn { issn.attlist, docinfo.char.mix* } +# end of issn.element +issn.attlist &= common.attrib, issn.role.attrib, local.issn.attrib +# end of issn.attlist + +# end of issn.module + +# BiblioId ................. +biblio.class.attrib = + attribute class { + "uri" + | "doi" + | "isbn" + | "issn" + | "libraryofcongress" + | "pubnumber" + | "other" + }?, + attribute otherclass { text }? +local.biblioid.attrib = empty +biblioid.role.attrib = role.attrib +biblioid = element biblioid { biblioid.attlist, docinfo.char.mix* } +# end of biblioid.element +biblioid.attlist &= + biblio.class.attrib, + common.attrib, + biblioid.role.attrib, + local.biblioid.attrib +# end of biblioid.attlist + +# end of biblioid.module + +# CiteBiblioId ................. +local.citebiblioid.attrib = empty +citebiblioid.role.attrib = role.attrib +citebiblioid = + element citebiblioid { citebiblioid.attlist, docinfo.char.mix* } +# end of citebiblioid.element +citebiblioid.attlist &= + biblio.class.attrib, + common.attrib, + citebiblioid.role.attrib, + local.citebiblioid.attrib +# end of citebiblioid.attlist + +# end of citebiblioid.module + +# BiblioSource ................. +local.bibliosource.attrib = empty +bibliosource.role.attrib = role.attrib +bibliosource = + element bibliosource { bibliosource.attlist, docinfo.char.mix* } +# end of bibliosource.element +bibliosource.attlist &= + biblio.class.attrib, + common.attrib, + bibliosource.role.attrib, + local.bibliosource.attrib +# end of bibliosource.attlist + +# end of bibliosource.module + +# BiblioRelation ................. +local.bibliorelation.attrib = empty +local.bibliorelation.types = notAllowed +bibliorelation.type.attrib = + attribute type { + "isversionof" + | "hasversion" + | "isreplacedby" + | "replaces" + | "isrequiredby" + | "requires" + | "ispartof" + | "haspart" + | "isreferencedby" + | "references" + | "isformatof" + | "hasformat" + | "othertype" + | local.bibliorelation.types + }?, + attribute othertype { text }? +bibliorelation.role.attrib = role.attrib +bibliorelation = + element bibliorelation { bibliorelation.attlist, docinfo.char.mix* } +# end of bibliorelation.element +bibliorelation.attlist &= + biblio.class.attrib, + bibliorelation.type.attrib, + common.attrib, + bibliorelation.role.attrib, + local.bibliorelation.attrib +# end of bibliorelation.attlist + +# end of bibliorelation.module + +# BiblioCoverage ................. +local.bibliocoverage.attrib = empty +bibliocoverage.role.attrib = role.attrib +bibliocoverage = + element bibliocoverage { bibliocoverage.attlist, docinfo.char.mix* } +# end of bibliocoverage.element +bibliocoverage.attlist &= + attribute spatial { + "dcmipoint" | "iso3166" | "dcmibox" | "tgn" | "otherspatial" + }?, + attribute otherspatial { text }?, + attribute temporal { "dcmiperiod" | "w3c-dtf" | "othertemporal" }?, + attribute othertemporal { text }?, + common.attrib, + bibliocoverage.role.attrib, + local.bibliocoverage.attrib +# end of bibliocoverage.attlist + +# end of bibliocoverage.module + +# InvPartNumber .................... +local.invpartnumber.attrib = empty +invpartnumber.role.attrib = role.attrib +invpartnumber = + element invpartnumber { invpartnumber.attlist, docinfo.char.mix* } +# end of invpartnumber.element +invpartnumber.attlist &= + common.attrib, invpartnumber.role.attrib, local.invpartnumber.attrib +# end of invpartnumber.attlist + +# end of invpartnumber.module + +# IssueNum ......................... +local.issuenum.attrib = empty +issuenum.role.attrib = role.attrib +issuenum = element issuenum { issuenum.attlist, docinfo.char.mix* } +# end of issuenum.element +issuenum.attlist &= + common.attrib, issuenum.role.attrib, local.issuenum.attrib +# end of issuenum.attlist + +# end of issuenum.module + +# LegalNotice ...................... +local.legalnotice.attrib = empty +legalnotice.role.attrib = role.attrib +legalnotice = + element legalnotice { + legalnotice.attlist, blockinfo?, title?, legalnotice.mix+ + } +# end of legalnotice.element +legalnotice.attlist &= + common.attrib, legalnotice.role.attrib, local.legalnotice.attrib +# end of legalnotice.attlist + +# end of legalnotice.module + +# ModeSpec ......................... +local.modespec.attrib = empty +modespec.role.attrib = role.attrib +modespec = element modespec { modespec.attlist, docinfo.char.mix* } +# end of modespec.element + +# Application: Type of action required for completion +# of the links to which the ModeSpec is relevant (e.g., +# retrieval query) +modespec.attlist &= + attribute application { notation.class }?, + common.attrib, + modespec.role.attrib, + local.modespec.attrib +# end of modespec.attlist + +# end of modespec.module + +# OrgName .......................... +local.orgname.attrib = empty +orgname.role.attrib = role.attrib +orgname = element orgname { orgname.attlist, docinfo.char.mix* } +# end of orgname.element +orgname.attlist &= + common.attrib, + attribute class { + "corporation" | "nonprofit" | "consortium" | "informal" | "other" + }?, + attribute otherclass { text }?, + orgname.role.attrib, + local.orgname.attrib +# end of orgname.attlist + +# end of orgname.module + +# OtherCredit ...................... +local.othercredit.attrib = empty +othercredit.role.attrib = role.attrib +othercredit = + element othercredit { + othercredit.attlist, + (personname | person.ident.mix+), + (personblurb | email | address)* + } +# end of othercredit.element +othercredit.attlist &= + common.attrib, othercredit.role.attrib, local.othercredit.attrib +# end of othercredit.attlist + +# (see "Personal identity elements" for %person.ident.mix;) + +# end of othercredit.module + +# PageNums ......................... +local.pagenums.attrib = empty +pagenums.role.attrib = role.attrib +pagenums = element pagenums { pagenums.attlist, docinfo.char.mix* } +# end of pagenums.element +pagenums.attlist &= + common.attrib, pagenums.role.attrib, local.pagenums.attrib +# end of pagenums.attlist + +# end of pagenums.module + +# Personal identity elements ....... + +# These elements are used only within Author, Editor, and +# OtherCredit. +local.contrib.attrib = empty +contrib.role.attrib = role.attrib +contrib = element contrib { contrib.attlist, docinfo.char.mix* } +# end of contrib.element +contrib.attlist &= + common.attrib, contrib.role.attrib, local.contrib.attrib +# end of contrib.attlist + +# end of contrib.module +local.firstname.attrib = empty +firstname.role.attrib = role.attrib +firstname = element firstname { firstname.attlist, docinfo.char.mix* } +# end of firstname.element +firstname.attlist &= + common.attrib, firstname.role.attrib, local.firstname.attrib +# end of firstname.attlist + +# end of firstname.module +local.honorific.attrib = empty +honorific.role.attrib = role.attrib +honorific = element honorific { honorific.attlist, docinfo.char.mix* } +# end of honorific.element +honorific.attlist &= + common.attrib, honorific.role.attrib, local.honorific.attrib +# end of honorific.attlist + +# end of honorific.module +local.lineage.attrib = empty +lineage.role.attrib = role.attrib +lineage = element lineage { lineage.attlist, docinfo.char.mix* } +# end of lineage.element +lineage.attlist &= + common.attrib, lineage.role.attrib, local.lineage.attrib +# end of lineage.attlist + +# end of lineage.module +local.othername.attrib = empty +othername.role.attrib = role.attrib +othername = element othername { othername.attlist, docinfo.char.mix* } +# end of othername.element +othername.attlist &= + common.attrib, othername.role.attrib, local.othername.attrib +# end of othername.attlist + +# end of othername.module +local.surname.attrib = empty +surname.role.attrib = role.attrib +surname = element surname { surname.attlist, docinfo.char.mix* } +# end of surname.element +surname.attlist &= + common.attrib, surname.role.attrib, local.surname.attrib +# end of surname.attlist + +# end of surname.module + +# end of person.ident.module + +# PrintHistory ..................... +local.printhistory.attrib = empty +printhistory.role.attrib = role.attrib +printhistory = + element printhistory { printhistory.attlist, para.class+ } +# end of printhistory.element +printhistory.attlist &= + common.attrib, printhistory.role.attrib, local.printhistory.attrib +# end of printhistory.attlist + +# end of printhistory.module + +# ProductName ...................... +local.productname.attrib = empty +productname.role.attrib = role.attrib +productname = + element productname { productname.attlist, para.char.mix* } +# end of productname.element + +# Class: More precisely identifies the item the element names +productname.attlist &= + [ a:defaultValue = "trade" ] + attribute class { "service" | "trade" | "registered" | "copyright" }?, + common.attrib, + productname.role.attrib, + local.productname.attrib +# end of productname.attlist + +# end of productname.module + +# ProductNumber .................... +local.productnumber.attrib = empty +productnumber.role.attrib = role.attrib +productnumber = + element productnumber { productnumber.attlist, docinfo.char.mix* } +# end of productnumber.element +productnumber.attlist &= + common.attrib, productnumber.role.attrib, local.productnumber.attrib +# end of productnumber.attlist + +# end of productnumber.module + +# PubDate .......................... +local.pubdate.attrib = empty +pubdate.role.attrib = role.attrib +pubdate = element pubdate { pubdate.attlist, docinfo.char.mix* } +# end of pubdate.element +pubdate.attlist &= + common.attrib, pubdate.role.attrib, local.pubdate.attrib +# end of pubdate.attlist + +# end of pubdate.module + +# Publisher ........................ +local.publisher.attrib = empty +publisher.role.attrib = role.attrib +publisher = + element publisher { publisher.attlist, publishername, address* } +# end of publisher.element +publisher.attlist &= + common.attrib, publisher.role.attrib, local.publisher.attrib +# end of publisher.attlist + +# end of publisher.module +local.publishername.attrib = empty +publishername.role.attrib = role.attrib +publishername = + element publishername { publishername.attlist, docinfo.char.mix* } +# end of publishername.element +publishername.attlist &= + common.attrib, publishername.role.attrib, local.publishername.attrib +# end of publishername.attlist + +# end of publishername.module + +# Address (defined elsewhere in this section) + +# end of publisher.content.module + +# PubsNumber ....................... +local.pubsnumber.attrib = empty +pubsnumber.role.attrib = role.attrib +pubsnumber = + element pubsnumber { pubsnumber.attlist, docinfo.char.mix* } +# end of pubsnumber.element +pubsnumber.attlist &= + common.attrib, pubsnumber.role.attrib, local.pubsnumber.attrib +# end of pubsnumber.attlist + +# end of pubsnumber.module + +# ReleaseInfo ...................... +local.releaseinfo.attrib = empty +releaseinfo.role.attrib = role.attrib +releaseinfo = + element releaseinfo { releaseinfo.attlist, docinfo.char.mix* } +# end of releaseinfo.element +releaseinfo.attlist &= + common.attrib, releaseinfo.role.attrib, local.releaseinfo.attrib +# end of releaseinfo.attlist + +# end of releaseinfo.module + +# RevHistory ....................... +local.revhistory.attrib = empty +revhistory.role.attrib = role.attrib +revhistory = element revhistory { revhistory.attlist, revision+ } +# end of revhistory.element +revhistory.attlist &= + common.attrib, revhistory.role.attrib, local.revhistory.attrib +# end of revhistory.attlist + +# end of revhistory.module +local.revision.attrib = empty +revision.role.attrib = role.attrib +revision = + element revision { + revision.attlist, + revnumber, + date, + authorinitials*, + (revremark | revdescription)? + } +# end of revision.element +revision.attlist &= + common.attrib, revision.role.attrib, local.revision.attrib +# end of revision.attlist + +# end of revision.module +local.revnumber.attrib = empty +revnumber.role.attrib = role.attrib +revnumber = element revnumber { revnumber.attlist, docinfo.char.mix* } +# end of revnumber.element +revnumber.attlist &= + common.attrib, revnumber.role.attrib, local.revnumber.attrib +# end of revnumber.attlist + +# end of revnumber.module + +# Date (defined elsewhere in this section) + +# AuthorInitials (defined elsewhere in this section) +local.revremark.attrib = empty +revremark.role.attrib = role.attrib +revremark = element revremark { revremark.attlist, docinfo.char.mix* } +# end of revremark.element +revremark.attlist &= + common.attrib, revremark.role.attrib, local.revremark.attrib +# end of revremark.attlist + +# end of revremark.module +local.revdescription.attrib = empty +revdescription.role.attrib = role.attrib +revdescription = + element revdescription { revdescription.attlist, revdescription.mix+ } +# end of revdescription.element +revdescription.attlist &= + common.attrib, revdescription.role.attrib, local.revdescription.attrib +# end of revdescription.attlist + +# end of revdescription.module + +# end of revhistory.content.module + +# SeriesVolNums .................... +local.seriesvolnums.attrib = empty +seriesvolnums.role.attrib = role.attrib +seriesvolnums = + element seriesvolnums { seriesvolnums.attlist, docinfo.char.mix* } +# end of seriesvolnums.element +seriesvolnums.attlist &= + common.attrib, seriesvolnums.role.attrib, local.seriesvolnums.attrib +# end of seriesvolnums.attlist + +# end of seriesvolnums.module + +# VolumeNum ........................ +local.volumenum.attrib = empty +volumenum.role.attrib = role.attrib +volumenum = element volumenum { volumenum.attlist, docinfo.char.mix* } +# end of volumenum.element +volumenum.attlist &= + common.attrib, volumenum.role.attrib, local.volumenum.attrib +# end of volumenum.attlist + +# end of volumenum.module + +# .................................. + +# end of docinfo.content.module + +# ...................................................................... + +# Inline, link, and ubiquitous elements ................................ + +# Technical and computer terms ......................................... +local.accel.attrib = empty +accel.role.attrib = role.attrib +accel = element accel { accel.attlist, smallcptr.char.mix* } +# end of accel.element +accel.attlist &= common.attrib, accel.role.attrib, local.accel.attrib +# end of accel.attlist + +# end of accel.module +local.action.attrib = empty +action.role.attrib = role.attrib +action = element action { action.attlist, cptr.char.mix* } +# end of action.element +action.attlist &= + moreinfo.attrib, + common.attrib, + action.role.attrib, + local.action.attrib +# end of action.attlist + +# end of action.module +local.application.attrib = empty +application.role.attrib = role.attrib +application = + element application { application.attlist, para.char.mix* } +# end of application.element +application.attlist &= + attribute class { "hardware" | "software" }?, + moreinfo.attrib, + common.attrib, + application.role.attrib, + local.application.attrib +# end of application.attlist + +# end of application.module +local.classname.attrib = empty +classname.role.attrib = role.attrib +classname = element classname { classname.attlist, smallcptr.char.mix* } +# end of classname.element +classname.attlist &= + common.attrib, classname.role.attrib, local.classname.attrib +# end of classname.attlist + +# end of classname.module +local.co.attrib = empty +# CO is a callout area of the LineColumn unit type (a single character +# position); the position is directly indicated by the location of CO. +co.role.attrib = role.attrib +co = element co { co.attlist, empty } +# end of co.element + +# bug number/symbol override or initialization + +# to any related information +co.attlist &= + label.attrib, + linkends.attrib, + idreq.common.attrib, + co.role.attrib, + local.co.attrib +# end of co.attlist + +# end of co.module +local.coref.attrib = empty +# COREF is a reference to a CO +coref.role.attrib = role.attrib +coref = element coref { coref.attlist, empty } +# end of coref.element + +# bug number/symbol override or initialization + +# to any related information +coref.attlist &= + label.attrib, + linkendreq.attrib, + common.attrib, + coref.role.attrib, + local.coref.attrib +# end of coref.attlist + +# end of coref.module +local.command.attrib = empty +command.role.attrib = role.attrib +command = element command { command.attlist, cptr.char.mix* } +# end of command.element +command.attlist &= + moreinfo.attrib, + common.attrib, + command.role.attrib, + local.command.attrib +# end of command.attlist + +# end of command.module +local.computeroutput.attrib = empty +computeroutput.role.attrib = role.attrib +computeroutput = + element computeroutput { + computeroutput.attlist, (cptr.char.mix | co)* + } +# end of computeroutput.element +computeroutput.attlist &= + moreinfo.attrib, + common.attrib, + computeroutput.role.attrib, + local.computeroutput.attrib +# end of computeroutput.attlist + +# end of computeroutput.module +local.database.attrib = empty +database.role.attrib = role.attrib +database = element database { database.attlist, cptr.char.mix* } +# end of database.element + +# Class: Type of database the element names; no default +database.attlist &= + attribute class { + "name" | "table" | "field" | "key1" | "key2" | "record" + }?, + moreinfo.attrib, + common.attrib, + database.role.attrib, + local.database.attrib +# end of database.attlist + +# end of database.module +local.email.attrib = empty +email.role.attrib = role.attrib +email = element email { email.attlist, docinfo.char.mix* } +# end of email.element +email.attlist &= common.attrib, email.role.attrib, local.email.attrib +# end of email.attlist + +# end of email.module +local.envar.attrib = empty +envar.role.attrib = role.attrib +envar = element envar { envar.attlist, smallcptr.char.mix* } +# end of envar.element +envar.attlist &= common.attrib, envar.role.attrib, local.envar.attrib +# end of envar.attlist + +# end of envar.module +local.errorcode.attrib = empty +errorcode.role.attrib = role.attrib +errorcode = element errorcode { errorcode.attlist, smallcptr.char.mix* } +# end of errorcode.element +errorcode.attlist &= + moreinfo.attrib, + common.attrib, + errorcode.role.attrib, + local.errorcode.attrib +# end of errorcode.attlist + +# end of errorcode.module +local.errorname.attrib = empty +errorname.role.attrib = role.attrib +errorname = element errorname { errorname.attlist, smallcptr.char.mix* } +# end of errorname.element +errorname.attlist &= + common.attrib, errorname.role.attrib, local.errorname.attrib +# end of errorname.attlist + +# end of errorname.module +local.errortext.attrib = empty +errortext.role.attrib = role.attrib +errortext = element errortext { errortext.attlist, smallcptr.char.mix* } +# end of errortext.element +errortext.attlist &= + common.attrib, errortext.role.attrib, local.errortext.attrib +# end of errortext.attlist + +# end of errortext.module +local.errortype.attrib = empty +errortype.role.attrib = role.attrib +errortype = element errortype { errortype.attlist, smallcptr.char.mix* } +# end of errortype.element +errortype.attlist &= + common.attrib, errortype.role.attrib, local.errortype.attrib +# end of errortype.attlist + +# end of errortype.module +local.filename.attrib = empty +filename.role.attrib = role.attrib +filename = element filename { filename.attlist, cptr.char.mix* } +# end of filename.element + +# Class: Type of filename the element names; no default + +# Path: Search path (possibly system-specific) in which +# file can be found +filename.attlist &= + attribute class { + "headerfile" + | "partition" + | "devicefile" + | "libraryfile" + | "directory" + | "extension" + | "symlink" + }?, + attribute path { text }?, + moreinfo.attrib, + common.attrib, + filename.role.attrib, + local.filename.attrib +# end of filename.attlist + +# end of filename.module +local.function.attrib = empty +function.role.attrib = role.attrib +function = element function { function.attlist, cptr.char.mix* } +# end of function.element +function.attlist &= + moreinfo.attrib, + common.attrib, + function.role.attrib, + local.function.attrib +# end of function.attlist + +# end of function.module +local.guibutton.attrib = empty +guibutton.role.attrib = role.attrib +guibutton = + element guibutton { guibutton.attlist, (smallcptr.char.mix | accel)* } +# end of guibutton.element +guibutton.attlist &= + moreinfo.attrib, + common.attrib, + guibutton.role.attrib, + local.guibutton.attrib +# end of guibutton.attlist + +# end of guibutton.module +local.guiicon.attrib = empty +guiicon.role.attrib = role.attrib +guiicon = + element guiicon { guiicon.attlist, (smallcptr.char.mix | accel)* } +# end of guiicon.element +guiicon.attlist &= + moreinfo.attrib, + common.attrib, + guiicon.role.attrib, + local.guiicon.attrib +# end of guiicon.attlist + +# end of guiicon.module +local.guilabel.attrib = empty +guilabel.role.attrib = role.attrib +guilabel = + element guilabel { guilabel.attlist, (smallcptr.char.mix | accel)* } +# end of guilabel.element +guilabel.attlist &= + moreinfo.attrib, + common.attrib, + guilabel.role.attrib, + local.guilabel.attrib +# end of guilabel.attlist + +# end of guilabel.module +local.guimenu.attrib = empty +guimenu.role.attrib = role.attrib +guimenu = + element guimenu { guimenu.attlist, (smallcptr.char.mix | accel)* } +# end of guimenu.element +guimenu.attlist &= + moreinfo.attrib, + common.attrib, + guimenu.role.attrib, + local.guimenu.attrib +# end of guimenu.attlist + +# end of guimenu.module +local.guimenuitem.attrib = empty +guimenuitem.role.attrib = role.attrib +guimenuitem = + element guimenuitem { + guimenuitem.attlist, (smallcptr.char.mix | accel)* + } +# end of guimenuitem.element +guimenuitem.attlist &= + moreinfo.attrib, + common.attrib, + guimenuitem.role.attrib, + local.guimenuitem.attrib +# end of guimenuitem.attlist + +# end of guimenuitem.module +local.guisubmenu.attrib = empty +guisubmenu.role.attrib = role.attrib +guisubmenu = + element guisubmenu { + guisubmenu.attlist, (smallcptr.char.mix | accel)* + } +# end of guisubmenu.element +guisubmenu.attlist &= + moreinfo.attrib, + common.attrib, + guisubmenu.role.attrib, + local.guisubmenu.attrib +# end of guisubmenu.attlist + +# end of guisubmenu.module +local.hardware.attrib = empty +hardware.role.attrib = role.attrib +hardware = element hardware { hardware.attlist, cptr.char.mix* } +# end of hardware.element +hardware.attlist &= + moreinfo.attrib, + common.attrib, + hardware.role.attrib, + local.hardware.attrib +# end of hardware.attlist + +# end of hardware.module +local.interface.attrib = empty +interface.role.attrib = role.attrib +interface = + element interface { interface.attlist, (smallcptr.char.mix | accel)* } +# end of interface.element + +# Class: Type of the Interface item; no default +interface.attlist &= + moreinfo.attrib, + common.attrib, + interface.role.attrib, + local.interface.attrib +# end of interface.attlist + +# end of interface.module +local.keycap.attrib = empty +keycap.role.attrib = role.attrib +keycap = element keycap { keycap.attlist, cptr.char.mix* } +# end of keycap.element +keycap.attlist &= + moreinfo.attrib, + common.attrib, + keycap.role.attrib, + local.keycap.attrib +# end of keycap.attlist + +# end of keycap.module +local.keycode.attrib = empty +keycode.role.attrib = role.attrib +keycode = element keycode { keycode.attlist, smallcptr.char.mix* } +# end of keycode.element +keycode.attlist &= + common.attrib, keycode.role.attrib, local.keycode.attrib +# end of keycode.attlist + +# end of keycode.module +local.keycombo.attrib = empty +keycombo.role.attrib = role.attrib +keycombo = + element keycombo { + keycombo.attlist, (keycap | keycombo | keysym | mousebutton)+ + } +# end of keycombo.element +keycombo.attlist &= + keyaction.attrib, + moreinfo.attrib, + common.attrib, + keycombo.role.attrib, + local.keycombo.attrib +# end of keycombo.attlist + +# end of keycombo.module +local.keysym.attrib = empty +keysysm.role.attrib = role.attrib +keysym = element keysym { keysym.attlist, smallcptr.char.mix* } +# end of keysym.element +keysym.attlist &= + common.attrib, keysysm.role.attrib, local.keysym.attrib +# end of keysym.attlist + +# end of keysym.module +local.lineannotation.attrib = empty +lineannotation.role.attrib = role.attrib +lineannotation = + element lineannotation { lineannotation.attlist, para.char.mix* } +# end of lineannotation.element +lineannotation.attlist &= + common.attrib, lineannotation.role.attrib, local.lineannotation.attrib +# end of lineannotation.attlist + +# end of lineannotation.module +local.literal.attrib = empty +literal.role.attrib = role.attrib +literal = element literal { literal.attlist, cptr.char.mix* } +# end of literal.element +literal.attlist &= + moreinfo.attrib, + common.attrib, + literal.role.attrib, + local.literal.attrib +# end of literal.attlist + +# end of literal.module +local.constant.attrib = empty +constant.role.attrib = role.attrib +constant = element constant { constant.attlist, smallcptr.char.mix* } +# end of constant.element +constant.attlist &= + attribute class { "limit" }?, + common.attrib, + constant.role.attrib, + local.constant.attrib +# end of constant.attlist + +# end of constant.module +local.varname.attrib = empty +varname.role.attrib = role.attrib +varname = element varname { varname.attlist, smallcptr.char.mix* } +# end of varname.element +varname.attlist &= + common.attrib, varname.role.attrib, local.varname.attrib +# end of varname.attlist + +# end of varname.module +local.markup.attrib = empty +markup.role.attrib = role.attrib +markup = element markup { markup.attlist, smallcptr.char.mix* } +# end of markup.element +markup.attlist &= common.attrib, markup.role.attrib, local.markup.attrib +# end of markup.attlist + +# end of markup.module +local.medialabel.attrib = empty +medialabel.role.attrib = role.attrib +medialabel = + element medialabel { medialabel.attlist, smallcptr.char.mix* } +# end of medialabel.element + +# Class: Type of medium named by the element; no default +medialabel.attlist &= + attribute class { "cartridge" | "cdrom" | "disk" | "tape" }?, + common.attrib, + medialabel.role.attrib, + local.medialabel.attrib +# end of medialabel.attlist + +# end of medialabel.module +local.menuchoice.attrib = empty +menuchoice.role.attrib = role.attrib +menuchoice = + element menuchoice { + menuchoice.attlist, + shortcut?, + (guibutton + | guiicon + | guilabel + | guimenu + | guimenuitem + | guisubmenu + | interface)+ + } +# end of menuchoice.element +menuchoice.attlist &= + moreinfo.attrib, + common.attrib, + menuchoice.role.attrib, + local.menuchoice.attrib +# end of menuchoice.attlist + +# end of menuchoice.module + +# See also KeyCombo +local.shortcut.attrib = empty +shortcut.role.attrib = role.attrib +shortcut = + element shortcut { + shortcut.attlist, (keycap | keycombo | keysym | mousebutton)+ + } +# end of shortcut.element +shortcut.attlist &= + keyaction.attrib, + moreinfo.attrib, + common.attrib, + shortcut.role.attrib, + local.shortcut.attrib +# end of shortcut.attlist + +# end of shortcut.module + +# end of menuchoice.content.module +local.mousebutton.attrib = empty +mousebutton.role.attrib = role.attrib +mousebutton = + element mousebutton { mousebutton.attlist, smallcptr.char.mix* } +# end of mousebutton.element +mousebutton.attlist &= + moreinfo.attrib, + common.attrib, + mousebutton.role.attrib, + local.mousebutton.attrib +# end of mousebutton.attlist + +# end of mousebutton.module +local.msgtext.attrib = empty +msgtext.role.attrib = role.attrib +msgtext = element msgtext { msgtext.attlist, component.mix+ } +# end of msgtext.element +msgtext.attlist &= + common.attrib, msgtext.role.attrib, local.msgtext.attrib +# end of msgtext.attlist + +# end of msgtext.module +local.option.attrib = empty +option.role.attrib = role.attrib +option = element option { option.attlist, cptr.char.mix* } +# end of option.element +option.attlist &= common.attrib, option.role.attrib, local.option.attrib +# end of option.attlist + +# end of option.module +local.optional.attrib = empty +optional.role.attrib = role.attrib +optional = element optional { optional.attlist, cptr.char.mix* } +# end of optional.element +optional.attlist &= + common.attrib, optional.role.attrib, local.optional.attrib +# end of optional.attlist + +# end of optional.module +local.parameter.attrib = empty +parameter.role.attrib = role.attrib +parameter = element parameter { parameter.attlist, cptr.char.mix* } +# end of parameter.element + +# Class: Type of the Parameter; no default +parameter.attlist &= + attribute class { "command" | "function" | "option" }?, + moreinfo.attrib, + common.attrib, + parameter.role.attrib, + local.parameter.attrib +# end of parameter.attlist + +# end of parameter.module +local.prompt.attrib = empty +prompt.role.attrib = role.attrib +prompt = element prompt { prompt.attlist, (smallcptr.char.mix | co)* } +# end of prompt.element +prompt.attlist &= + moreinfo.attrib, + common.attrib, + prompt.role.attrib, + local.prompt.attrib +# end of prompt.attlist + +# end of prompt.module +local.property.attrib = empty +property.role.attrib = role.attrib +property = element property { property.attlist, cptr.char.mix* } +# end of property.element +property.attlist &= + moreinfo.attrib, + common.attrib, + property.role.attrib, + local.property.attrib +# end of property.attlist + +# end of property.module +local.replaceable.attrib = empty +replaceable.role.attrib = role.attrib +replaceable = + element replaceable { + replaceable.attlist, + (text + | link.char.class + | optional + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | co)* + } +# end of replaceable.element + +# Class: Type of information the element represents; no +# default +replaceable.attlist &= + attribute class { "command" | "function" | "option" | "parameter" }?, + common.attrib, + replaceable.role.attrib, + local.replaceable.attrib +# end of replaceable.attlist + +# end of replaceable.module +local.returnvalue.attrib = empty +returnvalue.role.attrib = role.attrib +returnvalue = + element returnvalue { returnvalue.attlist, smallcptr.char.mix* } +# end of returnvalue.element +returnvalue.attlist &= + common.attrib, returnvalue.role.attrib, local.returnvalue.attrib +# end of returnvalue.attlist + +# end of returnvalue.module +local.sgmltag.attrib = empty +sgmltag.role.attrib = role.attrib +sgmltag = element sgmltag { sgmltag.attlist, smallcptr.char.mix* } +# end of sgmltag.element + +# Class: Type of SGML construct the element names; no default +sgmltag.attlist &= + attribute class { + "attribute" + | "attvalue" + | "element" + | "endtag" + | "emptytag" + | "genentity" + | "numcharref" + | "paramentity" + | "pi" + | "xmlpi" + | "starttag" + | "sgmlcomment" + }?, + common.attrib, + sgmltag.role.attrib, + local.sgmltag.attrib +# end of sgmltag.attlist + +# end of sgmltag.module +local.structfield.attrib = empty +structfield.role.attrib = role.attrib +structfield = + element structfield { structfield.attlist, smallcptr.char.mix* } +# end of structfield.element +structfield.attlist &= + common.attrib, structfield.role.attrib, local.structfield.attrib +# end of structfield.attlist + +# end of structfield.module +local.structname.attrib = empty +structname.role.attrib = role.attrib +structname = + element structname { structname.attlist, smallcptr.char.mix* } +# end of structname.element +structname.attlist &= + common.attrib, structname.role.attrib, local.structname.attrib +# end of structname.attlist + +# end of structname.module +local.symbol.attrib = empty +symbol.role.attrib = role.attrib +symbol = element symbol { symbol.attlist, smallcptr.char.mix* } +# end of symbol.element + +# Class: Type of symbol; no default +symbol.attlist &= + attribute class { "limit" }?, + common.attrib, + symbol.role.attrib, + local.symbol.attrib +# end of symbol.attlist + +# end of symbol.module +local.systemitem.attrib = empty +systemitem.role.attrib = role.attrib +systemitem = + element systemitem { + systemitem.attlist, (cptr.char.mix | acronym | co)* + } +# end of systemitem.element + +# Class: Type of system item the element names; no default +systemitem.attlist &= + attribute class { + "constant" + | "event" + | "eventhandler" + | "domainname" + | "fqdomainname" + | "ipaddress" + | "netmask" + | "etheraddress" + | "groupname" + | "library" + | "macro" + | "osname" + | "filesystem" + | "resource" + | "systemname" + | "username" + | "newsgroup" + }?, + moreinfo.attrib, + common.attrib, + systemitem.role.attrib, + local.systemitem.attrib +# end of systemitem.attlist + +# end of systemitem.module +local.token.attrib = empty +token.role.attrib = role.attrib +\token = element token { token.attlist, smallcptr.char.mix* } +# end of token.element +token.attlist &= common.attrib, token.role.attrib, local.token.attrib +# end of token.attlist + +# end of token.module +local.type.attrib = empty +type.role.attrib = role.attrib +type = element type { type.attlist, smallcptr.char.mix* } +# end of type.element +type.attlist &= common.attrib, type.role.attrib, local.type.attrib +# end of type.attlist + +# end of type.module +local.userinput.attrib = empty +userinput.role.attrib = role.attrib +userinput = + element userinput { userinput.attlist, (cptr.char.mix | co)* } +# end of userinput.element +userinput.attlist &= + moreinfo.attrib, + common.attrib, + userinput.role.attrib, + local.userinput.attrib +# end of userinput.attlist + +# end of userinput.module + +# General words and phrases ............................................ +local.abbrev.attrib = empty +abbrev.role.attrib = role.attrib +abbrev = element abbrev { abbrev.attlist, word.char.mix* } +# end of abbrev.element +abbrev.attlist &= common.attrib, abbrev.role.attrib, local.abbrev.attrib +# end of abbrev.attlist + +# end of abbrev.module +local.acronym.attrib = empty +acronym.role.attrib = role.attrib +acronym = element acronym { acronym.attlist, word.char.mix* } +# end of acronym.element +acronym.attlist &= + common.attrib, acronym.role.attrib, local.acronym.attrib +# end of acronym.attlist + +# end of acronym.module +local.citation.attrib = empty +citation.role.attrib = role.attrib +citation = element citation { citation.attlist, para.char.mix* } +# end of citation.element +citation.attlist &= + common.attrib, citation.role.attrib, local.citation.attrib +# end of citation.attlist + +# end of citation.module +local.citerefentry.attrib = empty +citerefentry.role.attrib = role.attrib +citerefentry = + element citerefentry { + citerefentry.attlist, refentrytitle, manvolnum? + } +# end of citerefentry.element +citerefentry.attlist &= + common.attrib, citerefentry.role.attrib, local.citerefentry.attrib +# end of citerefentry.attlist + +# end of citerefentry.module +local.refentrytitle.attrib = empty +refentrytitle.role.attrib = role.attrib +refentrytitle = + element refentrytitle { refentrytitle.attlist, para.char.mix* } +# end of refentrytitle.element +refentrytitle.attlist &= + common.attrib, refentrytitle.role.attrib, local.refentrytitle.attrib +# end of refentrytitle.attlist + +# end of refentrytitle.module +local.manvolnum.attrib = empty +namvolnum.role.attrib = role.attrib +manvolnum = element manvolnum { manvolnum.attlist, word.char.mix* } +# end of manvolnum.element +manvolnum.attlist &= + common.attrib, namvolnum.role.attrib, local.manvolnum.attrib +# end of manvolnum.attlist + +# end of manvolnum.module +local.citetitle.attrib = empty +citetitle.role.attrib = role.attrib +citetitle = element citetitle { citetitle.attlist, para.char.mix* } +# end of citetitle.element + +# Pubwork: Genre of published work cited; no default +citetitle.attlist &= + attribute pubwork { + "article" + | "book" + | "chapter" + | "part" + | "refentry" + | "section" + | "journal" + | "series" + | "set" + | "manuscript" + }?, + common.attrib, + citetitle.role.attrib, + local.citetitle.attrib +# end of citetitle.attlist + +# end of citetitle.module +local.emphasis.attrib = empty +emphasis.role.attrib = role.attrib +emphasis = element emphasis { emphasis.attlist, para.char.mix* } +# end of emphasis.element +emphasis.attlist &= + common.attrib, emphasis.role.attrib, local.emphasis.attrib +# end of emphasis.attlist + +# end of emphasis.module +local.firstterm.attrib = empty +firstterm.role.attrib = role.attrib +firstterm = element firstterm { firstterm.attlist, word.char.mix* } +# end of firstterm.element + +# to GlossEntry or other explanation +firstterm.attlist &= + linkend.attrib, + common.attrib, + firstterm.role.attrib, + local.firstterm.attrib +# end of firstterm.attlist + +# end of firstterm.module +local.foreignphrase.attrib = empty +foreignphrase.role.attrib = role.attrib +foreignphrase = + element foreignphrase { foreignphrase.attlist, para.char.mix* } +# end of foreignphrase.element +foreignphrase.attlist &= + common.attrib, foreignphrase.role.attrib, local.foreignphrase.attrib +# end of foreignphrase.attlist + +# end of foreignphrase.module +local.glossterm.attrib = empty +glossterm.role.attrib = role.attrib +glossterm = element glossterm { glossterm.attlist, para.char.mix* } +# end of glossterm.element + +# to GlossEntry if Glossterm used in text + +# BaseForm: Provides the form of GlossTerm to be used +# for indexing +glossterm.attlist &= + linkend.attrib, + attribute baseform { text }?, + common.attrib, + glossterm.role.attrib, + local.glossterm.attrib +# end of glossterm.attlist + +# end of glossterm.module +local.phrase.attrib = empty +phrase.role.attrib = role.attrib +phrase = element phrase { phrase.attlist, para.char.mix* } +# end of phrase.element +phrase.attlist &= common.attrib, phrase.role.attrib, local.phrase.attrib +# end of phrase.attlist + +# end of phrase.module +local.quote.attrib = empty +quote.role.attrib = role.attrib +quote = element quote { quote.attlist, para.char.mix* } +# end of quote.element +quote.attlist &= common.attrib, quote.role.attrib, local.quote.attrib +# end of quote.attlist + +# end of quote.module +local.ssscript.attrib = empty +ssscript.role.attrib = role.attrib +subscript = + element subscript { + subscript.attlist, + (text + | link.char.class + | emphasis + | replaceable + | symbol + | inlinegraphic + | inlinemediaobject + | base.char.class + | other.char.class)* + } +# end of subscript.element +subscript.attlist &= + common.attrib, ssscript.role.attrib, local.ssscript.attrib +# end of subscript.attlist +superscript = + element superscript { + superscript.attlist, + (text + | link.char.class + | emphasis + | replaceable + | symbol + | inlinegraphic + | inlinemediaobject + | base.char.class + | other.char.class)* + } +# end of superscript.element +superscript.attlist &= + common.attrib, ssscript.role.attrib, local.ssscript.attrib +# end of superscript.attlist + +# end of ssscript.module +local.trademark.attrib = empty +trademark.role.attrib = role.attrib +trademark = + element trademark { + trademark.attlist, + (text + | link.char.class + | tech.char.class + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | emphasis)* + } +# end of trademark.element + +# Class: More precisely identifies the item the element names +trademark.attlist &= + [ a:defaultValue = "trade" ] + attribute class { "service" | "trade" | "registered" | "copyright" }?, + common.attrib, + trademark.role.attrib, + local.trademark.attrib +# end of trademark.attlist + +# end of trademark.module +local.wordasword.attrib = empty +wordasword.role.attrib = role.attrib +wordasword = element wordasword { wordasword.attlist, word.char.mix* } +# end of wordasword.element +wordasword.attlist &= + common.attrib, wordasword.role.attrib, local.wordasword.attrib +# end of wordasword.attlist + +# end of wordasword.module + +# Links and cross-references ........................................... +local.link.attrib = empty +link.role.attrib = role.attrib +link = element link { link.attlist, para.char.mix* } +# end of link.element + +# Endterm: ID of element containing text that is to be +# fetched from elsewhere in the document to appear as +# the content of this element + +# to linked-to object + +# Type: Freely assignable parameter +link.attlist &= + attribute endterm { xsd:IDREF }?, + linkendreq.attrib, + attribute type { text }?, + common.attrib, + link.role.attrib, + local.link.attrib +# end of link.attlist + +# end of link.module +local.olink.attrib = empty +olink.role.attrib = role.attrib +olink = element olink { olink.attlist, para.char.mix* } +# end of olink.element + +# TargetDocEnt: Name of an entity to be the target of the link + +# LinkMode: ID of a ModeSpec containing instructions for +# operating on the entity named by TargetDocEnt + +# LocalInfo: Information that may be passed to ModeSpec + +# Type: Freely assignable parameter +olink.attlist &= + attribute targetdocent { xsd:ENTITY }?, + attribute linkmode { xsd:IDREF }?, + attribute localinfo { text }?, + attribute type { text }?, + attribute targetdoc { text }?, + attribute targetptr { text }?, + common.attrib, + olink.role.attrib, + local.olink.attrib +# end of olink.attlist + +# end of olink.module +local.ulink.attrib = empty +ulink.role.attrib = role.attrib +ulink = element ulink { ulink.attlist, para.char.mix* } +# end of ulink.element + +# URL: uniform resource locator; the target of the ULink + +# Type: Freely assignable parameter +ulink.attlist &= + attribute url { text }, + attribute type { text }?, + common.attrib, + ulink.role.attrib, + local.ulink.attrib +# end of ulink.attlist + +# end of ulink.module +local.footnoteref.attrib = empty +footnoteref.role.attrib = role.attrib +footnoteref = element footnoteref { footnoteref.attlist, empty } +# end of footnoteref.element + +# to footnote content supplied elsewhere +footnoteref.attlist &= + linkendreq.attrib, + label.attrib, + common.attrib, + footnoteref.role.attrib, + local.footnoteref.attrib +# end of footnoteref.attlist + +# end of footnoteref.module +local.xref.attrib = empty +xref.role.attrib = role.attrib +xref = element xref { xref.attlist, empty } +# end of xref.element + +# Endterm: ID of element containing text that is to be +# fetched from elsewhere in the document to appear as +# the content of this element + +# to linked-to object +xref.attlist &= + attribute endterm { xsd:IDREF }?, + linkendreq.attrib, + common.attrib, + xref.role.attrib, + local.xref.attrib +# end of xref.attlist + +# end of xref.module + +# Ubiquitous elements .................................................. +local.anchor.attrib = empty +anchor.role.attrib = role.attrib +anchor = element anchor { anchor.attlist, empty } +# end of anchor.element + +# required + +# replaces Lang +anchor.attlist &= + idreq.attrib, + pagenum.attrib, + remap.attrib, + xreflabel.attrib, + revisionflag.attrib, + effectivity.attrib, + anchor.role.attrib, + local.anchor.attrib +# end of anchor.attlist + +# end of anchor.module +local.beginpage.attrib = empty +beginpage.role.attrib = role.attrib +beginpage = element beginpage { beginpage.attlist, empty } +# end of beginpage.element + +# PageNum: Number of page that begins at this point +beginpage.attlist &= + pagenum.attrib, + common.attrib, + beginpage.role.attrib, + local.beginpage.attrib +# end of beginpage.attlist + +# end of beginpage.module + +# IndexTerms appear in the text flow for generating or linking an +# index. +local.indexterm.attrib = empty +indexterm.role.attrib = role.attrib +indexterm = + element indexterm { + indexterm.attlist, + primary?, + ((secondary, + ((tertiary, (see | seealso+)?) + | see + | seealso+)?) + | see + | seealso+)? + } +# end of indexterm.element + +# Scope: Indicates which generated indices the IndexTerm +# should appear in: Global (whole document set), Local (this +# document only), or All (both) + +# Significance: Whether this IndexTerm is the most pertinent +# of its series (Preferred) or not (Normal, the default) + +# Class: Indicates type of IndexTerm; default is Singular, +# or EndOfRange if StartRef is supplied; StartOfRange value +# must be supplied explicitly on starts of ranges + +# StartRef: ID of the IndexTerm that starts the indexing +# range ended by this IndexTerm + +# Zone: IDs of the elements to which the IndexTerm applies, +# and indicates that the IndexTerm applies to those entire +# elements rather than the point at which the IndexTerm +# occurs +indexterm.attlist &= + pagenum.attrib, + attribute scope { "all" | "global" | "local" }?, + [ a:defaultValue = "normal" ] + attribute significance { "preferred" | "normal" }?, + attribute class { "singular" | "startofrange" | "endofrange" }?, + attribute startref { xsd:IDREF }?, + attribute zone { xsd:IDREFS }?, + common.attrib, + indexterm.role.attrib, + local.indexterm.attrib +# end of indexterm.attlist + +# end of indexterm.module +local.primsecter.attrib = empty +primsecter.role.attrib = role.attrib +primary = element primary { primary.attlist, ndxterm.char.mix* } +# end of primary.element + +# SortAs: Alternate sort string for index sorting, e.g., +# "fourteen" for an element containing "14" +primary.attlist &= + attribute sortas { text }?, + common.attrib, + primsecter.role.attrib, + local.primsecter.attrib +# end of primary.attlist +secondary = element secondary { secondary.attlist, ndxterm.char.mix* } +# end of secondary.element + +# SortAs: Alternate sort string for index sorting, e.g., +# "fourteen" for an element containing "14" +secondary.attlist &= + attribute sortas { text }?, + common.attrib, + primsecter.role.attrib, + local.primsecter.attrib +# end of secondary.attlist +tertiary = element tertiary { tertiary.attlist, ndxterm.char.mix* } +# end of tertiary.element + +# SortAs: Alternate sort string for index sorting, e.g., +# "fourteen" for an element containing "14" +tertiary.attlist &= + attribute sortas { text }?, + common.attrib, + primsecter.role.attrib, + local.primsecter.attrib +# end of tertiary.attlist + +# end of primsecter.module +local.seeseealso.attrib = empty +seeseealso.role.attrib = role.attrib +see = element see { see.attlist, ndxterm.char.mix* } +# end of see.element +see.attlist &= + common.attrib, seeseealso.role.attrib, local.seeseealso.attrib +# end of see.attlist +seealso = element seealso { seealso.attlist, ndxterm.char.mix* } +# end of seealso.element +seealso.attlist &= + common.attrib, seeseealso.role.attrib, local.seeseealso.attrib +# end of seealso.attlist + +# end of seeseealso.module + +# end of indexterm.content.module + +# End of DocBook XML information pool module V4.2 ...................... + +# ...................................................................... diff --git a/etc/schema/dbsoextbl.rnc b/etc/schema/dbsoextbl.rnc new file mode 100644 index 00000000000..a547586ca17 --- /dev/null +++ b/etc/schema/dbsoextbl.rnc @@ -0,0 +1,30 @@ +# Definitions specific to the OASIS XML Exchange Table Model. + +# Reference OASIS Exchange Table Model +include "soextbl.rnc" { + # Override definition of start + start |= notAllowed + # Add common attributes and the Label attribute to Table and + # InformalTable. + bodyatt = common.attrib, label.attrib, tables.role.attrib + # Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry + tbl.tgroup.att = common.attrib + tbl.colspec.att = common.attrib + tbl.tbody.att = common.attrib + tbl.thead.att = common.attrib + tbl.row.att = common.attrib + tbl.entry.att = common.attrib + # Content model for Table. + tbl.table.mdl = + blockinfo?, + formalobject.title.content, + ndxterm.class*, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = (para.char.mix | tabentry.mix)* +} + +common.table.attribs = bodyatt + +# end of table.module diff --git a/etc/schema/dbstart.rnc b/etc/schema/dbstart.rnc new file mode 100644 index 00000000000..284f9b5b5a5 --- /dev/null +++ b/etc/schema/dbstart.rnc @@ -0,0 +1,23 @@ +# This choice of root elements comes from the 1.0b1 RNG schema at +# http://www.oasis-open.org/docbook/relaxng/1.0b1/index.shtml + +start = + set + | setindex + | book + | part + | reference + | preface + | chapter + | appendix + | article + | bibliography + | glossary + | index + | refentry + | sect1 + | sect2 + | sect3 + | sect4 + | sect5 + | section diff --git a/etc/schema/docbook-dyntbl.rnc b/etc/schema/docbook-dyntbl.rnc new file mode 100644 index 00000000000..9bb997ff734 --- /dev/null +++ b/etc/schema/docbook-dyntbl.rnc @@ -0,0 +1,18 @@ +# Variant of docbook.rnc that allows the table model to be selected +# dynamically based on the definitions of cals.table.module and +# exchange.table.module. See dbdyntbl.rnc. + +# Document (root) elements +include "dbstart.rnc" + +# Notation declarations +include "dbnotn.rnc" + +# Information pool +include "dbpool.rnc" + +# Dynamic Table Model +include "dbdyntbl.rnc" + +# Document hierarchy +include "dbhier.rnc" diff --git a/etc/schema/docbook-soextbl.rnc b/etc/schema/docbook-soextbl.rnc new file mode 100644 index 00000000000..945a6219dba --- /dev/null +++ b/etc/schema/docbook-soextbl.rnc @@ -0,0 +1,17 @@ +# Variant of docbook.rnc that uses the OASIS XML Exchange Table Model +# rather than the CALS Table Model. + +# Document (root) elements +include "dbstart.rnc" + +# Notation declarations +include "dbnotn.rnc" + +# Information pool +include "dbpool.rnc" + +# OASIS XML Exchange Table Model +include "dbsoextbl.rnc" + +# Document hierarchy +include "dbhier.rnc" diff --git a/etc/schema/docbook.rnc b/etc/schema/docbook.rnc new file mode 100644 index 00000000000..d10f614b286 --- /dev/null +++ b/etc/schema/docbook.rnc @@ -0,0 +1,48 @@ +# Unofficial DocBook RELAX NG Compact Syntax schema + +# This file was generated automatically by Trang +# (http://www.thaiopensource.com/relaxng/trang.html) from the DocBook +# XML DTD V4.2 (http://www.oasis-open.org/docbook/xml/4.2/), then +# changing the definition of start, changing the filenames, +# editing the comments and adding includes of dbstart.rnc +# and dbcalstbl.rnc. + +# The following copyright applies to the DocBook XML DTD V4.2. + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# Permission to use, copy, modify and distribute the DocBook XML DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# Document (root) elements +include "dbstart.rnc" + +# Notation declarations +include "dbnotn.rnc" + +# Information pool +include "dbpool.rnc" + +# CALS Table Model +include "dbcalstbl.rnc" + +# Document hierarchy +include "dbhier.rnc" diff --git a/etc/schema/locate.rnc b/etc/schema/locate.rnc new file mode 100644 index 00000000000..89230adf9c0 --- /dev/null +++ b/etc/schema/locate.rnc @@ -0,0 +1,200 @@ +default namespace this = "http://thaiopensource.com/ns/locating-rules/1.0" +namespace local = "" + +start = locatingRules + +locatingRules = element locatingRules { common, rule* } + +rule = + \include + # | group + | applyFollowingRules + | documentElement + # | doctypePublicId + | \namespace + | uri + | transformURI + # | typeIdProcessingInstruction + | \default + | typeId + # | typeIdBase + | extensionRule + +## Group of rules. Useful with xml:base. +group = element group { common, rule* } + +\include = + element include { + common, + attribute rules { xsd:anyURI } + } + +applyFollowingRules = + element applyFollowingRules { + common, + attribute ruleType { + "documentElement" + | "doctypePublicId" + | "namespace" + | "uri" + | "transformURI" + | "typeIdProcessingInstruction" + | "default" + } + } + +documentElement = + ## Matches if the prefix and/or local name of document element + ## match the values of the prefix and localName attributes. + element documentElement { + common, + nameAtts, + targetAtt + } + +## If there's no prefix attribute, then only the local name must match. +## If there's no local name attribute, then only the prefix must match. +nameAtts = (prefixAtt, localNameAtt?) | localNameAtt + +## prefix="" matches if the document element has no prefix. +prefixAtt = attribute prefix { (xsd:NCName - "xmlns") | "" } +localNameAtt = attribute localName { xsd:NCName - "xmlns" } + +doctypePublicId = + ## Matches if the document has a DOCTYPE declaration with a public + ## identifier that, after normalization, matches the value of the + ## publicId attribute. + element doctypePublicId { + common, + attribute publicId { publicIdValue }, + targetAtt + } + +publicIdValue = + xsd:token { + ## Newline and tab are excluded, because pattern applies to + ## the post-normalization value. + pattern = "[\-'()+,./:=?;!*#@$_%a-zA-Z0-9 ]*" + } + +# This is separate from documentElement so it can be distinguished +# by applyFollowingRules. +\namespace = + ## Matches if the document element has a namespace URI equal to the value + ## of the ns attribute. A document element with no namespace matches if + ## the value of the ns attribute is the empty string. + element namespace { + common, + attribute ns { xsd:string }, + targetAtt + } + +uri = + ## Matches based on the URI of the document. + element uri { + common, + (resourceAtt | patternAtt), + targetAtt + } + +## Matches if it can be determined that the document resource is +## the same resource as that identified by the value of the resource +## attribute. In determining this, the implementation should apply +## the semantics of the URI scheme used by the URI. +resourceAtt = attribute resource { xsd:anyURI } + +## Matches if the document's URI matches the pattern specified +## by the pattern attribute. A * in the path component matches +## zero or more characters other than / (after resolving escapes). +## If the pattern is a relative URI, it means that there must +## be some URI such that when the pattern is resolved relative +## to that URI, it matches the document's URI. Thus an empty +## pattern will always match. +patternAtt = attribute pattern { uriPattern } + +## A pattern for a URI. Same syntax as a URI, except that a * in +## the path component has a special meaning. +uriPattern = xsd:anyURI + +transformURI = + ## Generates a URI for the related resource by transforming + ## the URI of the document. Matches if the transformation + ## yields a valid URI that identifies an existing resource. + element transformURI { + common, + ## Semantics are the same as the pattern attribute of the uri element. + attribute fromPattern { uriPattern }, + ## The result of the transformation is produced from the toPattern + ## by replacing each * by the string that matched the corresponding + ## * in the toPattern. The toPattern is appended to the initial + ## part of the document's URI that was not explicitly matched + ## by fromPattern. + attribute toPattern { uriPattern } + } + +\default = + ## Always matches. + element default { + common, + targetAtt + } + +## A document can be mapped onto a URI either indirectly via a typeId +## or directly. +targetAtt = uriAtt | typeIdAtt + +## Specifies the URI of the related resource. +## xml:base is used if it's relative. +uriAtt = attribute uri { xsd:anyURI } + +## Specifies an identifier of the type of document. typeId and +## typeIdBase rules will be used to map this to a URI. +typeIdAtt = attribute typeId { typeIdValue } + +## A type identifier can be anything convenient (e.g. a public identifier, +## a URL or just a string with no formal structure). Whitespace is +## normalized like a public identifier before comparing type identifiers +## for equality. +typeIdValue = xsd:token + +typeIdProcessingInstruction = + ## Matches if there's a processing instruction in the prolog + ## before any DOCTYPE declaration whose target is the value of + ## the target attribute. The value of the processing instruction + ## is interpreted as a typeId, which will be mapped to a + ## URI as normal. + element typeIdProcessingInstruction { + common, + attribute target { xsd:NCName } + } + +typeId = + ## Maps a typeId onto a URI. + element typeId { + common, + attribute id { typeIdValue }, + targetAtt + } + +typeIdBase = + ## Used to map a typeId onto a URI. First, any URI reserved characters + ## are URI encoded. If the append attribute is specified, it is appended. + ## This is then treated as a URI. If relative, it is resolved using + ## the applicable base URI as usual. If the resulting URI identifies + ## an existing resource, then the typeId is mapped to this resource. + ## This is intended to be useful with file URIs. + element typeIdBase { + common, + attribute append { xsd:string }? + } + +extensionRule = + element * - this:* { + attribute * { text }*, (text|anyElement)* + } + +anyElement = element * { attribute * { text }*, (text|anyElement)* } + +common = + # attribute xml:base { xsd:anyURI }?, + attribute * - (xml:base|this:*|local:*) { text }* diff --git a/etc/schema/rdfxml.rnc b/etc/schema/rdfxml.rnc new file mode 100644 index 00000000000..9730322cfdd --- /dev/null +++ b/etc/schema/rdfxml.rnc @@ -0,0 +1,205 @@ +# +# RELAX NG Compact Schema for RDF/XML Syntax +# +# This schema is for information only and NON-NORMATIVE +# +# It is based on one originally written by James Clark in +# http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html +# and updated with later changes. +# + +namespace local = "" +namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" +datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" + + +start = doc + + +# I cannot seem to do this in RNGC so they are expanded in-line + +# coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype +# syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li +# oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID +# nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms ) +# propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms ) +# propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms ) + +# Also needed to allow rdf:li on all property element productions +# since we can't capture the rdf:li rewriting to rdf_ in relaxng + +# Need to add these explicitly +xmllang = attribute xml:lang { text } +xmlbase = attribute xml:base { text } +# and to forbid every other xml:* attribute, element + +doc = + RDF + +RDF = + element rdf:RDF { + xmllang?, xmlbase?, nodeElementList +} + +nodeElementList = + nodeElement* + + # Should be something like: + # ws* , ( nodeElement , ws* )* + # but RELAXNG does this by default, ignoring whitespace separating tags. + +nodeElement = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | + rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) { + (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList + } + + # It is not possible to say "and not things + # beginning with _ in the rdf: namespace" in RELAX NG. + +ws = + " " + + # Not used in this RELAX NG schema; but should be any legal XML + # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S + + +propertyEltList = + propertyElt* + + # Should be something like: + # ws* , ( propertyElt , ws* )* + # but RELAXNG does this by default, ignoring whitespace separating tags. + +propertyElt = + resourcePropertyElt | + literalPropertyElt | + parseTypeLiteralPropertyElt | + parseTypeResourcePropertyElt | + parseTypeCollectionPropertyElt | + parseTypeOtherPropertyElt | + emptyPropertyElt + +resourcePropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, xmllang?, xmlbase?, nodeElement + } + +literalPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + (idAttr | datatypeAttr )?, xmllang?, xmlbase?, text + } + +parseTypeLiteralPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, parseLiteral, xmllang?, xmlbase?, literal + } + +parseTypeResourcePropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList + } + +parseTypeCollectionPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList + } + +parseTypeOtherPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, xmllang?, xmlbase?, parseOther, any + } + +emptyPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, (resourceAttr | nodeIdAttr)?, xmllang?, xmlbase?, propertyAttr* + } + +idAttr = + attribute rdf:ID { + IDsymbol + } + +nodeIdAttr = + attribute rdf:nodeID { + IDsymbol + } + +aboutAttr = + attribute rdf:about { + URI-reference + } + +propertyAttr = + attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | + rdf:Description | rdf:aboutEach | + rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + string + } + +resourceAttr = + attribute rdf:resource { + URI-reference + } + +datatypeAttr = + attribute rdf:datatype { + URI-reference + } + +parseLiteral = + attribute rdf:parseType { + "Literal" + } + +parseResource = + attribute rdf:parseType { + "Resource" + } + +parseCollection = + attribute rdf:parseType { + "Collection" + } + +parseOther = + attribute rdf:parseType { + text + } + +URI-reference = + string + +literal = + any + +IDsymbol = + xsd:NMTOKEN + +any = + mixed { element * { attribute * { text }*, any }* } + diff --git a/etc/schema/relaxng.rnc b/etc/schema/relaxng.rnc new file mode 100644 index 00000000000..08686ac5598 --- /dev/null +++ b/etc/schema/relaxng.rnc @@ -0,0 +1,63 @@ +# RELAX NG XML syntax expressed in RELAX NG Compact syntax. + +default namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace local = "" +datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" + +start = pattern + +pattern = + element element { (nameQName | nameClass), (common & pattern+) } + | element attribute { (nameQName | nameClass), (common & pattern?) } + | element group|interleave|choice|optional + |zeroOrMore|oneOrMore|list|mixed { common & pattern+ } + | element ref|parentRef { nameNCName, common } + | element empty|notAllowed|text { common } + | element data { type, param*, (common & exceptPattern?) } + | element value { commonAttributes, type?, xsd:string } + | element externalRef { href, common } + | element grammar { common & grammarContent* } + +param = element param { commonAttributes, nameNCName, xsd:string } + +exceptPattern = element except { common & pattern+ } + +grammarContent = + definition + | element div { common & grammarContent* } + | element include { href, (common & includeContent*) } + +includeContent = + definition + | element div { common & includeContent* } + +definition = + element start { combine?, (common & pattern+) } + | element define { nameNCName, combine?, (common & pattern+) } + +combine = attribute combine { "choice" | "interleave" } + +nameClass = + element name { commonAttributes, xsd:QName } + | element anyName { common & exceptNameClass? } + | element nsName { common & exceptNameClass? } + | element choice { common & nameClass+ } + +exceptNameClass = element except { common & nameClass+ } + +nameQName = attribute name { xsd:QName } +nameNCName = attribute name { xsd:NCName } +href = attribute href { xsd:anyURI } +type = attribute type { xsd:NCName } + +common = commonAttributes, foreignElement* + +commonAttributes = + attribute ns { xsd:string }?, + attribute datatypeLibrary { xsd:anyURI }?, + foreignAttribute* + +foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* } +foreignAttribute = attribute * - (rng:*|local:*) { text } +anyElement = element * { (anyAttribute | text | anyElement)* } +anyAttribute = attribute * { text } diff --git a/etc/schema/schemas.xml b/etc/schema/schemas.xml new file mode 100644 index 00000000000..1eef7639540 --- /dev/null +++ b/etc/schema/schemas.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/etc/schema/soextbl.rnc b/etc/schema/soextbl.rnc new file mode 100644 index 00000000000..2e69127b4a2 --- /dev/null +++ b/etc/schema/soextbl.rnc @@ -0,0 +1,260 @@ +# XML EXCHANGE TABLE MODEL DECLARATION MODULE + +# This set of declarations defines the XML version of the Exchange +# Table Model as of the date shown in the Formal Public Identifier +# (FPI) for this entity. +# +# This set of declarations may be referred to using a public external +# entity declaration and reference as shown in the following three +# lines: +# +# +# %calstblx; +# +# If various parameter entities used within this set of declarations +# are to be given non-default values, the appropriate declarations +# should be given before calling in this package (i.e., before the +# "%calstblx;" reference). + +# The motivation for this XML version of the Exchange Table Model +# is simply to create an XML version of the SGML Exchange Table +# Model. By design, no effort has been made to "improve" the model. +# +# This XML version incorporates the logical bare minimum changes +# necessary to make the Exchange Table Model a valid XML DTD. + +# The XML version of the Exchange Table Model differs from +# the SGML version in the following ways: +# +# The following parameter entities have been removed: +# +# - tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep +# There are no exceptions in XML. The following normative statement +# is made in lieu of exceptions: the exchange table model explicitly +# forbids a table from occurring within another table. If the +# content model of an entry includes a table element, then this +# cannot be enforced by the DTD, but it is a deviation from the +# exchange table model to include a table within a table. +# +# - tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att +# The motivation for these elements was to change the table +# header/footer elements. Since XML does not allow element declarations +# to contain name groups, and the exchange table model does not +# allow a table to contain footers, the continued presence of these +# attributes seems unnecessary. +# +# The following parameter entity has been added: +# +# - tbl.thead.att +# This entity parameterizes the attributes on thead. It replaces +# the tbl.hdft.att parameter entity. +# +# Other miscellaneous changes: +# +# - Tag ommission indicators have been removed +# - Comments have been removed from declarations +# - NUMBER attributes have been changed to NMTOKEN +# - NUTOKEN attributes have been to changed to NMTOKEN +# - Removed the grouping characters around the content model +# parameter entry for the 'entry' element. This is necessary +# so that an entry can contain #PCDATA and be defined as an +# optional, repeatable OR group beginning with #PCDATA. + +# This entity includes a set of element and attribute declarations +# that partially defines the Exchange table model. However, the model +# is not well-defined without the accompanying natural language +# description of the semantics (meanings) of these various elements, +# attributes, and attribute values. The semantic writeup, also available +# from SGML Open, should be used in conjunction with this entity. + +# In order to use the Exchange table model, various parameter entity +# declarations are required. A brief description is as follows: +# +# ENTITY NAME WHERE USED WHAT IT IS +# +# %yesorno In ATTLIST of: An attribute declared value +# almost all elements for a "boolean" attribute +# +# %paracon In content model of: The "text" (logical content) +# of the model group for +# +# %titles In content model of: The "title" part of the model +# table element group for the table element +# +# %tbl.table.name In declaration of: The name of the "table" +# table element element +# +# %tbl.table-titles.mdl In content model of: The model group for the title +# table elements part of the content model for +# table element +# +# %tbl.table.mdl In content model of: The model group for the content +# table elements model for table element, +# often (and by default) defined +# in terms of %tbl.table-titles.mdl +# and tgroup +# +# %tbl.table.att In ATTLIST of: Additional attributes on the +# table element table element +# +# %bodyatt In ATTLIST of: Additional attributes on the +# table element table element (for backward +# compatibility with the SGML +# model) +# +# %tbl.tgroup.mdl In content model of: The model group for the content +# model for +# +# %tbl.tgroup.att In ATTLIST of: Additional attributes on the +# element +# +# %tbl.thead.att In ATTLIST of: Additional attributes on the +# element +# +# %tbl.tbody.att In ATTLIST of: Additional attributes on the +# element +# +# %tbl.colspec.att In ATTLIST of: Additional attributes on the +# element +# +# %tbl.row.mdl In content model of: The model group for the content +# model for +# +# %tbl.row.att In ATTLIST of: Additional attributes on the +# element +# +# %tbl.entry.mdl In content model of: The model group for the content +# model for +# +# %tbl.entry.att In ATTLIST of: Additional attributes on the +# element +# +# This set of declarations will use the default definitions shown below +# for any of these parameter entities that are not declared before this +# set of declarations is referenced. + +# These definitions are not directly related to the table model, but are +# used in the default CALS table model and may be defined elsewhere (and +# prior to the inclusion of this table module) in the referencing DTD. + +yesorno = xsd:NMTOKEN +# no if zero(s), yes if any other value +pcd = text +paracon = pcd +# default for use in entry content + +# The parameter entities as defined below change and simplify the CALS table +# model as published (as part of the Example DTD) in MIL-HDBK-28001. The +# resulting simplified DTD has support from the SGML Open vendors and is +# therefore more interoperable among different systems. +# +# These following declarations provide the Exchange default definitions +# for these entities. However, these entities can be redefined (by giving +# the appropriate parameter entity declaration(s) prior to the reference +# to this Table Model declaration set entity) to fit the needs of the +# current application. +# +# Note, however, that changes may have significant effect on the ability to +# interchange table information. These changes may manifest themselves +# in useability, presentation, and possible structure information degradation. +tbl.table-titles.mdl = title +tbl.table-main.mdl = tgroup+ +tbl.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl +tbl.table.att = attribute pgwide { yesorno }? +bodyatt = empty +tbl.tgroup.mdl = colspec*, thead?, tbody +tbl.tgroup.att = empty +tbl.thead.att = empty +tbl.tbody.att = empty +tbl.colspec.att = empty +tbl.row.mdl = entry+ +tbl.row.att = empty +tbl.entry.mdl = paracon* +tbl.entry.att = empty +# ===== Element and attribute declarations follow. ===== + +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.table.name "table" +# ENTITY % tbl.table-titles.mdl "%titles;," +# ENTITY % tbl.table.mdl "%tbl.table-titles; tgroup+" +# ENTITY % tbl.table.att " +# pgwide %yesorno; #IMPLIED " +table = element table { table.attlist, tbl.table.mdl } +table.attlist &= + attribute frame { + "top" | "bottom" | "topbot" | "all" | "sides" | "none" + }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + tbl.table.att, + bodyatt +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody" +# ENTITY % tbl.tgroup.att "" +tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl } +tgroup.attlist &= + attribute cols { xsd:NMTOKEN }, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + tbl.tgroup.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.colspec.att "" +colspec = element colspec { colspec.attlist, empty } +colspec.attlist &= + attribute colnum { xsd:NMTOKEN }?, + attribute colname { xsd:NMTOKEN }?, + attribute colwidth { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { xsd:NMTOKEN }?, + tbl.colspec.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.thead.att "" +thead = element thead { thead.attlist, row+ } +thead.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + tbl.thead.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.tbody.att "" +tbody = element tbody { tbody.attlist, row+ } +tbody.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + tbl.tbody.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.row.mdl "entry+" +# ENTITY % tbl.row.att "" +row = element row { row.attlist, tbl.row.mdl } +row.attlist &= + attribute rowsep { yesorno }?, + attribute valign { "top" | "middle" | "bottom" }?, + tbl.row.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % paracon "#PCDATA" +# ENTITY % tbl.entry.mdl "(%paracon;)*" +# ENTITY % tbl.entry.att "" +entry = element entry { entry.attlist, tbl.entry.mdl } +entry.attlist &= + attribute colname { xsd:NMTOKEN }?, + attribute namest { xsd:NMTOKEN }?, + attribute nameend { xsd:NMTOKEN }?, + attribute morerows { xsd:NMTOKEN }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { xsd:NMTOKEN }?, + attribute valign { "top" | "middle" | "bottom" }?, + tbl.entry.att +title |= notAllowed +start = table diff --git a/etc/schema/xhtml-applet.rnc b/etc/schema/xhtml-applet.rnc new file mode 100644 index 00000000000..115f1cbda7d --- /dev/null +++ b/etc/schema/xhtml-applet.rnc @@ -0,0 +1,19 @@ +# Applet Module + +applet = + element applet { + applet.attlist, + # No restrictions on mixed content in TREX. + param*, + Flow.model + } +applet.attlist = + Core.attrib, + attribute alt { Text.datatype }, + attribute archive { text }?, + attribute code { text }?, + attribute codebase { URI.datatype }?, + attribute object { text }?, + attribute height { Length.datatype }, + attribute width { Length.datatype } +Inline.class |= applet diff --git a/etc/schema/xhtml-attribs.rnc b/etc/schema/xhtml-attribs.rnc new file mode 100644 index 00000000000..ef653c70dbb --- /dev/null +++ b/etc/schema/xhtml-attribs.rnc @@ -0,0 +1,14 @@ +# Common Attributes Module + +id.attrib = attribute id { ID.datatype }? +class.attrib = attribute class { NMTOKENS.datatype }? +title.attrib = attribute title { Text.datatype }? +Core.attrib = id.attrib, class.attrib, title.attrib +lang.attrib = attribute xml:lang { LanguageCode.datatype }? +I18n.attrib = lang.attrib +Common.attrib = Core.attrib, I18n.attrib +CommonIdRequired.attrib = + attribute id { ID.datatype }, + class.attrib, + title.attrib, + I18n.attrib diff --git a/etc/schema/xhtml-base.rnc b/etc/schema/xhtml-base.rnc new file mode 100644 index 00000000000..154dfce1c5a --- /dev/null +++ b/etc/schema/xhtml-base.rnc @@ -0,0 +1,5 @@ +# Base Module + +base = element base { base.attlist } +base.attlist = attribute href { URI.datatype } +head.content &= base? diff --git a/etc/schema/xhtml-basic-form.rnc b/etc/schema/xhtml-basic-form.rnc new file mode 100644 index 00000000000..c0a78a1d72e --- /dev/null +++ b/etc/schema/xhtml-basic-form.rnc @@ -0,0 +1,63 @@ +# Simplified Forms Module + +form = + element form { + form.attlist, + # Don't use Block.model, because this gets redefined by the + # legacy module. + Block.class+ + } +form.attlist = + Common.attrib, + attribute action { URI.datatype }, + attribute method { "get" | "post" }?, + attribute enctype { ContentType.datatype }? +label = element label { label.attlist, Inline.model } +label.attlist = + Common.attrib, + attribute for { IDREF.datatype }?, + attribute accesskey { Character.datatype }? +input = element input { input.attlist } +input.attlist = + Common.attrib, + attribute type { InputType.class }?, + attribute name { text }?, + attribute value { text }?, + attribute checked { "checked" }?, + attribute size { text }?, + attribute maxlength { Number.datatype }?, + attribute src { URI.datatype }?, + attribute accesskey { Character.datatype }? +InputType.class = + "text" + | "password" + | "checkbox" + | "radio" + | "submit" + | "reset" + | "hidden" +select = element select { select.attlist, option+ } +select.attlist = + Common.attrib, + attribute name { text }?, + attribute size { Number.datatype }?, + attribute multiple { "multiple" }? +option = + element option { + Common.attrib, + attribute selected { "selected" }?, + attribute value { text }?, + text + } +textarea = element textarea { textarea.attlist } +textarea.attlist = + Common.attrib, + attribute name { text }?, + attribute rows { Number.datatype }, + attribute cols { Number.datatype }, + attribute accesskey { Character.datatype }?, + text +Form.class = form +Formctrl.class = input | label | select | textarea +Block.class |= Form.class +Inline.class |= Formctrl.class diff --git a/etc/schema/xhtml-basic-table.rnc b/etc/schema/xhtml-basic-table.rnc new file mode 100644 index 00000000000..97e10a56743 --- /dev/null +++ b/etc/schema/xhtml-basic-table.rnc @@ -0,0 +1,28 @@ +# Basic Tables Module + +table = element table { table.attlist, caption?, tr+ } +table.attlist = + Common.attrib, + attribute summary { Text.datatype }? +caption = element caption { caption.attlist, Inline.model } +caption.attlist = Common.attrib +tr = element tr { tr.attlist, (th | td)+ } +tr.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +th = element th { th.attlist, Flow.model } +th.attlist = Cell.attrib +td = element td { td.attlist, Flow.model } +td.attlist = Cell.attrib +Cell.attrib = + Common.attrib, + attribute abbr { Text.datatype }?, + attribute axis { text }?, + attribute headers { IDREFS.datatype }?, + scope.attrib, + attribute rowspan { Number.datatype }?, + attribute colspan { Number.datatype }?, + CellHAlign.attrib, + CellVAlign.attrib +CellHAlign.attrib = attribute align { "left" | "center" | "right" }? +CellVAlign.attrib = attribute valign { "top" | "middle" | "bottom" }? +scope.attrib = attribute scope { "row" | "col" }? +Block.class |= table diff --git a/etc/schema/xhtml-bdo.rnc b/etc/schema/xhtml-bdo.rnc new file mode 100644 index 00000000000..5658be36ecb --- /dev/null +++ b/etc/schema/xhtml-bdo.rnc @@ -0,0 +1,7 @@ +# Bi-directional Module + +bdo = element bdo { bdo.attlist, Inline.model } +bdo.attlist = Core.attrib, lang.attrib, dir.attrib +dir.attrib = attribute dir { "ltr" | "rtl" } +I18n.attrib &= dir.attrib? +Inline.class |= bdo diff --git a/etc/schema/xhtml-csismap.rnc b/etc/schema/xhtml-csismap.rnc new file mode 100644 index 00000000000..abd51f1a441 --- /dev/null +++ b/etc/schema/xhtml-csismap.rnc @@ -0,0 +1,29 @@ +# Client-side Image Map Module + +area = element area { area.attlist } +area.attlist = + Common.attrib, + attribute href { URI.datatype }?, + shape.attrib, + coords.attrib, + attribute nohref { "nohref" }?, + attribute alt { Text.datatype }, + attribute tabindex { Number.datatype }?, + attribute accesskey { Character.datatype }? +map = + element map { + map.attlist, + (# This does not use Block.mix + # because loose.dtd doesn't use %Flow; + Block.class + | area)+ + } +map.attlist = CommonIdRequired.attrib +a.attlist &= shape.attrib, coords.attrib +img.attlist &= usemap.attlist +object.attlist &= usemap.attlist +usemap.attlist = attribute usemap { IDREF.datatype }? +shape.attrib = + attribute shape { "rect" | "circle" | "poly" | "default" }? +coords.attrib = attribute coords { text }? +Inline.class |= map diff --git a/etc/schema/xhtml-datatypes.rnc b/etc/schema/xhtml-datatypes.rnc new file mode 100644 index 00000000000..596598039dd --- /dev/null +++ b/etc/schema/xhtml-datatypes.rnc @@ -0,0 +1,47 @@ +# Datatypes Module + +# Length defined for cellpadding/cellspacing + +# nn for pixels or nn% for percentage length +Length.datatype = text +# space-separated list of link types +LinkTypes.datatype = NMTOKENS.datatype +# single or comma-separated list of media descriptors +MediaDesc.datatype = text +# pixel, percentage, or relative +MultiLength.datatype = text +# one or more digits (NUMBER) +Number.datatype = text +# integer representing length in pixels +Pixels.datatype = text +# script expression +Script.datatype = text +# textual content +Text.datatype = text +# Imported Datatypes ................................ + +# a single character from [ISO10646] +Character.datatype = text +# a character encoding, as per [RFC2045] +Charset.datatype = text +# a space separated list of character encodings, as per [RFC2045] +Charsets.datatype = text +# media type, as per [RFC2045] +ContentType.datatype = text +# comma-separated list of media types, as per [RFC2045] +ContentTypes.datatype = text +# date and time information. ISO date format +Datetime.datatype = text +# formal public identifier, as per [ISO8879] +FPI.datatype = text +# a language code, as per [RFC1766] +LanguageCode.datatype = xsd:language +# a Uniform Resource Identifier, see [URI] +URI.datatype = xsd:anyURI +# a space-separated list of Uniform Resource Identifiers, see [URI] +URIs.datatype = text +NMTOKEN.datatype = xsd:NMTOKEN +NMTOKENS.datatype = xsd:NMTOKENS +ID.datatype = xsd:ID +IDREF.datatype = xsd:IDREF +IDREFS.datatype = xsd:IDREFS diff --git a/etc/schema/xhtml-edit.rnc b/etc/schema/xhtml-edit.rnc new file mode 100644 index 00000000000..4301fc27f74 --- /dev/null +++ b/etc/schema/xhtml-edit.rnc @@ -0,0 +1,12 @@ +# Edit Module + +del = element del { del.attlist, Inline.model } +del.attlist = Edit.attrib +ins = element ins { ins.attlist, Inline.model } +ins.attlist = Edit.attrib +Edit.attrib = + attribute cite { URI.datatype }?, + attribute datetime { Datetime.datatype }? +Edit.class = del | ins +Inline.class |= Edit.class +Block.class |= Edit.class diff --git a/etc/schema/xhtml-events.rnc b/etc/schema/xhtml-events.rnc new file mode 100644 index 00000000000..536874201e1 --- /dev/null +++ b/etc/schema/xhtml-events.rnc @@ -0,0 +1,47 @@ +# Events Module + +a.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +area.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +form.attlist &= + attribute onreset { Script.datatype }?, + attribute onsubmit { Script.datatype }? +body.attlist &= + attribute onload { Script.datatype }?, + attribute onunload { Script.datatype }? +label.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +input.attlist &= + attribute onblur { Script.datatype }?, + attribute onchange { Script.datatype }?, + attribute onfocus { Script.datatype }?, + attribute onselect { Script.datatype }? +select.attlist &= + attribute onblur { Script.datatype }?, + attribute onchange { Script.datatype }?, + attribute onfocus { Script.datatype }? +textarea.attlist &= + attribute onblur { Script.datatype }?, + attribute onchange { Script.datatype }?, + attribute onfocus { Script.datatype }?, + attribute onselect { Script.datatype }? +button.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +Events.attrib = + attribute onclick { Script.datatype }?, + attribute ondblclick { Script.datatype }?, + attribute onmousedown { Script.datatype }?, + attribute onmouseup { Script.datatype }?, + attribute onmouseover { Script.datatype }?, + attribute onmousemove { Script.datatype }?, + attribute onmouseout { Script.datatype }?, + attribute onkeypress { Script.datatype }?, + attribute onkeydown { Script.datatype }?, + attribute onkeyup { Script.datatype }? +Common.attrib &= Events.attrib +CommonIdRequired.attrib &= Events.attrib diff --git a/etc/schema/xhtml-form.rnc b/etc/schema/xhtml-form.rnc new file mode 100644 index 00000000000..f5544190b01 --- /dev/null +++ b/etc/schema/xhtml-form.rnc @@ -0,0 +1,49 @@ +# Forms Module + +# Unlike the DTD implementation, this builds on the basic-form module + +include "xhtml-basic-form.rnc" { + select = element select { select.attlist, (option | optgroup)+ } +} +form.attlist &= + attribute accept-charset { Charsets.datatype }?, + attribute accept { ContentTypes.datatype }? +input.attlist &= + attribute disabled { "disabled" }?, + attribute readonly { "readonly" }?, + attribute alt { text }?, + attribute tabindex { Number.datatype }?, + attribute accept { ContentTypes.datatype }? +InputType.class |= "image" | "button" +select.attlist &= + attribute disabled { "disabled" }?, + attribute tabindex { Number.datatype }? +option.attlist &= + attribute disabled { "disabled" }?, + attribute label { Text.datatype }? +optgroup = element optgroup { optgroup.attlist, option+ } +optgroup.attlist = + Common.attrib, + attribute disabled { "disabled" }?, + attribute label { Text.datatype } +textarea.attlist &= + attribute disabled { "disabled" }?, + attribute readonly { "readonly" }?, + attribute tabindex { Number.datatype }? +fieldset = element fieldset { fieldset.attlist, legend, Flow.model } +fieldset.attlist = Common.attrib +button = element button { button.attlist, Flow.model } +button.attlist = + Common.attrib, + attribute name { text }?, + attribute value { text }?, + attribute type { "button" | "submit" | "reset" }?, + attribute disabled { "disabled" }?, + attribute tabindex { Number.datatype }?, + attribute accesskey { Character.datatype }? +legend = element legend { legend.attlist, Inline.model } +legend.attlist = + Common.attrib, + attribute accesskey { Character.datatype }? +Form.class |= fieldset +Formctrl.class |= button diff --git a/etc/schema/xhtml-frames.rnc b/etc/schema/xhtml-frames.rnc new file mode 100644 index 00000000000..9b9f9ba1465 --- /dev/null +++ b/etc/schema/xhtml-frames.rnc @@ -0,0 +1,26 @@ +# Frames Module + +include "xhtml-struct.rnc" { + html = element html { html.attlist, head, frameset } +} +frameset = + element frameset { + frameset.attlist, + ((frameset | frame)+ & noframes?) + } +frameset.attlist = + Core.attrib, + attribute cols { MultiLength.datatype }?, + attribute rows { MultiLength.datatype }? +frame = element frame { frame.attlist } +frame.attlist = + Core.attrib, + attribute longdesc { URI.datatype }?, + attribute src { URI.datatype }?, + attribute frameborder { "1" | "0" }?, + attribute marginwidth { Pixels.datatype }?, + attribute marginheight { Pixels.datatype }?, + attribute noresize { "noresize" }?, + attribute scrolling { "yes" | "no" | "auto" }? +noframes = element noframes { noframes.attlist, body } +noframes.attlist = Common.attrib diff --git a/etc/schema/xhtml-hypertext.rnc b/etc/schema/xhtml-hypertext.rnc new file mode 100644 index 00000000000..82e7686d648 --- /dev/null +++ b/etc/schema/xhtml-hypertext.rnc @@ -0,0 +1,16 @@ +# Hypertext Module + +# Depends on text module. + +a = element a { a.attlist, Inline.model } +a.attlist = + Common.attrib, + attribute href { URI.datatype }?, + attribute charset { Charset.datatype }?, + attribute type { ContentType.datatype }?, + attribute hreflang { LanguageCode.datatype }?, + attribute rel { LinkTypes.datatype }?, + attribute rev { LinkTypes.datatype }?, + attribute accesskey { Character.datatype }?, + attribute tabindex { Number.datatype }? +Inline.class |= a diff --git a/etc/schema/xhtml-iframe.rnc b/etc/schema/xhtml-iframe.rnc new file mode 100644 index 00000000000..bbcdd441bb3 --- /dev/null +++ b/etc/schema/xhtml-iframe.rnc @@ -0,0 +1,14 @@ +# Iframe Module + +iframe = element iframe { iframe.attlist, Flow.model } +iframe.attlist = + Core.attrib, + attribute longdesc { URI.datatype }?, + attribute src { URI.datatype }?, + attribute frameborder { "1" | "0" }?, + attribute width { Length.datatype }?, + attribute height { Length.datatype }?, + attribute marginwidth { Pixels.datatype }?, + attribute marginheight { Pixels.datatype }?, + attribute scrolling { "yes" | "no" | "auto" }? +Inline.class |= iframe diff --git a/etc/schema/xhtml-image.rnc b/etc/schema/xhtml-image.rnc new file mode 100644 index 00000000000..e1d6e5662f7 --- /dev/null +++ b/etc/schema/xhtml-image.rnc @@ -0,0 +1,11 @@ +# Image Module + +img = element img { img.attlist } +img.attlist = + Common.attrib, + attribute src { URI.datatype }, + attribute alt { Text.datatype }, + attribute longdesc { URI.datatype }?, + attribute height { Length.datatype }?, + attribute width { Length.datatype }? +Inline.class |= img diff --git a/etc/schema/xhtml-inlstyle.rnc b/etc/schema/xhtml-inlstyle.rnc new file mode 100644 index 00000000000..aa69b75ab61 --- /dev/null +++ b/etc/schema/xhtml-inlstyle.rnc @@ -0,0 +1,3 @@ +# Inline Style Module + +Core.attrib &= attribute style { text }? diff --git a/etc/schema/xhtml-legacy.rnc b/etc/schema/xhtml-legacy.rnc new file mode 100644 index 00000000000..b15061f6d9b --- /dev/null +++ b/etc/schema/xhtml-legacy.rnc @@ -0,0 +1,100 @@ +# Legacy Module + +lang.attrib &= attribute lang { LanguageCode.datatype }? +basefont = element basefont { basefont.attlist } +basefont.attlist = id.attrib, Font.attrib +center = element center { center.attlist, Flow.model } +center.attlist = Common.attrib +font = element font { font.attlist, Inline.model } +font.attlist = Core.attrib, I18n.attrib, Font.attrib +Font.attrib = + attribute size { text }?, + attribute color { Color.datatype }?, + attribute face { text }? +s = element s { s.attlist, Inline.model } +s.attlist = Common.attrib +strike = element strike { strike.attlist, Inline.model } +strike.attlist = Common.attrib +u = element u { u.attlist, Inline.model } +u.attlist = Common.attrib +dir = element dir { dir.attlist, li.noblock+ } +dir.attlist = + Common.attrib, + attribute compact { "compact" }? +menu = element menu { menu.attlist, li.noblock+ } +menu.attlist = + Common.attrib, + attribute compact { "compact" }? +li.noblock = element li { li.attlist, Inline.model } +isindex = element isindex { isindex.attlist } +isindex.attlist = + Core.attrib, + I18n.attrib, + attribute prompt { Text.datatype }? +applet.attlist &= + attribute align { "top" | "middle" | "bottom" | "left" | "right" }?, + attribute hspace { Pixels.datatype }?, + attribute vspace { Pixels.datatype }? +body.attlist &= + attribute background { URI.datatype }?, + attribute bgcolor { Color.datatype }?, + attribute text { Color.datatype }?, + attribute link { Color.datatype }?, + attribute vlink { Color.datatype }?, + attribute alink { Color.datatype }? +br.attlist &= attribute clear { "left" | "all" | "right" | "none" }? +caption.attlist &= align.attrib +div.attlist &= align.attrib +# Not in the CR, but surely an error. +dl.attlist &= attribute compact { "compact" }? +Heading.attrib &= align.attrib +hr.attlist &= + attribute align { "left" | "center" | "right" }?, + attribute noshade { "noshade" }?, + attribute size { Pixels.datatype }?, + attribute width { Pixels.datatype }? +img.attlist &= + attribute align { "top" | "middle" | "bottom" | "left" | "right" }?, + attribute border { Pixels.datatype }?, + attribute hspace { Pixels.datatype }?, + attribute vspace { Pixels.datatype }? +input.attlist &= align.attrib +legend.attlist &= + attribute align { "top" | "bottom" | "left" | "right" }? +li.attlist &= + attribute type { text }?, + attribute value { text }? +object.attlist &= + attribute align { "top" | "middle" | "bottom" | "left" | "right" }?, + attribute border { Pixels.datatype }?, + attribute hspace { Pixels.datatype }?, + attribute vspace { Pixels.datatype }? +ol.attlist &= + attribute type { text }?, + attribute compact { "compact" }?, + attribute start { text }? +p.attlist &= align.attrib +pre.attlist &= attribute width { Length.datatype }? +script.attlist &= attribute language { ContentType.datatype }? +table.attlist &= + align.attrib, + attribute bgcolor { Color.datatype }? +tr.attlist &= attribute bgcolor { Color.datatype }? +Cell.attrib &= + attribute nowrap { "nowrap" }?, + attribute bgcolor { Color.datatype }?, + attribute width { Pixels.datatype }?, + attribute height { Pixels.datatype }? +ul.attlist &= + attribute type { text }?, + attribute compact { "compact" }? +align.attrib = attribute align { "left" | "all" | "right" | "none" }? +Color.datatype = text +Inline.class |= font | basefont | s | strike | u +Block.class |= center | isindex +List.class |= dir | menu +head.content &= isindex? +Block.mix |= text | Inline.class +# With the legacy module and the frames modules, the html +# element can contain either body or frameset. +frameset |= body diff --git a/etc/schema/xhtml-link.rnc b/etc/schema/xhtml-link.rnc new file mode 100644 index 00000000000..9d0d6f1cc75 --- /dev/null +++ b/etc/schema/xhtml-link.rnc @@ -0,0 +1,13 @@ +# Link Module + +link = element link { link.attlist } +link.attlist = + Common.attrib, + attribute charset { Charset.datatype }?, + attribute href { URI.datatype }?, + attribute hreflang { LanguageCode.datatype }?, + attribute type { ContentType.datatype }?, + attribute rel { LinkTypes.datatype }?, + attribute rev { LinkTypes.datatype }?, + attribute media { MediaDesc.datatype }? +head.content &= link* diff --git a/etc/schema/xhtml-list.rnc b/etc/schema/xhtml-list.rnc new file mode 100644 index 00000000000..8b994041eaa --- /dev/null +++ b/etc/schema/xhtml-list.rnc @@ -0,0 +1,16 @@ +# List Module + +dl = element dl { dl.attlist, (dt | dd)+ } +dl.attlist = Common.attrib +dt = element dt { dt.attlist, Inline.model } +dt.attlist = Common.attrib +dd = element dd { dd.attlist, Flow.model } +dd.attlist = Common.attrib +ol = element ol { ol.attlist, li+ } +ol.attlist = Common.attrib +ul = element ul { ul.attlist, li+ } +ul.attlist = Common.attrib +li = element li { li.attlist, Flow.model } +li.attlist = Common.attrib +List.class = ul | ol | dl +Block.class |= List.class diff --git a/etc/schema/xhtml-meta.rnc b/etc/schema/xhtml-meta.rnc new file mode 100644 index 00000000000..ab0b5eb318a --- /dev/null +++ b/etc/schema/xhtml-meta.rnc @@ -0,0 +1,10 @@ +# Meta Module + +meta = element meta { meta.attlist } +meta.attlist = + I18n.attrib, + attribute http-equiv { NMTOKEN.datatype }?, + attribute name { NMTOKEN.datatype }?, + attribute content { text }?, + attribute scheme { text }? +head.content &= meta* diff --git a/etc/schema/xhtml-nameident.rnc b/etc/schema/xhtml-nameident.rnc new file mode 100644 index 00000000000..ef4ad7065e7 --- /dev/null +++ b/etc/schema/xhtml-nameident.rnc @@ -0,0 +1,10 @@ +# Name Identification Module + +a.attlist &= name.attlist +applet.attlist &= name.attlist +form.attlist &= name.attlist +frame.attrib &= name.attlist +iframe.attlist &= name.attlist +img.attlist &= name.attlist +map.attlist &= name.attlist +name.attlist = attribute name { text }? diff --git a/etc/schema/xhtml-object.rnc b/etc/schema/xhtml-object.rnc new file mode 100644 index 00000000000..ac65238db9d --- /dev/null +++ b/etc/schema/xhtml-object.rnc @@ -0,0 +1,24 @@ +# Object Module + +object = + element object { + object.attlist, + # No restrictions on mixed content in TREX. + param*, + Flow.model + } +object.attlist = + Common.attrib, + attribute declare { "declare" }?, + attribute classid { URI.datatype }?, + attribute codebase { URI.datatype }?, + attribute data { URI.datatype }?, + attribute type { ContentType.datatype }?, + attribute codetype { ContentType.datatype }?, + attribute archive { URIs.datatype }?, + attribute standby { Text.datatype }?, + attribute height { Length.datatype }?, + attribute width { Length.datatype }?, + attribute name { text }?, + attribute tabindex { Number.datatype }? +Inline.class |= object diff --git a/etc/schema/xhtml-param.rnc b/etc/schema/xhtml-param.rnc new file mode 100644 index 00000000000..8a921ca9b34 --- /dev/null +++ b/etc/schema/xhtml-param.rnc @@ -0,0 +1,9 @@ +# Param Module + +param = element param { param.attlist } +param.attlist = + id.attrib, + attribute name { text }, + attribute value { text }?, + attribute valuetype { "data" | "ref" | "object" }?, + attribute type { ContentType.datatype }? diff --git a/etc/schema/xhtml-pres.rnc b/etc/schema/xhtml-pres.rnc new file mode 100644 index 00000000000..677372b2dd0 --- /dev/null +++ b/etc/schema/xhtml-pres.rnc @@ -0,0 +1,18 @@ +hr = element hr { hr.attlist } +hr.attlist = Common.attrib +Block.class |= hr +b = element b { b.attlist, Inline.model } +b.attlist = Common.attrib +big = element big { big.attlist, Inline.model } +big.attlist = Common.attrib +i = element i { i.attlist, Inline.model } +i.attlist = Common.attrib +small = element small { small.attlist, Inline.model } +small.attlist = Common.attrib +sub = element sub { sub.attlist, Inline.model } +sub.attlist = Common.attrib +sup = element sup { sup.attlist, Inline.model } +sup.attlist = Common.attrib +tt = element tt { tt.attlist, Inline.model } +tt.attlist = Common.attrib +Inline.class |= b | big | i | small | sub | sup | tt diff --git a/etc/schema/xhtml-ruby.rnc b/etc/schema/xhtml-ruby.rnc new file mode 100644 index 00000000000..e55614dfb95 --- /dev/null +++ b/etc/schema/xhtml-ruby.rnc @@ -0,0 +1,21 @@ +ruby = + element ruby { + ruby.attlist, + ((rb, + (rt | (rp, rt, rp))) + | (rbc, rtc, rtc?)) + } +ruby.attlist = Common.attrib +rbc = element rbc { rbc.attlist, rb+ } +rbc.attlist = Common.attrib +rtc = element rtc { rtc.attlist, rt+ } +rtc.attlist = Common.attrib +rb = element rb { rb.attlist, Inline.model } +rb.attlist = Common.attrib +rt = element rt { rt.attlist, Inline.model } +rt.attlist = + Common.attrib, + attribute rt { Number.datatype }? +rp = element rp { rp.attlist, text } +rp.attlist = Common.attrib +Inline.class |= ruby diff --git a/etc/schema/xhtml-script.rnc b/etc/schema/xhtml-script.rnc new file mode 100644 index 00000000000..fcf35b02714 --- /dev/null +++ b/etc/schema/xhtml-script.rnc @@ -0,0 +1,15 @@ +# Script Module + +script = element script { script.attlist, text } +script.attlist = + attribute charset { Charset.datatype }?, + attribute type { ContentType.datatype }, + attribute src { URI.datatype }?, + attribute defer { "defer" }?, + attribute xml:space { "preserve" }? +noscript = element noscript { noscript.attlist, Block.model } +noscript.attlist = Common.attrib +head.content &= script* +Script.class = noscript | script +Inline.class |= Script.class +Block.class |= Script.class diff --git a/etc/schema/xhtml-ssismap.rnc b/etc/schema/xhtml-ssismap.rnc new file mode 100644 index 00000000000..21a7496d307 --- /dev/null +++ b/etc/schema/xhtml-ssismap.rnc @@ -0,0 +1,5 @@ +# Server-side Image Map Module + +# Depends on image module. + +img.attlist &= attribute ismap { "ismap" }? diff --git a/etc/schema/xhtml-struct.rnc b/etc/schema/xhtml-struct.rnc new file mode 100644 index 00000000000..4c919c2371a --- /dev/null +++ b/etc/schema/xhtml-struct.rnc @@ -0,0 +1,14 @@ +# Structure Module + +start = html +title = element title { title.attlist, text } +title.attlist = I18n.attrib +head = element head { head.attlist, head.content } +head.attlist = I18n.attrib, profile.attlist +head.content = title +profile.attlist = attribute profile { URI.datatype }? +body = element body { body.attlist, Block.model } +body.attlist = Common.attrib +html = element html { html.attlist, head, body } +html.attlist = XHTML.version.attrib, I18n.attrib +XHTML.version.attrib = attribute version { FPI.datatype }? diff --git a/etc/schema/xhtml-style.rnc b/etc/schema/xhtml-style.rnc new file mode 100644 index 00000000000..93a52d5e2ad --- /dev/null +++ b/etc/schema/xhtml-style.rnc @@ -0,0 +1,10 @@ +# Style Module + +style = element style { style.attlist, text } +style.attlist = + title.attrib, + I18n.attrib, + attribute type { ContentType.datatype }, + attribute media { MediaDesc.datatype }?, + attribute xml:space { "preserve" }? +head.content &= style* diff --git a/etc/schema/xhtml-table.rnc b/etc/schema/xhtml-table.rnc new file mode 100644 index 00000000000..70055b1598f --- /dev/null +++ b/etc/schema/xhtml-table.rnc @@ -0,0 +1,67 @@ +# Tables Module + +# This builds on the basic tables module, unlike with the DTD +# implementation. + +include "xhtml-basic-table.rnc" { + table = + element table { + table.attlist, + caption?, + (col* | colgroup*), + ((thead?, tfoot?, tbody+) | tr+) + } + th = element th { th.attlist, Flow.model } + td = element td { td.attlist, Flow.model } + CellHAlign.attrib = + attribute align { + "left" | "center" | "right" | "justify" | "char" + }?, + attribute char { Character.datatype }?, + attribute charoff { Length.datatype }? + CellVAlign.attrib = + attribute valign { "top" | "middle" | "bottom" | "baseline" }? + scope.attrib = + attribute scope { "row" | "col" | "rowgroup" | "colgroup" }? +} +table.attlist &= + attribute width { Length.datatype }?, + attribute border { Pixels.datatype }?, + frame.attrib, + rules.attrib, + attribute cellspacing { Length.datatype }?, + attribute cellpadding { Length.datatype }? +col = element col { col.attlist } +col.attlist = + Common.attrib, + attribute span { Number.datatype }?, + attribute width { MultiLength.datatype }?, + CellHAlign.attrib, + CellVAlign.attrib +colgroup = element colgroup { colgroup.attlist, col* } +colgroup.attlist = + Common.attrib, + attribute span { Number.datatype }?, + attribute width { MultiLength.datatype }?, + CellHAlign.attrib, + CellVAlign.attrib +tbody = element tbody { tbody.attlist, tr+ } +tbody.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +thead = element thead { thead.attlist, tr+ } +thead.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +tfoot = element tfoot { tfoot.attlist, tr+ } +tfoot.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +frame.attrib = + attribute frame { + "void" + | "above" + | "below" + | "hsides" + | "lhs" + | "rhs" + | "vsides" + | "box" + | "border" + }? +rules.attrib = + attribute rules { "none" | "groups" | "rows" | "cols" | "all" }? diff --git a/etc/schema/xhtml-target.rnc b/etc/schema/xhtml-target.rnc new file mode 100644 index 00000000000..505b37963a9 --- /dev/null +++ b/etc/schema/xhtml-target.rnc @@ -0,0 +1,8 @@ +# Target Module + +a.attlist &= target.attrib +area.attlist &= target.attrib +base.attlist &= target.attrib +link.attrib &= target.attrib +form.attlist &= target.attrib +target.attrib = attribute target { text }? diff --git a/etc/schema/xhtml-text.rnc b/etc/schema/xhtml-text.rnc new file mode 100644 index 00000000000..c4283d44179 --- /dev/null +++ b/etc/schema/xhtml-text.rnc @@ -0,0 +1,73 @@ +# Text Module + +br = element br { br.attlist, empty } +br.attlist = Core.attrib +span = element span { span.attlist, Inline.model } +span.attlist = Common.attrib +abbr = element abbr { abbr.attlist, Inline.model } +abbr.attlist = Common.attrib +acronym = element acronym { acronym.attlist, Inline.model } +acronym.attlist = Common.attrib +cite = element cite { cite.attlist, Inline.model } +cite.attlist = Common.attrib +code = element code { code.attlist, Inline.model } +code.attlist = Common.attrib +dfn = element dfn { dfn.attlist, Inline.model } +dfn.attlist = Common.attrib +em = element em { em.attlist, Inline.model } +em.attlist = Common.attrib +kbd = element kbd { kbd.attlist, Inline.model } +kbd.attlist = Common.attrib +q = element q { q.attlist, Inline.model } +q.attlist = + Common.attrib, + attribute cite { URI.datatype }? +samp = element samp { samp.attlist, Inline.model } +samp.attlist = Common.attrib +strong = element strong { strong.attlist, Inline.model } +strong.attlist = Common.attrib +var = element var { var.attlist, Inline.model } +var.attlist = Common.attrib +\div = element div { div.attlist, Flow.model } +div.attlist = Common.attrib +p = element p { p.attlist, Inline.model } +p.attlist = Common.attrib +address = element address { address.attlist, Inline.model } +address.attlist = Common.attrib +blockquote = element blockquote { blockquote.attlist, Block.model } +blockquote.attlist = + Common.attrib, + attribute cite { URI.datatype }? +pre = element pre { pre.attlist, Inline.model } +pre.attlist = + Common.attrib, + attribute xml:space { "preserve" }? +h1 = element h1 { Heading.attrib, Heading.content } +h2 = element h2 { Heading.attrib, Heading.content } +h3 = element h3 { Heading.attrib, Heading.content } +h4 = element h4 { Heading.attrib, Heading.content } +h5 = element h5 { Heading.attrib, Heading.content } +h6 = element h6 { Heading.attrib, Heading.content } +Heading.attrib = Common.attrib +Heading.content = Inline.model +Heading.class = h1 | h2 | h3 | h4 | h5 | h6 +Block.class = address | blockquote | \div | p | pre | Heading.class +Inline.class = + abbr + | acronym + | br + | cite + | code + | dfn + | em + | kbd + | q + | samp + | span + | strong + | var +Inline.model = (text | Inline.class)* +# This is redefined by the legacy module to include inlines. +Block.mix = Block.class +Block.model = Block.mix+ +Flow.model = (text | Inline.class | Block.class)* diff --git a/etc/schema/xhtml.rnc b/etc/schema/xhtml.rnc new file mode 100644 index 00000000000..3218cd71e5b --- /dev/null +++ b/etc/schema/xhtml.rnc @@ -0,0 +1,37 @@ +# XHTML + +# This corresponds to the union of transitional and frameset. + +default namespace = "http://www.w3.org/1999/xhtml" + +include "xhtml-datatypes.rnc" +include "xhtml-attribs.rnc" +# include "xhtml-struct.rnc" +include "xhtml-frames.rnc" +include "xhtml-text.rnc" +include "xhtml-hypertext.rnc" +include "xhtml-list.rnc" +include "xhtml-image.rnc" +include "xhtml-ssismap.rnc" +include "xhtml-base.rnc" +include "xhtml-link.rnc" +include "xhtml-meta.rnc" +include "xhtml-param.rnc" +include "xhtml-object.rnc" +include "xhtml-bdo.rnc" +include "xhtml-pres.rnc" +include "xhtml-edit.rnc" +include "xhtml-applet.rnc" +# include "xhtml-basic-form.rnc" +include "xhtml-form.rnc" +include "xhtml-style.rnc" +include "xhtml-script.rnc" +# include "xhtml-basic-table.rnc" +include "xhtml-table.rnc" +include "xhtml-csismap.rnc" +include "xhtml-events.rnc" +include "xhtml-inlstyle.rnc" +include "xhtml-target.rnc" +include "xhtml-iframe.rnc" +include "xhtml-nameident.rnc" +include "xhtml-legacy.rnc" diff --git a/etc/schema/xslt.rnc b/etc/schema/xslt.rnc new file mode 100644 index 00000000000..573e6f93478 --- /dev/null +++ b/etc/schema/xslt.rnc @@ -0,0 +1,356 @@ +# $Id: xslt.rnc,v 1.1 2007/11/23 06:57:47 hexmode Exp $ + +# This was mostly generated from the syntax summary in the XSLT +# Recommendation (using XSLT of course). + +# Issues: this validates extension elements as literal result +# elements, which is overly restrictive. + +namespace local = "" +default namespace xsl = "http://www.w3.org/1999/XSL/Transform" + +start = + stylesheet.element + | transform.element + | literal-result-element-as-stylesheet +version = "1.0" +top-level-elements.model = + (top-level-element.category | top-level-extension)* +top-level-extension = + element * - (xsl:* | local:*) { + grammar { + start = any + any = + (attribute * { text } + | text + | element * { any })* + } + } +template.model = (instruction.category | literal-result-element | text)* +literal-result-element-as-stylesheet = + element * - xsl:* { + attribute xsl:version { version }, + literal-result-element-no-version.atts, + template.model + } +literal-result-element = + element * - xsl:* { literal-result-element.atts, template.model } +literal-result-element.atts = + literal-result-element-no-version.atts, + attribute xsl:version { version }? +literal-result-element-no-version.atts = + (attribute * - xsl:* { avt.datatype } + | attribute xsl:extension-element-prefixes { prefixes.datatype } + | attribute xsl:exclude-result-prefixes { prefixes.datatype } + | attribute xsl:use-attribute-sets { qnames.datatype })* +top-level-element.category = + include.element + | strip-space.element + | preserve-space.element + | template.element + | namespace-alias.element + | attribute-set.element + | variable.element + | param.element + | key.element + | decimal-format.element + | output.element +instruction.category = + apply-templates.element + | apply-imports.element + | call-template.element + | element.element + | attribute.element + | text.element + | processing-instruction.element + | comment.element + | copy.element + | value-of.element + | number.element + | for-each.element + | if.element + | choose.element + | variable.element + | copy-of.element + | message.element + | fallback.element +extension.atts = attribute * - (xsl:* | local:*) { text }* +stylesheet.element = element stylesheet { stylesheet.model } +transform.element = element transform { stylesheet.model } +stylesheet.model = + extension.atts, + attribute id { xsd:NCName }?, + attribute extension-element-prefixes { prefixes.datatype }?, + attribute exclude-result-prefixes { prefixes.datatype }?, + attribute version { version }, + (import.element*, top-level-elements.model) +include.element = + element include { + extension.atts, + attribute href { xsd:anyURI } + } +import.element = + element import { + extension.atts, + attribute href { xsd:anyURI } + } +strip-space.element = + element strip-space { + extension.atts, + attribute elements { wildcards.datatype } + } +preserve-space.element = + element preserve-space { + extension.atts, + attribute elements { wildcards.datatype } + } +template.element = + element template { + extension.atts, + attribute match { pattern.datatype }?, + attribute name { qname.datatype }?, + attribute priority { number.datatype }?, + attribute mode { qname.datatype }?, + (param.element*, template.model) + } +apply-templates.element = + element apply-templates { + extension.atts, + attribute select { expression.datatype }?, + attribute mode { qname.datatype }?, + (sort.element | with-param.element)* + } +apply-imports.element = element apply-imports { extension.atts } +call-template.element = + element call-template { + extension.atts, + attribute name { qname.datatype }, + with-param.element* + } +namespace-alias.element = + element namespace-alias { + extension.atts, + attribute stylesheet-prefix { prefix.datatype }, + attribute result-prefix { prefix.datatype } + } +element.element = + element element { + extension.atts, + attribute name { qname.datatype | expr-avt.datatype }, + attribute namespace { xsd:anyURI | brace-avt.datatype }?, + attribute use-attribute-sets { qnames.datatype }?, + template.model + } +attribute.element = + element attribute { + extension.atts, + attribute name { qname.datatype | expr-avt.datatype }, + attribute namespace { xsd:anyURI | brace-avt.datatype }?, + template.model + } +attribute-set.element = + element attribute-set { + extension.atts, + attribute name { qname.datatype }, + attribute use-attribute-sets { qnames.datatype }?, + attribute.element* + } +text.element = + element text { + extension.atts, + attribute disable-output-escaping { + xsd:string "yes" | xsd:string "no" + }?, + text + } +processing-instruction.element = + element processing-instruction { + extension.atts, + attribute name { xsd:NCName | expr-avt.datatype }, + template.model + } +comment.element = element comment { extension.atts, template.model } +copy.element = + element copy { + extension.atts, + attribute use-attribute-sets { qnames.datatype }?, + template.model + } +value-of.element = + element value-of { + extension.atts, + attribute select { expression.datatype }, + attribute disable-output-escaping { + xsd:string "yes" | xsd:string "no" + }? + } +number.element = + element number { + extension.atts, + attribute level { + xsd:string "single" | xsd:string "multiple" | xsd:string "any" + }?, + attribute count { pattern.datatype }?, + attribute from { pattern.datatype }?, + attribute value { expression.datatype }?, + attribute format { avt.datatype }?, + attribute lang { xsd:NMTOKEN | expr-avt.datatype }?, + attribute letter-value { + xsd:string "alphabetic" + | xsd:string "traditional" + | expr-avt.datatype + }?, + attribute grouping-separator { char.datatype | expr-avt.datatype }?, + attribute grouping-size { number.datatype | expr-avt.datatype }? + } +for-each.element = + element for-each { + extension.atts, + attribute select { expression.datatype }, + (sort.element*, template.model) + } +if.element = + element if { + extension.atts, + attribute test { expression.datatype }, + template.model + } +choose.element = + element choose { extension.atts, (when.element+, otherwise.element?) } +when.element = + element when { + extension.atts, + attribute test { expression.datatype }, + template.model + } +otherwise.element = element otherwise { extension.atts, template.model } +sort.element = + element sort { + extension.atts, + attribute select { expression.datatype }?, + attribute lang { xsd:NMTOKEN | expr-avt.datatype }?, + attribute data-type { + xsd:string "text" + | xsd:string "number" + | qname-but-not-ncname.datatype + | expr-avt.datatype + }?, + attribute order { + xsd:string "ascending" + | xsd:string "descending" + | expr-avt.datatype + }?, + attribute case-order { + xsd:string "upper-first" + | xsd:string "lower-first" + | expr-avt.datatype + }? + } +variable.element = + element variable { + extension.atts, + attribute name { qname.datatype }, + (attribute select { expression.datatype } + | template.model) + } +param.element = + element param { + extension.atts, + attribute name { qname.datatype }, + (attribute select { expression.datatype } + | template.model) + } +copy-of.element = + element copy-of { + extension.atts, + attribute select { expression.datatype } + } +with-param.element = + element with-param { + extension.atts, + attribute name { qname.datatype }, + (attribute select { expression.datatype } + | template.model) + } +key.element = + element key { + extension.atts, + attribute name { qname.datatype }, + attribute match { pattern.datatype }, + attribute use { expression.datatype } + } +decimal-format.element = + element decimal-format { + extension.atts, + attribute name { qname.datatype }?, + attribute decimal-separator { char.datatype }?, + attribute grouping-separator { char.datatype }?, + attribute infinity { text }?, + attribute minus-sign { char.datatype }?, + attribute NaN { text }?, + attribute percent { char.datatype }?, + attribute per-mille { char.datatype }?, + attribute zero-digit { char.datatype }?, + attribute digit { char.datatype }?, + attribute pattern-separator { char.datatype }? + } +message.element = + element message { + extension.atts, + attribute terminate { xsd:string "yes" | xsd:string "no" }?, + template.model + } +fallback.element = element fallback { extension.atts, template.model } +output.element = + element output { + extension.atts, + attribute method { + xsd:string "xml" + | xsd:string "html" + | xsd:string "text" + | qname-but-not-ncname.datatype + }?, + attribute version { xsd:NMTOKEN }?, + attribute encoding { text }?, + attribute omit-xml-declaration { + xsd:string "yes" | xsd:string "no" + }?, + attribute standalone { xsd:string "yes" | xsd:string "no" }?, + attribute doctype-public { text }?, + attribute doctype-system { text }?, + attribute cdata-section-elements { qnames.datatype }?, + attribute indent { xsd:string "yes" | xsd:string "no" }?, + attribute media-type { text }? + } +prefixes.datatype = list { (xsd:NCName | "#default")* } +prefix.datatype = xsd:NCName | "#default" +wildcards.datatype = + list { + (xsd:QName + | xsd:token { pattern = "\*|\i\c*:\*" })* + } +qname.datatype = xsd:QName +qnames.datatype = list { xsd:QName* } +char.datatype = xsd:string { length = "1" } +number.datatype = xsd:decimal +expression.datatype = text +pattern.datatype = text +qname-but-not-ncname.datatype = xsd:QName { pattern = ".*:.*" } +# An AVT containing at least one expression. +expr-avt.datatype = + xsd:string { + pattern = + """([^\{\}]|\{\{|\}\})*\{([^"'\{\}]|"[^"]*"|'[^']*')+\}([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" + } +# An AVT containing at least one brace; ie where instantiated AVT +# is not the same as the literal AVT. +brace-avt.datatype = + xsd:string { + pattern = + """[^\{\}]*(\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" + } +avt.datatype = + xsd:string { + pattern = + """([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" + } diff --git a/leim/ChangeLog b/leim/ChangeLog index 25e39c56ad1..69351db078b 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,3 +1,7 @@ +2007-11-17 Glenn Morris + + * Makefile.in (check-declare): New target. + 2007-10-31 Glenn Morris * Makefile.in (install): Change ownership of installed files. diff --git a/leim/Makefile.in b/leim/Makefile.in index ed17d8b5c8f..8ffa462c896 100644 --- a/leim/Makefile.in +++ b/leim/Makefile.in @@ -277,3 +277,9 @@ maintainer-clean: distclean extraclean: maintainer-clean -rm -f *~ \#* m/?*~ s/?*~ + +.PHONY: check-declare + +check-declare: + $(RUN-EMACS) -l $(buildlisppath)/emacs-lisp/check-declare \ + --eval '(check-declare-directory "$(srcdir)")' diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 2c178ba8da9..2cc37d49dd4 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,40 @@ +2007-11-28 Jason Rumney + + * makefile.w32-in (VMS_SUPPORT): No longer byte-compiled. + +2007-11-27 Jan Dj,Ad(Brv + + * pop.c (socket_connection): Remove AI_ADDRCONFIG. + +2007-11-19 Jan Dj,Ad(Brv + + * pop.c (socket_connection): Move realhost out of #ifdefs. + Set realhost both for HAVE_GETADDRINFO and !HAVE_GETADDRINFO. + +2007-11-18 Jan Dj,Ad(Brv + + * pop.c (socket_connection): Use getaddrinfo if available. + +2007-11-22 Francesco Potort,Al(B + + * etags.c (default_C_help) [CTAGS]: differentiate the help string, + as the defaults in ctags are different from etags. + +2007-11-15 Francesco Potort,Al(B + + * etags.c: Make prototypes for extern definitions, and add all + that are needed to quench warnings on 64-bit. + (main): Use the same defaults for ctags as for etags: find + typedefs, structure tags, macro constants, enum constants, struct + members and global variables. + (make_C_tag) [DEBUG]: Add debugging printout. + (C_entries): In case '}' decrement bracelev before testing it. + +2007-11-15 Masatake YAMATO + + * etags.c (C_entries): In case '}', set fvdef to fvnone + unconditioned to (!ignoreindent && lp == newlb.buffer + 1). + 2007-11-01 Dan Nicolaescu * makefile.w32-in (obj): Remove sunfns.o. diff --git a/lib-src/etags.c b/lib-src/etags.c index 0412137496f..23527171e48 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -81,7 +81,7 @@ University of California, as described above. */ * configuration file containing regexp definitions for etags. */ -char pot_etags_version[] = "@(#) pot revision number is 17.34"; +char pot_etags_version[] = "@(#) pot revision number is 17.38"; #define TRUE 1 #define FALSE 0 @@ -160,14 +160,20 @@ char pot_etags_version[] = "@(#) pot revision number is 17.34"; # include # include # else /* no standard C headers */ - extern char *getenv (); - extern char *strcpy (); - extern char *strncpy (); - extern char *strcat (); - extern char *strncat (); - extern unsigned long strlen (); - extern PTR malloc (); - extern PTR realloc (); + extern char *getenv __P((const char *)); + extern char *strcpy __P((char *, const char *)); + extern char *strncpy __P((char *, const char *, unsigned long)); + extern char *strcat __P((char *, const char *)); + extern char *strncat __P((char *, const char *, unsigned long)); + extern int strcmp __P((const char *, const char *)); + extern int strncmp __P((const char *, const char *, unsigned long)); + extern int system __P((const char *)); + extern unsigned long strlen __P((const char *)); + extern void *malloc __P((unsigned long)); + extern void *realloc __P((void *, unsigned long)); + extern void exit __P((int)); + extern void free __P((void *)); + extern void *memmove __P((void *, const void *, unsigned long)); # ifdef VMS # define EXIT_SUCCESS 1 # define EXIT_FAILURE 0 @@ -491,7 +497,7 @@ static char *midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789"; static bool append_to_tagfile; /* -a: append to tags */ -/* The next five default to TRUE for etags, but to FALSE for ctags. */ +/* The next five default to TRUE in C and derived languages. */ static bool typedefs; /* -t: create tags for C and Ada typedefs */ static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */ /* 0 struct/enum/union decls, and C++ */ @@ -508,7 +514,7 @@ static bool update; /* -u: update tags */ static bool vgrind_style; /* -v: create vgrind style index output */ static bool no_warnings; /* -w: suppress warnings (undocumented) */ static bool cxref_style; /* -x: create cxref style output */ -static bool cplusplus; /* .[hc] means C++, not C */ +static bool cplusplus; /* .[hc] means C++, not C (undocumented) */ static bool ignoreindent; /* -I: ignore indentation in C */ static bool packages_only; /* --packages-only: in Ada, only tag packages*/ @@ -615,10 +621,19 @@ followed by a colon, are tags."; /* Note that .c and .h can be considered C++, if the --c++ flag was - given, or if the `class' or `template' keyowrds are met inside the file. + given, or if the `class' or `template' keywords are met inside the file. That is why default_C_entries is called for these. */ static char *default_C_suffixes [] = { "c", "h", NULL }; +#if CTAGS /* C help for Ctags */ +static char default_C_help [] = +"In C code, any C function is a tag. Use -t to tag typedefs.\n\ +Use -T to tag definitions of `struct', `union' and `enum'.\n\ +Use -d to tag `#define' macro definitions and `enum' constants.\n\ +Use --globals to tag global variables.\n\ +You can tag function declarations and external variables by\n\ +using `--declarations', and struct members by using `--members'."; +#else /* C help for Etags */ static char default_C_help [] = "In C code, any C function or typedef is a tag, and so are\n\ definitions of `struct', `union' and `enum'. `#define' macro\n\ @@ -629,6 +644,7 @@ definitions and `enum' constants are tags unless you specify\n\ `--no-members' can make the tags table file much smaller.\n\ You can tag function declarations and external variables by\n\ using `--declarations'."; +#endif /* C help for Ctags and Etags */ static char *Cplusplus_suffixes [] = { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx", @@ -883,7 +899,7 @@ etags --help --lang=ada."); # define EMACS_NAME "standalone" #endif #ifndef VERSION -# define VERSION "17.34" +# define VERSION "17.38" #endif static void print_version () @@ -1239,15 +1255,12 @@ main (argc, argv) argbuffer = xnew (argc, argument); /* - * If etags, always find typedefs and structure tags. Why not? + * Always find typedefs and structure tags. * Also default to find macro constants, enum constants, struct - * members and global variables. + * members and global variables. Do it for both etags and ctags. */ - if (!CTAGS) - { - typedefs = typedefs_or_cplusplus = constantypedefs = TRUE; - globals = members = TRUE; - } + typedefs = typedefs_or_cplusplus = constantypedefs = TRUE; + globals = members = TRUE; /* When the optstring begins with a '-' getopt_long does not rearrange the non-options arguments to be at the end, but leaves them alone. */ @@ -1498,6 +1511,7 @@ main (argc, argv) exit (EXIT_SUCCESS); } + /* From here on, we are in (CTAGS && !cxref_style) */ if (update) { char cmd[BUFSIZ]; @@ -3006,11 +3020,6 @@ consider_token (str, len, c, c_extp, bracelev, parlev, is_func_or_var) return TRUE; } - /* - * This structdef business is NOT invoked when we are ctags and the - * file is plain C. This is because a struct tag may have the same - * name as another tag, and this loses with ctags. - */ switch (toktype) { case st_C_javastruct: @@ -3246,16 +3255,16 @@ make_C_tag (isfun) { /* This function is never called when token.valid is FALSE, but we must protect against invalid input or internal errors. */ - if (!DEBUG && !token.valid) - return; - if (token.valid) make_tag (token_name.buffer, token_name.len, isfun, token.line, token.offset+token.length+1, token.lineno, token.linepos); - else /* this case is optimised away if !DEBUG */ - make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""), - token_name.len + 17, isfun, token.line, - token.offset+token.length+1, token.lineno, token.linepos); + else if (DEBUG) + { /* this branch is optimised away if !DEBUG */ + make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""), + token_name.len + 17, isfun, token.line, + token.offset+token.length+1, token.lineno, token.linepos); + error ("INVALID TOKEN", NULL); + } token.valid = FALSE; } @@ -3978,7 +3987,7 @@ C_entries (c_ext, inf) make_C_tag (FALSE); /* a struct or enum */ break; } - bracelev++; + bracelev += 1; break; case '*': if (definedef != dnone) @@ -3992,23 +4001,21 @@ C_entries (c_ext, inf) case '}': if (definedef != dnone) break; + bracelev -= 1; if (!ignoreindent && lp == newlb.buffer + 1) { if (bracelev != 0) - token.valid = FALSE; + token.valid = FALSE; /* unexpected value, token unreliable */ bracelev = 0; /* reset brace level if first column */ parlev = 0; /* also reset paren level, just in case... */ } - else + else if (bracelev < 0) { - if (--bracelev < 0) - { - bracelev = 0; - token.valid = FALSE; /* something gone amiss, token unreliable */ - } - if (bracelev == 0 && fvdef == vignore) - fvdef = fvnone; /* end of function */ + token.valid = FALSE; /* something gone amiss, token unreliable */ + bracelev = 0; } + if (bracelev == 0 && fvdef == vignore) + fvdef = fvnone; /* end of function */ popclass_above (bracelev); structdef = snone; /* Only if typdef == tinbody is typdefbracelev significant. */ diff --git a/lib-src/makefile.w32-in b/lib-src/makefile.w32-in index 8e01c9dfeaf..8b327bfabf8 100644 --- a/lib-src/makefile.w32-in +++ b/lib-src/makefile.w32-in @@ -187,8 +187,8 @@ MSDOS_SUPPORT = \ $(lispsource)international/ccl.elc \ $(lispsource)international/codepage.elc VMS_SUPPORT = \ - $(lispsource)vmsproc.elc \ - $(lispsource)vms-patch.elc + $(lispsource)vmsproc.el \ + $(lispsource)vms-patch.el TOOLTIP_SUPPORT = $(lispsource)tooltip.elc WINDOW_SUPPORT = \ $(lispsource)fringe.elc \ diff --git a/lib-src/pop.c b/lib-src/pop.c index 9fcbe4b370c..5e6623aaf8d 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -1010,12 +1010,19 @@ socket_connection (host, flags) char *host; int flags; { +#ifdef HAVE_GETADDRINFO + struct addrinfo *res, *it; + struct addrinfo hints; + int ret; +#else /* !HAVE_GETADDRINFO */ struct hostent *hostent; +#endif struct servent *servent; struct sockaddr_in addr; char found_port = 0; char *service; int sock; + char *realhost; #ifdef KERBEROS #ifdef KERBEROS5 krb5_error_code rem; @@ -1031,11 +1038,11 @@ socket_connection (host, flags) CREDENTIALS cred; Key_schedule schedule; int rem; - char *realhost; #endif /* KERBEROS5 */ #endif /* KERBEROS */ int try_count = 0; + int connect_ok; #ifdef WINDOWSNT { @@ -1097,6 +1104,46 @@ socket_connection (host, flags) } +#ifdef HAVE_GETADDRINFO + memset (&hints, 0, sizeof(hints)); + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_CANONNAME; + hints.ai_family = AF_INET; + do + { + ret = getaddrinfo (host, service, &hints, &res); + try_count++; + if (ret != 0 && (ret != EAI_AGAIN || try_count == 5)) + { + strcpy (pop_error, "Could not determine POP server's address"); + return (-1); + } + } while (ret != 0); + + if (ret == 0) + { + it = res; + while (it) + { + if (it->ai_addrlen == sizeof (addr)) + { + struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr; + bcopy (&in_a->sin_addr, (char *) &addr.sin_addr, + sizeof (addr.sin_addr)); + if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) + break; + } + it = it->ai_next; + } + connect_ok = it != NULL; + if (connect_ok) + { + realhost = alloca (strlen (it->ai_canonname) + 1); + strcpy (realhost, it->ai_canonname); + } + freeaddrinfo (res); + } +#else /* !HAVE_GETADDRINFO */ do { hostent = gethostbyname (host); @@ -1116,10 +1163,18 @@ socket_connection (host, flags) break; hostent->h_addr_list++; } + connect_ok = *hostent->h_addr_list != NULL; + if (! connect_ok) + { + realhost = alloca (strlen (hostent->h_name) + 1); + strcpy (realhost, hostent->h_name); + } + +#endif /* !HAVE_GETADDRINFO */ #define CONNECT_ERROR "Could not connect to POP server: " - if (! *hostent->h_addr_list) + if (! connect_ok) { CLOSESOCKET (sock); strcpy (pop_error, CONNECT_ERROR); @@ -1130,6 +1185,7 @@ socket_connection (host, flags) } #ifdef KERBEROS + #define KRB_ERROR "Kerberos error connecting to POP server: " if (! (flags & POP_NO_KERBEROS)) { @@ -1157,7 +1213,7 @@ socket_connection (host, flags) if (rem = krb5_cc_get_principal (kcontext, ccdef, &client)) goto krb5error; - for (cp = hostent->h_name; *cp; cp++) + for (cp = realhost; *cp; cp++) { if (isupper (*cp)) { @@ -1165,7 +1221,7 @@ socket_connection (host, flags) } } - if (rem = krb5_sname_to_principal (kcontext, hostent->h_name, + if (rem = krb5_sname_to_principal (kcontext, realhost, POP_SERVICE, FALSE, &server)) goto krb5error; @@ -1210,7 +1266,6 @@ socket_connection (host, flags) } #else /* ! KERBEROS5 */ ticket = (KTEXT) malloc (sizeof (KTEXT_ST)); - realhost = strdup (hostent->h_name); rem = krb_sendauth (0L, sock, ticket, "pop", realhost, (char *) krb_realmofhost (realhost), (unsigned long) 0, &msg_data, &cred, schedule, @@ -1218,7 +1273,6 @@ socket_connection (host, flags) (struct sockaddr_in *) 0, "KPOPV0.1"); free ((char *) ticket); - free (realhost); if (rem != KSUCCESS) { strcpy (pop_error, KRB_ERROR); diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ba0a5477f00..b1214e069bf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,1639 @@ -2007-11-12 Katsumi Yamaoka +2007-12-06 Glenn Morris - * ldefs-boot.el: Regenerate. + * progmodes/antlr-mode.el (antlr-keyword, antlr-syntax) + (antlr-ruledef, antlr-tokendef, antlr-ruleref-face) + (antlr-tokenref, antlr-literal): Inherit from standard font-lock + faces in non-light-background case. + + * add-log.el, dired-aux.el, font-lock.el, help-fns.el, ido.el: + * informat.el, emacs-lisp/bytecomp.el, emacs-lisp/gulp.el: + * emacs-lisp/tcover-ses.el, emacs-lisp/timer.el, emulation/edt.el: + * emulation/vi.el, emulation/viper-cmd.el: + * international/titdic-cnv.el, mail/emacsbug.el, progmodes/dcl.el: + * progmodes/prolog.el, progmodes/ps-mode.el, progmodes/python.el: + * textmodes/fill.el: Remove directory part from filenames in + function declarations. + + * dired-aux.el (mailcap-mime-info): Update declaration. + +2007-12-05 Richard Stallman + + * wid-edit.el (widget-type): Doc fix. + +2007-12-05 Stefan Monnier + + * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords): + Don't match "sub { (...) ... }". + +2007-12-05 Richard Stallman + + * international/mule-cmds.el (toggle-input-method-active): New var. + (toggle-input-method): Bind toggle-input-method-active to t. + Error if it was already non-nil. + +2007-12-05 Reiner Steib + + * net/tls.el (tls-hostmismatch, open-tls-stream): Checkdoc cleanup. + +2007-12-05 Elias Oltmanns + + * net/tls.el (open-tls-stream): Actually consult tls-checktrust to + see if certs should be verified and what is to be done in the + event of a verification failure. + +2007-12-05 Reiner Steib + + * net/tls.el (tls-program): Provide more custom choices from + `tls-checktrust'. Refer to `tls-checktrust' in doc string. + (tls-process-connection-type, tls-success): Remove "*" in doc string. + (tls-checktrust, tls-hostmismatch, tls-untrusted): Add custom + version. Minor improvement to doc strings. + (tls-program): Add comment. + +2007-12-05 Elias Oltmanns + + * net/tls.el (tls-certtool-program, tls-hostmismatch): New variables. + (tls-checktrust): New variable. Check if GNU TLS complained about a + mismatch between the hostname provided in the certificate and the name + of the host connnecting to. + (open-tls-stream): Use them. Check certificates against trusted root + certificates. + +2007-12-05 Nathan J. Williams (tiny change) + + * net/imap.el (imap-mailbox-status-asynch): Upcase STATUS items. + (imap-parse-status): Upcase status-att for broken servers that sends + them lower-case (e.g., MS Exchange 2007). + +2007-12-05 D. Goel + + * simple.el (undo): + * image-dired.el (image-dired-display-thumb-properties): + (image-dired-modify-mark-on-thumb-original-file): + (image-dired-dired-display-properties): + * help.el (help-window-display-message): + * files.el (hack-local-variables-confirm): + * ediff.el (ediff-version): + * complete.el (pc-chunk-after, PC-temp-minibuffer-message): + `message' and `error': Ensure that first arg is a format string. + + * emacs-lisp/find-func.el (find-library-name): Prefer files with + ".el" suffix over "". + +2007-12-05 Michael Albinus + + * net/dbus.el (dbus-hash-table=): Allow nil as wildcard in the + interface and member fields. + +2007-12-05 Glenn Morris + + * eshell/em-alias.el (pcomplete-stub): Define for compiler. + (pcomplete-here): Autoload it. + + * eshell/em-basic.el (print-func): No need to define for compiler. + + * eshell/esh-cmd.el (eshell-debug-command): + * eshell/esh-io.el (eshell-print): Move definitions before use. + + * eshell/esh-module.el (eshell-load-defgroups): Eval and compile. + + * eshell/esh-util.el (top-level): Don't require pp. Use + condition-case rather than ignore-errors. + + * eshell/eshell.el (eshell-buffer-name): Define for compiler. + + * eshell/em-alias.el, eshell/em-banner.el, eshell/em-basic.el + * eshell/em-cmpl.el, eshell/em-dirs.el, eshell/em-glob.el + * eshell/em-hist.el, eshell/em-ls.el, eshell/em-pred.el + * eshell/em-prompt.el, eshell/em-rebind.el, eshell/em-script.el + * eshell/em-smart.el, eshell/em-term.el, eshell/em-unix.el + * eshell/em-xtra.el, eshell/esh-cmd.el, eshell/esh-test.el + * eshell/esh-util.el, eshell/eshell.el: Require individual files + if needed when compiling, rather than esh-maint. Collect any + require statements. Move provide statement to end. Move any + commentary to start. + + * eshell/esh-arg.el, eshell/esh-ext.el, eshell/esh-io.el: + * eshell/esh-mode.el, eshell/esh-module.el, eshell/esh-opt.el: + * eshell/esh-proc.el, eshell/esh-var.el: + Require individual files if needed when compiling, rather than + esh-maint. Collect any require statements. Leave provide at start. + Move any commentary to start. + + * emacs-lisp/bytecomp.el (byte-compile-declare-function): Remove + declared function from byte-compile-noruntime-functions. + + * ediff-util.el (ediff-version): + * progmodes/python.el (compilation-shell-minor-mode): + * textmodes/org.el (Info-goto-node, calendar-astro-date-string) + (calendar-bahai-date-string, calendar-check-holidays) + (calendar-chinese-date-string, calendar-coptic-date-string) + (calendar-ethiopic-date-string, calendar-forward-day) + (calendar-french-date-string, calendar-goto-date) + (calendar-goto-today, calendar-hebrew-date-string) + (calendar-islamic-date-string, calendar-iso-date-string) + (calendar-julian-date-string, calendar-mayan-date-string) + (calendar-persian-date-string, gnus-summary-last-subject) + (parse-time-string, rmail-show-message): Declare as functions. + +2007-12-05 Michael Olson + + * textmodes/remember.el: Merge contents of remember-diary.el here, + updating header. Add autoload cookie so that byte-compilation + works without warning. + (remember-diary-file): Default to nil, since diary might not yet + be loaded at this point, which would deny us access to diary-file. + (remember-diary-extract-entries): If remember-diary-file is nil, + then use diary-file instead. + + * textmodes/remember-diary.el: Remove, due to the issue of needing + the first 8 characters of a filename to be unique. + +2007-12-04 Michael Albinus + + * net/dbus.el (dbus-hash-table=): New defun. + (dbus-hash-table-test) New hash table test function, used in + `dbus-registered-functions-table'. + (dbus-check-event, dbus-handle-event, dbus-event-bus-name) + (dbus-event-service-name, dbus-event-path-name) + (dbus-event-interface-name, dbus-event-member-name): Rewritten, + due to new structure of `dbus-event'. + +2007-12-04 Juanma Barranquero + + * ido.el (ido-save-history): Set the `coding' local + variable in the first line of the file. + +2007-12-04 Glenn Morris + + * password-cache.el: Move here from gnus/password.el. + (top-level): Don't require cl when compiling. + (password-read-and-add): Doc fix. Make obsolete. + + * net/tramp.el: Require password-cache or password. + + * emulation/cua-base.el (top-level): Move (provide 'cua-base) to end. + No longer provide 'cua. Don't require cua-rect, cua-gmrk when + compiling. + (cua-set-rectangle-mark): Add doc string to autoload. + (cua--rectangle, cua--last-killed-rectangle) + (cua--global-mark-active): Always define for compiler. + (cua-copy-rectangle, cua-cut-rectangle, cua--rectangle-left) + (cua--delete-rectangle, cua--insert-rectangle) + (cua--rectangle-corner, cua--rectangle-assert) + (cua--insert-at-global-mark, cua--global-mark-post-command): + Declare as functions. + + * emulation/cua-gmrk.el (top-level): Move provide to end. + + * emulation/cua-rect.el (top-level): Move provide to end. + Don't require cua-gmrk when compiling. + (cua--cut-rectangle-to-global-mark) + (cua--copy-rectangle-to-global-mark): Declare as functions. + + * emulation/viper-init.el (viper-replace-overlay-cursor-color) + (viper-insert-state-cursor-color, viper-emacs-state-cursor-color) + (viper-vi-state-cursor-color): + Consolidate make-variable-frame-local calls. + + * net/eudcb-bbdb.el (bbdb-address-streets): Declare as a function. + (eudc-bbdb-extract-addresses): Use bbdb-address-streets rather + than bbdb-address-street1,2,3. + + * textmodes/reftex-toc.el (reftex-make-separate-toc-frame): + Try x-focus-frame before focus-frame. Only try focus-frame on XEmacs. + +2007-12-03 Karl Fogel + + * saveplace.el (save-place-quiet): Remove, reverting 2007-12-02T19:54:46Z!kfogel@red-bean.com. + (save-place-alist-to-file, load-save-place-alist-from-file): + Don't print non-error messages at all, there's really no need. + Do print if there's a problem, and clarify message in that case. + +2007-12-03 Dan Nicolaescu + + * ediff-diff.el (ediff-prepare-error-list): + * ediff-util.el (ediff-setup): Disable undo for ediff-error-buffer. + +2007-12-03 Tassilo Horn + + * doc-view.el (doc-view-initiate-display): Use `doc-view-mode-p'. + (doc-view-current-overlay, doc-view-pending-cache-flush): + Add doc string. + +2007-12-03 Richard Stallman + + * subr.el (declare-function): Moved from byte-run.el. + + * emacs-lisp/byte-run.el (declare-function): Moved to subr.el + + * window.el (recenter-top-bottom): Don't use `ecase'. + +2007-12-02 Karl Fogel + + * saveplace.el (save-place-alist-to-file): Set + coding-system-for-write once and refer to it throughout. + Suggested by David Reitter . + +2007-12-02 Karl Fogel + + * saveplace.el (save-place-alist-to-file): Use `utf-8' coding + system when writing, and set it in the first-line file variables. + Suggested by David Reitter and + Juanma Barranquero. + +2007-12-02 Glenn Morris + + * emacs-lisp/bytecomp.el (byte-compile-declare-function): + Reverse branches of if statement. + + * emulation/viper-cmd.el (top-level): Don't require advice. + Don't load viper-util, viper-keym, viper-mous, viper-macs, + viper-ex when compiling. + + * emulation/viper-ex.el (top-level): Don't load viper-util, + viper-keym when compiling. + + * emulation/viper-init.el (top-level): Move provide statement to end. + + * emulation/viper-keym.el (top-level): Don't load viper-util when + compiling. Move provide statement to end. + + * emulation/viper-macs.el (top-level): Don't load viper-util, + viper-keym, viper-mous when compiling. + + * emulation/viper-mous.el (top-level): Don't load viper-util when + compiling. + + * emulation/viper-util.el (top-level): Don't load viper-init when + compiling. + + * emulation/viper.el (top-level): Don't require ring. + Don't load viper-init, viper-cmd when compiling. + + * net/sasl-cram.el, net/sasl-digest.el, net/sasl-ntlm.el, net/sasl.el: + Move here from gnus/. + +2007-12-02 Karl Fogel + + Offer option for saveplace to be quiet about loading and saving. + Suggested by David Reitter + + * lisp/saveplace.el (save-place-quiet): New customizable boolean. + (save-place-alist-to-file, load-save-place-alist-from-file): Use it + to determine whether to print loading/saving messages. + +2007-12-02 Glenn Morris + + * mail/binhex.el: Move here from gnus/. + (binhex): New custom group. + (binhex-decoder-program, binhex-decoder-switches) + (binhex-use-external): Move to the binhex custom group. + + * mail/uudecode.el: Move here from gnus/. + (uudecode): New custom group. + (uudecode-decoder-program, uudecode-decoder-switches) + (uudecode-use-external): Move to the uudecode custom group. + + * net/netrc.el (top-level): Don't load `encrypt' features. + (netrc-parse): Don't use encrypt. + (netrc-find-service-name, netrc-find-service-number): Don't use caddr. + + * progmodes/python.el (top-level): Don't require cl when compiling. + +2007-12-02 Agust,Am(Bn Mart,Am(Bn + + * textmodes/flyspell.el (flyspell-large-region): Explicitly set + encoding for aspell process and for communication with it. + Only add "-d" option if not already present. + Use ispell-current-dictionary and ispell-current-personal-dictionary. + General reorganization. + + * textmodes/ispell.el (ispell-aspell-find-dictionary): Do not set + encoding here. + (ispell-start-process): Explicitly set encoding here if using aspell. + +2007-12-02 Dan Nicolaescu + + * pcvs.el (cvs-mode-commit, cvs-mode-edit-log): Also pass a diff + function to log-edit. + +2007-12-02 Michael Albinus + + * net/dbus.el: New file. + +2007-12-02 Jay Belanger + + * calc/calc.el (calc-lang-slash-idiv, calc-lang-allow-underscores) + (calc-lang-c-type-hex, calc-lang-brackets-are-subscripts) + (calc-lang-parens-are-subscripts): New variables. + (math-expr-special-function-mapping): Remove variable. + (math-eqn-ignore-words, math-tex-ignore-words) + (math-latex-ignore-words): Move to calc-lang.el. + + * calc/calc-lang.el (math-compose-vector, math-compose-var) + (math-tex-expr-is-flat): Declare as functions. + (calc-lang-slash-idiv, calc-lang-allow-underscores) + (math-comp-left-bracket, math-comp-right-bracket) + (math-comp-comma, math-comp-vector-prec): Declare as variables. + (math-var-formatter, math-matrix-formatter) + (math-lang-adjust-words, math-lang-read-symbol, math-land-read) + (math-punc-table, math-compose-subscr,math-dots) + (math-func-formatter): New property names to store language + specific information. + (math-compose-tex-var, math-compose-tex-intv) + (math-compose-maple-intv, math-compose-eqn-intv) + (math-compose-tex-sum, math-compose-tex-func) + (math-compose-tex-intv): New functions. + (math-eqn-ignore-words,math-tex-ignore-words) + (math-latex-ignore-words): Move from calc.el. + (math-special-function-table): Add entries for tex. + (calc-lang-slash-idiv, calc-lang-allows-underscores): + New variables. + (math-compose-latex-frac): Rename from `math-latex-print-frac'. + (math-compose-tex-matrix, math-compose-eqn-matrix) + (math-eqn-special-functions): Move from calccomp.el. + + * calc/calccomp.el (math-compose-var): New function. + (math-compose-expr): Allow more special functions to be used. + Change test for formatting fractions. Use variables and property + names to help with language specific formatting. + (math-compose-tex-matrix, math-compose-eqn-matrix) + (math-eqn-special-functions): Move to calc-lang.el. + (math-compose-rows): Use property names to help with language + specific formatting. + + * calc/calc-aent.el (math-read-factor): Turn multiple subscripts + into nested subscripts. + (math-read-token): Use variables and property names to help with + language specific parsing. + (math-read-expression-level): Use variables to help with language + specific parsing. + +2007-12-02 Stefan Monnier + + * arc-mode.el (archive-find-type): Add recognition of rar-exe format. + (archive-rar-summarize): Allow the file name to be passed as argument. + Remove unused vars `header' and `footer'. + (archive-rar-exe-summarize, archive-rar-exe-extract): New functions. + +2007-12-01 Dan Nicolaescu + + * log-edit.el (log-edit-show-diff): New function. + (log-edit-mode-map, log-edit-menu): Bind it. + (log-edit-diff-function): New variable. + (log-edit): Change the 3rd param to be an alist and accept a + function that computes a diff for the files involved. + + * vc.el (vc-log-edit): Add a diff function parameter to log-edit. + +2007-12-01 Martin Rudalics + + * play/blackbox.el (bb-up, bb-down): Revert 2007-10-21 change and + wrap next-/previous-line in with-no-warnings. + +2007-12-01 Glenn Morris + + * format-spec.el, hex-util.el, sha1.el: Move here from gnus/. + + * net/dig.el: Move here from gnus/. + (dig-mode): Replace gnus-run-mode-hooks with equivalent expansion. + + * net/dns.el: Move here from gnus/. + (top-level): Don't require mm-util, or cl when compiling. + (dns-write-name, dns-read, dns-read-type, query-dns): + Replace mm-with-unibyte-buffer with its expansion. + (query-dns): Replace decf and ignore-errors with non-cl equivalents. + + * progmodes/gdb-ui.el (gud-remove, gud-break): + * progmodes/gud.el (gdb-create-define-alist) + (gdb-restore-windows, gdb-reset, global-hl-line-highlight) + (hl-line-highlight, gdb-display-source-buffer) + (gdb-display-buffer, c-langelem-sym, c-langelem-pos) + (syntax-symbol, syntax-point, gdb-enqueue-input): Declare as functions. + +2007-11-30 Dan Nicolaescu + + * textmodes/org-export-latex.el (org-export-latex-cleaned-string): + Move args on defun line. + + * textmodes/org.el (org-calendar-holiday): + Use calendar-check-holidays instead of the obsolete + check-calendar-holidays. + (add-to-diary-list, table--at-cell-p, Info-find-node, bbdb) + (bbdb-company, bbdb-current-record, bbdb-name) + (bbdb-record-getprop, bbdb-record-name) + (bibtex-beginning-of-entry, bibtex-generate-autokey) + (bibtex-parse-entry, bibtex-url, cdlatex-tab) + (dired-get-filename, gnus-article-show-summary, mh-display-msg) + (mh-find-path, mh-get-header-field, mh-get-msg-num) + (mh-header-display, mh-index-previous-folder) + (mh-normalize-folder-name, mh-search, mh-search-choose, mh-show) + (mh-show-buffer-message-number, mh-show-header-display) + (mh-show-msg, mh-show-show, mh-visit-folder) + (org-export-latex-cleaned-string, remember) + (remember-buffer-desc, rmail-narrow-to-non-pruned-header) + (rmail-what-message, elmo-folder-exists-p) + (elmo-message-entity-field, elmo-message-field) + (vm-beginning-of-message, vm-follow-summary-cursor) + (vm-get-header-contents, vm-isearch-narrow, vm-isearch-update) + (vm-select-folder-buffer, vm-su-message-id, vm-su-subject) + (vm-summarize, wl-folder-get-elmo-folder) + (wl-summary-goto-folder-subr) + (wl-summary-jump-to-msg-by-message-id, wl-summary-line-from) + (wl-summary-line-subject, wl-summary-message-number) + (wl-summary-redisplay): Declare as functions. + +2007-11-30 Martin Rudalics + + * longlines.el (longlines-show-hard-newlines): Remove handling of + buffer-undo-list and buffer-modified status. + (longlines-show-region, longlines-unshow-hard-newlines): + Handle buffer-undo-list, buffer-modified status, inhibit-read-only, and + inhibit-modification-hooks here to avoid that a buffer appears + modified when toggling visibility of hard newlines. + +2007-11-30 Glenn Morris + + * nxml/rng-maint.el (rng-do-some-validation): Fix declaration. + + * progmodes/idlw-complete-structtag.el + (idlwave-sintern-structtag): + * progmodes/idlw-help.el (idlwave-sintern-sysvar) + (idlwave-sintern-sysvartag): + * progmodes/idlwave.el (idlwave-sintern-class-tag) + (idlwave-sintern-sysvar, idlwave-sintern-sysvartag): Declare as + functions. + +2007-11-30 Dan Nicolaescu + + * textmodes/reftex-index.el (texmathp): + * textmodes/reftex-auc.el (TeX-argument-insert) + (TeX-argument-prompt, multi-prompt, LaTeX-add-index-entries) + (LaTeX-add-labels, LaTeX-bibitem-list, LaTeX-index-entry-list) + (LaTeX-label-list): + * nxml/rng-maint.el (rng-clear-cached-state, rng-clear-overlays) + (rng-clear-conditional-region, rng-do-some-validation): Declare as + functions. + (rng-error-count, rng-validate-up-to-date-end): Pacify byte compiler. + +2007-11-30 Glenn Morris + + * emacs-lisp/byte-run.el (declare-function): Add optional fourth + argument and document it. + + * emacs-lisp/bytecomp.el (byte-compile-declare-function): + Third argument to declare-function must be a list to specify arglist. + + * emacs-lisp/check-declare.el (check-declare-scan): Doc fix. + Handle declare-function third argument `t' and fourth argument. + (check-declare-verify): Doc fix. Handle `fileonly' case. + Use progn rather than prog1. + + * desktop.el (uniquify-item-base): + * term/mac-win.el (url-type): Declare as functions. + + * net/eudcb-bbdb.el (bbdb-phone-location, bbdb-record-phones) + (bbdb-address-city, bbdb-address-state, bbdb-address-zip) + (bbdb-address-location, bbdb-record-addresses): Pass non-nil + fourth arg to declare-function. + + * play/dunnet.el: Don't require cl when compiling. + (byte-compile-warnings): Set via file local variables. + (dun-parse): Let-bind `beg' and `line'. + +2007-11-29 Alexandre Julliard + + * vc-git.el (vc-git-dir-state): Fix the git command arguments. + +2007-11-29 Ari Roponen (tiny change) + + * calendar/time-date.el (encode-time-value): Doc fix. + +2007-11-29 Glenn Morris + + * calendar/time-date.el (with-decoded-time-value): Doc fix. + + * textmodes/css-mode.el (prog-mode): Remove. + (css-mode): Derive from fundamental-mode rather than prog-mode. + + * emacs-lisp/byte-run.el (declare-function): Doc fix. + + * emacs-lisp/check-declare.el (check-declare-locate) + (check-declare-verify): Handle `external' files. + (check-declare-errmsg): New function. + (check-declare-verify, check-declare-file, check-declare-directory): + Use check-declare-errmsg to report the number of problems. + + * ffap.el (w3-view-this-url) + * mail/mspools.el (vm-visit-folder) + * net/browse-url.el (w3-fetch-other-window, w3-fetch) + * net/eudcb-bbdb.el (bbdb-phone-location, bbdb-phone-string) + (bbdb-record-phones, bbdb-address-city, bbdb-address-state) + (bbdb-address-zip, bbdb-address-location, bbdb-record-addresses) + (bbdb-records) + * net/eudc-export.el (bbdb-parse-phone-number, bbdb-string-trim) + * net/imap.el (sasl-find-mechanism, sasl-mechanism-name) + (sasl-make-client, sasl-next-step, sasl-step-data) + (sasl-step-set-data) + * net/newsticker.el (w3m-toggle-inline-image, htmlr-reset) + (htmlr-step): Declare as functions. + + * net/eudcb-bbdb.el (eudc-bbdb-extract-addresses): + Use bbdb-address-zip rather than bbdb-address-zip-string. + +2007-11-28 Richard Stallman + + * md4.el, net/hmac-def.el, net/hmac-md5.el, net/ntlm.el: + Move here from gnus/. + +2007-11-28 Martin Rudalics + + * newcomment.el (comment-region-internal): Fix newline insertion + in `block' case. + +2007-11-28 Stefan Monnier + + * pcvs-parse.el (cvs-parse-table): Adjust regexp for resurrections. + +2007-11-28 Glenn Morris + + * Makefile.in (maintainer-clean): Depend on bootstrap-clean to + delete .elc files. + + * nxml/char-name/unicode: Move to etc/nxml/. + * nxml/nxml-uchnm.el (top-level): Adapt for moved unicode files. + + * nxml/nxml-enc.el (xmltok-get-declared-encoding-position): + Declare as a function. + + * nxml/nxml-maint.el (nxml-create-unicode-char-name-sets): + * nxml/nxml-mode.el (nxml-get-char-name, nxml-insert-named-char): + * nxml/xsd-regexp.el (xsdre-gen-categories): Change mapcar -> mapc. + + * nxml/nxml-outln.el (nxml-token-start-tag-p) + (nxml-token-end-tag-p): Move definitions before use. + + * nxml/nxml-rap.el (nxml-prolog-regions): Declare for compiler. + + * nxml/nxml-uchnm.el (top-level) + (nxml-enable-unicode-char-name-sets-1): Use mapc rather than mapcar. + (nxml-enabled-unicode-blocks): Add custom group. + + * nxml/xmltok.el (xmltok-scan-char-ref, xmltok-char-number): + Use string-to-number rather than string-to-int. + + * dired-x.el (dired-omit-old-add-entry): Declare as function. + Move definition before use. + (dired-old-find-buffer-nocreate): Declare as function. + + * emacs-lisp/check-declare.el (check-declare-locate): Reflow doc. + (check-declare-verify): Handle fset. + + * emulation/edt.el (edt-user-emulation-setup): + Test edt-setup-user-bindings is bound before calling. + + * emulation/tpu-edt.el: Don't require cl when compiling. + (tpu-emacs-search, tpu-emacs-rev-search): Declare as functions. + (tpu-edt-off): Use condition-case rather than ignore-errors. + Use with-no-warnings. + + * eshell/esh-util.el (top-level): Use require rather than load for + ange-ftp. + + * mail/supercite.el (sc-version): Redefine as an alias for + emacs-version. + (sc-help-address): Remove. + (sc-version): Use emacs-version rather than sc-version. + (sc-submit-bug-report): Redefine as an alias for report-emacs-bug. + + * net/socks.el (socks-original-open-network-stream): Declare as + function. Move definition before use. + +2007-11-28 Jay Belanger + + * calc/calc-ext.el (math-sqrt-raw, math-map-vec) + (math-make-frac): Declare as functions. + +2007-11-27 Dan Nicolaescu + + * progmodes/cperl-mode.el (compilation-error-regexp-alist): + Pacify byte compiler. + (cperl-mode): Use with-no-warnings for setting vc-header-alist. + + * progmodes/idlwave.el (idlwave-shell-get-path-info) + (idlwave-shell-temp-file, idlwave-shell-is-running) + (widget-value, comint-dynamic-complete-filename, Info-goto-node): + * progmodes/idlw-help.el (idlwave-prepare-structure-tag-completion) + (idlwave-all-method-classes, idlwave-all-method-keyword-classes) + (idlwave-beginning-of-statement, idlwave-best-rinfo-assoc) + (idlwave-class-found-in, idlwave-class-or-superclass-with-tag) + (idlwave-completing-read, idlwave-current-routine) + (idlwave-downcase-safe, idlwave-entry-find-keyword) + (idlwave-expand-keyword, idlwave-find-class-definition) + (idlwave-find-inherited-class, idlwave-find-struct-tag) + (idlwave-get-buffer-visiting, idlwave-in-quote) + (idlwave-make-full-name, idlwave-members-only) + (idlwave-popup-select, idlwave-routine-source-file) + (idlwave-routines, idlwave-sintern-class) + (idlwave-sintern-keyword, idlwave-sintern-method) + (idlwave-sintern-routine-or-method) + (idlwave-substitute-link-target, idlwave-sys-dir) + (idlwave-this-word, idlwave-what-module-find-class) + (idlwave-where): + * progmodes/idlw-complete-structtag.el (idlwave-shell-buffer): + * mail/uce.el (rmail-msg-is-pruned) + (rmail-maybe-set-message-counters, rmail-msgbeg, rmail-msgend) + (rmail-toggle-header): + * mail/sendmail.el (dired-view-file, dired-get-filename): + * mail/rmailkwd.el (rmail-maybe-set-message-counters) + (rmail-display-labels, rmail-msgbeg) + (rmail-set-message-deleted-p, rmail-message-labels-p) + (rmail-show-message, mail-comma-list-regexp) + (mail-parse-comma-list): + * mail/rmail.el (rmail-spam-filter, rmail-summary-goto-msg) + (rmail-summary-mark-undeleted, rmail-summary-mark-deleted) + (rfc822-addresses, mail-abbrev-make-syntax-table) + (mail-sendmail-delimit-header, mail-header-end): + * mail/hashcash.el (message-narrow-to-headers-or-head) + (message-fetch-field, message-goto-eoh) + (message-narrow-to-headers): + * vc.el (view-mode-exit): Declare as functions. + + * mail/vms-pmail.el: + * vmsproc.el: + * vms-patch.el: Don't byte compile these files, they don't work. + +2007-11-27 Glenn Morris + + * calc/calc-ext.el (math-read-big-rec): + * calc/calc-nlfit.el (math-map-binop): + * calc/calc.el (math-normalize-nonstandard): Fix declarations. + + * eshell/eshell.el (eshell-report-bug): Add version number of + obsolescence. + + * emulation/viper.el, emulation/viper-util.el, + emulation/viper-macs.el, emulation/viper-keym.el, + emulation/viper-ex.el, emulation/viper-cmd.el: + Load viper-*.el files silently. + + * ediff-diff.el, ediff-help.el, ediff-merg.el, ediff-mult.el, + ediff-ptch.el, ediff-util.el, ediff-vers.el, ediff-wind.el, ediff.el: + Load ediff-*.el files silently. + + * ediff.el: Load dired silently. Don't load info, pcl-cvs when + compiling. + (Info-goto-node): Declare as a function. + + * ediff-init.el: Don't load ange-ftp when compiling. + * ediff-util.el: Don't load reporter when compiling. + + * ediff-wind.el (ediff-display-pixel-width) + (ediff-display-pixel-height): + * generic-x.el (ini-generic-mode): + * ps-print.el (ps-mule-encode-header-string, ps-mule-begin-page) + (ps-mule-prepare-ascii-font, ps-mule-set-ascii-font) + (ps-mule-initialize, ps-mule-begin-job): + * calendar/cal-bahai.el (add-to-diary-list, diary-name-pattern) + (mark-calendar-days-named): + * calendar/cal-hebrew.el (holiday-filter-visible-calendar) + (add-to-diary-list, diary-name-pattern) + (mark-calendar-days-named): + * calendar/cal-islam.el (add-to-diary-list, diary-name-pattern) + (mark-calendar-days-named): + * calendar/cal-x.el (make-fancy-diary-buffer): + * calendar/holidays.el (calendar-absolute-from-julian): + * calendar/todo-mode.el (calendar-current-date): + * calendar/cal-menu.el (calendar-increment-month) + (calendar-month-name, extract-calendar-year) + (calendar-cursor-to-date, holiday-list, calendar-sunrise-sunset) + (calendar-current-date, calendar-cursor-holidays) + (calendar-date-string, insert-diary-entry, calendar-set-mark) + (cal-tex-cursor-day, cal-tex-cursor-week, cal-tex-cursor-week2) + (cal-tex-cursor-week-iso, cal-tex-cursor-week-monday) + (cal-tex-cursor-filofax-daily, cal-tex-cursor-filofax-2week) + (cal-tex-cursor-filofax-week, cal-tex-cursor-month) + (cal-tex-cursor-month-landscape, cal-tex-cursor-year) + (cal-tex-cursor-filofax-year, cal-tex-cursor-year-landscape) + (calendar-day-of-year-string, calendar-iso-date-string) + (calendar-julian-date-string, calendar-astro-date-string) + (calendar-absolute-from-gregorian, calendar-hebrew-date-string) + (calendar-persian-date-string, calendar-bahai-date-string) + (calendar-islamic-date-string, calendar-chinese-date-string) + (calendar-coptic-date-string, calendar-ethiopic-date-string) + (calendar-french-date-string, calendar-mayan-date-string) + (calendar-print-chinese-date, calendar-goto-date): + Declare as functions. + + * calendar/calendar.el (nongregorian-diary-listing-hook): Doc fix. + (Info-find-emacs-command-nodes, Info-find-node): Declare as functions. + + * ffap.el (ffap-bug, ffap-submit-bug): Redefine as obsolete + aliases for report-emacs-bug. + (gnus-summary-select-article, gnus-configure-windows): Declare as + functions. + + * pgg-parse.el (pgg-parse-24, pgg-parse-crc24-string): Declare for + compiler. + + * pgg.el (pgg-clear-string): Declare as a function. + (pgg-run-at-time-1): Wrap whole definition in (featurep 'xemacs) test. + (pgg-run-at-time, pgg-cancel-timer): Move definitions before use. + + * emacs-lisp/check-declare.el (check-declare-locate): + Handle compressed files. + (check-declare-verify): Handle define-generic-mode, + define-global(ized)-minor-mode, define-obsolete-function-alias. + +2007-11-27 Jay Belanger + + * calc/calc-menu.el (calc-modes-menu): Add normal and incomplete + algebraic modes. + + * calc/calc-aent.el (calc-refresh-evaltos, calc-execute-kbd-macro) + (math-is-true, calc-explain-why, calc-alg-edit) + (math-composite-inequalities, math-flatten-lands) + (math-multi-subst, calcFunc-vmatches, math-simplify) + (math-known-matrixp, math-parse-fortran-subscr, math-to-radians-2) + (math-read-string, math-read-brackets, math-read-angle-brackets): + Declare as functions. + + * calc/calcalg3.el (calc-fit-s-shaped-logistic-curve) + (calc-fit-bell-shaped-logistic-curve) + (calc-fit-hubbert-linear-curve, calc-graph-add-curve) + (calc-graph-lookup, calc-graph-set-styles, math-min-list) + (math-max-list): Declare as functions. + (math-map-binop): New function. + (calc-curve-fit): Replace `mapcar*' by `math-map-binop'. + + * calc/calc.el (calc-set-language, calc-edit-finish) + (calc-edit-cancel, calc-do-quick-calc, calc-do-calc-eval) + (calc-do-keypad, calcFunc-unixtime, math-parse-date) + (math-lessp, calc-embedded-finish-command) + (calc-embedded-select-buffer, calc-embedded-mode-line-change) + (calc-push-list-in-macro, calc-replace-selections) + (calc-record-list, calc-normalize-fancy, calc-do-handle-whys) + (calc-top-selected, calc-sel-error, calc-pop-stack-in-macro) + (calc-embedded-stack-change, calc-refresh-evaltos) + (calc-do-refresh, calc-binary-op-fancy, calc-unary-op-fancy) + (calc-delete-selection, calc-alg-digit-entry, calc-alg-entry) + (calc-dots, calc-temp-minibuffer-message, math-read-radix-digit) + (calc-digit-dots, math-normalize-fancy, math-normalize-nonstandard) + (math-recompile-eval-rules, math-apply-rewrites, calc-record-why) + (math-dimension-error, calc-incomplete-error, math-float-fancy) + (math-neg-fancy, math-zerop, calc-add-fractions) + (math-add-objects-fancy, math-add-symb-fancy, math-mul-zero) + (calc-mul-fractions, math-mul-objects-fancy, math-mul-symb-fancy) + (math-reject-arg, math-div-by-zero, math-div-zero, math-make-frac) + (calc-div-fractions, math-div-objects-fancy, math-div-symb-fancy) + (math-compose-expr, math-comp-width, math-composition-to-string) + (math-stack-value-offset-fancy, math-format-flat-expr-fancy) + (math-adjust-fraction, math-format-binary, math-format-radix) + (math-group-float, math-mod, math-format-number-fancy) + (math-format-bignum-fancy, math-read-number-fancy) + (calc-do-grab-region, calc-do-grab-rectangle, calc-do-embedded) + (calc-do-embedded-activate, math-do-defmath) + (calc-load-everything): Declare as functions. + + * calc/calc-ext.el (math-clip, math-round, math-simplify) + (math-simplify-extended, math-simplify-units, calc-set-language) + (calc-flush-caches, calc-save-modes, calc-embedded-modes-change) + (calc-embedded-var-change, math-mul-float, math-arctan-raw) + (math-sqrt-float, math-exp-minus-1-raw, math-normalize-polar) + (math-normalize-hms, math-normalize-mod, math-make-sdev) + (math-make-intv, math-normalize-logical-op, math-possible-signs) + (math-infinite-dir, math-calcFunc-to-var) + (calc-embedded-evaluate-expr, math-known-nonzerop) + (math-read-expr-level, math-read-big-rec, math-read-big-balance) + (math-format-date, math-vector-is-string, math-vector-to-string) + (math-format-radix-float, math-compose-expr, math-abs) + (math-format-bignum-binary, math-format-bignum-octal) + (math-format-bignum-hex, math-format-bignum-radix) + (math-compute-max-digits): Declare as functions. + (math-provably-realp): Fix typo. + + * calc/calc-forms.el (calendar-current-time-zone) + (calendar-absolute-from-gregorian, dst-in-effect): Declare as + functions. + + * calc/calc-help.el (Info-goto-node, Info-last): Declare as functions. + + * calc/calc-lang.el (math-read-factor, math-read-expr-level): + Declare as functions. + + * calc/calc-macs.el (math-zerop, math-negp, math-looks-negp) + (math-posp, math-compare, math-bignum, math-compare-bignum): + Declare as functions. + + * calc/calc-misc.el (calc-do-keypad, calc-inv-hyp-prefix-help) + (calc-inverse-prefix-help, calc-hyperbolic-prefix-help) + (calc-explain-why, calc-clear-command-flag) + (calc-roll-down-with-selections, calc-roll-up-with-selections) + (calc-last-args, calc-is-inverse, calc-do-prefix-help) + (math-objvecp, math-known-scalarp, math-vectorp, math-matrixp) + (math-trunc-special, math-trunc-fancy, math-floor-special) + (math-floor-fancy, math-square-matrixp, math-matrix-inv-raw) + (math-known-matrixp, math-mod-fancy, math-pow-of-zero) + (math-pow-zero, math-pow-fancy): Declare as functions. + + * calc/calc-mode.el (calc-embedded-save-original-modes): + Declare as a function. + + * calc/calc-nlfit.el (calc-get-fit-variables, math-map-binop): + Declare as functions. + (math-nlfit-make-matrix, math-nlfit-find-qmax, math-nlfit-fit) + (math-nlfit-fit-curve, calc-fit-hubbert-linear-curve): + Replace `mapcar*' by `math-map-binop'. + (math-nlfit-make-matrix): Replace `copy-list' with `copy-sequence'. + + * calc/calc-prog.el (edmacro-format-keys,edmacro-parse-keys) + (math-read-expr-level): Declare as functions. + + * calc/calc-vec.el (math-read-expr-level): Declare as a function. + +2007-11-26 Stefan Monnier + + * emacs-lisp/lisp.el (end-of-defun): Restructure so that + end-of-defun-function is called consistently, even for negative + arguments. + (end-of-defun-function): Default to forward-sexp. + +2007-11-26 Juanma Barranquero + + * emacs-lisp/bytecomp.el (batch-byte-recompile-directory): Doc fix. + +2007-11-26 Glenn Morris + + * calendar/cal-menu.el (cal-menu-holidays-menu): Use :label rather + than :suffix. + + * emacs-lisp/easymenu.el (easy-menu-define): Doc fix. + +2007-11-26 Simon Josefsson + + * net/imap.el: Move from ../gnus. + +2007-11-25 Reiner Steib + + * doc-view.el (doc-view-mode-p): New function. + +2007-11-25 Dan Nicolaescu + + * mail/mspools.el (rmail-get-new-mail): + * mail/reporter.el (mail-position-on-field, mail-text): + * mail/rmail.el (mail-position-on-field, mail-text-start) + (rmail-update-summary): + * mail/rmailedit.el (rmail-summary-disable, rmail-summary-enable): + * mail/rmailmsc.el (rmail-parse-file-inboxes, rmail-show-message): + * mail/rmailout.el (rmail-update-summary): + * mail/rmailsort.el (rmail-update-summary): + * mail/sendmail.el (dired-move-to-filename, dired-get-filename) + (dired-view-file): + * mail/uce.el (mail-strip-quoted-names): + * mail/undigest.el (rmail-update-summary): + * mail/unrmail.el (mail-strip-quoted-names): + * ediff.el (diff-latest-backup-file): Declare as functions. + + * obsolete/mlsupport.el (ml-previous-page): Fix typo. + (kill-to-end-of-line): + * obsolete/rnews.el (news-set-minor-modes): + Remove non working functions. + +2007-11-25 Glenn Morris + + * eshell/esh-maint.el (top-level): Use require with NOERROR for + pcomplete. Don't mess with load-path. + + * eshell/eshell.el (eshell-report-bug-address): Remove. + (eshell-report-bug): Redefine as an alias for report-emacs-bug. + +2007-11-24 Glenn Morris + + * calendar/appt.el: Remove leading `*' from defcustom doc-strings. + (appt-disp-window): Don't require electric. + Simplify minibuffer-avoidance code. + (appt-select-lowest-window): Avoid minibuffer. + + * eshell/eshell.el: Remove leading `*' from defcustom doc-strings. + (esh-mode): Require it. + (esh-util): Use require rather than featurep and load. + (eshell): No need to test if eshell-mode is bound; remove obsolete + reference to eshell-auto. + (eshell-command, eshell-command-result): Don't require esh-mode + now that the file does. + (top-level): Move provide statement to the end of the file. + Re-order and update commentary. + +2007-11-24 Thien-Thi Nguyen + + * vc.el (vc-annotate-mode): Frob buffer invisibility spec. + (vc-annotate-toggle-annotation-visibility): New command. + (vc-annotate-mode-map): Bind "V" to it. + (vc-annotate-mode-menu): Add entry for it. + (vc-annotate-get-time-set-line-props): New func. + (vc-annotate-display-autoscale) + (vc-annotate-display-difference): Use it. + + * vc-git.el (vc-git-annotate-time): Handle optional field FILENAME. + Also, match one space at end of annotation text, after last paren. + +2007-11-24 Michael Albinus + + * ido.el (ido-file-name-all-completions-1): Check for fboundp of + `tramp-completion-mode-p' as it is in Tramp 2.1. Let-bind + `tramp-completion-mode'. + +2007-11-24 Thien-Thi Nguyen + + * vc-git.el (vc-git-show-log-entry): New func. + + * vc-git.el (vc-git--call, vc-git--out-ok): New funcs. + (vc-git-state): Use vc-git--call. + (vc-git-registered, vc-git-working-revision) + (vc-git-previous-revision, vc-git-next-revision) + (vc-git--run-command-string, vc-git-symbolic-commit): + Use vc-git--out-ok. + +2007-11-24 Glenn Morris + + * emacs-lisp/byte-run.el (declare-function): Doc fix. + +2007-11-24 Kenichi Handa + + * international/ucs-tables.el (ucs-8859-7-alist): Update the table. + +2007-11-23 David Kastrup + + * server.el (server-process-filter): Use `command-line-args-left'. + +2007-11-23 Stefan Monnier + + * nxml/subdirs.el, nxml/char-data/subdirs.el, nxml/rng-auto.el: Remove. + +2007-11-23 Dan Nicolaescu + + * vc.el (vc-deduce-fileset): Also look for a fileset in the parent + buffer if the parent buffer is in vc-dired-mode. + +2007-11-23 Mark A. Hershberger + + * nxml: Initial merge of nxml. Kept nxml/char-name subdir for now. + +2007-11-23 Juri Linkov + + * dired.el (dired-read-dir-and-switches): For C-x d, set the + value for M-n to the visited file name of the current buffer. + Use minibuffer-with-setup-hook to set minibuffer-default to + buffer-file-name inside read-file-name. + + * man.el (Man-getpage-in-background): Don't disregard user option + `Man-width' on non-window systems. Remove test for `window-system' + around setting envvar "COLUMNS" depending on the value of `Man-width'. + + * progmodes/grep.el (grep-process-setup): Set envvar "TERM" to + "emacs-grep". Set envvar "GREP_OPTIONS" to "--color=auto" instead + of "--color=always". + +2007-11-22 Stefan Monnier + + * emacs-lisp/lisp.el (beginning-of-defun-raw): Pass `arg' down to + beginning-of-defun-function. + +2007-11-22 Reiner Steib + + * mail/hashcash.el: Move from ../gnus. Add hashcash payments to email. + +2007-11-22 Glenn Morris + + * emulation/cua-base.el (x-clipboard-yank): Fix declaration. + + * emacs-lisp/check-declare.el (check-declare-locate): New function. + (check-declare-scan): Use check-declare-locate. + (check-declare-verify): No longer adjust fnfile, now + check-declare-locate does it. + + * emacs-lisp/byte-run.el (declare-function): Doc fix. + +2007-11-22 Stefan Monnier + + * subr.el (posn-col-row): Make the `default-value' use explicit. + + * window.el (balance-windows): Remove unused var `counter'. + (bw-balance-sub): Remove unused var `lastchild'. + (split-window-vertically): Remove unused var `switch'. + (recenter-top-bottom): Remove unused vars `bottom', `current', `total'. + + * emacs-lisp/bytecomp.el + (byte-compile-file-form-custom-declare-variable): Simplify. + +2007-11-22 Juanma Barranquero + + * cus-edit.el (custom-mode): Define with `define-derived-mode'. + Set `show-trailing-whitespace' to nil. + + * dired.el (make-symbolic-link): + * dired-aux.el (mailcap-parse-mailcaps, mailcap-parse-mimetypes) + (mailcap-extension-to-mime, mailcap-mime-info, make-symbolic-link): + * dired-x.el (make-symbolic-link): + * frame.el (x-initialize-window-system): + * menu-bar.el (x-menu-bar-open): + * select.el (x-get-cut-buffer-internal, x-rotate-cut-buffers-internal) + (x-store-cut-buffer-internal): + * wdired.el (make-symbolic-link): + * x-dnd.el (x-register-dnd-atom, x-get-atom-name) + (x-send-client-message): + * emulation/cua-base.el (x-clipboard-yank): Declare as functions. + +2007-11-22 Jan Dj,Ad(Brv + + * term/x-win.el (x-gtk-map-stock): Check if FILE is a string. + +2007-11-22 Glenn Morris + + * dos-fns.el (int86): + * term/mac-win.el (mac-font-panel-mode): Fix declarations. + + * calendar/cal-menu.el (cal-menu-holidays-menu): Fix holiday-list call. + + * calendar/holidays.el (holiday-list): Add autoload cookie. + + * emacs-lisp/check-declare.el (check-declare-scan): Expand .c + files relative to src/ directory. + (check-declare-verify): Handle .c files. Warn if could not find + an arglist to check. + + * emacs-lisp/byte-run.el (declare-function): Doc fix. + +2007-11-22 Dan Nicolaescu + + * replace.el (occur-mode-map): Add a major mode menu with entries + for all occur operations. + + * international/titdic-cnv.el (dos-8+3-filename): + * obsolete/fast-lock.el (msdos-long-file-names): + * frame.el (msdos-mouse-p): + * files.el (msdos-long-file-names, w32-long-file-name): + * term/mac-win.el (mac-code-convert-string, mac-coerce-ae-data) + (mac-resume-apple-event, mac-font-panel-mode) + (mac-atsu-font-face-attributes, mac-ae-set-reply-parameter) + (mac-clear-font-name-table): + * term/pc-win.el (msdos-remember-default-colors) + (w16-set-clipboard-data, w16-get-clipboard-data): + * term/w32-win.el (w32-send-sys-command, w32-select-font) + (set-message-beep): + * net/browse-url.el (w32-shell-execute): + * w32-fns.el (set-message-beep, w32-get-clipboard-data) + (w32-get-locale-info, w32-get-valid-locale-ids) + (w32-set-clipboard-data): + * dos-fns.el (int86, msdos-long-file-names): + * dos-w32.el (default-printer-name): Declare as functions. + +2007-11-21 Jason Rumney + + * emacs-lisp/byte-run.el (declare-function): Return nil. + +2007-11-21 Stefan Monnier + + * progmodes/sh-script.el (sh-mode): Set defun-prompt-regexp. + +2007-11-21 Vinicius Jose Latorre + + * ps-print.el (ps-lpr-switches): Docstring fix. + (ps-string-list): New fun. + (ps-do-despool): Code fix. + +2007-11-21 Juanma Barranquero + + * w32-fns.el: Undo 2007-11-21 change by Dan Nicolaescu. + +2007-11-21 Glenn Morris + + * emacs-lisp/check-declare.el (check-declare-verify): Skip C files + for now. Handle define-minor-mode, and defalias (with no argument + checking). + +2007-11-21 Dan Nicolaescu + + * frame.el (msdos-mouse-p): + * files.el (msdos-long-file-names, w32-long-file-name): + * term/mac-win.el (mac-code-convert-string, mac-coerce-ae-data) + (mac-resume-apple-event, mac-font-panel-mode) + (mac-atsu-font-face-attributes, mac-ae-set-reply-parameter) + (mac-clear-font-name-table): + * term/pc-win.el (msdos-remember-default-colors) + (w16-set-clipboard-data, w16-get-clipboard-data): + * term/w32-win.el (w32-send-sys-command, w32-select-font) + (set-message-beep): + * net/browse-url.el (w32-shell-execute): + * dos-fns.el (int86, msdos-long-file-names): + * dos-w32.el (default-printer-name): Undo previous change. + +2007-11-21 Eli Zaretskii + + * international/mule-cmds.el (set-locale-environment): + Set default-file-name-coding-system _after_ keyboard and terminal + coding systems. This fixes last change. + + * mail/rmail.el (rmail-current-subject-regexp): Allow more than + one space after "Subject:". + +2007-11-21 Stefan Monnier + + * pcvs-parse.el (cvs-parse-table): Ignore errors when looking up files + in order to determine if there's a conflict. + +2007-11-21 Richard Stallman + + * bindings.el (esc-map): Bind C-M-l here; moved from reposition.el. + + * reposition.el (reposition-window): + Binding C-M-l moved to bindings.el. + + * bindings.el (ctl-x-4-map): Bind C-x 4 a here; moved from add-log.el. + + * add-log.el (add-change-log-entry-other-window): + Key binding C-x 4 a moved to bindings.el. + + * bindings.el (minibuffer-local-map): Bind C-tab here; moved + from filecache.el. + + * filecache.el: Minibuffer map bindings moved to bindings.el. + +2007-11-21 Jason Rumney + + * international/mule-cmds.el (set-locale-environment): + Set default-file-name-coding-system from system defaults on Windows. + +2007-11-21 Jason Rumney + + * term/w32console.el: New term init file for w32 console. + + * w32-fns.el (x-alternatives-map): Copy from term/x-win.el. + (x-setup-function-keys): Likewise, replacing top-level key definitions. + (w32-tty-standard-colors): Move to term/w32console.el. + + * term/w32-win.el (x-setup-function-keys): Remove. + + * term/tty-colors.el (tty-register-default-colors): Remove special + case for w32. + +2007-11-21 Dan Nicolaescu + + * frame.el (msdos-mouse-p): + * generic-x.el (w32-shell-name): + * files.el (msdos-long-file-names, w32-long-file-name) + (dired-get-filename, dired-unmark, dired-do-flagged-delete) + (dos-8+3-filename, vms-read-directory, view-mode-disable): + * term/mac-win.el (mac-code-convert-string, mac-coerce-ae-data) + (mac-resume-apple-event, mac-font-panel-mode) + (mac-atsu-font-face-attributes, mac-ae-set-reply-parameter) + (mac-clear-font-name-table): + * term/pc-win.el (msdos-remember-default-colors) + (w16-set-clipboard-data, w16-get-clipboard-data): + * term/w32-win.el (w32-send-sys-command, w32-select-font) + (set-message-beep): + * w32-fns.el (set-message-beep, w32-get-clipboard-data) + (w32-get-locale-info, w32-get-valid-locale-ids) + (w32-set-clipboard-data): + * help-fns.el (ad-get-advice-info): + * font-lock.el (fast-lock-after-fontify-buffer) + (fast-lock-after-unfontify-buffer, fast-lock-mode) + (lazy-lock-after-fontify-buffer) + (lazy-lock-after-unfontify-buffer, lazy-lock-mode): + * net/browse-url.el (w32-shell-execute): + * dos-fns.el (int86, msdos-long-file-names): + * dos-w32.el (default-printer-name): Declare as functions. + +2007-11-21 Juanma Barranquero + + * textmodes/paragraphs.el (forward-sentence): Doc fix. + Reported by Drew Adams . + +2007-11-20 Jason Rumney + + * term/w32-win.el (x-setup-function-keys): Protect against + multiple calls on the same terminal. + +2007-11-20 Dan Nicolaescu + + * term/mac-win.el (x-setup-function-keys): Only setup + local-function-key-map if it has not been setup already for the + current frame. Move the suspend-emacs processing here. + +2007-11-20 Juanma Barranquero + + * progmodes/grep.el (xargs-program): New variable. + (grep-compute-defaults): Use it. + (grep-default-command): Doc fix. + (grep, lgrep, rgrep): Reflow docstrings. + +2007-11-20 Dan Nicolaescu + + * vc.el (vc-find-revision): Set the parent buffer. + Use when instead of if. + + * progmodes/python.el (info-lookup-maybe-add-help): + * progmodes/ps-mode.el (doc-view-minor-mode): + * mail/emacsbug.el (Info-menu, Info-goto-node): + * emulation/viper-keym.el (viper-ex) + (viper-normalize-minor-mode-map-alist, viper-set-mode-vars-for): + * emulation/viper-cmd.el (widget-type, widget-button-press) + (viper-set-hooks): + * emacs-lisp/tcover-unsafep.el (unsafep-function): + * emacs-lisp/tcover-ses.el (ses-set-curcell, ses-update-cells) + (ses-load, ses-vector-delete, ses-create-header-string) + (ses-read-cell, ses-read-symbol, ses-command-hook, ses-jump): + * emacs-lisp/gulp.el (mail-subject, mail-send): Declare as functions. + +2007-11-20 Stefan Monnier + + * pcvs.el (cvs-revert-if-needed): Fix copy&paste typo. + +2007-11-20 Glenn Morris + + * emacs-lisp/check-declare.el (check-declare-verify): Tweak regexp + for end of function-name. Handle define-derived-mode. + +2007-11-20 Dan Nicolaescu + + * progmodes/idlw-help.el: Require browse-url unconditionally, it + is available by default. + (idlwave-help-browse-url-available): Change default to t. + + * emulation/edt.el (defgroup, defcustom): Remove definition. + (eval-when-compile): Remove. + (c-mark-function): + * textmodes/reftex-dcr.el (bibtex-beginning-of-entry): + * textmodes/fill.el (comment-search-forward) + (comment-string-strip): + * progmodes/prolog.el (comint-mode, comint-send-string) + (comint-send-region, comint-send-eof): + * progmodes/dcl-mode.el (imenu-default-create-index-function): + * emulation/viper-util.el (viper-forward-Word): + * emulation/vi.el (c-mark-function): + * emulation/edt-vt100.el (vt100-wide-mode): + * emacs-lisp/timer.el (diary-entry-time): Declare as functions. + +2007-11-19 Michael Albinus + + * net/tramp.el (tramp-open-connection-setup-interactive-shell): + Still some tuning in case of an echoing shell. + (tramp-send-command): Connection property "remote-echo" is not + persistent; cache key is the process therefore. + +2007-11-19 Juanma Barranquero + + * replace.el (map-query-replace-regexp): Doc fix (revert part of + 2000-05-21T17:04:47Z!fx@gnu.org made on 2000-05-21 with no ChangeLog entry). + +2007-11-19 Dan Nicolaescu + + * progmodes/octave-mod.el (inferior-octave-send-list-and-digest): + * play/yow.el (doctor-ret-or-read): + * vc-hooks.el (vc-dired-resynch-file): + * vc-hg.el (log-view-get-marked): + * smerge-mode.el (ediff-cleanup-mess): + * pcvs.el (vc-editable-p, vc-checkout): + * pcomplete.el (comint-bol): + * informat.el (texinfo-format-refill): + * ido.el (tramp-tramp-file-p): + * ibuffer.el (ibuffer-mark-on-buffer, ibuffer-format-qualifier) + (ibuffer-generate-filter-groups, ibuffer-format-filter-group-data): + * add-log.el (c-beginning-of-defun, c-end-of-defun): Declare as + functions. + + * textmodes/ispell.el (ispell-int-char): Make it a defalias + instead of fset. + (ispell-message): Use with-no-warnings for sc-cite-regexp call. + + * ido.el (ido-file-internal): Move with-no-warnings to include the + ffap-string-at-point call. + + * pcomplete.el (pcomplete-executables): Move defsubst before first use. + + * vc-hg.el (vc-hg-revision-table): Fix last change. + +2007-11-19 Martin Rudalics + + * menu-bar.el (top-level): Deactivate clipboard-kill-region and + clipboard-yank when the buffer is read-only. + + * cus-edit.el (custom-field-keymap): Move to other Custom mode + keymaps such that it's before the definition of Custom-mode-menu. + (Custom-mode-menu): Show it for custom-field-keymap too. + +2007-11-19 Nick Roberts + + * progmodes/gdb-ui.el: Update commentary. + +2007-11-18 Dan Nicolaescu + + * net/tramp.el (tramp-terminal-type): Remove duplicated definition. + +2007-11-19 Glenn Morris + + * emacs-lisp/check-declare.el (check-declare-verify): If fnfile + does not exist, try adding `.el' extension. Also search for defsubsts. + + * cus-edit.el (recentf-expand-file-name): + * dired.el (dired-relist-entry): + * subr.el (w32-shell-dos-semantics): + * emacs-lisp/bytecomp.el (compilation-forget-errors): + Declare as functions. + +2007-11-18 Stefan Monnier + + * abbrev.el (kill-all-abbrevs, insert-abbrevs) + (prepare-abbrev-list-buffer): Use dolist. + (clear-abbrev-table): Preserve properties. + +2007-11-18 Shigeru Fukaya (tiny change) + + * textmodes/texinfmt.el (texinfo-format-printindex): + Collect combined indexes using texinfo-short-index-format-cmds-alist. + Reported on . + +2007-11-18 Michael Albinus + + * net/tramp.el (tramp-completion-reread-directory-timeout): + New defcustom. + (tramp-handle-file-name-all-completions): Flush directory contents + from cache regularly. + (tramp-set-auto-save-file-modes): Check also for `buffer-modified-p'. + (tramp-open-connection-setup-interactive-shell): + Call `tramp-cleanup-connection' via funcall. + + * net/tramp-ftp.el (tramp-ftp-file-name-handler): Temp file is already + created when copying. + +2007-11-17 Dan Nicolaescu + + * eshell/esh-util.el (eshell-under-xemacs-p): Remove. + * eshell/esh-mode.el (eshell-mode-syntax-table, command-running-p): + * eshell/esh-ext.el (eshell-external-command): + * eshell/esh-cmd.el (require): + * eshell/em-unix.el (eshell-plain-locate-behavior): + * eshell/em-cmpl.el (eshell-cmpl-initialize): + Replace eshell-under-xemacs-p with (featurep 'xemacs). + * eshell/esh-mode.el (characterp, char-int): Remove unused + conditional defaliases. + + * pcomplete.el (pcomplete-event-matches-key-specifier-p): + Rename from event-matches-key-specifier-p, define unconditionally. + (event-basic-type): Remove unused defalias. + (pcomplete-show-completions): + Use pcomplete-event-matches-key-specifier-p. + +2007-11-17 Eli Zaretskii + + * eshell/esh-module.el (eshell-load-defgroups): Don't make backups + when saving esh-groups.el. + +2007-11-17 Martin Rudalics + + * wid-edit.el (widget-default-complete): + * progmodes/flymake.el (flymake-goto-file-and-line): + Fix typo in (doc-)string. + +2007-11-17 Glenn Morris + + * emacs-lisp/byte-run.el (declare-function): New macro. + * emacs-lisp/bytecomp.el (byte-compile-declare-function): + New function, byte-hunk-handler for declare-function. + (byte-compile-callargs-warn): Handle declared functions. + + * emacs-lisp/check-declare.el: New file. + * Makefile.in (check-declare): New target. + + * progmodes/fortran.el (gud-find-c-expr): Declare as a function. + + * subr.el (process-lines): Move here from ../admin/admin.el. + * emacs-lisp/authors.el (authors-process-lines): Remove. + (authors): Use process-lines rather than authors-process-lines. + + * progmodes/compilation-perl.el, progmodes/compilation-weblint.el: + Remove these files. + +2007-11-17 Juanma Barranquero + + * emacs-lisp/backquote.el (backquote): + Improve argument/docstring consistency. + + * emacs-lisp/ring.el (ring-size, ring-p, ring-insert) + (ring-length, ring-empty-p): Use c[ad]dr. + (ring-plus1): Use `1+'. + (ring-minus1): Use `zerop'. + (ring-remove): Use c[ad]dr. Use `when'. + (ring-copy): Use c[ad]dr. Use `let', not `let*'. + (ring-ref): Use `let', not `let*'. + (ring-insert-at-beginning): Use c[ad]dr. Doc fix. + (ring-insert+extend): Use c[ad]dr. Fix typo in docstring. + (ring-member): Simplify. Doc fix. + (ring-convert-sequence-to-ring): Simplify. + +2007-11-17 Juri Linkov + + * dired-aux.el (dired-create-directory): Allow creating + a directory of an arbitrary depth. Add a loop to find the topmost + nonexistent parent dir `new', and call `dired-add-file' on it. + Set the `PARENTS' arg of `make-directory' to t. + +2007-11-16 Jay Belanger + + * calc/calc-aent.el (calc-last-user-lang-parse-table): New variable. + (math-build-parse-table): Get parse information from math-parse-table. + +2007-11-16 Stefan Monnier + + * window.el (recenter-last-op): New var. + (recenter-top-bottom): New command. + (global-map): Bind it to C-l. + + * abbrev.el (abbrev--write): Fix error in transcription from C. + + * emulation/pc-select.el (pc-select-shifted-mark): Remove. + (pc-select-ensure-mark): Set mark-active to a special value instead. + Rename from ensure-mark. Update call callers. + (pc-select-maybe-deactivate-mark): Rename from maybe-deactivate-mark. + Rewrite. Update all callers. + (pc-selection-mode): Remove redundant var declaration. + +2007-11-16 Tassilo Horn + + * doc-view.el (doc-view-search-backward, doc-view-search): + Fix assignment to free variable bug. + +2007-11-16 Martin Pohlack (tiny change) + + * emulation/pc-select.el (pc-select-shifted-mark): New var. + (ensure-mark): Set it. + (maybe-deactivate-mark): New fun. + Use it everywhere instead of (setq mark-active nil). + +2007-11-16 Dan Nicolaescu + + * textmodes/reftex-dcr.el (reftex-start-itimer-once): + Add check for XEmacs. + + * calc/calc-menu.el (calc-mode-map): Pacify byte compiler. + + * doc-view.el (doc-view-resolution): Add missing :group. + +2007-11-16 Juanma Barranquero + + * subr.el (make-variable-frame-local): + Fix typo in obsolescence declaration. + +2007-11-16 Werner Lemberg + + * files.el (set-auto-mode-1): Check second line for -*- if file + starts with '\" (which is used by man pages to identify needed + troff preprocessors). + +2007-11-16 Glenn Morris + + * mail/mail-extr.el (mail-extr-all-top-level-domains): Update domains. + +2007-11-16 Jay Belanger + + * calc/calc-lang.el (math-oper-table): Fix typo. + Reduce precedence of "/" for TeX. + + * calc/calc-menu.el (calc-modes-menu): Add Languages submenu. + +2007-11-16 Juri Linkov + + * dired-aux.el (dired-read-shell-command-default): New function. + (dired-read-shell-command): Use its return value for DEFAULT arg. + + * replace.el (keep-lines-read-args, occur-read-primary-args): + Use a list of default values for DEFAULT arg of read-from-minibuffer. + + * man.el (Man-heading-regexp): Add 0-9. + (Man-first-heading-regexp): Remove leading space [ \t]* before NAME. + +2007-11-15 Stefan Monnier + + * doc-view.el (doc-view-ghostscript-options): Remove resolution arg. + (doc-view-resolution): New custom var. + (doc-view-pdf/ps->png): Use it. + (doc-view-shrink-factor): New var. + (doc-view-enlarge, doc-view-shrink): New commands. + (doc-view-mode-map): Use them. + +2007-11-15 Juanma Barranquero + + * ediff-wind.el (ediff-window-setup-function): + * simple.el (normal-erase-is-backspace): + * eshell/em-unix.el (eshell/info): + * progmodes/cc-engine.el (c-crosses-statement-barrier-p): + Fix typos in docstrings. + + * emulation/cua-base.el (cua--keymaps-initialized): + Rename from `cua--keymaps-initalized'. Callers changed. + (cua-highlight-region-shift-only): Doc fix. + (cua-paste-pop): Fix typo in docstring. + +2007-11-15 Stefan Monnier + + * emulation/cua-base.el (cua--pre-command-handler-1): + Use input-decode-map instead of function-key-map. + Use event-modifiers now that it works reliably. + + * vc.el (vc-diff-internal): Pop-to-buffer later. + + * subr.el (event-modifiers): Use internal-event-symbol-parse-modifiers. + + * pcvs.el (cvs-revert-if-needed): Ignore `unknown' files, since cvs + did not touch them. + +2007-11-15 Jay Belanger + + * calc/calc-menu.el: New file. + * calc/calc.el (calc-mode): Require calc-menu. + +2007-11-14 Juanma Barranquero + + * isearch-multi.el (isearch-buffers-next-buffer-function): Doc fix. + +2007-11-14 Nick Roberts + + * progmodes/gdb-ui.el (gdb-parent-bptno-enabled): New variable. + (gdb-breakpoint-regexp, gdb-mouse-toggle-breakpoint-margin) + (gdb-mouse-toggle-breakpoint-fringe, gdb-delete-breakpoint) + (gdb-goto-breakpoint): Generalise for breakpoints with multiple + locations. + (gdb-info-breakpoints-custom, gdb-assembler-custom) + (gdb-toggle-breakpoint): Update for new gdb-breakpoint-regexp. + (gdb-put-breakpoint-icon): Only display icon for parent breakpoint. + +2007-11-13 Noah Friedman + + * calc/calc.el: Add `backward-delete-char-untabify' to the list of + bindings to remap when `calc-scan-for-dels' is non-nil. + +2007-11-13 Stefan Monnier + + * emacs-lisp/byte-opt.el (byte-compile-trueconstp): Handle more + constant forms. + (byte-compile-nilconstp): New function. + (byte-optimize-cond): Kill subsequent branches when a branch is + know to be taken or not taken. + (byte-optimize-if): Use byte-compile-nilconstp instead of hand coding. + +2007-11-13 Dan Nicolaescu + + * vc.el (vc-register): Allow registering a file passed as a + parameter instead of just the current buffer. + +2007-11-12 Michael Albinus + + * net/tramp.el (tramp-open-connection-setup-interactive-shell): + Check whether the output of "uname -sr" has been changed. + +2007-11-12 Vinicius Jose Latorre + + * progmodes/compile.el (compilation-error-regexp-alist-alist): Insert + patterns from compilation-perl.el and compilation-weblint.el files. + +2007-11-12 Dan Nicolaescu + + * progmodes/compilation-perl.el: + * progmodes/compilation-weblint.el: Disable autoloads, they cause + a bootstrap failure. + + * vc-cvs.el (vc-cvs-diff): If backup files exist, diff them + instead of doing "cvs diff" in order to avoid accessing the repository. + +2007-11-12 Kevin Ryde + + * progmodes/compilation-perl.el: + * progmodes/compilation-weblint.el: New files. + +2007-11-11 Juanma Barranquero + + * international/iso-cvt.el (iso-translate-conventions): Doc fix. + (iso-aggressive-german-trans-tab, iso-conservative-german-trans-tab) + (iso-tex2iso-trans-tab, iso-gtex2iso-trans-tab): Reflow docstring. + (iso-spanish, iso-german, iso-iso2tex, iso-tex2iso, iso-gtex2iso) + (iso-iso2gtex, iso-iso2duden, iso-iso2sgml, iso-sgml2iso): + Rewrite in active voice. + +2007-11-11 Tassilo Horn + + * doc-view.el: Add comments about isearch support. + +2007-11-11 Dan Nicolaescu + + * vc.el (vc-start-entry): Fix setting the in the case the function + is called from vc-dired. Use when instead of if where appropriate. + +2007-11-11 Vinicius Jose Latorre + + * ps-print.el (ps-do-despool): Do not force ps-lpr-switches + to be a list. + (ps-begin-job): Error if ps-lpr-switches is not a list. 2007-11-11 YAMAMOTO Mitsuharu @@ -87,11 +1720,11 @@ 2007-11-10 Dan Nicolaescu - * emacs-lisp/byte-opt.el (byte-optimize-featurep): Optimize - (featurep 'emacs) to t. + * emacs-lisp/byte-opt.el (byte-optimize-featurep): + Optimize (featurep 'emacs) to t. - * emacs-lisp/bytecomp.el (byte-compile-find-bound-condition): New - function. + * emacs-lisp/bytecomp.el (byte-compile-find-bound-condition): + New function. (byte-compile-maybe-guarded): Use it to also look for bound symbols inside `and' forms. Comment out non-working code that was trying to avoid warnings for XEmacs code. @@ -307,8 +1940,7 @@ * net/tramp-cache.el (tramp-cache-print) (tramp-dump-connection-properties): Fix docstring. - (tramp-list-connections): Rename from - `tramp-cache-list-connections'. + (tramp-list-connections): Rename from `tramp-cache-list-connections'. * net/tramp-cmds.el (tramp-cleanup-connection): Apply it. @@ -458,7 +2090,7 @@ * ediff-diff.el (ediff-set-fine-diff-properties-in-one-buffer): Do not use face-name. - (ediff-test-utility,ediff-diff-mandatory-option) + (ediff-test-utility, ediff-diff-mandatory-option) (ediff-reset-diff-options): Remove to simplify the mandatory option handling on Windows. (ediff-set-diff-options): Add. @@ -830,8 +2462,7 @@ Use feature test instead of boundp test so it can be resolved at compile time. - * net/newsticker.el (replace-regexp-in-string): Only define for - XEmacs. + * net/newsticker.el (replace-regexp-in-string): Only define for XEmacs. 2007-10-30 Stefan Monnier @@ -886,8 +2517,7 @@ (allout-toggle-current-subtree-exposure): Add new interactive function for toggle subtree exposure - suggested by tassilo. (move-beginning-of-line, move-end-of-line): Don't use - line-move-invisible-p, it's obsolete - substitute the code, - instead. + line-move-invisible-p, it's obsolete - substitute the code, instead. 2007-10-29 Dan Nicolaescu @@ -2762,7 +4392,7 @@ 2007-10-08 Adam Hupp (tiny change) - * progmodes/gdb-ui.el (pdb): Specify file for gud-break. + * progmodes/gud.el (pdb): Specify file for gud-break. 2007-10-08 Nick Roberts diff --git a/lisp/ChangeLog.12 b/lisp/ChangeLog.12 index 8fc7aa0fa35..cb4924a8930 100644 --- a/lisp/ChangeLog.12 +++ b/lisp/ChangeLog.12 @@ -6411,7 +6411,7 @@ * jit-lock.el (jit-lock-fontify-again): New function. (jit-lock-fontify-now): Use it instead of lambda form. -2006-09-13 Agustin Martin +2006-09-13 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (flyspell-word, flyspell-correct-word) (flyspell-auto-correct-word): Make ispell-filter local to these @@ -11561,7 +11561,7 @@ * isearch.el (isearch-other-meta-char): Handle user bindings for shifted control characters. -2006-03-18 Agustin Martin +2006-03-18 Agust,Am(Bn Mart,Am(Bn * textmodes/ispell.el (ispell-skip-region-alist): Add "_+" to the part that matches email addresses, file names, etc. @@ -11856,7 +11856,7 @@ * progmodes/octave-mod.el (octave-indent-for-comment): Behave according to do string. -2006-03-11 Agustin Martin +2006-03-11 Agust,Am(Bn Mart,Am(Bn * textmodes/ispell.el (ispell-menu-map-needed) [ispell-message]: Be visible only if major mode is Mail Mode. @@ -12022,7 +12022,7 @@ (t-mouse-tty, t-mouse-make-event): Doc fix; use imperative. (t-mouse-mode): Remove period from end of error message. -2006-03-03 Agustin Martin +2006-03-03 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (flyspell-process-localwords): Be case-sensitive. @@ -12813,7 +12813,7 @@ (remove-from-invisibility-spec, allout-hide-current-subtree): Ditched unused variables. -2006-02-17 Agustin Martin +2006-02-17 Agust,Am(Bn Mart,Am(Bn * textmodes/ispell.el (ispell-change-dictionary): Call ispell-buffer-local-dict instead of @@ -13558,7 +13558,7 @@ described in the docstring for `bs-attributes-list'. (bs--get-name): Simplify. Don't pad the buffer name. -2006-01-27 Agustin Martin +2006-01-27 Agust,Am(Bn Mart,Am(Bn * textmodes/ispell.el (ispell-find-aspell-dictionaries): If no English aspell dictionary is installed, use the first entry of @@ -13849,7 +13849,7 @@ * mail/rmailout.el (rmail-output): Don't use content-type if it is nil. -2006-01-21 Agustin Martin +2006-01-21 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (flyspell-emacs-popup, flypell-xemacs-popup): Default to disabling the "Save affix" question. @@ -14005,7 +14005,7 @@ * files.el (auto-mode-alist): Add Imakefile. -2006-01-17 Agustin Martin +2006-01-17 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (ispell-kill-ispell-hook): Add to the hook when loading the file rather than when turning on flyspell-mode. @@ -14152,7 +14152,7 @@ (org-get-time-of-day): Fix bug with times before 1am. (org-agenda-menu): Add tags commands. -2006-01-13 Agustin Martin +2006-01-13 Agust,Am(Bn Mart,Am(Bn * textmodes/ispell.el (ispell-init-process): Include the used dictionary in ispell process start message. @@ -14842,7 +14842,7 @@ Use local var buffer-scan-pos to advance scan for next misspelling. Advance it only after we find the misspelling. -2005-12-27 Agustin Martin +2005-12-27 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (flyspell-external-point-words): New criteria for finding the misspelling in the buffer. @@ -17232,7 +17232,7 @@ * international/latexenc.el (latex-inputenc-coding-alist): Doc fix. -2005-12-02 Agustin Martin +2005-12-02 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (flyspell-external-point-words): Consider a misspelling as found in the string search if: (a) misspelling @@ -18221,7 +18221,7 @@ * textmodes/flyspell.el (flyspell-large-region): Call flyspell-accept-buffer-local-defs. -2005-11-13 Agustin Martin +2005-11-13 Agust,Am(Bn Mart,Am(Bn * textmodes/flyspell.el (flyspell-notify-misspell): Fix misspelling of "Misspelling". diff --git a/lisp/ChangeLog.unicode b/lisp/ChangeLog.unicode index b12b4b5cb71..4c42467b605 100644 --- a/lisp/ChangeLog.unicode +++ b/lisp/ChangeLog.unicode @@ -83,6 +83,10 @@ * international/mule-cmds.el (describe-language-environment): Check if the specified input method exists or not. +2007-11-12 Katsumi Yamaoka + + * ldefs-boot.el: Regenerate. + 2007-11-11 Vinicius Jose Latorre * ps-print.el (ps-do-despool): Do not force ps-lpr-switches to be a diff --git a/lisp/Makefile.in b/lisp/Makefile.in index 06457607c5a..a221ccdf4a4 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -297,9 +297,12 @@ bootstrap-prepare: $(lisp)/ps-print.el \ $(lisp)/emacs-lisp/cl-loaddefs.el -maintainer-clean: distclean - cd $(lisp); rm -f *.elc */*.elc $(AUTOGENEL) +maintainer-clean: distclean bootstrap-clean + cd $(lisp); rm -f $(AUTOGENEL) +## NB note that this rules assume only one level of subdirs below lisp/. +## If nested subdirs are added, it's probably time to switch to: +## find $(lisp) -name "*.elc" -exec rm -f '{}' ';' bootstrap-clean: cd $(lisp); rm -f *.elc */*.elc @@ -315,4 +318,10 @@ bootstrap-after: finder-data custom-deps distclean: -rm -f ./Makefile +.PHONY: check-declare + +check-declare: + $(emacs) -l $(lisp)/emacs-lisp/check-declare \ + --eval '(check-declare-directory "$(lisp)")' + # Makefile ends here. diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 0c140a84159..d7dfea2f6d8 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -83,10 +83,8 @@ to enable or disable Abbrev mode in the current buffer." (defun kill-all-abbrevs () "Undefine all defined abbrevs." (interactive) - (let ((tables abbrev-table-name-list)) - (while tables - (clear-abbrev-table (symbol-value (car tables))) - (setq tables (cdr tables))))) + (dolist (tablesym abbrev-table-name-list) + (clear-abbrev-table (symbol-value tablesym)))) (defun copy-abbrev-table (table) "Make a new abbrev-table with the same abbrevs as TABLE." @@ -106,10 +104,8 @@ Mark is set after the inserted text." (interactive) (push-mark (save-excursion - (let ((tables abbrev-table-name-list)) - (while tables - (insert-abbrev-table-description (car tables) t) - (setq tables (cdr tables)))) + (dolist (tablesym abbrev-table-name-list) + (insert-abbrev-table-description tablesym t)) (point)))) (defun list-abbrevs (&optional local) @@ -131,18 +127,17 @@ Otherwise display all abbrevs." found)) (defun prepare-abbrev-list-buffer (&optional local) - (save-excursion - (let ((table local-abbrev-table)) - (set-buffer (get-buffer-create "*Abbrevs*")) - (erase-buffer) - (if local - (insert-abbrev-table-description (abbrev-table-name table) t) - (dolist (table abbrev-table-name-list) - (insert-abbrev-table-description table t))) - (goto-char (point-min)) - (set-buffer-modified-p nil) - (edit-abbrevs-mode) - (current-buffer)))) + (with-current-buffer (get-buffer-create "*Abbrevs*") + (erase-buffer) + (if local + (insert-abbrev-table-description + (abbrev-table-name local-abbrev-table) t) + (dolist (table abbrev-table-name-list) + (insert-abbrev-table-description table t))) + (goto-char (point-min)) + (set-buffer-modified-p nil) + (edit-abbrevs-mode) + (current-buffer))) (defun edit-abbrevs-mode () "Major mode for editing the list of abbrev definitions. @@ -524,8 +519,14 @@ the current abbrev table before abbrev lookup happens." (defun clear-abbrev-table (table) "Undefine all abbrevs in abbrev table TABLE, leaving it empty." (setq abbrevs-changed t) - (dotimes (i (length table)) - (aset table i 0))) + (let* ((sym (intern-soft "" table))) + (dotimes (i (length table)) + (aset table i 0)) + ;; Preserve the table's properties. + (assert sym) + (intern sym table) + (abbrev-table-put table :abbrev-table-modiff + (1+ (abbrev-table-get table :abbrev-table-modiff))))) (defun define-abbrev (table name expansion &optional hook &rest props) "Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK. @@ -825,7 +826,7 @@ Only writes the non-system abbrevs. Presumes that `standard-output' points to `current-buffer'." (unless (or (null (symbol-value sym)) (abbrev-get sym :system)) (insert " (") - (prin1 sym) + (prin1 (symbol-name sym)) (insert " ") (prin1 (symbol-value sym)) (insert " ") diff --git a/lisp/add-log.el b/lisp/add-log.el index 3ca1b613955..33ecd98ec44 100644 --- a/lisp/add-log.el +++ b/lisp/add-log.el @@ -664,7 +664,6 @@ the change log file in another window." (list current-prefix-arg (prompt-for-change-log-name)))) (add-change-log-entry whoami file-name t)) -;;;###autoload (define-key ctl-x-4-map "a" 'add-change-log-entry-other-window) (defvar change-log-indent-text 0) @@ -827,6 +826,9 @@ Prefix arg means justify as well." '(TeX-mode plain-TeX-mode LaTeX-mode tex-mode) "*Modes that look like TeX to `add-log-current-defun'.") +(declare-function c-beginning-of-defun "cc-cmds" (&optional arg)) +(declare-function c-end-of-defun "cc-cmds" (&optional arg)) + ;;;###autoload (defun add-log-current-defun () "Return name of function definition point is in, or nil. diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 421283da9e0..3cfd07398c5 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -728,6 +728,9 @@ archive. ;; Note this regexp is also in archive-exe-p. ((looking-at "MZ\\(.\\|\n\\)\\{34\\}LH[aA]'s SFX ") 'lzh-exe) ((looking-at "Rar!") 'rar) + ((and (looking-at "MZ") + (re-search-forward "Rar!" (+ (point) 100000) t)) + 'rar-exe) (t (error "Buffer format not recognized"))))) ;; ------------------------------------------------------------------------- @@ -1860,10 +1863,10 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." ;; ------------------------------------------------------------------------- ;;; Section: Rar Archives -(defun archive-rar-summarize () - (let* ((file buffer-file-name) - (copy (file-local-copy file)) - header footer +(defun archive-rar-summarize (&optional file) + ;; File is used internally for `archive-rar-exe-summarize'. + (unless file (setq file buffer-file-name)) + (let* ((copy (file-local-copy file)) (maxname 10) (maxsize 5) (files ())) @@ -1872,9 +1875,6 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." (if copy (delete-file copy)) (goto-char (point-min)) (re-search-forward "^-+\n") - (setq header - (buffer-substring (save-excursion (re-search-backward "^[^ ]")) - (point))) (while (looking-at (concat " \\(.*\\)\n" ;Name. ;; Size ; Packed. " +\\([0-9]+\\) +[0-9]+" @@ -1894,8 +1894,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." size (match-string 3) ;; Date, Time. (match-string 4) (match-string 5)) - files))) - (setq footer (buffer-substring (point) (point-max)))) + files)))) (setq files (nreverse files)) (goto-char (point-min)) (let* ((format (format " %%s %%s %%%ds %%5s %%s" maxsize)) @@ -1937,9 +1936,44 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." (delete-directory (expand-file-name name dest))) (delete-directory dest))))) +;;; Section: Rar self-extracting .exe archives. + +(defun archive-rar-exe-summarize () + (let ((tmpfile (make-temp-file "rarexe"))) + (unwind-protect + (progn + (goto-char (point-min)) + (re-search-forward "Rar!") + (write-region (match-beginning 0) (point-max) tmpfile) + (archive-rar-summarize tmpfile)) + (delete-file tmpfile)))) + +(defun archive-rar-exe-extract (archive name) + (let* ((tmpfile (make-temp-file "rarexe")) + (buf (find-buffer-visiting archive)) + (tmpbuf (unless buf (generate-new-buffer " *rar-exe*")))) + (unwind-protect + (progn + (with-current-buffer (or buf tmpbuf) + (save-excursion + (save-restriction + (if buf + ;; point-max unwidened is assumed to be the end of the + ;; summary text and the beginning of the actual file data. + (progn (goto-char (point-max)) (widen)) + (insert-file-contents-literally archive) + (goto-char (point-min))) + (re-search-forward "Rar!") + (write-region (match-beginning 0) (point-max) tmpfile)))) + (archive-rar-extract tmpfile name)) + (if tmpbuf (kill-buffer tmpbuf)) + (delete-file tmpfile)))) + + ;; ------------------------------------------------------------------------- ;; This line was a mistake; it is kept now for compatibility. ;; rms 15 Oct 98 + (provide 'archive-mode) (provide 'arc-mode) diff --git a/lisp/bindings.el b/lisp/bindings.el index 1bc31e04bb9..ead6ac51577 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -704,7 +704,8 @@ language you are using." ;; Override the global binding (which calls indent-relative via ;; indent-for-tab-command). The alignment that indent-relative tries to ;; do doesn't make much sense here since the prompt messes it up. - (define-key map "\t" 'self-insert-command)) + (define-key map "\t" 'self-insert-command) + (define-key minibuffer-local-map [C-tab] 'file-cache-minibuffer-complete)) (define-key global-map "\C-u" 'universal-argument) (let ((i ?0)) @@ -1073,6 +1074,9 @@ language you are using." (define-key ctl-x-map "z" 'repeat) +(define-key esc-map "\C-l" 'reposition-window) + +(define-key ctl-x-4-map "a" 'add-change-log-entry-other-window) (define-key ctl-x-4-map "c" 'clone-indirect-buffer-other-window) ;; Signal handlers diff --git a/lisp/calc/README b/lisp/calc/README index dc474c43813..fbbd73b8fee 100644 --- a/lisp/calc/README +++ b/lisp/calc/README @@ -72,6 +72,8 @@ opinions. Summary of changes to "Calc" ------- -- ------- -- ---- +* Added a menu. + * Added logistic non-linear curves to curve-fitting. * Added option of plotting data points and curve when curve-fitting. diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el index ffd07bd8f2e..697d510ac02 100644 --- a/lisp/calc/calc-aent.el +++ b/lisp/calc/calc-aent.el @@ -32,6 +32,25 @@ (require 'calc) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function calc-refresh-evaltos "calc-ext" (&optional which-var)) +(declare-function calc-execute-kbd-macro "calc-prog" (mac arg &rest prefix)) +(declare-function math-is-true "calc-ext" (expr)) +(declare-function calc-explain-why "calc-stuff" (why &optional more)) +(declare-function calc-alg-edit "calc-yank" (str)) +(declare-function math-composite-inequalities "calc-prog" (x op)) +(declare-function math-flatten-lands "calc-rewr" (expr)) +(declare-function math-multi-subst "calc-map" (expr olds news)) +(declare-function calcFunc-vmatches "calc-rewr" (expr pat)) +(declare-function math-simplify "calc-alg" (top-expr)) +(declare-function math-known-matrixp "calc-arith" (a)) +(declare-function math-parse-fortran-subscr "calc-lang" (sym args)) +(declare-function math-to-radians-2 "calc-math" (a)) +(declare-function math-read-string "calc-ext" ()) +(declare-function math-read-brackets "calc-vec" (space-sep math-rb-close)) +(declare-function math-read-angle-brackets "calc-forms" ()) + + (defvar calc-quick-calc-history nil "The history list for quick-calc.") @@ -603,6 +622,7 @@ in Calc algebraic input.") (defvar calc-user-parse-table nil) (defvar calc-last-main-parse-table nil) +(defvar calc-last-user-lang-parse-table nil) (defvar calc-last-lang-parse-table nil) (defvar calc-user-tokens nil) (defvar calc-user-token-chars nil) @@ -612,10 +632,12 @@ in Calc algebraic input.") (defun math-build-parse-table () (let ((mtab (cdr (assq nil calc-user-parse-tables))) - (ltab (cdr (assq calc-language calc-user-parse-tables)))) + (ltab (cdr (assq calc-language calc-user-parse-tables))) + (lltab (get calc-language 'math-parse-table))) (or (and (eq mtab calc-last-main-parse-table) - (eq ltab calc-last-lang-parse-table)) - (let ((p (append mtab ltab)) + (eq ltab calc-last-user-lang-parse-table) + (eq lltab calc-last-lang-parse-table)) + (let ((p (append mtab ltab lltab)) (math-toks nil)) (setq calc-user-parse-table p) (setq calc-user-token-chars nil) @@ -629,7 +651,8 @@ in Calc algebraic input.") (length y))))) "\\|") calc-last-main-parse-table mtab - calc-last-lang-parse-table ltab))))) + calc-last-user-lang-parse-table ltab + calc-last-lang-parse-table lltab))))) (defun math-find-user-tokens (p) (while p @@ -660,7 +683,8 @@ in Calc algebraic input.") (setq math-exp-old-pos math-exp-pos math-exp-token 'end math-expr-data "\000") - (let ((ch (aref math-exp-str math-exp-pos))) + (let (adfn + (ch (aref math-exp-str math-exp-pos))) (setq math-exp-old-pos math-exp-pos) (cond ((memq ch '(32 10 9)) (setq math-exp-pos (1+ math-exp-pos)) @@ -677,7 +701,7 @@ in Calc algebraic input.") math-exp-pos (match-end 0))) ((or (and (>= ch ?a) (<= ch ?z)) (and (>= ch ?A) (<= ch ?Z))) - (string-match (if (memq calc-language '(c fortran pascal maple)) + (string-match (if (memq calc-language calc-lang-allow-underscores) "[a-zA-Z0-9_#]*" "[a-zA-Z0-9'#]*") math-exp-str math-exp-pos) @@ -685,22 +709,8 @@ in Calc algebraic input.") math-exp-pos (match-end 0) math-expr-data (math-restore-dashes (math-match-substring math-exp-str 0))) - (if (eq calc-language 'eqn) - (let ((code (assoc math-expr-data math-eqn-ignore-words))) - (cond ((null code)) - ((null (cdr code)) - (math-read-token)) - ((consp (nth 1 code)) - (math-read-token) - (if (assoc math-expr-data (cdr code)) - (setq math-expr-data (format "%s %s" - (car code) math-expr-data)))) - ((eq (nth 1 code) 'punc) - (setq math-exp-token 'punc - math-expr-data (nth 2 code))) - (t - (math-read-token) - (math-read-token)))))) + (if (setq adfn (get calc-language 'math-lang-adjust-words)) + (funcall adfn))) ((or (and (>= ch ?0) (<= ch ?9)) (and (eq ch '?\.) (eq (string-match "\\.[0-9]" math-exp-str math-exp-pos) @@ -709,35 +719,31 @@ in Calc algebraic input.") (eq (string-match "_\\.?[0-9]" math-exp-str math-exp-pos) math-exp-pos) (or (eq math-exp-pos 0) - (and (memq calc-language '(nil flat big unform - tex latex eqn)) + (and (not (memq calc-language + calc-lang-allow-underscores)) (eq (string-match "[^])}\"a-zA-Z0-9'$]_" math-exp-str (1- math-exp-pos)) (1- math-exp-pos)))))) - (or (and (eq calc-language 'c) + (or (and (memq calc-language calc-lang-c-type-hex) (string-match "0[xX][0-9a-fA-F]+" math-exp-str math-exp-pos)) (string-match "_?\\([0-9]+.?0*@ *\\)?\\([0-9]+.?0*' *\\)?\\(0*\\([2-9]\\|1[0-4]\\)\\(#\\|\\^\\^\\)[0-9a-dA-D.]+[eE][-+_]?[0-9]+\\|0*\\([2-9]\\|[0-2][0-9]\\|3[0-6]\\)\\(#\\|\\^\\^\\)[0-9a-zA-Z:.]+\\|[0-9]+:[0-9:]+\\|[0-9.]+\\([eE][-+_]?[0-9]+\\)?\"?\\)?" math-exp-str math-exp-pos)) (setq math-exp-token 'number math-expr-data (math-match-substring math-exp-str 0) math-exp-pos (match-end 0))) + ((and (setq adfn + (assq ch (get calc-language 'math-lang-read-symbol))) + (eval (nth 1 adfn))) + (eval (nth 2 adfn))) ((eq ch ?\$) - (if (and (eq calc-language 'pascal) - (eq (string-match - "\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Z]\\)" - math-exp-str math-exp-pos) - math-exp-pos)) - (setq math-exp-token 'number - math-expr-data (math-match-substring math-exp-str 1) - math-exp-pos (match-end 1)) - (if (eq (string-match "\\$\\([1-9][0-9]*\\)" math-exp-str math-exp-pos) - math-exp-pos) - (setq math-expr-data (- (string-to-number (math-match-substring - math-exp-str 1)))) - (string-match "\\$+" math-exp-str math-exp-pos) - (setq math-expr-data (- (match-end 0) (match-beginning 0)))) - (setq math-exp-token 'dollar - math-exp-pos (match-end 0)))) + (if (eq (string-match "\\$\\([1-9][0-9]*\\)" math-exp-str math-exp-pos) + math-exp-pos) + (setq math-expr-data (- (string-to-number (math-match-substring + math-exp-str 1)))) + (string-match "\\$+" math-exp-str math-exp-pos) + (setq math-expr-data (- (match-end 0) (match-beginning 0)))) + (setq math-exp-token 'dollar + math-exp-pos (match-end 0))) ((eq ch ?\#) (if (eq (string-match "#\\([1-9][0-9]*\\)" math-exp-str math-exp-pos) math-exp-pos) @@ -756,120 +762,18 @@ in Calc algebraic input.") ((and (eq ch ?\") (string-match "\\(\"\\([^\"\\]\\|\\\\.\\)*\\)\\(\"\\|\\'\\)" math-exp-str math-exp-pos)) - (if (eq calc-language 'eqn) - (progn - (setq math-exp-str (copy-sequence math-exp-str)) - (aset math-exp-str (match-beginning 1) ?\{) - (if (< (match-end 1) (length math-exp-str)) - (aset math-exp-str (match-end 1) ?\})) - (math-read-token)) - (setq math-exp-token 'string - math-expr-data (math-match-substring math-exp-str 1) - math-exp-pos (match-end 0)))) - ((and (= ch ?\\) (eq calc-language 'tex) - (< math-exp-pos (1- (length math-exp-str)))) - (or (string-match "\\\\hbox *{\\([a-zA-Z0-9]+\\)}" - math-exp-str math-exp-pos) - (string-match "\\(\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\)" - math-exp-str math-exp-pos)) - (setq math-exp-token 'symbol - math-exp-pos (match-end 0) - math-expr-data (math-restore-dashes - (math-match-substring math-exp-str 1))) - (let ((code (assoc math-expr-data math-latex-ignore-words))) - (cond ((null code)) - ((null (cdr code)) - (math-read-token)) - ((eq (nth 1 code) 'punc) - (setq math-exp-token 'punc - math-expr-data (nth 2 code))) - ((and (eq (nth 1 code) 'mat) - (string-match " *{" math-exp-str math-exp-pos)) - (setq math-exp-pos (match-end 0) - math-exp-token 'punc - math-expr-data "[") - (let ((right (string-match "}" math-exp-str math-exp-pos))) - (and right - (setq math-exp-str (copy-sequence math-exp-str)) - (aset math-exp-str right ?\]))))))) - ((and (= ch ?\\) (eq calc-language 'latex) - (< math-exp-pos (1- (length math-exp-str)))) - (or (string-match "\\\\hbox *{\\([a-zA-Z0-9]+\\)}" - math-exp-str math-exp-pos) - (string-match "\\\\text *{\\([a-zA-Z0-9]+\\)}" - math-exp-str math-exp-pos) - (string-match "\\(\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\)" - math-exp-str math-exp-pos)) - (setq math-exp-token 'symbol - math-exp-pos (match-end 0) - math-expr-data (math-restore-dashes - (math-match-substring math-exp-str 1))) - (let ((code (assoc math-expr-data math-tex-ignore-words)) - envname) - (cond ((null code)) - ((null (cdr code)) - (math-read-token)) - ((eq (nth 1 code) 'punc) - (setq math-exp-token 'punc - math-expr-data (nth 2 code))) - ((and (eq (nth 1 code) 'begenv) - (string-match " *{\\([^}]*\\)}" math-exp-str math-exp-pos)) - (setq math-exp-pos (match-end 0) - envname (match-string 1 math-exp-str) - math-exp-token 'punc - math-expr-data "[") - (cond ((or (string= envname "matrix") - (string= envname "bmatrix") - (string= envname "smallmatrix") - (string= envname "pmatrix")) - (if (string-match (concat "\\\\end{" envname "}") - math-exp-str math-exp-pos) - (setq math-exp-str - (replace-match "]" t t math-exp-str)) - (error "%s" (concat "No closing \\end{" envname "}")))))) - ((and (eq (nth 1 code) 'mat) - (string-match " *{" math-exp-str math-exp-pos)) - (setq math-exp-pos (match-end 0) - math-exp-token 'punc - math-expr-data "[") - (let ((right (string-match "}" math-exp-str math-exp-pos))) - (and right - (setq math-exp-str (copy-sequence math-exp-str)) - (aset math-exp-str right ?\]))))))) - ((and (= ch ?\.) (eq calc-language 'fortran) - (eq (string-match "\\.[a-zA-Z][a-zA-Z][a-zA-Z]?\\." - math-exp-str math-exp-pos) math-exp-pos)) - (setq math-exp-token 'punc - math-expr-data (upcase (math-match-substring math-exp-str 0)) - math-exp-pos (match-end 0))) - ((and (eq calc-language 'math) - (eq (string-match "\\[\\[\\|->\\|:>" math-exp-str math-exp-pos) - math-exp-pos)) - (setq math-exp-token 'punc - math-expr-data (math-match-substring math-exp-str 0) - math-exp-pos (match-end 0))) - ((and (eq calc-language 'eqn) - (eq (string-match "->\\|<-\\|+-\\|\\\\dots\\|~\\|\\^" - math-exp-str math-exp-pos) - math-exp-pos)) - (setq math-exp-token 'punc - math-expr-data (math-match-substring math-exp-str 0) - math-exp-pos (match-end 0)) - (and (eq (string-match "\\\\dots\\." math-exp-str math-exp-pos) - math-exp-pos) - (setq math-exp-pos (match-end 0))) - (if (memq (aref math-expr-data 0) '(?~ ?^)) - (math-read-token))) + (setq math-exp-token 'string + math-expr-data (math-match-substring math-exp-str 1) + math-exp-pos (match-end 0))) + ((and (setq adfn (get calc-language 'math-lang-read))) + (eval (nth 0 adfn)) + (eval (nth 1 adfn))) ((eq (string-match "%%.*$" math-exp-str math-exp-pos) math-exp-pos) (setq math-exp-pos (match-end 0)) (math-read-token)) (t - (if (and (eq ch ?\{) (memq calc-language '(tex latex eqn))) - (setq ch ?\()) - (if (and (eq ch ?\}) (memq calc-language '(tex latex eqn))) - (setq ch ?\))) - (if (and (eq ch ?\&) (memq calc-language '(tex latex))) - (setq ch ?\,)) + (if (setq adfn (assq ch (get calc-language 'math-punc-table))) + (setq ch (cdr adfn))) (setq math-exp-token 'punc math-expr-data (char-to-string ch) math-exp-pos (1+ math-exp-pos))))))) @@ -902,7 +806,9 @@ in Calc algebraic input.") (memq math-exp-token '(symbol number dollar hash)) (equal math-expr-data "(") (and (equal math-expr-data "[") - (not (eq calc-language 'math)) + (not (equal + (get calc-language + 'math-function-open) "[")) (not (and math-exp-keep-spaces (eq (car-safe x) 'vec))))) (or (not (setq op (assoc math-expr-data math-expr-opers))) @@ -1178,7 +1084,9 @@ in Calc algebraic input.") (eq math-exp-token 'end))) (throw 'syntax "Expected `)'")) (math-read-token) - (if (and (eq calc-language 'fortran) args + (if (and (memq calc-language + calc-lang-parens-are-subscripts) + args (require 'calc-ext) (let ((calc-matrix-mode 'scalar)) (math-known-matrixp @@ -1216,11 +1124,15 @@ in Calc algebraic input.") (substring (symbol-name (cdr v)) 4)) (cdr v)))))) - (while (and (memq calc-language '(c pascal maple)) + (while (and (memq calc-language + calc-lang-brackets-are-subscripts) (equal math-expr-data "[")) (math-read-token) - (setq val (append (list 'calcFunc-subscr val) - (math-read-expr-list))) + (let ((el (math-read-expr-list))) + (while el + (setq val (append (list 'calcFunc-subscr val) + (list (car el)))) + (setq el (cdr el)))) (if (equal math-expr-data "]") (math-read-token) (throw 'syntax "Expected ']'"))) diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el index bb054de4951..140335a3d02 100644 --- a/lisp/calc/calc-ext.el +++ b/lisp/calc/calc-ext.el @@ -30,6 +30,51 @@ (require 'calc) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function math-clip "calc-bin" (a &optional w)) +(declare-function math-round "calc-arith" (a &optional prec)) +(declare-function math-simplify "calc-alg" (top-expr)) +(declare-function math-simplify-extended "calc-alg" (a)) +(declare-function math-simplify-units "calc-units" (a)) +(declare-function calc-set-language "calc-lang" (lang &optional option no-refresh)) +(declare-function calc-flush-caches "calc-stuff" (&optional inhibit-msg)) +(declare-function calc-save-modes "calc-mode" ()) +(declare-function calc-embedded-modes-change "calc-embed" (vars)) +(declare-function calc-embedded-var-change "calc-embed" (var &optional buf)) +(declare-function math-mul-float "calc-arith" (a b)) +(declare-function math-arctan-raw "calc-math" (x)) +(declare-function math-sqrt-raw "calc-math" (a &optional guess)) +(declare-function math-sqrt-float "calc-math" (a &optional guess)) +(declare-function math-exp-minus-1-raw "calc-math" (x)) +(declare-function math-normalize-polar "calc-cplx" (a)) +(declare-function math-normalize-hms "calc-forms" (a)) +(declare-function math-normalize-mod "calc-forms" (a)) +(declare-function math-make-sdev "calc-forms" (x sigma)) +(declare-function math-make-intv "calc-forms" (mask lo hi)) +(declare-function math-normalize-logical-op "calc-prog" (a)) +(declare-function math-possible-signs "calc-arith" (a &optional origin)) +(declare-function math-infinite-dir "calc-math" (a &optional inf)) +(declare-function math-calcFunc-to-var "calc-map" (f)) +(declare-function calc-embedded-evaluate-expr "calc-embed" (x)) +(declare-function math-known-nonzerop "calc-arith" (a)) +(declare-function math-read-expr-level "calc-aent" (exp-prec &optional exp-term)) +(declare-function math-read-big-rec "calc-lang" (math-rb-h1 math-rb-v1 math-rb-h2 math-rb-v2 &optional baseline prec short)) +(declare-function math-read-big-balance "calc-lang" (h v what &optional commas)) +(declare-function math-format-date "calc-forms" (math-fd-date)) +(declare-function math-vector-is-string "calccomp" (a)) +(declare-function math-vector-to-string "calccomp" (a &optional quoted)) +(declare-function math-format-radix-float "calc-bin" (a prec)) +(declare-function math-compose-expr "calccomp" (a prec)) +(declare-function math-abs "calc-arith" (a)) +(declare-function math-format-bignum-binary "calc-bin" (a)) +(declare-function math-format-bignum-octal "calc-bin" (a)) +(declare-function math-format-bignum-hex "calc-bin" (a)) +(declare-function math-format-bignum-radix "calc-bin" (a)) +(declare-function math-compute-max-digits "calc-bin" (w r)) +(declare-function math-map-vec "calc-vec" (f a)) +(declare-function math-make-frac "calc-frac" (num den)) + + (defvar math-simplifying nil) (defvar math-living-dangerously nil) ; true if unsafe simplifications are okay. (defvar math-integrating nil) @@ -2090,7 +2135,7 @@ calc-kill calc-kill-region calc-yank)))) ;;; True if A is a real or will evaluate to a real. [P x] [Public] (defun math-provably-realp (a) (or (Math-realp a) - (math-provably-integer a) + (math-provably-integerp a) (memq (car-safe a) '(abs arg)))) ;;; True if A is a non-real, complex number. [P x] [Public] diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el index 3839fc93666..13048c85dce 100644 --- a/lisp/calc/calc-forms.el +++ b/lisp/calc/calc-forms.el @@ -32,6 +32,12 @@ (require 'calc-ext) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function calendar-current-time-zone "cal-dst" ()) +(declare-function calendar-absolute-from-gregorian "calendar" (date)) +(declare-function dst-in-effect "cal-dst" (date)) + + (defun calc-time () (interactive) (calc-wrapper diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index ed1c93e8694..49d1fd937ba 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el @@ -32,6 +32,11 @@ (require 'calc-ext) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function Info-goto-node "info" (nodename &optional fork)) +(declare-function Info-last "info" ()) + + (defun calc-help-prefix (arg) "This key is the prefix for Calc help functions. See calc-help-for-help." (interactive "P") diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el index 3871a1b0f09..2ae23cd5aa9 100644 --- a/lisp/calc/calc-lang.el +++ b/lisp/calc/calc-lang.el @@ -32,12 +32,27 @@ (require 'calc-ext) (require 'calc-macs) + +;; Declare functions which are defined elsewhere. +(declare-function math-compose-vector "calccomp" (a sep prec)) +(declare-function math-compose-var "calccomp" (a)) +(declare-function math-tex-expr-is-flat "calccomp" (a)) +(declare-function math-read-factor "calc-aent" ()) +(declare-function math-read-expr-level "calc-aent" (exp-prec &optional exp-term)) + +;; Declare variables which are defined elsewhere. +(defvar calc-lang-slash-idiv) +(defvar calc-lang-allow-underscores) +(defvar math-comp-left-bracket) +(defvar math-comp-right-bracket) +(defvar math-comp-comma) +(defvar math-comp-vector-prec) + ;;; Alternate entry/display languages. (defun calc-set-language (lang &optional option no-refresh) (setq math-expr-opers (or (get lang 'math-oper-table) (math-standard-ops)) math-expr-function-mapping (get lang 'math-function-table) - math-expr-special-function-mapping (get lang 'math-special-function-table) math-expr-variable-mapping (get lang 'math-variable-table) calc-language-input-filter (get lang 'math-input-filter) calc-language-output-filter (get lang 'math-output-filter) @@ -135,6 +150,20 @@ (if (= r 8) (format "0%s" s) (format "%d#%s" r s)))))) +(put 'c 'math-compose-subscr + (function + (lambda (a) + (let ((args (cdr (cdr a)))) + (list 'horiz + (math-compose-expr (nth 1 a) 1000) + "[" + (math-compose-vector args ", " 0) + "]"))))) + +(add-to-list 'calc-lang-slash-idiv 'c) +(add-to-list 'calc-lang-allow-underscores 'c) +(add-to-list 'calc-lang-c-type-hex 'c) +(add-to-list 'calc-lang-brackets-are-subscripts 'c) (defun calc-pascal-language (n) (interactive "P") @@ -183,6 +212,32 @@ (if (= r 16) (format "$%s" s) (format "%d#%s" r s))))) +(put 'pascal 'math-lang-read-symbol + '((?\$ + (eq (string-match + "\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Z]\\)" + math-exp-str math-exp-pos) + math-exp-pos) + (setq math-exp-token 'number + math-expr-data (math-match-substring math-exp-str 1) + math-exp-pos (match-end 1))))) + +(put 'pascal 'math-compose-subscr + (function + (lambda (a) + (let ((args (cdr (cdr a)))) + (while (eq (car-safe (nth 1 a)) 'calcFunc-subscr) + (setq args (append (cdr (cdr (nth 1 a))) args) + a (nth 1 a))) + (list 'horiz + (math-compose-expr (nth 1 a) 1000) + "[" + (math-compose-vector args ", " 0) + "]"))))) + +(add-to-list 'calc-lang-allow-underscores 'pascal) +(add-to-list 'calc-lang-brackets-are-subscripts 'pascal) + (defun calc-input-case-filter (str) (cond ((or (null calc-language-option) (= calc-language-option 0)) str) @@ -253,8 +308,34 @@ ( real . calcFunc-re ))) (put 'fortran 'math-input-filter 'calc-input-case-filter) + (put 'fortran 'math-output-filter 'calc-output-case-filter) +(put 'fortran 'math-lang-read-symbol + '((?\. + (eq (string-match "\\.[a-zA-Z][a-zA-Z][a-zA-Z]?\\." + math-exp-str math-exp-pos) math-exp-pos) + (setq math-exp-token 'punc + math-expr-data (upcase (math-match-substring math-exp-str 0)) + math-exp-pos (match-end 0))))) + +(put 'fortran 'math-compose-subscr + (function + (lambda (a) + (let ((args (cdr (cdr a)))) + (while (eq (car-safe (nth 1 a)) 'calcFunc-subscr) + (setq args (append (cdr (cdr (nth 1 a))) args) + a (nth 1 a))) + (list 'horiz + (math-compose-expr (nth 1 a) 1000) + "(" + (math-compose-vector args ", " 0) + ")"))))) + +(add-to-list 'calc-lang-slash-idiv 'fortran) +(add-to-list 'calc-lang-allow-underscores 'fortran) +(add-to-list 'calc-lang-parens-are-subscripts 'fortran) + ;; The next few variables are local to math-read-exprs in calc-aent.el ;; and math-read-expr in calc-ext.el, but are set in functions they call. @@ -354,10 +435,10 @@ ( "\\times" * 191 190 ) ( "*" * 191 190 ) ( "2x" * 191 190 ) - ( "/" / 185 186 ) ( "+" + 180 181 ) ( "-" - 180 181 ) ( "\\over" / 170 171 ) + ( "/" / 170 171 ) ( "\\choose" calcFunc-choose 170 171 ) ( "\\mod" % 170 171 ) ( "<" calcFunc-lt 160 161 ) @@ -408,6 +489,11 @@ ( \\phi . calcFunc-totient ) ( \\mu . calcFunc-moebius ))) +(put 'tex 'math-special-function-table + '((calcFunc-sum . (math-compose-tex-sum "\\sum")) + (calcFunc-prod . (math-compose-tex-sum "\\prod")) + (intv . math-compose-tex-intv))) + (put 'tex 'math-variable-table '( ;; The Greek letters @@ -458,8 +544,112 @@ ( \\sum . (math-parse-tex-sum calcFunc-sum) ) ( \\prod . (math-parse-tex-sum calcFunc-prod) ))) +(put 'tex 'math-punc-table + '((?\{ . ?\() + (?\} . ?\)) + (?\& . ?\,))) + (put 'tex 'math-complex-format 'i) +(put 'tex 'math-input-filter 'math-tex-input-filter) + +(put 'tex 'math-matrix-formatter + (function + (lambda (a) + (if (and (integerp calc-language-option) + (or (= calc-language-option 0) + (> calc-language-option 1) + (< calc-language-option -1))) + (append '(vleft 0 "\\matrix{") + (math-compose-tex-matrix (cdr a)) + '("}")) + (append '(horiz "\\matrix{ ") + (math-compose-tex-matrix (cdr a)) + '(" }")))))) + +(put 'tex 'math-var-formatter 'math-compose-tex-var) + +(put 'tex 'math-func-formatter 'math-compose-tex-func) + +(put 'tex 'math-dots "\\ldots") + +(put 'tex 'math-big-parens '("\\left( " . " \\right)")) + +(put 'tex 'math-evalto '("\\evalto " . " \\to ")) + +(defconst math-tex-ignore-words + '( ("\\hbox") ("\\mbox") ("\\text") ("\\left") ("\\right") + ("\\,") ("\\>") ("\\:") ("\\;") ("\\!") ("\\ ") + ("\\quad") ("\\qquad") ("\\hfil") ("\\hfill") + ("\\displaystyle") ("\\textstyle") ("\\dsize") ("\\tsize") + ("\\scriptstyle") ("\\scriptscriptstyle") ("\\ssize") ("\\sssize") + ("\\rm") ("\\bf") ("\\it") ("\\sl") + ("\\roman") ("\\bold") ("\\italic") ("\\slanted") + ("\\cal") ("\\mit") ("\\Cal") ("\\Bbb") ("\\frak") ("\\goth") + ("\\evalto") + ("\\matrix" mat) ("\\bmatrix" mat) ("\\pmatrix" mat) + ("\\begin" begenv) + ("\\cr" punc ";") ("\\\\" punc ";") ("\\*" punc "*") + ("\\{" punc "[") ("\\}" punc "]"))) + +(defconst math-latex-ignore-words + (append math-tex-ignore-words + '(("\\begin" begenv)))) + +(put 'tex 'math-lang-read-symbol + '((?\\ + (< math-exp-pos (1- (length math-exp-str))) + (progn + (or (string-match "\\\\hbox *{\\([a-zA-Z0-9]+\\)}" + math-exp-str math-exp-pos) + (string-match "\\(\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\)" + math-exp-str math-exp-pos)) + (setq math-exp-token 'symbol + math-exp-pos (match-end 0) + math-expr-data (math-restore-dashes + (math-match-substring math-exp-str 1))) + (let ((code (assoc math-expr-data math-latex-ignore-words))) + (cond ((null code)) + ((null (cdr code)) + (math-read-token)) + ((eq (nth 1 code) 'punc) + (setq math-exp-token 'punc + math-expr-data (nth 2 code))) + ((and (eq (nth 1 code) 'mat) + (string-match " *{" math-exp-str math-exp-pos)) + (setq math-exp-pos (match-end 0) + math-exp-token 'punc + math-expr-data "[") + (let ((right (string-match "}" math-exp-str math-exp-pos))) + (and right + (setq math-exp-str (copy-sequence math-exp-str)) + (aset math-exp-str right ?\])))))))))) + +(defun math-compose-tex-matrix (a &optional ltx) + (if (cdr a) + (cons (append (math-compose-vector (cdr (car a)) " & " 0) + (if ltx '(" \\\\ ") '(" \\cr "))) + (math-compose-tex-matrix (cdr a) ltx)) + (list (math-compose-vector (cdr (car a)) " & " 0)))) + +(defun math-compose-tex-sum (a fn) + (cond + ((nth 4 a) + (list 'horiz (nth 1 fn) + "_{" (math-compose-expr (nth 2 a) 0) + "=" (math-compose-expr (nth 3 a) 0) + "}^{" (math-compose-expr (nth 4 a) 0) + "}{" (math-compose-expr (nth 1 a) 0) "}")) + ((nth 3 a) + (list 'horiz (nth 1 fn) + "_{" (math-compose-expr (nth 2 a) 0) + "=" (math-compose-expr (nth 3 a) 0) + "}{" (math-compose-expr (nth 1 a) 0) "}")) + (t + (list 'horiz (nth 1 fn) + "_{" (math-compose-expr (nth 2 a) 0) + "}{" (math-compose-expr (nth 1 a) 0) "}")))) + (defun math-parse-tex-sum (f val) (let (low high save) (or (equal math-expr-data "_") (throw 'syntax "Expected `_'")) @@ -480,7 +670,59 @@ (setq str (concat (substring str 0 (1+ (match-beginning 0))) (substring str (1- (match-end 0)))))) str) -(put 'tex 'math-input-filter 'math-tex-input-filter) + +;(defun math-tex-print-sqrt (a) +; (list 'horiz +; "\\sqrt{" +; (math-compose-expr (nth 1 a) 0) +; "}")) + +(defun math-compose-tex-intv (a) + (list 'horiz + (if (memq (nth 1 a) '(0 1)) "(" "[") + (math-compose-expr (nth 2 a) 0) + " \\ldots " + (math-compose-expr (nth 3 a) 0) + (if (memq (nth 1 a) '(0 2)) ")" "]"))) + +(defun math-compose-tex-var (a prec) + (if (and calc-language-option + (not (= calc-language-option 0)) + (string-match "\\`[a-zA-Z][a-zA-Z0-9]+\\'" + (symbol-name (nth 1 a)))) + (if (eq calc-language 'latex) + (format "\\text{%s}" (symbol-name (nth 1 a))) + (format "\\hbox{%s}" (symbol-name (nth 1 a)))) + (math-compose-var a))) + +(defun math-compose-tex-func (func a) + (let (left right) + (if (and calc-language-option + (not (= calc-language-option 0)) + (string-match "\\`[a-zA-Z][a-zA-Z0-9]+\\'" func)) + (if (< (prefix-numeric-value calc-language-option) 0) + (setq func (format "\\%s" func)) + (setq func (if (eq calc-language 'latex) + (format "\\text{%s}" func) + (format "\\hbox{%s}" func))))) + (cond ((or (> (length a) 2) + (not (math-tex-expr-is-flat (nth 1 a)))) + (setq left "\\left( " + right " \\right)")) + ((and (eq (aref func 0) ?\\) + (not (or + (string-match "\\hbox{" func) + (string-match "\\text{" func))) + (= (length a) 2) + (or (Math-realp (nth 1 a)) + (memq (car (nth 1 a)) '(var *)))) + (setq left "{" right "}")) + (t (setq left calc-function-open + right calc-function-close))) + (list 'horiz func + left + (math-compose-vector (cdr a) ", " 0) + right))) (put 'latex 'math-oper-table (append (get 'tex 'math-oper-table) @@ -496,7 +738,7 @@ ( "\\Vec" calcFunc-VEC -1 950 ) ( "\\dddot" calcFunc-dddot -1 950 ) ( "\\ddddot" calcFunc-ddddot -1 950 ) - ( "\div" / 170 171 ) + ( "\\div" / 170 171 ) ( "\\le" calcFunc-leq 160 161 ) ( "\\leqq" calcFunc-leq 160 161 ) ( "\\leqsland" calcFunc-leq 160 161 ) @@ -534,15 +776,93 @@ ( \\mu . calcFunc-moebius )))) (put 'latex 'math-special-function-table - '((/ . (math-latex-print-frac "\\frac")) - (calcFunc-choose . (math-latex-print-frac "\\binom")))) + '((/ . (math-compose-latex-frac "\\frac")) + (calcFunc-choose . (math-compose-latex-frac "\\binom")) + (calcFunc-sum . (math-compose-tex-sum "\\sum")) + (calcFunc-prod . (math-compose-tex-sum "\\prod")) + (intv . math-compose-tex-intv))) (put 'latex 'math-variable-table (get 'tex 'math-variable-table)) +(put 'latex 'math-punc-table + '((?\{ . ?\() + (?\} . ?\)) + (?\& . ?\,))) + (put 'latex 'math-complex-format 'i) +(put 'latex 'math-matrix-formatter + (function + (lambda (a) + (if (and (integerp calc-language-option) + (or (= calc-language-option 0) + (> calc-language-option 1) + (< calc-language-option -1))) + (append '(vleft 0 "\\begin{pmatrix}") + (math-compose-tex-matrix (cdr a) t) + '("\\end{pmatrix}")) + (append '(horiz "\\begin{pmatrix} ") + (math-compose-tex-matrix (cdr a) t) + '(" \\end{pmatrix}")))))) +(put 'latex 'math-var-formatter 'math-compose-tex-var) + +(put 'latex 'math-func-formatter 'math-compose-tex-func) + +(put 'latex 'math-dots "\\ldots") + +(put 'latex 'math-big-parens '("\\left( " . " \\right)")) + +(put 'latex 'math-evalto '("\\evalto " . " \\to ")) + +(put 'latex 'math-lang-read-symbol + '((?\\ + (< math-exp-pos (1- (length math-exp-str))) + (progn + (or (string-match "\\\\hbox *{\\([a-zA-Z0-9]+\\)}" + math-exp-str math-exp-pos) + (string-match "\\\\text *{\\([a-zA-Z0-9]+\\)}" + math-exp-str math-exp-pos) + (string-match "\\(\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\)" + math-exp-str math-exp-pos)) + (setq math-exp-token 'symbol + math-exp-pos (match-end 0) + math-expr-data (math-restore-dashes + (math-match-substring math-exp-str 1))) + (let ((code (assoc math-expr-data math-tex-ignore-words)) + envname) + (cond ((null code)) + ((null (cdr code)) + (math-read-token)) + ((eq (nth 1 code) 'punc) + (setq math-exp-token 'punc + math-expr-data (nth 2 code))) + ((and (eq (nth 1 code) 'begenv) + (string-match " *{\\([^}]*\\)}" math-exp-str math-exp-pos)) + (setq math-exp-pos (match-end 0) + envname (match-string 1 math-exp-str) + math-exp-token 'punc + math-expr-data "[") + (cond ((or (string= envname "matrix") + (string= envname "bmatrix") + (string= envname "smallmatrix") + (string= envname "pmatrix")) + (if (string-match (concat "\\\\end{" envname "}") + math-exp-str math-exp-pos) + (setq math-exp-str + (replace-match "]" t t math-exp-str)) + (error "%s" (concat "No closing \\end{" envname "}")))))) + ((and (eq (nth 1 code) 'mat) + (string-match " *{" math-exp-str math-exp-pos)) + (setq math-exp-pos (match-end 0) + math-exp-token 'punc + math-expr-data "[") + (let ((right (string-match "}" math-exp-str math-exp-pos))) + (and right + (setq math-exp-str (copy-sequence math-exp-str)) + (aset math-exp-str right ?\])))))))))) + (defun math-latex-parse-frac (f val) (let (numer denom) (setq numer (car (math-read-expr-list))) @@ -560,7 +880,7 @@ (setq second (math-read-factor)) (list (nth 2 f) first second))) -(defun math-latex-print-frac (a fn) +(defun math-compose-latex-frac (a fn) (list 'horiz (nth 1 fn) "{" (math-compose-expr (nth 1 a) -1) "}{" (math-compose-expr (nth 2 a) -1) @@ -640,11 +960,162 @@ ( mu . calcFunc-moebius ) ( matrix . (math-parse-eqn-matrix) ))) +(put 'eqn 'math-special-function-table + '((intv . math-compose-eqn-intv))) + +(put 'eqn 'math-punc-table + '((?\{ . ?\() + (?\} . ?\)))) + (put 'eqn 'math-variable-table '( ( inf . var-uinf ))) (put 'eqn 'math-complex-format 'i) +(put 'eqn 'math-big-parens '("{left ( " . " right )}")) + +(put 'eqn 'math-evalto '("evalto " . " -> ")) + +(put 'eqn 'math-matrix-formatter + (function + (lambda (a) + (append '(horiz "matrix { ") + (math-compose-eqn-matrix + (cdr (math-transpose a))) + '("}"))))) + +(put 'eqn 'math-var-formatter + (function + (lambda (a prec) + (let (v) + (if (and math-compose-hash-args + (let ((p calc-arg-values)) + (setq v 1) + (while (and p (not (equal (car p) a))) + (setq p (and (eq math-compose-hash-args t) (cdr p)) + v (1+ v))) + p)) + (if (eq math-compose-hash-args 1) + "#" + (format "#%d" v)) + (if (string-match ".'\\'" (symbol-name (nth 2 a))) + (math-compose-expr + (list 'calcFunc-Prime + (list + 'var + (intern (substring (symbol-name (nth 1 a)) 0 -1)) + (intern (substring (symbol-name (nth 2 a)) 0 -1)))) + prec) + (symbol-name (nth 1 a)))))))) + +(defconst math-eqn-special-funcs + '( calcFunc-log + calcFunc-ln calcFunc-exp + calcFunc-sin calcFunc-cos calcFunc-tan + calcFunc-sec calcFunc-csc calcFunc-cot + calcFunc-sinh calcFunc-cosh calcFunc-tanh + calcFunc-sech calcFunc-csch calcFunc-coth + calcFunc-arcsin calcFunc-arccos calcFunc-arctan + calcFunc-arcsinh calcFunc-arccosh calcFunc-arctanh)) + +(put 'eqn 'math-func-formatter + (function + (lambda (func a) + (let (left right) + (if (string-match "[^']'+\\'" func) + (let ((n (- (length func) (match-beginning 0) 1))) + (setq func (substring func 0 (- n))) + (while (>= (setq n (1- n)) 0) + (setq func (concat func " prime"))))) + (cond ((or (> (length a) 2) + (not (math-tex-expr-is-flat (nth 1 a)))) + (setq left "{left ( " + right " right )}")) + + ((and + (memq (car a) math-eqn-special-funcs) + (= (length a) 2) + (or (Math-realp (nth 1 a)) + (memq (car (nth 1 a)) '(var *)))) + (setq left "~{" right "}")) + (t + (setq left " ( " + right " )"))) + (list 'horiz func left + (math-compose-vector (cdr a) " , " 0) + right))))) + +(put 'eqn 'math-lang-read-symbol + '((?\" + (string-match "\\(\"\\([^\"\\]\\|\\\\.\\)*\\)\\(\"\\|\\'\\)" + math-exp-str math-exp-pos) + (progn + (setq math-exp-str (copy-sequence math-exp-str)) + (aset math-exp-str (match-beginning 1) ?\{) + (if (< (match-end 1) (length math-exp-str)) + (aset math-exp-str (match-end 1) ?\})) + (math-read-token))))) + +(defconst math-eqn-ignore-words + '( ("roman") ("bold") ("italic") ("mark") ("lineup") ("evalto") + ("left" ("floor") ("ceil")) + ("right" ("floor") ("ceil")) + ("arc" ("sin") ("cos") ("tan") ("sinh") ("cosh") ("tanh")) + ("size" n) ("font" n) ("fwd" n) ("back" n) ("up" n) ("down" n) + ("above" punc ","))) + +(put 'eqn 'math-lang-adjust-words + (function + (lambda () + (let ((code (assoc math-expr-data math-eqn-ignore-words))) + (cond ((null code)) + ((null (cdr code)) + (math-read-token)) + ((consp (nth 1 code)) + (math-read-token) + (if (assoc math-expr-data (cdr code)) + (setq math-expr-data (format "%s %s" + (car code) math-expr-data)))) + ((eq (nth 1 code) 'punc) + (setq math-exp-token 'punc + math-expr-data (nth 2 code))) + (t + (math-read-token) + (math-read-token))))))) + +(put 'eqn 'math-lang-read + '((eq (string-match "->\\|<-\\|+-\\|\\\\dots\\|~\\|\\^" + math-exp-str math-exp-pos) + math-exp-pos) + (progn + (setq math-exp-token 'punc + math-expr-data (math-match-substring math-exp-str 0) + math-exp-pos (match-end 0)) + (and (eq (string-match "\\\\dots\\." math-exp-str math-exp-pos) + math-exp-pos) + (setq math-exp-pos (match-end 0))) + (if (memq (aref math-expr-data 0) '(?~ ?^)) + (math-read-token))))) + + +(defun math-compose-eqn-matrix (a) + (if a + (cons + (cond ((eq calc-matrix-just 'right) "rcol ") + ((eq calc-matrix-just 'center) "ccol ") + (t "lcol ")) + (cons + (list 'break math-compose-level) + (cons + "{ " + (cons + (let ((math-compose-level (1+ math-compose-level))) + (math-compose-vector (cdr (car a)) " above " 1000)) + (cons + " } " + (math-compose-eqn-matrix (cdr a))))))) + nil)) + (defun math-parse-eqn-matrix (f sym) (let ((vec nil)) (while (assoc math-expr-data '(("ccol") ("lcol") ("rcol"))) @@ -680,6 +1151,14 @@ (intern (concat (symbol-name (nth 2 x)) "'")))) (list 'calcFunc-Prime x))) +(defun math-compose-eqn-intv (a) + (list 'horiz + (if (memq (nth 1 a) '(0 1)) "(" "[") + (math-compose-expr (nth 2 a) 0) + " ... " + (math-compose-expr (nth 3 a) 0) + (if (memq (nth 1 a) '(0 2)) ")" "]"))) + (defun calc-mathematica-language () (interactive) @@ -789,6 +1268,22 @@ (put 'math 'math-radix-formatter (function (lambda (r s) (format "%d^^%s" r s)))) +(put 'math 'math-lang-read + '((eq (string-match "\\[\\[\\|->\\|:>" math-exp-str math-exp-pos) + math-exp-pos) + (setq math-exp-token 'punc + math-expr-data (math-match-substring math-exp-str 0) + math-exp-pos (match-end 0)))) + +(put 'math 'math-compose-subscr + (function + (lambda (a) + (list 'horiz + (math-compose-expr (nth 1 a) 1000) + "[[" + (math-compose-expr (nth 2 a) 0) + "]]")))) + (defun math-read-math-subscr (x op) (let ((idx (math-read-expr-level 0))) (or (and (equal math-expr-data "]") @@ -862,6 +1357,9 @@ ( vectdim . calcFunc-vlen ) )) +(put 'maple 'math-special-function-table + '((intv . math-compose-maple-intv))) + (put 'maple 'math-variable-table '( ( I . var-i ) ( Pi . var-pi ) @@ -873,6 +1371,37 @@ (put 'maple 'math-complex-format 'I) +(put 'maple 'math-matrix-formatter + (function + (lambda (a) + (list 'horiz + "matrix(" + math-comp-left-bracket + (math-compose-vector (cdr a) + (concat math-comp-comma " ") + math-comp-vector-prec) + math-comp-right-bracket + ")")))) + +(put 'maple 'math-compose-subscr + (function + (lambda (a) + (let ((args (cdr (cdr a)))) + (list 'horiz + (math-compose-expr (nth 1 a) 1000) + "[" + (math-compose-vector args ", " 0) + "]"))))) + +(add-to-list 'calc-lang-allow-underscores 'maple) +(add-to-list 'calc-lang-brackets-are-subscripts 'maple) + +(defun math-compose-maple-intv (a) + (list 'horiz + (math-compose-expr (nth 2 a) 0) + " .. " + (math-compose-expr (nth 3 a) 0))) + (defun math-read-maple-dots (x op) (list 'intv 3 x (math-read-expr-level (nth 3 op)))) diff --git a/lisp/calc/calc-macs.el b/lisp/calc/calc-macs.el index 27001b43f36..8e939cdde7b 100644 --- a/lisp/calc/calc-macs.el +++ b/lisp/calc/calc-macs.el @@ -27,6 +27,16 @@ ;;; Code: +;; Declare functions which are defined elsewhere. +(declare-function math-zerop "calc-misc" (a)) +(declare-function math-negp "calc-misc" (a)) +(declare-function math-looks-negp "calc-misc" (a)) +(declare-function math-posp "calc-misc" (a)) +(declare-function math-compare "calc-ext" (a b)) +(declare-function math-bignum "calc" (a)) +(declare-function math-compare-bignum "calc-ext" (a b)) + + (defmacro calc-wrapper (&rest body) `(calc-do (function (lambda () ,@body)))) diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el new file mode 100644 index 00000000000..22c42adc124 --- /dev/null +++ b/lisp/calc/calc-menu.el @@ -0,0 +1,1214 @@ +;;; calc-menu.el --- a menu for Calc + +;; Copyright (C) 2007 Free Software Foundation, Inc. + +;; Maintainer: Jay Belanger + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +(defvar calc-arithmetic-menu + (list "Arithmetic" + (list "Basic" + ["-(1:)" calc-change-sign :keys "n"] + ["(2:) + (1:)" calc-plus :keys "+"] + ["(2:) - (1:)" calc-minus :keys "-"] + ["(2:) * (1:)" calc-times :keys "*"] + ["(2:) / (1:)" calc-divide :keys "/"] + ["(2:) ^ (1:)" calc-power :keys "^"] + ["(2:) ^ (1/(1:))" + (progn + (require 'calc-ext) + (let ((calc-inverse-flag t)) + (call-interactively 'calc-power))) + :keys "I ^" + :help "The (1:)th root of (2:)"] + ["abs(1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-abs)) + :keys "A" + :help "Absolute value"] + ["1/(1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-inv)) + :keys "&"] + ["sqrt(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-sqrt)) + :keys "Q"] + ["idiv(2:,1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-idiv)) + :keys "\\" + :help "The integer quotient of (2:) over (1:)"] + ["(2:) mod (1:)" + (progn + (require 'calc-misc) + (call-interactively 'calc-mod)) + :keys "%" + :help "The remainder when (2:) is divided by (1:)"]) + (list "Rounding" + ["floor(1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-floor)) + :keys "F" + :help "The greatest integer less than or equal to (1:)"] + ["ceiling(1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-ceiling)) + :keys "I F" + :help "The smallest integer greater than or equal to (1:)"] + ["round(1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-round)) + :keys "R" + :help "The nearest integer to (1:)"] + ["truncate(1:)" + (progn + (require 'calc-arith) + (call-interactively 'calc-trunc)) + :keys "I R" + :help "The integer part of (1:)"]) + (list "Complex Numbers" + ["Re(1:)" + (progn + (require 'calc-cplx) + (call-interactively 'calc-re)) + :keys "f r"] + ["Im(1:)" + (progn + (require 'calc-cplx) + (call-interactively 'calc-im)) + :keys "f i"] + ["conj(1:)" + (progn + (require 'calc-cplx) + (call-interactively 'calc-conj)) + :keys "J" + :help "The complex conjugate of (1:)"] + ["length(1:)" + (progn (require 'calc-arith) + (call-interactively 'calc-abs)) + :keys "A" + :help "The length (absolute value) of (1:)"] + ["arg(1:)" + (progn + (require 'calc-cplx) + (call-interactively 'calc-argument)) + :keys "G" + :help "The argument (polar angle) of (1:)"]) + (list "Conversion" + ["Convert (1:) to a float" + (progn + (require 'calc-ext) + (call-interactively 'calc-float)) + :keys "c f"] + ["Convert (1:) to a fraction" + (progn + (require 'calc-ext) + (call-interactively 'calc-fraction)) + :keys "c F"]) + (list "Binary" + ["Set word size" + (progn + (require 'calc-bin) + (call-interactively 'calc-word-size)) + :keys "b w"] + ["Clip (1:) to word size" + (progn + (require 'calc-bin) + (call-interactively 'calc-clip)) + :keys "b c" + :help "Reduce (1:) modulo 2^wordsize"] + ["(2:) and (1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-and)) + :keys "b a" + :help "Bitwise AND [modulo 2^wordsize]"] + ["(2:) or (1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-or)) + :keys "b o" + :help "Bitwise inclusive OR [modulo 2^wordsize]"] + ["(2:) xor (1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-xor)) + :keys "b x" + :help "Bitwise exclusive OR [modulo 2^wordsize]"] + ["diff(2:,1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-diff)) + :keys "b d" + :help "Bitwise difference [modulo 2^wordsize]"] + ["not (1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-not)) + :keys "b n" + :help "Bitwise NOT [modulo 2^wordsize]"] + ["left shift(1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-lshift-binary)) + :keys "b l" + :help "Shift (1:)[modulo 2^wordsize] one bit left"] + ["right shift(1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-rshift-binary)) + :keys "b r" + :help "Shift (1:)[modulo 2^wordsize] one bit right, putting 0s on the left"] + ["arithmetic right shift(1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-rshift-arith)) + :keys "b R" + :help "Shift (1:)[modulo 2^wordsize] one bit right, duplicating the leftmost bit"] + ["rotate(1:)" + (progn + (require 'calc-bin) + (call-interactively 'calc-rotate-binary)) + :keys "b t" + :help "Rotate (1:)[modulo 2^wordsize] one bit left"]) + "-------" + ["Help on Arithmetic" + (calc-info-goto-node "Arithmetic")]) + "Menu for Calc's arithmetic functions.") + +(defvar calc-scientific-function-menu + (list "Scientific Functions" + (list "Constants" + ["pi" + (progn + (require 'calc-math) + (call-interactively 'calc-pi)) + :keys "P"] + ["e" + (progn + (require 'calc-math) + (let ((calc-hyperbolic-flag t)) + (call-interactively 'calc-pi))) + :keys "H P"] + ["phi" + (progn + (require 'calc-math) + (let ((calc-inverse-flag t) + (calc-hyperbolic-flag t)) + (call-interactively 'calc-pi))) + :keys "I H P" + :help "The golden ratio"] + ["gamma" + (progn + (require 'calc-math) + (let ((calc-inverse-flag t)) + (call-interactively 'calc-pi))) + :keys "I P" + :help "Euler's constant"]) + (list "Logs and Exps" + ["ln(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-ln)) + :keys "L" + :help "The natural logarithm"] + ["e^(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-exp)) + :keys "E"] + ["log(1:) [base 10]" + (progn + (require 'calc-math) + (call-interactively 'calc-log10)) + :keys "H L" + :help "The common logarithm"] + ["10^(1:)" + (progn + (require 'calc-math) + (let ((calc-inverse-flag t)) + (call-interactively 'calc-log10))) + :keys "I H L"] + ["log(2:) [base(1:)]" + (progn + (require 'calc-math) + (call-interactively 'calc-log)) + :keys "B" + :help "The logarithm with an arbitrary base"] + ["(2:) ^ (1:)" + calc-power + :keys "^"]) + (list "Trigonometric Functions" + ["sin(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-sin)) + :keys "S"] + ["cos(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-cos)) + :keys "C"] + ["tan(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-tan)) + :keys "T"] + ["arcsin(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arcsin)) + :keys "I S"] + ["arccos(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arccos)) + :keys "I C"] + ["arctan(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arctan)) + :keys "I T"] + ["arctan2(2:,1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arctan2)) + :keys "f T"] + "--Angle Measure--" + ["Radians" + (progn + (require 'calc-math) + (calc-radians-mode)) + :keys "m r" + :style radio + :selected (eq calc-angle-mode 'rad)] + ["Degrees" + (progn + (require 'calc-math) + (calc-degrees-mode)) + :keys "m d" + :style radio + :selected (eq calc-angle-mode 'deg)] + ["HMS" + (progn + (require 'calc-math) + (calc-hms-mode)) + :keys "m h" + :style radio + :selected (eq calc-angle-mode 'hms)]) + (list "Hyperbolic Functions" + ["sinh(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-sinh)) + :keys "H S"] + ["cosh(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-cosh)) + :keys "H C"] + ["tanh(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-tanh)) + :keys "H T"] + ["arcsinh(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arcsinh)) + :keys "I H S"] + ["arccosh(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arccosh)) + :keys "I H C"] + ["arctanh(1:)" + (progn + (require 'calc-math) + (call-interactively 'calc-arctanh)) + :keys "I H T"]) + (list "Advanced Math Functions" + ["Gamma(1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-gamma)) + :keys "f g" + :help "The Euler Gamma function"] + ["GammaP(2:,1:)" + (progn + (require 'calc-funcs) + (call-interactively 'calc-inc-gamma)) + :keys "f G" + :help "The lower incomplete Gamma function"] + ["Beta(2:,1:)" + (progn + (require 'calc-funcs) + (call-interactively 'calc-beta)) + :keys "f b" + :help "The Euler Beta function"] + ["BetaI(3:,2:,1:)" + (progn + (require 'calc-funcs) + (call-interactively 'calc-inc-beta)) + :keys "f B" + :help "The incomplete Beta function"] + ["erf(1:)" + (progn + (require 'calc-funcs) + (call-interactively 'calc-erf)) + :keys "f e" + :help "The error function"] + ["BesselJ(2:,1:)" + (progn + (require 'calc-funcs) + (call-interactively 'calc-bessel-J)) + :keys "f j" + :help "The Bessel function of the first kind (of order (2:))"] + ["BesselY(2:,1:)" + (progn + (require 'calc-funcs) + (call-interactively 'calc-bessel-Y)) + :keys "f y" + :help "The Bessel function of the second kind (of order (2:))"]) + (list "Combinatorial Functions" + ["gcd(2:,1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-gcd)) + :keys "k g"] + ["lcm(2:,1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-lcm)) + :keys "k l"] + ["factorial(1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-factorial)) + :keys "!"] + ["(2:) choose (1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-choose)) + :keys "k c"] + ["permutations(2:,1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-perm)) + :keys "H k c"] + ["Primality test for (1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-prime-test)) + :keys "k p" + :help "For large (1:), a probabilistic test"] + ["Factor (1:) into primes" + (progn + (require 'calc-comb) + (call-interactively 'calc-prime-factors)) + :keys "k f"] + ["Next prime after (1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-next-prime)) + :keys "k n"] + ["Previous prime before (1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-prev-prime)) + :keys "I k n"] + ["phi(1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-totient)) + :keys "k n" + :help "Euler's totient function"] + ["random(1:)" + (progn + (require 'calc-comb) + (call-interactively 'calc-random)) + :keys "k r" + :help "A random number >=1 and < (1:)"]) + "----" + ["Help on Scientific Functions" + (calc-info-goto-node "Scientific Functions")]) + "Menu for Calc's scientific functions.") + +(defvar calc-algebra-menu + (list "Algebra" + (list "Simplification" + ["Simplify (1:)" + (progn + (require 'calc-alg) + (call-interactively 'calc-simplify)) + :keys "a s"] + ["Simplify (1:) with extended rules" + (progn + (require 'calc-alg) + (call-interactively 'calc-simplify-extended)) + :keys "a e" + :help "Apply possibly unsafe simplifications"]) + (list "Manipulation" + ["Expand formula (1:)" + (progn + (require 'calc-alg) + (call-interactively 'calc-expand-formula)) + :keys "a \"" + :help "Expand (1:) into its defining formula, if possible"] + ["Evaluate variables in (1:)" + (progn + (require 'calc-ext) + (call-interactively 'calc-evaluate)) + :keys "="] + ["Make substitution in (1:)" + (progn + (require 'calc-alg) + (call-interactively 'calc-substitute)) + :keys "a b" + :help + "Substitute all occurrences of a sub-expression with a new sub-expression"]) + (list "Polynomials" + ["Factor (1:)" + (progn + (require 'calc-alg) + (call-interactively 'calc-factor)) + :keys "a f"] + ["Collect terms in (1:)" + (progn + (require 'calc-alg) + (call-interactively 'calc-collect)) + :keys "a c" + :help "Arrange as a polynomial in a given variable"] + ["Expand (1:)" + (progn + (require 'calc-alg) + (call-interactively 'calc-expand)) + :keys "a x" + :help "Apply distributive law everywhere"] + ["Find roots of (1:)" + (progn + (require 'calcalg2) + (call-interactively 'calc-poly-roots)) + :keys "a P"]) + (list "Calculus" + ["Differentiate (1:)" + (progn + (require 'calcalg2) + (call-interactively 'calc-derivative)) + :keys "a d"] + ["Integrate (1:) [indefinite]" + (progn + (require 'calcalg2) + (call-interactively 'calc-integral)) + :keys "a i"] + ["Integrate (1:) [definite]" + (progn + (require 'calcalg2) + (let ((var (read-string "Integration variable: "))) + (calc-tabular-command 'calcFunc-integ "Integration" + "intg" nil var nil nil))) + :keys "C-u a i"] + ["Integrate (1:) [numeric]" + (progn + (require 'calcalg2) + (call-interactively 'calc-num-integral)) + :keys "a I" + :help "Integrate using the open Romberg method"] + ["Taylor expand (1:)" + (progn + (require 'calcalg2) + (call-interactively 'calc-taylor)) + :keys "a t"] + ["Minimize (2:) [initial guess = (1:)]" + (progn + (require 'calcalg3) + (call-interactively 'calc-find-minimum)) + :keys "a N" + :help "Find a local minimum"] + ["Maximize (2:) [initial guess = (1:)]" + (progn + (require 'calcalg3) + (call-interactively 'calc-find-maximum)) + :keys "a X" + :help "Find a local maximum"]) + (list "Solving" + ["Solve equation (1:)" + (progn + (require 'calcalg2) + (call-interactively 'calc-solve-for)) + :keys "a S"] + ["Solve equation (2:) numerically [initial guess = (1:)]" + (progn + (require 'calcalg3) + (call-interactively 'calc-find-root)) + :keys "a R"] + ["Find roots of polynomial (1:)" + (progn + (require 'calcalg2) + (call-interactively 'calc-poly-roots)) + :keys "a P"]) + (list "Curve Fitting" + ["Fit (1:)=[x values, y values] to a curve" + (progn + (require 'calcalg3) + (call-interactively 'calc-curve-fit)) + :keys "a F"]) + "----" + ["Help on Algebra" + (calc-info-goto-node "Algebra")]) + "Menu for Calc's algebraic facilities.") + + +(defvar calc-graphics-menu + (list "Graphics" + ["Graph 2D [(1:)= y values, (2:)= x values]" + (progn + (require 'calc-graph) + (call-interactively 'calc-graph-fast)) + :keys "g f"] + ["Graph 3D [(1:)= z values, (2:)= y values, (3:)= x values]" + (progn + (require 'calc-graph) + (call-interactively 'calc-graph-fast-3d)) + :keys "g F"] + "----" + ["Help on Graphics" + (calc-info-goto-node "Graphics")]) + "Menu for Calc's graphics.") + + +(defvar calc-vectors-menu + (list "Matrices/Vectors" + (list "Matrices" + ["(2:) + (1:)" calc-plus :keys "+"] + ["(2:) - (1:)" calc-minus :keys "-"] + ["(2:) * (1:)" calc-times :keys "*"] + ["(1:)^(-1)" + (progn + (require 'calc-arith) + (call-interactively 'calc-inv)) + :keys "&"] + ["Create an identity matrix" + (progn + (require 'calc-vec) + (call-interactively 'calc-ident)) + :keys "v i"] + ["transpose(1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-transpose)) + :keys "v t"] + ["det(1:)" + (progn + (require 'calc-mtx) + (call-interactively 'calc-mdet)) + :keys "V D"] + ["trace(1:)" + (progn + (require 'calc-mtx) + (call-interactively 'calc-mtrace)) + :keys "V T"] + ["LUD decompose (1:)" + (progn + (require 'calc-mtx) + (call-interactively 'calc-mlud)) + :keys "V L"] + ["Extract a row from (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-mrow)) + :keys "v r"] + ["Extract a column from (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-mcol)) + :keys "v c"]) + (list "Vectors" + ["Extract the first element of (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-head)) + :keys "v h"] + ["Extract an element from (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-mrow)) + :keys "v r"] + ["Reverse (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-reverse-vector)) + :keys "v v"] + ["Unpack (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-unpack)) + :keys "v u" + :help "Separate the elements of (1:)"] + ["(2:) cross (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-cross)) + :keys "V C" + :help "The cross product in R^3"] + ["(2:) dot (1:)" + calc-mult + :keys "*" + :help "The dot product"] + ["Map a function across (1:)" + (progn + (require 'calc-map) + (call-interactively 'calc-map)) + :keys "V M" + :help "Apply a function to each element"]) + (list "Vectors As Sets" + ["Remove duplicates from (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-remove-duplicates)) + :keys "V +"] + ["(2:) union (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-set-union)) + :keys "V V"] + ["(2:) intersect (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-set-intersect)) + :keys "V ^"] + ["(2:) \\ (1:)" + (progn + (require 'calc-vec) + (call-interactively 'calc-set-difference)) + :keys "V -" + :help "Set difference"]) + (list "Statistics On Vectors" + ["length(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-count)) + :keys "u #" + :help "The number of data values"] + ["sum(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-sum)) + :keys "u +" + :help "The sum of the data values"] + ["max(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-max)) + :keys "u x" + :help "The maximum of the data values"] + ["min(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-min)) + :keys "u N" + :help "The minumum of the data values"] + ["mean(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-mean)) + :keys "u M" + :help "The average (arithmetic mean) of the data values"] + ["mean(1:) with error" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-mean-error)) + :keys "I u M" + :help "The average (arithmetic mean) of the data values as an error form"] + ["sdev(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-sdev)) + :keys "u S" + :help "The sample sdev, sqrt[sum((values - mean)^2)/(N-1)]"] + ["variance(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-variance)) + :keys "H u S" + :help "The sample variance, sum((values - mean)^2)/(N-1)"] + ["population sdev(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-pop-sdev)) + :keys "I u S" + :help "The population sdev, sqrt[sum((values - mean)^2)/N]"] + ["population variance(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-pop-variance)) + :keys "H I u S" + :help "The population variance, sum((values - mean)^2)/N"] + ["median(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-median)) + :keys "H u M" + :help "The median of the data values"] + ["harmonic mean(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-harmonic-mean)) + :keys "H I u M"] + ["geometric mean(1:)" + (progn + (require 'calc-stat) + (call-interactively 'calc-vector-geometric-mean)) + :keys "u G"] + ["arithmetic-geometric mean(1:)" + (progn + (require 'calc-stat) + (let ((calc-hyperbolic-flag t)) + (call-interactively 'calc-vector-geometric-mean))) + :keys "H u G"] + ["RMS(1:)" + (progn (require 'calc-arith) + (call-interactively 'calc-abs)) + :keys "A" + :help "The root-mean-square, or quadratic mean"]) + ["Abbreviate long vectors" + (progn + (require 'calc-mode) + (call-interactively 'calc-full-vectors)) + :keys "v ." + :style toggle + :selected (not calc-full-vectors)] + "----" + ["Help on Matrices/Vectors" + (calc-info-goto-node "Matrix Functions")]) + "Menu for Calc's vector and matrix functions.") + +(defvar calc-units-menu + (list "Units" + ["Convert units in (1:)" + (progn + (require 'calc-units) + (call-interactively 'calc-convert-units )) + :keys "u c"] + ["Convert temperature in (1:)" + (progn + (require 'calc-units) + (call-interactively 'calc-convert-temperature)) + :keys "u t"] + ["Simplify units in (1:)" + (progn + (require 'calc-units) + (call-interactively 'calc-simplify-units)) + :keys "u s"] + ["View units table" + (progn + (require 'calc-units) + (call-interactively 'calc-view-units-table)) + :keys "u V"] + "----" + ["Help on Units" + (calc-info-goto-node "Units")]) + "Menu for Calc's units functions.") + +(defvar calc-variables-menu + (list "Variables" + ["Store (1:) into a variable" + (progn + (require 'calc-store) + (call-interactively 'calc-store)) + :keys "s s"] + ["Recall a variable value" + (progn + (require 'calc-store) + (call-interactively 'calc-recall )) + :keys "s r"] + ["Edit the value of a variable" + (progn + (require 'calc-store) + (call-interactively 'calc-edit-variable)) + :keys "s e"] + ["Exchange (1:) with a variable value" + (progn + (require 'calc-store) + (call-interactively 'calc-store-exchange)) + :keys "s x"] + ["Clear variable value" + (progn + (require 'calc-store) + (call-interactively 'calc-unstore)) + :keys "s u"] + ["Evaluate variables in (1:)" + (progn + (require 'calc-ext) + (call-interactively 'calc-evaluate)) + :keys "="] + ["Evaluate (1:), assigning a value to a variable" + (progn + (require 'calc-store) + (call-interactively 'calc-let)) + :keys "s l" + :help "Evaluate (1:) under a temporary assignment of a variable"] + "----" + ["Help on Variables" + (calc-info-goto-node "Store and Recall")]) + "Menu for Calc's variables.") + +(defvar calc-stack-menu + (list "Stack" + ["Remove (1:)" + calc-pop + :keys "DEL"] + ["Switch (1:) and (2:)" + calc-roll-down + :keys "TAB"] + ["Duplicate (1:)" + calc-enter + :keys "RET"] + ["Edit (1:)" + (progn + (require 'calc-yank) + (call-interactively calc-edit)) + :keys "`"] + "----" + ["Help on Stack" + (calc-info-goto-node "Stack and Trail")]) + "Menu for Calc's stack functions.") + +(defvar calc-errors-menu + (list "Undo" + ["Undo" + (progn + (require 'calc-undo) + (call-interactively 'calc-undo)) + :keys "U"] + ["Redo" + (progn + (require 'calc-undo) + (call-interactively 'calc-redo)) + :keys "D"] + "----" + ["Help on Undo" + (progn + (calc-info-goto-node "Introduction") + (Info-goto-node "Undo"))])) + +(defvar calc-modes-menu + (list "Modes" + ["Precision" + (progn + (require 'calc-ext) + (call-interactively 'calc-precision)) + :keys "p" + :help "Set the precision for floating point calculations"] + ["Fraction mode" + (progn + (require 'calc-frac) + (call-interactively 'calc-frac-mode)) + :keys "m f" + :style toggle + :selected calc-prefer-frac + :help "Leave integer quotients as fractions"] + ["Symbolic mode" + (lambda () + (interactive) + (require 'calc-mode) + (calc-symbolic-mode nil)) + :keys "m s" + :style toggle + :selected calc-symbolic-mode + :help "Leave functions producing inexact answers in symbolic form"] + ["Infinite mode" + (lambda () + (interactive) + (require 'calc-mode) + (calc-infinite-mode nil)) + :keys "m i" + :style toggle + :selected calc-infinite-mode + :help "Let expressions like 1/0 produce infinite results"] + ["Abbreviate long vectors" + (progn + (require 'calc-mode) + (call-interactively 'calc-full-vectors)) + :keys "v ." + :style toggle + :selected (not calc-full-vectors)] + (list "Angle Measure" + ["Radians" + (progn + (require 'calc-math) + (call-interactively 'calc-radians-mode)) + :keys "m r" + :style radio + :selected (eq calc-angle-mode 'rad)] + ["Degrees" + (progn + (require 'calc-math) + (call-interactively 'calc-degrees-mode)) + :keys "m d" + :style radio + :selected (eq calc-angle-mode 'deg)] + ["HMS" + (progn + (require 'calc-math) + (call-interactively 'calc-hms-mode)) + :keys "m h" + :style radio + :selected (eq calc-angle-mode 'hms)]) + (list "Radix" + ["Decimal" + (progn + (require 'calc-bin) + (call-interactively 'calc-decimal-radix)) + :keys "d 0" + :style radio + :selected (= calc-number-radix 10)] + ["Binary" + (progn + (require 'calc-bin) + (call-interactively 'calc-binary-radix)) + :keys "d 2" + :style radio + :selected (= calc-number-radix 2)] + ["Octal" + (progn + (require 'calc-bin) + (call-interactively 'calc-octal-radix)) + :keys "d 8" + :style radio + :selected (= calc-number-radix 8)] + ["Hexadecimal" + (progn + (require 'calc-bin) + (call-interactively 'calc-hex-radix)) + :keys "d 6" + :style radio + :selected (= calc-number-radix 16)] + ["Other" + (progn + (require 'calc-bin) + (call-interactively 'calc-radix)) + :keys "d r" + :style radio + :selected (not + (or + (= calc-number-radix 10) + (= calc-number-radix 2) + (= calc-number-radix 8) + (= calc-number-radix 16)))]) + (list "Float Format" + ["Normal" + (progn + (require 'calc-mode) + (call-interactively 'calc-normal-notation)) + :keys "d n" + :style radio + :selected (eq (car-safe calc-float-format) 'float)] + ["Fixed point" + (progn + (require 'calc-mode) + (call-interactively 'calc-fix-notation)) + :keys "d f" + :style radio + :selected (eq (car-safe calc-float-format) 'fix)] + ["Scientific notation" + (progn + (require 'calc-mode) + (call-interactively 'calc-sci-notation)) + :keys "d s" + :style radio + :selected (eq (car-safe calc-float-format) 'sci)] + ["Engineering notation" + (progn + (require 'calc-mode) + (call-interactively 'calc-eng-notation)) + :keys "d e" + :style radio + :selected (eq (car-safe calc-float-format) 'eng)]) + (list "Algebraic" + ["Normal" + (progn + (require 'calc-mode) + (cond + (calc-incomplete-algebraic-mode + (calc-algebraic-mode t)) + (calc-algebraic-mode + (calc-algebraic-mode nil)))) + :style radio + :selected (not calc-algebraic-mode)] + ["Algebraic mode" + (progn + (require 'calc-mode) + (if (or + calc-incomplete-algebraic-mode + (not calc-algebraic-mode)) + (calc-algebraic-mode nil))) + :keys "m a" + :style radio + :selected (and calc-algebraic-mode + (not calc-incomplete-algebraic-mode)) + :help "Keys which start numeric entry also start algebraic entry"] + ["Incomplete algebraic mode" + (progn + (require 'calc-mode) + (unless calc-incomplete-algebraic-mode + (calc-algebraic-mode t))) + :keys "C-u m a" + :style radio + :selected calc-incomplete-algebraic-mode + :help "Only ( and [ begin algebraic entry"] + ["Total algebraic mode" + (progn + (require 'calc-mode) + (unless (eq calc-algebraic-mode 'total) + (calc-total-algebraic-mode nil))) + :keys "m t" + :style radio + :selected (eq calc-algebraic-mode 'total) + :help "All regular letters and punctuation begin algebraic entry"]) + (list "Language" + ["Normal" + (progn + (require 'calc-lang) + (call-interactively 'calc-normal-language)) + :keys "d N" + :style radio + :selected (eq calc-language nil)] + ["Big" + (progn + (require 'calc-lang) + (call-interactively 'calc-big-language)) + :keys "d B" + :style radio + :selected (eq calc-language 'big) + :help "Use textual approximations to various mathematical notations"] + ["Flat" + (progn + (require 'calc-lang) + (call-interactively 'calc-flat-language)) + :keys "d O" + :style radio + :selected (eq calc-language 'flat) + :help "Write matrices on a single line"] + ["C" + (progn + (require 'calc-lang) + (call-interactively 'calc-c-language)) + :keys "d C" + :style radio + :selected (eq calc-language 'c)] + ["Pascal" + (progn + (require 'calc-lang) + (call-interactively 'calc-pascal-language)) + :keys "d P" + :style radio + :selected (eq calc-language 'pascal)] + ["Fortran" + (progn + (require 'calc-lang) + (call-interactively 'calc-fortran-language)) + :keys "d F" + :style radio + :selected (eq calc-language 'fortran)] + ["TeX" + (progn + (require 'calc-lang) + (call-interactively 'calc-tex-language)) + :keys "d T" + :style radio + :selected (eq calc-language 'tex)] + ["LaTeX" + (progn + (require 'calc-lang) + (call-interactively 'calc-latex-language)) + :keys "d L" + :style radio + :selected (eq calc-language 'latex)] + ["Eqn" + (progn + (require 'calc-lang) + (call-interactively 'calc-eqn-language)) + :keys "d E" + :style radio + :selected (eq calc-language 'eqn)]) + "----" + ["Save mode settings" calc-save-modes :keys "m m"] + "----" + ["Help on Modes" + (calc-info-goto-node "Mode settings")]) + "Menu for Calc's mode settings.") + +(defvar calc-help-menu + (list "Help" + ["Manual" + calc-info + :keys "h i"] + ["Tutorial" + calc-tutorial + :keys "h t"] + ["Summary" + calc-info-summary + :keys "h s"] + "----" + ["Help on Help" + (progn + (calc-info-goto-node "Introduction") + (Info-goto-node "Help Commands"))]) + "Menu for Calc's help functions.") + +(defvar calc-mode-map) + +(easy-menu-define + calc-menu + calc-mode-map + "Menu for Calc." + (list "Calc" + :visible '(eq major-mode 'calc-mode) + calc-arithmetic-menu + calc-scientific-function-menu + calc-algebra-menu + calc-graphics-menu + calc-vectors-menu + calc-units-menu + calc-variables-menu + calc-stack-menu + calc-errors-menu + calc-modes-menu + calc-help-menu + ["Reset" + (progn + (require 'calc-ext) + (call-interactively 'calc-reset)) + :help "Reset Calc to its initial state"] + ["Quit" calc-quit])) + +(provide 'calc-menu) + +;; arch-tag: 9612c86a-cd4f-4baa-ab0b-40af7344d21f diff --git a/lisp/calc/calc-misc.el b/lisp/calc/calc-misc.el index b660e046a21..f63e0fa42f9 100644 --- a/lisp/calc/calc-misc.el +++ b/lisp/calc/calc-misc.el @@ -32,6 +32,35 @@ (require 'calc) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function calc-do-keypad "calc-keypd" (&optional full-display interactive)) +(declare-function calc-inv-hyp-prefix-help "calc-help" ()) +(declare-function calc-inverse-prefix-help "calc-help" ()) +(declare-function calc-hyperbolic-prefix-help "calc-help" ()) +(declare-function calc-explain-why "calc-stuff" (why &optional more)) +(declare-function calc-clear-command-flag "calc-ext" (f)) +(declare-function calc-roll-down-with-selections "calc-sel" (n m)) +(declare-function calc-roll-up-with-selections "calc-sel" (n m)) +(declare-function calc-last-args "calc-undo" (n)) +(declare-function calc-is-inverse "calc-ext" ()) +(declare-function calc-do-prefix-help "calc-ext" (msgs group key)) +(declare-function math-objvecp "calc-ext" (a)) +(declare-function math-known-scalarp "calc-arith" (a &optional assume-scalar)) +(declare-function math-vectorp "calc-ext" (a)) +(declare-function math-matrixp "calc-ext" (a)) +(declare-function math-trunc-special "calc-arith" (a prec)) +(declare-function math-trunc-fancy "calc-arith" (a)) +(declare-function math-floor-special "calc-arith" (a prec)) +(declare-function math-floor-fancy "calc-arith" (a)) +(declare-function math-square-matrixp "calc-ext" (a)) +(declare-function math-matrix-inv-raw "calc-mtx" (m)) +(declare-function math-known-matrixp "calc-arith" (a)) +(declare-function math-mod-fancy "calc-arith" (a b)) +(declare-function math-pow-of-zero "calc-arith" (a b)) +(declare-function math-pow-zero "calc-arith" (a b)) +(declare-function math-pow-fancy "calc-arith" (a b)) + + (defun calc-dispatch-help (arg) "C-x* is a prefix key sequence; follow it with one of these letters: diff --git a/lisp/calc/calc-mode.el b/lisp/calc/calc-mode.el index 3d6fafc844a..d7daf1bf997 100644 --- a/lisp/calc/calc-mode.el +++ b/lisp/calc/calc-mode.el @@ -32,6 +32,10 @@ (require 'calc-ext) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function calc-embedded-save-original-modes "calc-embed" ()) + + (defun calc-line-numbering (n) (interactive "P") (calc-wrapper diff --git a/lisp/calc/calc-nlfit.el b/lisp/calc/calc-nlfit.el index 489599781f6..4019058a567 100644 --- a/lisp/calc/calc-nlfit.el +++ b/lisp/calc/calc-nlfit.el @@ -61,6 +61,11 @@ ;;; Code: (require 'calc-arith) +(require 'calcalg3) + +;; Declare functions which are defined elsewhere. +(declare-function calc-get-fit-variables "calcalg3" (nv nc &optional defv defc with-y homog)) +(declare-function math-map-binop "calcalg3" (binop args1 args2)) (defun math-nlfit-least-squares (xdata ydata &optional sdata sigmas) "Return the parameters A and B for the best least squares fit y=a+bx." @@ -188,7 +193,7 @@ ;;; the maximum value of q. (defun math-nlfit-find-qmax (qdata pdata tdata) - (let* ((ratios (mapcar* 'math-div pdata qdata)) + (let* ((ratios (math-map-binop 'math-div pdata qdata)) (lsdata (math-nlfit-least-squares ratios tdata)) (qmax (math-max-list (car qdata) (cdr qdata))) (a (math-neg (math-div (nth 1 lsdata) (nth 0 lsdata))))) @@ -295,7 +300,7 @@ (mat nil) (k 0)) (while (< k i) - (setq mat (cons (copy-list row) mat)) + (setq mat (cons (copy-sequence row) mat)) (setq k (1+ k))) mat)) @@ -513,7 +518,7 @@ (let* ((Ctilda (math-nlfit-make-Ctilda C lambda)) (dtilda (math-nlfit-make-dtilda d (length (car C)))) (zeta (math-nlfit-givens Ctilda dtilda)) - (newparms (mapcar* 'math-add (copy-tree parms) zeta)) + (newparms (math-map-binop 'math-add (copy-tree parms) zeta)) (newchisq (math-nlfit-chi-sq xlist ylist newparms fn slist))) (if (math-lessp newchisq chisq) (progn @@ -692,7 +697,8 @@ (nth 0 sigmacovar))) (finalparms (if sigmas - (mapcar* (lambda (x y) (list 'sdev x y)) finalparms sigmas) + (math-map-binop + (lambda (x y) (list 'sdev x y)) finalparms sigmas) finalparms)) (soln (funcall solnexpr finalparms var))) (let ((calc-fit-to-trail t) @@ -752,7 +758,7 @@ (mapcar (lambda (x) (math-get-sdev x t)) pdata) nil)) (pdata (mapcar (lambda (x) (math-get-value x)) pdata)) - (poverqdata (mapcar* 'math-div pdata qdata)) + (poverqdata (math-map-binop 'math-div pdata qdata)) (parmvals (math-nlfit-least-squares qdata poverqdata sdata sdevv)) (finalparms (list (nth 0 parmvals) (math-neg diff --git a/lisp/calc/calc-prog.el b/lisp/calc/calc-prog.el index 4ceeeba3b42..87adf48006d 100644 --- a/lisp/calc/calc-prog.el +++ b/lisp/calc/calc-prog.el @@ -32,6 +32,11 @@ (require 'calc-ext) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function edmacro-format-keys "edmacro" (macro &optional verbose)) +(declare-function edmacro-parse-keys "edmacro" (string &optional need-vector)) +(declare-function math-read-expr-level "calc-aent" (exp-prec &optional exp-term)) + (defun calc-equal-to (arg) (interactive "P") diff --git a/lisp/calc/calc-vec.el b/lisp/calc/calc-vec.el index e4b3e1e5bbc..e224e1ca6f5 100644 --- a/lisp/calc/calc-vec.el +++ b/lisp/calc/calc-vec.el @@ -32,6 +32,10 @@ (require 'calc-ext) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function math-read-expr-level "calc-aent" (exp-prec &optional exp-term)) + + (defun calc-display-strings (n) (interactive "P") (calc-wrapper diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 5cfccb4f8db..69cacec2220 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -206,6 +206,84 @@ (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function calc-set-language "calc-lang" (lang &optional option no-refresh)) +(declare-function calc-edit-finish "calc-yank" (&optional keep)) +(declare-function calc-edit-cancel "calc-yank" ()) +(declare-function calc-do-quick-calc "calc-aent" ()) +(declare-function calc-do-calc-eval "calc-aent" (str separator args)) +(declare-function calc-do-keypad "calc-keypd" (&optional full-display interactive)) +(declare-function calcFunc-unixtime "calc-forms" (date &optional zone)) +(declare-function math-parse-date "calc-forms" (math-pd-str)) +(declare-function math-lessp "calc-ext" (a b)) +(declare-function calc-embedded-finish-command "calc-embed" ()) +(declare-function calc-embedded-select-buffer "calc-embed" ()) +(declare-function calc-embedded-mode-line-change "calc-embed" ()) +(declare-function calc-push-list-in-macro "calc-prog" (vals m sels)) +(declare-function calc-replace-selections "calc-sel" (n vals m)) +(declare-function calc-record-list "calc-misc" (vals &optional prefix)) +(declare-function calc-normalize-fancy "calc-ext" (val)) +(declare-function calc-do-handle-whys "calc-misc" ()) +(declare-function calc-top-selected "calc-sel" (&optional n m)) +(declare-function calc-sel-error "calc-sel" ()) +(declare-function calc-pop-stack-in-macro "calc-prog" (n mm)) +(declare-function calc-embedded-stack-change "calc-embed" ()) +(declare-function calc-refresh-evaltos "calc-ext" (&optional which-var)) +(declare-function calc-do-refresh "calc-misc" ()) +(declare-function calc-binary-op-fancy "calc-ext" (name func arg ident unary)) +(declare-function calc-unary-op-fancy "calc-ext" (name func arg)) +(declare-function calc-delete-selection "calc-sel" (n)) +(declare-function calc-alg-digit-entry "calc-aent" ()) +(declare-function calc-alg-entry "calc-aent" (&optional initial prompt)) +(declare-function calc-dots "calc-incom" ()) +(declare-function calc-temp-minibuffer-message "calc-misc" (m)) +(declare-function math-read-radix-digit "calc-misc" (dig)) +(declare-function calc-digit-dots "calc-incom" ()) +(declare-function math-normalize-fancy "calc-ext" (a)) +(declare-function math-normalize-nonstandard "calc-ext" ()) +(declare-function math-recompile-eval-rules "calc-alg" ()) +(declare-function math-apply-rewrites "calc-rewr" (expr rules &optional heads math-apply-rw-ruleset)) +(declare-function calc-record-why "calc-misc" (&rest stuff)) +(declare-function math-dimension-error "calc-vec" ()) +(declare-function calc-incomplete-error "calc-incom" (a)) +(declare-function math-float-fancy "calc-arith" (a)) +(declare-function math-neg-fancy "calc-arith" (a)) +(declare-function math-zerop "calc-misc" (a)) +(declare-function calc-add-fractions "calc-frac" (a b)) +(declare-function math-add-objects-fancy "calc-arith" (a b)) +(declare-function math-add-symb-fancy "calc-arith" (a b)) +(declare-function math-mul-zero "calc-arith" (a b)) +(declare-function calc-mul-fractions "calc-frac" (a b)) +(declare-function math-mul-objects-fancy "calc-arith" (a b)) +(declare-function math-mul-symb-fancy "calc-arith" (a b)) +(declare-function math-reject-arg "calc-misc" (&optional a p option)) +(declare-function math-div-by-zero "calc-arith" (a b)) +(declare-function math-div-zero "calc-arith" (a b)) +(declare-function math-make-frac "calc-frac" (num den)) +(declare-function calc-div-fractions "calc-frac" (a b)) +(declare-function math-div-objects-fancy "calc-arith" (a b)) +(declare-function math-div-symb-fancy "calc-arith" (a b)) +(declare-function math-compose-expr "calccomp" (a prec)) +(declare-function math-comp-width "calccomp" (c)) +(declare-function math-composition-to-string "calccomp" (c &optional width)) +(declare-function math-stack-value-offset-fancy "calccomp" ()) +(declare-function math-format-flat-expr-fancy "calc-ext" (a prec)) +(declare-function math-adjust-fraction "calc-ext" (a)) +(declare-function math-format-binary "calc-bin" (a)) +(declare-function math-format-radix "calc-bin" (a)) +(declare-function math-group-float "calc-ext" (str)) +(declare-function math-mod "calc-misc" (a b)) +(declare-function math-format-number-fancy "calc-ext" (a prec)) +(declare-function math-format-bignum-fancy "calc-ext" (a)) +(declare-function math-read-number-fancy "calc-ext" (s)) +(declare-function calc-do-grab-region "calc-yank" (top bot arg)) +(declare-function calc-do-grab-rectangle "calc-yank" (top bot arg &optional reduce)) +(declare-function calc-do-embedded "calc-embed" (calc-embed-arg end obeg oend)) +(declare-function calc-do-embedded-activate "calc-embed" (calc-embed-arg cbuf)) +(declare-function math-do-defmath "calc-prog" (func args body)) +(declare-function calc-load-everything "calc-ext" ()) + + (defgroup calc nil "GNU Calc." :prefix "calc-" @@ -889,6 +967,16 @@ If nil, selections displayed but ignored.") "Function through which to pass strings before parsing.") (defvar calc-radix-formatter nil "Formatting function used for non-decimal numbers.") +(defvar calc-lang-slash-idiv nil + "A list of languages in which / might represent integer division.") +(defvar calc-lang-allow-underscores nil + "A list of languages which allow underscores in variable names.") +(defvar calc-lang-c-type-hex nil + "Languages in which octal and hex numbers are written with leading 0 and 0x,") +(defvar calc-lang-brackets-are-subscripts nil + "Languages in which subscripts are indicated by brackets.") +(defvar calc-lang-parens-are-subscripts nil + "Languages in which subscripts are indicated by parentheses.") (defvar calc-last-kill nil) ; Last number killed in calc-mode. (defvar calc-dollar-values nil) ; Values to be used for '$'. @@ -911,7 +999,6 @@ If nil, selections displayed but ignored.") (defvar math-eval-rules-cache-tag t) (defvar math-radix-explicit-format t) (defvar math-expr-function-mapping nil) -(defvar math-expr-special-function-mapping nil) (defvar math-expr-variable-mapping nil) (defvar math-read-expr-quotes nil) (defvar math-working-step nil) @@ -1009,6 +1096,7 @@ If nil, selections displayed but ignored.") (if calc-scan-for-dels (append (where-is-internal 'delete-backward-char global-map) (where-is-internal 'backward-delete-char global-map) + (where-is-internal 'backward-delete-char-untabify global-map) '("\C-d")) '("\177" "\C-d"))) @@ -1221,6 +1309,7 @@ Notations: 3.14e6 3.14 * 10^6 (string-match "full" (nth 1 p)) (setq calc-standalone-flag t)) (setq p (cdr p)))) + (require 'calc-menu) (run-mode-hooks 'calc-mode-hook) (calc-refresh t) (calc-set-mode-line) @@ -3497,34 +3586,6 @@ and all digits are kept, regardless of Calc's current precision." (math-read-bignum (substring s 0 (- math-bignum-digit-length)))) (list (string-to-number s)))) - -(defconst math-tex-ignore-words - '( ("\\hbox") ("\\mbox") ("\\text") ("\\left") ("\\right") - ("\\,") ("\\>") ("\\:") ("\\;") ("\\!") ("\\ ") - ("\\quad") ("\\qquad") ("\\hfil") ("\\hfill") - ("\\displaystyle") ("\\textstyle") ("\\dsize") ("\\tsize") - ("\\scriptstyle") ("\\scriptscriptstyle") ("\\ssize") ("\\sssize") - ("\\rm") ("\\bf") ("\\it") ("\\sl") - ("\\roman") ("\\bold") ("\\italic") ("\\slanted") - ("\\cal") ("\\mit") ("\\Cal") ("\\Bbb") ("\\frak") ("\\goth") - ("\\evalto") - ("\\matrix" mat) ("\\bmatrix" mat) ("\\pmatrix" mat) - ("\\begin" begenv) - ("\\cr" punc ";") ("\\\\" punc ";") ("\\*" punc "*") - ("\\{" punc "[") ("\\}" punc "]"))) - -(defconst math-latex-ignore-words - (append math-tex-ignore-words - '(("\\begin" begenv)))) - -(defconst math-eqn-ignore-words - '( ("roman") ("bold") ("italic") ("mark") ("lineup") ("evalto") - ("left" ("floor") ("ceil")) - ("right" ("floor") ("ceil")) - ("arc" ("sin") ("cos") ("tan") ("sinh") ("cosh") ("tanh")) - ("size" n) ("font" n) ("fwd" n) ("back" n) ("up" n) ("down" n) - ("above" punc ","))) - (defconst math-standard-opers '( ( "_" calcFunc-subscr 1200 1201 ) ( "%" calcFunc-percent 1100 -1 ) diff --git a/lisp/calc/calcalg3.el b/lisp/calc/calcalg3.el index 5aa410be19e..374b0487cfe 100644 --- a/lisp/calc/calcalg3.el +++ b/lisp/calc/calcalg3.el @@ -32,6 +32,24 @@ (require 'calc-ext) (require 'calc-macs) +;; Declare functions which are defined elsewhere. +(declare-function calc-fit-s-shaped-logistic-curve "calc-nlfit" (arg)) +(declare-function calc-fit-bell-shaped-logistic-curve "calc-nlfit" (arg)) +(declare-function calc-fit-hubbert-linear-curve "calc-nlfit" (&optional sdv)) +(declare-function calc-graph-add-curve "calc-graph" (xdata ydata &optional zdata)) +(declare-function calc-graph-lookup "calc-graph" (thing)) +(declare-function calc-graph-set-styles "calc-graph" (lines points &optional yerr)) +(declare-function math-min-list "calc-arith" (a b)) +(declare-function math-max-list "calc-arith" (a b)) + + +(defun math-map-binop (binop args1 args2) + "Apply BINOP to the elements of the lists ARGS1 and ARGS2" + (if args1 + (cons + (funcall binop (car args1) (car args2)) + (funcall 'math-map-binop binop (cdr args1) (cdr args2))))) + (defun calc-find-root (var) (interactive "sVariable(s) to solve for: ") (calc-slow-wrapper @@ -239,9 +257,9 @@ (nth 1 plot) (cons 'vec - (mapcar* 'calcFunc-div - (cdr (nth 2 plot)) - (cdr (nth 1 plot))))))) + (math-map-binop 'calcFunc-div + (cdr (nth 2 plot)) + (cdr (nth 1 plot))))))) (calc-fit-hubbert-linear-curve func)) ((memq key '(?e ?E)) (calc-get-fit-variables calc-curve-nvars diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el index 6bd663cef5b..dd59b366881 100644 --- a/lisp/calc/calccomp.el +++ b/lisp/calc/calccomp.el @@ -32,16 +32,6 @@ (require 'calc-ext) (require 'calc-macs) -(defconst math-eqn-special-funcs - '( calcFunc-log - calcFunc-ln calcFunc-exp - calcFunc-sin calcFunc-cos calcFunc-tan - calcFunc-sec calcFunc-csc calcFunc-cot - calcFunc-sinh calcFunc-cosh calcFunc-tanh - calcFunc-sech calcFunc-csch calcFunc-coth - calcFunc-arcsin calcFunc-arccos calcFunc-arctan - calcFunc-arcsinh calcFunc-arccosh calcFunc-arctanh)) - ;;; A "composition" has one of the following forms: ;;; ;;; "string" A literal string @@ -80,6 +70,21 @@ (defvar math-comp-right-bracket) (defvar math-comp-comma) +(defun math-compose-var (a) + (let (v) + (if (and math-compose-hash-args + (let ((p calc-arg-values)) + (setq v 1) + (while (and p (not (equal (car p) a))) + (setq p (and (eq math-compose-hash-args t) (cdr p)) + v (1+ v))) + p)) + (if (eq math-compose-hash-args 1) + "#" + (format "#%d" v)) + (if (memq calc-language calc-lang-allow-underscores) + (math-to-underscores (symbol-name (nth 1 a))) + (symbol-name (nth 1 a)))))) (defun math-compose-expr (a prec) (let ((math-compose-level (1+ math-compose-level)) @@ -94,17 +99,24 @@ (list 'tag a (math-compose-expr a prec)))) ((and (not (consp a)) (not (integerp a))) (concat "'" (prin1-to-string a))) - ((setq spfn (assq (car-safe a) math-expr-special-function-mapping)) + ((setq spfn (assq (car-safe a) + (get calc-language 'math-special-function-table))) (setq spfn (cdr spfn)) - (funcall (car spfn) a spfn)) + (if (consp spfn) + (funcall (car spfn) a spfn) + (funcall spfn a))) ((math-scalarp a) (if (or (eq (car-safe a) 'frac) (and (nth 1 calc-frac-format) (Math-integerp a))) - (if (memq calc-language '(tex latex eqn math maple c fortran pascal)) + (if (and + calc-language + (not (memq calc-language + '(flat big unform)))) (let ((aa (math-adjust-fraction a)) (calc-frac-format nil)) (math-compose-expr (list '/ - (if (memq calc-language '(c fortran)) + (if (memq calc-language + calc-lang-slash-idiv) (math-float (nth 1 aa)) (nth 1 aa)) (nth 2 aa)) prec)) @@ -268,59 +280,25 @@ (cdr a) (if full rows 3) t))))) (if (or calc-full-vectors (< (length a) 7)) - (if (and (eq calc-language 'tex) - (math-matrixp a)) - (if (and (integerp calc-language-option) - (or (= calc-language-option 0) - (> calc-language-option 1) - (< calc-language-option -1))) - (append '(vleft 0 "\\matrix{") - (math-compose-tex-matrix (cdr a)) - '("}")) - (append '(horiz "\\matrix{ ") - (math-compose-tex-matrix (cdr a)) - '(" }"))) - (if (and (eq calc-language 'latex) - (math-matrixp a)) - (if (and (integerp calc-language-option) - (or (= calc-language-option 0) - (> calc-language-option 1) - (< calc-language-option -1))) - (append '(vleft 0 "\\begin{pmatrix}") - (math-compose-tex-matrix (cdr a) t) - '("\\end{pmatrix}")) - (append '(horiz "\\begin{pmatrix} ") - (math-compose-tex-matrix (cdr a) t) - '(" \\end{pmatrix}"))) - (if (and (eq calc-language 'eqn) - (math-matrixp a)) - (append '(horiz "matrix { ") - (math-compose-eqn-matrix - (cdr (math-transpose a))) - '("}")) - (if (and (eq calc-language 'maple) - (math-matrixp a)) - (list 'horiz - "matrix(" - math-comp-left-bracket - (math-compose-vector (cdr a) - (concat math-comp-comma " ") - math-comp-vector-prec) - math-comp-right-bracket - ")") - (list 'horiz - math-comp-left-bracket - (math-compose-vector (cdr a) - (concat math-comp-comma " ") - math-comp-vector-prec) - math-comp-right-bracket))))) + (if (and + (setq spfn (get calc-language 'math-matrix-formatter)) + (math-matrixp a)) + (funcall spfn a) + (list 'horiz + math-comp-left-bracket + (math-compose-vector (cdr a) + (concat math-comp-comma " ") + math-comp-vector-prec) + math-comp-right-bracket)) (list 'horiz math-comp-left-bracket (math-compose-vector (list (nth 1 a) (nth 2 a) (nth 3 a)) (concat math-comp-comma " ") math-comp-vector-prec) - math-comp-comma (if (memq calc-language '(tex latex)) - " \\ldots" " ...") + math-comp-comma + (if (setq spfn (get calc-language 'math-dots)) + (concat " " spfn) + " ...") math-comp-comma " " (list 'break math-compose-level) (math-compose-expr (nth (1- (length a)) a) @@ -354,62 +332,23 @@ (let ((v (rassq (nth 2 a) math-expr-variable-mapping))) (if v (symbol-name (car v)) - (if (and (memq calc-language '(tex latex)) - calc-language-option - (not (= calc-language-option 0)) - (string-match "\\`[a-zA-Z][a-zA-Z0-9]+\\'" - (symbol-name (nth 1 a)))) - (if (eq calc-language 'latex) - (format "\\text{%s}" (symbol-name (nth 1 a))) - (format "\\hbox{%s}" (symbol-name (nth 1 a)))) - (if (and math-compose-hash-args - (let ((p calc-arg-values)) - (setq v 1) - (while (and p (not (equal (car p) a))) - (setq p (and (eq math-compose-hash-args t) (cdr p)) - v (1+ v))) - p)) - (if (eq math-compose-hash-args 1) - "#" - (format "#%d" v)) - (if (memq calc-language '(c fortran pascal maple)) - (math-to-underscores (symbol-name (nth 1 a))) - (if (and (eq calc-language 'eqn) - (string-match ".'\\'" (symbol-name (nth 2 a)))) - (math-compose-expr - (list 'calcFunc-Prime - (list - 'var - (intern (substring (symbol-name (nth 1 a)) 0 -1)) - (intern (substring (symbol-name (nth 2 a)) 0 -1)))) - prec) - (symbol-name (nth 1 a))))))))) + (if (setq spfn (get calc-language 'math-var-formatter)) + (funcall spfn a prec) + (math-compose-var a))))) ((eq (car a) 'intv) (list 'horiz - (if (eq calc-language 'maple) "" - (if (memq (nth 1 a) '(0 1)) "(" "[")) + (if (memq (nth 1 a) '(0 1)) "(" "[") (math-compose-expr (nth 2 a) 0) - (if (memq calc-language '(tex latex)) " \\ldots " - (if (eq calc-language 'eqn) " ... " " .. ")) + " .. " (math-compose-expr (nth 3 a) 0) - (if (eq calc-language 'maple) "" - (if (memq (nth 1 a) '(0 2)) ")" "]")))) + (if (memq (nth 1 a) '(0 2)) ")" "]"))) ((eq (car a) 'date) (if (eq (car calc-date-format) 'X) (math-format-date a) (concat "<" (math-format-date a) ">"))) - ((and (eq (car a) 'calcFunc-subscr) (cdr (cdr a)) - (memq calc-language '(c pascal fortran maple))) - (let ((args (cdr (cdr a)))) - (while (and (memq calc-language '(pascal fortran)) - (eq (car-safe (nth 1 a)) 'calcFunc-subscr)) - (setq args (append (cdr (cdr (nth 1 a))) args) - a (nth 1 a))) - (list 'horiz - (math-compose-expr (nth 1 a) 1000) - (if (eq calc-language 'fortran) "(" "[") - (math-compose-vector args ", " 0) - (if (eq calc-language 'fortran) ")" "]")))) + ((and (eq (car a) 'calcFunc-subscr) + (setq spfn (get calc-language 'math-compose-subscr))) + (funcall spfn a)) ((and (eq (car a) 'calcFunc-subscr) (= (length a) 3) (eq calc-language 'big)) (let* ((a1 (math-compose-expr (nth 1 a) 1000)) @@ -426,25 +365,6 @@ ", " a2)) (list 'subscr a1 a2)))) - ((and (eq (car a) 'calcFunc-subscr) (= (length a) 3) - (eq calc-language 'math)) - (list 'horiz - (math-compose-expr (nth 1 a) 1000) - "[[" - (math-compose-expr (nth 2 a) 0) - "]]")) - ((and (eq (car a) 'calcFunc-sqrt) - (memq calc-language '(tex latex))) - (list 'horiz - "\\sqrt{" - (math-compose-expr (nth 1 a) 0) - "}")) - ((and nil (eq (car a) 'calcFunc-sqrt) - (eq calc-language 'eqn)) - (list 'horiz - "sqrt {" - (math-compose-expr (nth 1 a) -1) - "}")) ((and (eq (car a) '^) (eq calc-language 'big)) (list 'supscr @@ -469,14 +389,6 @@ (list 'vcent (math-comp-height a1) a1 '(rule ?-) a2))) - ((and (memq (car a) '(calcFunc-sum calcFunc-prod)) - (memq calc-language '(tex latex)) - (= (length a) 5)) - (list 'horiz (if (eq (car a) 'calcFunc-sum) "\\sum" "\\prod") - "_{" (math-compose-expr (nth 2 a) 0) - "=" (math-compose-expr (nth 3 a) 0) - "}^{" (math-compose-expr (nth 4 a) 0) - "}{" (math-compose-expr (nth 1 a) 0) "}")) ((and (eq (car a) 'calcFunc-lambda) (> (length a) 2) (memq calc-language '(nil flat big))) @@ -525,11 +437,9 @@ (integerp (nth 2 a))) (let ((c (math-compose-expr (nth 1 a) -1))) (if (> prec (nth 2 a)) - (if (memq calc-language '(tex latex)) - (list 'horiz "\\left( " c " \\right)") - (if (eq calc-language 'eqn) - (list 'horiz "{left ( " c " right )}") - (list 'horiz "(" c ")"))) + (if (setq spfn (get calc-language 'math-big-parens)) + (list 'horiz (car spfn) c (cdr spfn)) + (list 'horiz "(" c ")")) c))) ((and (eq (car a) 'calcFunc-choriz) (not (eq calc-language 'unform)) @@ -663,13 +573,13 @@ (make-list (nth 1 a) c)))))) ((and (eq (car a) 'calcFunc-evalto) (setq calc-any-evaltos t) - (memq calc-language '(tex latex eqn)) + (setq spfn (get calc-language 'math-evalto)) (= math-compose-level (if math-comp-tagged 2 1)) (= (length a) 3)) (list 'horiz - (if (memq calc-language '(tex latex)) "\\evalto " "evalto ") + (car spfn) (math-compose-expr (nth 1 a) 0) - (if (memq calc-language '(tex latex)) " \\to " " -> ") + (cdr spfn) (math-compose-expr (nth 2 a) 0))) (t (let ((op (and (not (eq calc-language 'unform)) @@ -895,56 +805,14 @@ (symbol-name func)) (math-match-substring (symbol-name func) 1) (symbol-name func)))) - (if (memq calc-language '(c fortran pascal maple)) + (if (memq calc-language calc-lang-allow-underscores) (setq func (math-to-underscores func))) - (if (and (memq calc-language '(tex latex)) - calc-language-option - (not (= calc-language-option 0)) - (string-match "\\`[a-zA-Z][a-zA-Z0-9]+\\'" func)) - (if (< (prefix-numeric-value calc-language-option) 0) - (setq func (format "\\%s" func)) - (setq func (if (eq calc-language 'latex) - (format "\\text{%s}" func) - (format "\\hbox{%s}" func))))) - (if (and (eq calc-language 'eqn) - (string-match "[^']'+\\'" func)) - (let ((n (- (length func) (match-beginning 0) 1))) - (setq func (substring func 0 (- n))) - (while (>= (setq n (1- n)) 0) - (setq func (concat func " prime"))))) - (cond ((and (memq calc-language '(tex latex)) - (or (> (length a) 2) - (not (math-tex-expr-is-flat (nth 1 a))))) - (setq left "\\left( " - right " \\right)")) - ((and (eq calc-language 'eqn) - (or (> (length a) 2) - (not (math-tex-expr-is-flat (nth 1 a))))) - (setq left "{left ( " - right " right )}")) - ((and (or (and (memq calc-language '(tex latex)) - (eq (aref func 0) ?\\)) - (and (eq calc-language 'eqn) - (memq (car a) math-eqn-special-funcs))) - (not (or - (string-match "\\hbox{" func) - (string-match "\\text{" func))) - (= (length a) 2) - (or (Math-realp (nth 1 a)) - (memq (car (nth 1 a)) '(var *)))) - (setq left (if (eq calc-language 'eqn) "~{" "{") - right "}")) - ((eq calc-language 'eqn) - (setq left " ( " - right " )")) - (t (setq left calc-function-open - right calc-function-close))) - (list 'horiz func left - (math-compose-vector (cdr a) - (if (eq calc-language 'eqn) - " , " ", ") - 0) - right))))))))) + (if (setq spfn (get calc-language 'math-func-formatter)) + (funcall spfn func a) + + (list 'horiz func calc-function-open + (math-compose-vector (cdr a) ", " 0) + calc-function-close)))))))))) (defun math-prod-first-term (x) @@ -1003,8 +871,12 @@ (if (<= count 0) (if (< count 0) (math-compose-rows (cdr a) -1 nil) - (cons (concat (if (memq calc-language '(tex latex)) " \\ldots" " ...") - math-comp-comma) + (cons (concat + (let ((mdots (get calc-language 'math-dots))) + (if mdots + (concat " " mdots) + " ...")) + math-comp-comma) (math-compose-rows (cdr a) -1 nil))) (cons (list 'horiz (if first (concat math-comp-left-bracket " ") " ") @@ -1016,31 +888,6 @@ (math-compose-expr (car a) math-comp-vector-prec) (concat " " math-comp-right-bracket))))) -(defun math-compose-tex-matrix (a &optional ltx) - (if (cdr a) - (cons (append (math-compose-vector (cdr (car a)) " & " 0) - (if ltx '(" \\\\ ") '(" \\cr "))) - (math-compose-tex-matrix (cdr a) ltx)) - (list (math-compose-vector (cdr (car a)) " & " 0)))) - -(defun math-compose-eqn-matrix (a) - (if a - (cons - (cond ((eq calc-matrix-just 'right) "rcol ") - ((eq calc-matrix-just 'center) "ccol ") - (t "lcol ")) - (cons - (list 'break math-compose-level) - (cons - "{ " - (cons - (let ((math-compose-level (1+ math-compose-level))) - (math-compose-vector (cdr (car a)) " above " 1000)) - (cons - " } " - (math-compose-eqn-matrix (cdr a))))))) - nil)) - (defun math-vector-is-string (a) (while (and (setq a (cdr a)) (or (and (natnump (car a)) diff --git a/lisp/calendar/appt.el b/lisp/calendar/appt.el index 94df068b012..c605cbef10d 100644 --- a/lisp/calendar/appt.el +++ b/lisp/calendar/appt.el @@ -82,7 +82,7 @@ ;;;###autoload (defcustom appt-issue-message t - "*Non-nil means check for appointments in the diary buffer. + "Non-nil means check for appointments in the diary buffer. To be detected, the diary entry must have the format described in the documentation of the function `appt-check'." :type 'boolean @@ -94,19 +94,19 @@ variable `appt-display-format' instead." "22.1") ;;;###autoload (defcustom appt-message-warning-time 12 - "*Time in minutes before an appointment that the warning begins." + "Time in minutes before an appointment that the warning begins." :type 'integer :group 'appt) ;;;###autoload (defcustom appt-audible t - "*Non-nil means beep to indicate appointment." + "Non-nil means beep to indicate appointment." :type 'boolean :group 'appt) ;;;###autoload (defcustom appt-visible t - "*Non-nil means display appointment message in echo area. + "Non-nil means display appointment message in echo area. This variable is only relevant if `appt-msg-window' is nil." :type 'boolean :group 'appt) @@ -115,7 +115,7 @@ This variable is only relevant if `appt-msg-window' is nil." ;;;###autoload (defcustom appt-msg-window t - "*Non-nil means display appointment message in another window. + "Non-nil means display appointment message in another window. If non-nil, this variable overrides `appt-visible'." :type 'boolean :group 'appt) @@ -144,27 +144,27 @@ of the (obsolete) variables `appt-msg-window' and `appt-visible'." ;;;###autoload (defcustom appt-display-mode-line t - "*Non-nil means display minutes to appointment and time on the mode line. + "Non-nil means display minutes to appointment and time on the mode line. This is in addition to any other display of appointment messages." :type 'boolean :group 'appt) ;;;###autoload (defcustom appt-display-duration 10 - "*The number of seconds an appointment message is displayed. + "The number of seconds an appointment message is displayed. Only relevant if reminders are to be displayed in their own window." :type 'integer :group 'appt) ;;;###autoload (defcustom appt-display-diary t - "*Non-nil displays the diary when the appointment list is first initialized. + "Non-nil displays the diary when the appointment list is first initialized. This will occur at midnight when the appointment list is updated." :type 'boolean :group 'appt) (defcustom appt-display-interval 3 - "*Number of minutes to wait between checking the appointment list." + "Number of minutes to wait between checking the appointment list." :type 'integer :group 'appt) @@ -436,20 +436,13 @@ displayed in a window: "Display appointment message APPT-MSG in a separate buffer. The appointment is due in MIN-TO-APP (a string) minutes. NEW-TIME is a string giving the date." - (require 'electric) - - ;; Make sure we're not in the minibuffer - ;; before splitting the window. - - (if (equal (selected-window) (minibuffer-window)) - (if (other-window 1) - (select-window (other-window 1)) - (if (display-multi-frame-p) - (select-frame (other-frame 1))))) - + ;; Make sure we're not in the minibuffer before splitting the window. + ;; FIXME this seems needlessly complicated? + (when (minibufferp) + (other-window 1) + (and (minibufferp) (display-multi-frame-p) (other-frame 1))) (let ((this-window (selected-window)) (appt-disp-buf (set-buffer (get-buffer-create appt-buffer-name)))) - (if (cdr (assq 'unsplittable (frame-parameters))) ;; In an unsplittable frame, use something somewhere else. (display-buffer appt-disp-buf) @@ -489,7 +482,7 @@ Usually just deletes the appointment buffer." (let ((next-bottom-edge (nth 3 (window-edges w)))) (when (< bottom-edge next-bottom-edge) (setq bottom-edge next-bottom-edge - lowest-window w))))) + lowest-window w)))) 'nomini) (select-window lowest-window))) (defconst appt-time-regexp diff --git a/lisp/calendar/cal-bahai.el b/lisp/calendar/cal-bahai.el index dae539b3436..f6d5cdb58c1 100644 --- a/lisp/calendar/cal-bahai.el +++ b/lisp/calendar/cal-bahai.el @@ -204,6 +204,10 @@ nil if it is not visible in the current calendar window." (if (calendar-date-is-visible-p date) (list (list date string)))))))) +;; d-b-l-e should be called from diary code. +(declare-function add-to-diary-list "diary-lib" + (date string specifier &optional marker globcolor literal)) + (defun diary-bahai-list-entries () "Add any Bahá'í date entries from the diary file to `diary-entries-list'. Bahá'í date diary entries must be prefaced by an @@ -290,6 +294,12 @@ calendar. This function is provided for use with the (set-buffer-modified-p diary-modified)) (goto-char (point-min)))) +(declare-function diary-name-pattern "diary-lib" + (string-array &optional abbrev-array paren)) + +(declare-function mark-calendar-days-named "diary-lib" + (dayname &optional color)) + (defun diary-bahai-mark-entries () "Mark days in the calendar window that have Bahá'í date diary entries. Each entry in diary-file (or included files) visible in the calendar diff --git a/lisp/calendar/cal-hebrew.el b/lisp/calendar/cal-hebrew.el index 02cc9bfabb2..9e20bfa8802 100644 --- a/lisp/calendar/cal-hebrew.el +++ b/lisp/calendar/cal-hebrew.el @@ -301,6 +301,9 @@ nil if it is not visible in the current calendar window." (if (calendar-date-is-visible-p date) (list (list date string)))))))) +;; h-r-h-e should be called from holidays code. +(declare-function holiday-filter-visible-calendar "holidays" (l)) + (defun holiday-rosh-hashanah-etc () "List of dates related to Rosh Hashanah, as visible in calendar window." (if (or (< displayed-month 8) @@ -500,6 +503,10 @@ nil if it is not visible in the current calendar window." (calendar-dayname-on-or-before 6 (+ abs-t-a 7))) "Shabbat Nahamu")))))) +;; l-h-d-e should be called from diary code. +(declare-function add-to-diary-list "diary-lib" + (date string specifier &optional marker globcolor literal)) + (defun list-hebrew-diary-entries () "Add any Hebrew date entries from the diary file to `diary-entries-list'. Hebrew date diary entries must be prefaced by `hebrew-diary-entry-symbol' @@ -661,6 +668,12 @@ A value of 0 in any position is a wildcard." (mark-visible-calendar-date (calendar-gregorian-from-absolute date))))))))) +(declare-function diary-name-pattern "diary-lib" + (string-array &optional abbrev-array paren)) + +(declare-function mark-calendar-days-named "diary-lib" + (dayname &optional color)) + (defun mark-hebrew-diary-entries () "Mark days in the calendar window that have Hebrew date diary entries. Each entry in diary-file (or included files) visible in the calendar window diff --git a/lisp/calendar/cal-islam.el b/lisp/calendar/cal-islam.el index c562437fc14..aa8590340e0 100644 --- a/lisp/calendar/cal-islam.el +++ b/lisp/calendar/cal-islam.el @@ -195,6 +195,10 @@ nil if it is not visible in the current calendar window." (if (calendar-date-is-visible-p date) (list (list date string)))))))) +;; l-i-d-e should be called from diary code. +(declare-function add-to-diary-list "diary-lib" + (date string specifier &optional marker globcolor literal)) + (defun list-islamic-diary-entries () "Add any Islamic date entries from the diary file to `diary-entries-list'. Islamic date diary entries must be prefaced by an `islamic-diary-entry-symbol' @@ -281,6 +285,12 @@ not be marked in the calendar. This function is provided for use with the (set-buffer-modified-p diary-modified)) (goto-char (point-min)))) +(declare-function diary-name-pattern "diary-lib" + (string-array &optional abbrev-array paren)) + +(declare-function mark-calendar-days-named "diary-lib" + (dayname &optional color)) + (defun mark-islamic-diary-entries () "Mark days in the calendar window that have Islamic date diary entries. Each entry in diary-file (or included files) visible in the calendar window diff --git a/lisp/calendar/cal-menu.el b/lisp/calendar/cal-menu.el index 47fd4fc4c2a..0f54722a5ca 100644 --- a/lisp/calendar/cal-menu.el +++ b/lisp/calendar/cal-menu.el @@ -33,6 +33,53 @@ ;;; Code: +;; The code in this file is only called from calendar.el, but can't +;; require it (to supress undefined function warnings from compiler) +;; without a recursive require. +;; All these functions are either autoloaded, or autoloaded or defined +;; in calendar.el. +(declare-function calendar-increment-month "calendar" (n &optional mon yr)) +(declare-function calendar-month-name "calendar" (month &optional abbrev)) +(declare-function extract-calendar-year "calendar" (date)) +(declare-function calendar-cursor-to-date "calendar" (&optional error)) +(declare-function holiday-list "holidays" (y1 y2 &optional l label)) +(declare-function calendar-sunrise-sunset "solar" nil) +(declare-function calendar-current-date "calendar" nil) +(declare-function calendar-cursor-holidays "holidays" nil) +(declare-function calendar-date-string "calendar" + (date &optional abbreviate nodayname)) +(declare-function insert-diary-entry "diary-lib" (arg)) +(declare-function calendar-set-mark "calendar" (arg)) +(declare-function cal-tex-cursor-day "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-week "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-week2 "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-week-iso "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-week-monday "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-filofax-daily "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-filofax-2week "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-filofax-week "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-month "cal-tex" (arg)) +(declare-function cal-tex-cursor-month-landscape "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-year "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-filofax-year "cal-tex" (&optional arg)) +(declare-function cal-tex-cursor-year-landscape "cal-tex" (&optional arg)) +(declare-function calendar-day-of-year-string "calendar" (&optional date)) +(declare-function calendar-iso-date-string "cal-iso" (&optional date)) +(declare-function calendar-julian-date-string "cal-julian" (&optional date)) +(declare-function calendar-astro-date-string "cal-julian" (&optional date)) +(declare-function calendar-absolute-from-gregorian "calendar" (date)) +(declare-function calendar-hebrew-date-string "cal-hebrew" (&optional date)) +(declare-function calendar-persian-date-string "cal-persia" (&optional date)) +(declare-function calendar-bahai-date-string "cal-bahai" (&optional date)) +(declare-function calendar-islamic-date-string "cal-islam" (&optional date)) +(declare-function calendar-chinese-date-string "cal-china" (&optional date)) +(declare-function calendar-coptic-date-string "cal-coptic" (&optional date)) +(declare-function calendar-ethiopic-date-string "cal-coptic" (&optional date)) +(declare-function calendar-french-date-string "cal-french" (&optional date)) +(declare-function calendar-mayan-date-string "cal-mayan" (&optional date)) +(declare-function calendar-print-chinese-date "cal-china" nil) +(declare-function calendar-goto-date "cal-move" (date)) + (defvar displayed-year) (defconst cal-menu-moon-menu @@ -94,12 +141,15 @@ "--" ,@(let ((l ())) ;; Show 11 years--5 before, 5 after year of middle month. + ;; http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01813.html (dotimes (i 11) - (push (vector "For Year" + (push (vector (format "hol-year-%d" i) `(lambda () (interactive) - (holiday-list (+ displayed-year ,(- i 5)))) - :suffix `(number-to-string (+ displayed-year ,(- i 5)))) + (holiday-list (+ displayed-year ,(- i 5)) + (+ displayed-year ,(- i 5)))) + :label `(format "For Year %d" + (+ displayed-year ,(- i 5)))) l)) (nreverse l)) "--" diff --git a/lisp/calendar/cal-x.el b/lisp/calendar/cal-x.el index 24b1f896179..4aea547f88d 100644 --- a/lisp/calendar/cal-x.el +++ b/lisp/calendar/cal-x.el @@ -64,6 +64,9 @@ Location and color should be set in .Xdefaults.") "Hooks to be run just after setting up a calendar frame. Can be used to change frame parameters, such as font, color, location, etc.") +;; calendar-basic-setup is called first, and will autoload diary-lib. +(declare-function make-fancy-diary-buffer "diary-lib" nil) + (defun calendar-one-frame-setup (&optional arg) "Start calendar and display it in a dedicated frame together with the diary. This function requires a display capable of multiple frames, else diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index c252341526a..d49667d2810 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -1,7 +1,8 @@ ;;; calendar.el --- calendar functions ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997, -;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. ;; Author: Edward M. Reingold ;; Maintainer: Glenn Morris @@ -818,7 +819,7 @@ diary buffer, set the variable `diary-list-include-blanks' to t." As the files are processed for diary entries, these functions are used to cull relevant entries. You can use either or both of `list-hebrew-diary-entries', `list-islamic-diary-entries' and -`list-bahai-diary-entries'. The documentation for these functions +`diary-bahai-list-entries'. The documentation for these functions describes the style of such diary entries." :type 'hook :options '(list-hebrew-diary-entries @@ -2444,6 +2445,11 @@ under the cursor: (select-window (posn-window (event-start event))) (call-interactively 'calendar-other-month))) +;; (require 'info) will define these. +(declare-function Info-find-emacs-command-nodes "info" (command)) +(declare-function Info-find-node "info" + (filename nodename &optional no-going-back)) + (defun calendar-goto-info-node () "Go to the info node for the calendar." (interactive) diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el index f6134940169..cee571f5f1c 100644 --- a/lisp/calendar/holidays.el +++ b/lisp/calendar/holidays.el @@ -208,6 +208,7 @@ The optional LABEL is used to label the buffer created." (display-buffer holiday-buffer) (message "Computing holidays...done")))) +;;;###autoload (defalias 'holiday-list 'list-holidays) (defun calendar-check-holidays (date) @@ -487,6 +488,9 @@ is non-nil)." (list (list (calendar-gregorian-from-absolute (+ abs-easter n)) string)))))) +;; Prior call to calendar-julian-from-absolute will autoload cal-julian. +(declare-function calendar-absolute-from-julian "cal-julian" (date)) + (defun holiday-greek-orthodox-easter () "Date of Easter according to the rule of the Council of Nicaea." (let ((m displayed-month) diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el index d15312abfa3..ffd2b5b6f59 100644 --- a/lisp/calendar/time-date.el +++ b/lisp/calendar/time-date.el @@ -53,7 +53,7 @@ the symbols HIGH-SYMBOL, LOW-SYMBOL and MICRO-SYMBOL. The optional TYPE-SYMBOL is bound to the type of the time value. Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH -LOW), and type 3 is the list (HIGH LOW MICRO)." +LOW), and type 2 is the list (HIGH LOW MICRO)." (declare (indent 1) (debug ((&rest (symbolp symbolp symbolp &or [symbolp form] form)) body))) @@ -86,7 +86,7 @@ LOW), and type 3 is the list (HIGH LOW MICRO)." (defun encode-time-value (high low micro type) "Encode HIGH, LOW, and MICRO into a time value of type TYPE. Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH LOW), -and type 3 is the list (HIGH LOW MICRO)." +and type 2 is the list (HIGH LOW MICRO)." (cond ((eq type 0) (cons high low)) ((eq type 1) (list high low)) diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el index 13ef042f736..e3db7e46407 100644 --- a/lisp/calendar/todo-mode.el +++ b/lisp/calendar/todo-mode.el @@ -916,6 +916,9 @@ Number of entries for each category is given by `todo-print-priorities'." (defvar date) (defvar entry)) +;; t-c should be used from diary code, which requires calendar. +(declare-function calendar-current-date "calendar" nil) + ;; Read about this function in the setup instructions above! ;;;###autoload (defun todo-cp () diff --git a/lisp/complete.el b/lisp/complete.el index e1d0ef07df4..b3a4928dd53 100644 --- a/lisp/complete.el +++ b/lisp/complete.el @@ -381,9 +381,9 @@ of `minibuffer-completion-table' and the minibuffer contents.") ;; Returns the sequence of non-delimiter characters that follow regexp in string. (defun PC-chunk-after (string regexp) (if (not (string-match regexp string)) - (let ((message (format "String %s didn't match regexp %s" string regexp))) - (message message) - (error message))) + (let ((message "String %s didn't match regexp %s")) + (message message string regexp) + (error message string regexp))) (let ((result (substring string (match-end 0)))) ;; result may contain multiple chunks (if (string-match PC-delim-regex result) @@ -869,7 +869,7 @@ GOTO-END is non-nil, however, it instead replaces up to END." (defun PC-temp-minibuffer-message (message) "A Lisp version of `temp_minibuffer_message' from minibuf.c." (cond (PC-not-minibuffer - (message message) + (message "%s" message) (sit-for 2) (message "")) ((fboundp 'temp-minibuffer-message) diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 5e398d46ccf..b9e462ec05f 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -491,6 +491,14 @@ map) "Local keymap for links in `custom-mode'.") +(defvar custom-field-keymap + (let ((map (copy-keymap widget-field-keymap))) + (define-key map "\C-c\C-c" 'Custom-set) + (define-key map "\C-x\C-s" 'Custom-save) + map) + "Keymap used inside editable fields in customization buffers.") + +(widget-put (get 'editable-field 'widget-type) :keymap custom-field-keymap) ;;; Utilities. @@ -4126,6 +4134,9 @@ if only the first line of the docstring is shown.")) (setq user-init-file default-init-file)) user-init-file)))) +;; If recentf-mode is non-nil, this is defined. +(declare-function recentf-expand-file-name "recentf" (name)) + ;;;###autoload (defun custom-save-all () "Save all customizations in `custom-file'." @@ -4435,7 +4446,7 @@ The format is suitable for use with `easy-menu-define'." ;;; Toolbar and menubar support (easy-menu-define - Custom-mode-menu custom-mode-map + Custom-mode-menu (list custom-mode-map custom-field-keymap) "Menu used in customization buffers." (nconc (list "Custom" (customize-menu-create 'customize)) @@ -4473,15 +4484,6 @@ The format is suitable for use with `easy-menu-define'." (widget-apply-action button event) (error "You can't edit this part of the Custom buffer")))) -(defvar custom-field-keymap - (let ((map (copy-keymap widget-field-keymap))) - (define-key map "\C-c\C-c" 'Custom-set) - (define-key map "\C-x\C-s" 'Custom-save) - map) - "Keymap used inside editable fields in customization buffers.") - -(widget-put (get 'editable-field 'widget-type) :keymap custom-field-keymap) - (defun Custom-goto-parent () "Go to the parent group listed at the top of this buffer. If several parents are listed, go to the first of them." @@ -4502,7 +4504,7 @@ If several parents are listed, go to the first of them." (if (eq (widget-get (widget-get widget :parent) :custom-state) 'modified) (message "To install your edits, invoke [State] and choose the Set operation"))) -(defun custom-mode () +(define-derived-mode custom-mode nil "Custom" "Major mode for editing customization buffers. The following commands are available: @@ -4524,9 +4526,6 @@ Erase customizations; set options Entry to this mode calls the value of `custom-mode-hook' if that value is non-nil." - (kill-all-local-variables) - (setq major-mode 'custom-mode - mode-name "Custom") (use-local-map custom-mode-map) (easy-menu-add Custom-mode-menu) (set (make-local-variable 'tool-bar-map) custom-tool-bar-map) @@ -4536,6 +4535,7 @@ if that value is non-nil." (setq widget-documentation-face 'custom-documentation) (make-local-variable 'widget-button-face) (setq widget-button-face custom-button) + (setq show-trailing-whitespace nil) ;; We need this because of the "More" button on docstrings. ;; Otherwise clicking on "More" can push point offscreen, which @@ -4553,8 +4553,7 @@ if that value is non-nil." (set (make-local-variable 'widget-push-button-suffix) "") (set (make-local-variable 'widget-link-prefix) "") (set (make-local-variable 'widget-link-suffix) "")) - (add-hook 'widget-edit-functions 'custom-state-buffer-message nil t) - (run-mode-hooks 'custom-mode-hook)) + (add-hook 'widget-edit-functions 'custom-state-buffer-message nil t)) (put 'custom-mode 'mode-class 'special) diff --git a/lisp/desktop.el b/lisp/desktop.el index 6054099bb4d..749956091df 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -651,6 +651,8 @@ is nil, ask the user where to save the desktop." value))) ;; ---------------------------------------------------------------------------- +(declare-function uniquify-item-base "uniquify" (cl-x) t) ; defstruct + (defun desktop-buffer-info (buffer) (set-buffer buffer) (list diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index b9ceb728dbc..32c63aba2fe 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -463,6 +463,56 @@ with a prefix argument." ;;; Shell commands +(declare-function mailcap-parse-mailcaps "mailcap" (&optional path force)) +(declare-function mailcap-parse-mimetypes "mailcap" (&optional path force)) +(declare-function mailcap-extension-to-mime "mailcap" (extn)) +(declare-function mailcap-mime-info "mailcap" + (string &optional request no-decode)) + +(defun dired-read-shell-command-default (files) + "Return a list of default commands for `dired-read-shell-command'." + (require 'mailcap) + (mailcap-parse-mailcaps) + (mailcap-parse-mimetypes) + (let* ((all-mime-type + ;; All unique MIME types from file extensions + (delete-dups (mapcar (lambda (file) + (mailcap-extension-to-mime + (file-name-extension file t))) + files))) + (all-mime-info + ;; All MIME info lists + (delete-dups (mapcar (lambda (mime-type) + (mailcap-mime-info mime-type 'all)) + all-mime-type))) + (common-mime-info + ;; Intersection of mime-infos from different mime-types; + ;; or just the first MIME info for a single MIME type + (if (cdr all-mime-info) + (delq nil (mapcar (lambda (mi1) + (unless (memq nil (mapcar + (lambda (mi2) + (member mi1 mi2)) + (cdr all-mime-info))) + mi1)) + (car all-mime-info))) + (car all-mime-info))) + (commands + ;; Command strings from `viewer' field of the MIME info + (delq nil (mapcar (lambda (mime-info) + (let ((command (cdr (assoc 'viewer mime-info)))) + (if (stringp command) + (replace-regexp-in-string + ;; Replace mailcap's `%s' placeholder + ;; with dired's `?' placeholder + "%s" "?" + (replace-regexp-in-string + ;; Remove the final filename placeholder + "\s*\\('\\)?%s\\1?\s*\\'" "" command nil t) + nil t)))) + common-mime-info)))) + commands)) + (defun dired-read-shell-command (prompt arg files) ;; "Read a dired shell command prompting with PROMPT (using read-string). ;;ARG is the prefix arg and may be used to indicate in the prompt which @@ -472,7 +522,8 @@ with a prefix argument." nil 'shell files (function read-string) (format prompt (dired-mark-prompt arg files)) - nil 'shell-command-history)) + nil 'shell-command-history + (dired-read-shell-command-default files))) ;; The in-background argument is only needed in Emacs 18 where ;; shell-command doesn't understand an appended ampersand `&'. @@ -1151,6 +1202,8 @@ Special value `always' suppresses confirmation." (dired-copy-file-recursive from to ok-flag dired-copy-preserve-time t dired-recursive-copies)) +(declare-function make-symbolic-link "fileio.c") + (defun dired-copy-file-recursive (from to ok-flag &optional preserve-time top recursive) (let ((attrs (file-attributes from)) @@ -1533,10 +1586,16 @@ Optional arg HOW-TO is used to set the value of the into-dir variable "Create a directory called DIRECTORY." (interactive (list (read-file-name "Create directory: " (dired-current-directory)))) - (let ((expanded (directory-file-name (expand-file-name directory)))) - (make-directory expanded) - (dired-add-file expanded) - (dired-move-to-filename))) + (let* ((expanded (directory-file-name (expand-file-name directory))) + (try expanded) new) + ;; Find the topmost nonexistent parent dir (variable `new') + (while (and try (not (file-exists-p try)) (not (equal new try))) + (setq new try + try (directory-file-name (file-name-directory try)))) + (make-directory expanded t) + (when new + (dired-add-file new) + (dired-move-to-filename)))) (defun dired-into-dir-with-symlinks (target) (and (file-directory-p target) diff --git a/lisp/dired-x.el b/lisp/dired-x.el index 0be3aa393e1..f8e0b2a6140 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -1,15 +1,13 @@ ;;; dired-x.el --- extra Dired functionality -*-byte-compile-dynamic: t;-*- +;; Copyright (C) 1993, 1994, 1997, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007 Free Software Foundation, Inc. + ;; Author: Sebastian Kremer ;; Lawrence R. Dodd ;; Maintainer: Romain Francoise -;; Version: 2.37+ -;; Date: 1994/08/18 19:27:42 ;; Keywords: dired extensions files -;; Copyright (C) 1993, 1994, 1997, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. - ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify @@ -652,6 +650,15 @@ Optional fourth argument LOCALP is as in `dired-get-filename'." (and fn (string-match regexp fn)))) msg))) +;; Compiler does not get fset. +(declare-function dired-omit-old-add-entry "dired-x") + +;;; REDEFINE. +;;; Redefine dired-aux.el's version of `dired-add-entry' +;;; Save old defun if not already done: +(or (fboundp 'dired-omit-old-add-entry) + (fset 'dired-omit-old-add-entry (symbol-function 'dired-add-entry))) + ;;; REDEFINE. (defun dired-omit-new-add-entry (filename &optional marker-char relative) ;; This redefines dired-aux.el's dired-add-entry to avoid calling ls for @@ -679,11 +686,6 @@ Optional fourth argument LOCALP is as in `dired-get-filename'." ;; omitting is not turned on at all (dired-omit-old-add-entry filename marker-char relative))) -;;; REDEFINE. -;;; Redefine dired-aux.el's version of `dired-add-entry' -;;; Save old defun if not already done: -(or (fboundp 'dired-omit-old-add-entry) - (fset 'dired-omit-old-add-entry (symbol-function 'dired-add-entry))) ;; Redefine it. (fset 'dired-add-entry 'dired-omit-new-add-entry) @@ -746,7 +748,7 @@ you can relist single subdirs using \\[dired-do-redisplay]." ;; decent subdir headerline: (goto-char (point-min)) (or (looking-at dired-subdir-regexp) - (insert " " + (insert " " (directory-file-name (file-name-directory default-directory)) ":\n")) (dired-mode dirname (or switches dired-listing-switches)) @@ -1211,6 +1213,8 @@ This is an extra function so that you can redefine it." ;;; RELATIVE SYMBOLIC LINKS. +(declare-function make-symbolic-link "fileio.c") + (defvar dired-keep-marker-relsymlink ?S "See variable `dired-keep-marker-move'.") @@ -1437,6 +1441,8 @@ See also variable `dired-vm-read-only-folders'." ;;; MISCELLANEOUS INTERNAL FUNCTIONS. +(declare-function dired-old-find-buffer-nocreate "dired-x") + (or (fboundp 'dired-old-find-buffer-nocreate) (fset 'dired-old-find-buffer-nocreate (symbol-function 'dired-find-buffer-nocreate))) diff --git a/lisp/dired.el b/lisp/dired.el index 16b53acb6da..ab56579e718 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -595,8 +595,12 @@ Don't use that together with FILTER." (if (next-read-file-uses-dialog-p) (read-directory-name (format "Dired %s(directory): " str) nil default-directory nil) - (read-file-name (format "Dired %s(directory): " str) - nil default-directory nil))))) + (let ((default (and buffer-file-name + (abbreviate-file-name buffer-file-name)))) + (minibuffer-with-setup-hook + (lambda () (setq minibuffer-default default)) + (read-file-name (format "Dired %s(directory): " str) + nil default-directory nil))))))) ;;;###autoload (define-key ctl-x-map "d" 'dired) ;;;###autoload @@ -3264,6 +3268,9 @@ Anything else means ask for each directory." (dired-dnd-handle-local-file uri action) nil))) +(declare-function dired-relist-entry "dired-aux" (file)) +(declare-function make-symbolic-link "fileio.c") + (defun dired-dnd-handle-local-file (uri action) "Copy, move or link a file to the dired directory. URI is the file to handle, ACTION is one of copy, move, link or ask. diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 89f1b009f7f..0e336b12dd5 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -97,16 +97,41 @@ ;; ;; and modify them to your needs. -;;; Code: +;;; Todo: -;; Todo: ;; - better menu. ;; - don't use `find-file'. ;; - Bind slicing to a drag event. -;; - zoom (the whole document and/or just the region around the cursor). +;; - doc-view-fit-doc-to-window and doc-view-fit-window-to-doc. +;; - zoom a the region around the cursor (like xdvi). ;; - get rid of the silly arrow in the fringe. ;; - improve anti-aliasing (pdf-utils gets it better). +;;;; About isearch support + +;; I tried implementing isearch by setting +;; `isearch-search-fun-function' buffer-locally, but that didn't +;; work too good. The function doing the real search was called +;; endlessly somehow. But even if we'd get that working no real +;; isearch feeling comes up due to the missing match highlighting. +;; Currently I display all lines containing a match in a tooltip and +;; each C-s or C-r jumps directly to the next/previous page with a +;; match. With isearch we could only display the current match. So +;; we had to decide if another C-s jumps to the next page with a +;; match (thus only the first match in a page will be displayed in a +;; tooltip) or to the next match, which would do nothing visible +;; (except the tooltip) if the next match is on the same page. + +;; And it's much slower than the current search facility, because +;; isearch really searches for each step forward or backward wheras +;; the current approach searches once and then it knows to which +;; pages to jump. + +;; Anyway, if someone with better isearch knowledge wants to give it a try, +;; feel free to do it. --Tassilo + +;;; Code: + (require 'dired) (require 'image-mode) (require 'jka-compr) @@ -130,11 +155,17 @@ '("-dSAFER" ;; Avoid security problems when rendering files from untrusted ;; sources. "-dNOPAUSE" "-sDEVICE=png16m" "-dTextAlphaBits=4" - "-dBATCH" "-dGraphicsAlphaBits=4" "-dQUIET" "-r100") + "-dBATCH" "-dGraphicsAlphaBits=4" "-dQUIET") "A list of options to give to ghostscript." :type '(repeat string) :group 'doc-view) +(defcustom doc-view-resolution 100 + "Dots per inch resolution used to render the documents. +Higher values result in larger images." + :type 'number + :group 'doc-view) + (defcustom doc-view-dvipdfm-program (executable-find "dvipdfm") "Program to convert DVI files to PDF. @@ -203,8 +234,12 @@ has finished." (defvar doc-view-current-image nil "Only used internally.") -(defvar doc-view-current-overlay) -(defvar doc-view-pending-cache-flush nil) + +(defvar doc-view-current-overlay nil + "Only used internally.") + +(defvar doc-view-pending-cache-flush nil + "Only used internally.") (defvar doc-view-current-info nil "Only used internally.") @@ -229,6 +264,9 @@ has finished." (define-key map (kbd "M-<") 'doc-view-first-page) (define-key map (kbd "M->") 'doc-view-last-page) (define-key map [remap goto-line] 'doc-view-goto-page) + ;; Zoom in/out. + (define-key map "+" 'doc-view-enlarge) + (define-key map "-" 'doc-view-shrink) ;; Killing/burying the buffer (and the process) (define-key map (kbd "q") 'bury-buffer) (define-key map (kbd "k") 'doc-view-kill-proc-and-buffer) @@ -422,8 +460,40 @@ It's a subdirectory of `doc-view-cache-directory'." (when (not (funcall predicate item)) (setq new-list (cons item new-list)))))) +;;;###autoload +(defun doc-view-mode-p (type) + "Return non-nil if image type TYPE is available for `doc-view'. +Image types are symbols like `dvi', `postscript' or `pdf'." + (and (display-graphic-p) + (image-type-available-p 'png) + (cond + ((eq type 'dvi) + (and (doc-view-mode-p 'pdf) + doc-view-dvipdfm-program + (executable-find doc-view-dvipdfm-program))) + ((or (eq type 'postscript) (eq type 'ps) + (eq type 'pdf)) + (and doc-view-ghostscript-program + (executable-find doc-view-ghostscript-program))) + (t ;; unknown image type + nil)))) + ;;;; Conversion Functions +(defvar doc-view-shrink-factor 1.125) + +(defun doc-view-enlarge (factor) + "Enlarge the document." + (interactive (list doc-view-shrink-factor)) + (set (make-local-variable 'doc-view-resolution) + (* factor doc-view-resolution)) + (doc-view-reconvert-doc)) + +(defun doc-view-shrink (factor) + "Shrink the document." + (interactive (list doc-view-shrink-factor)) + (doc-view-enlarge (/ 1.0 factor))) + (defun doc-view-reconvert-doc () "Reconvert the current document. Should be invoked when the cached images aren't up-to-date." @@ -479,6 +549,7 @@ Should be invoked when the cached images aren't up-to-date." (append (list "pdf/ps->png" doc-view-conversion-buffer doc-view-ghostscript-program) doc-view-ghostscript-options + (list (format "-r%d" (round doc-view-resolution))) (list (concat "-sOutputFile=" png)) (list pdf-ps))) mode-line-process (list (format ":%s" doc-view-current-converter-process))) @@ -738,7 +809,7 @@ the pagenumber and CONTEXTS are all lines of text containing a match." "Call `doc-view-search' for backward search. If prefix NEW-QUERY is given, ask for a new regexp." (interactive "P") - (doc-view-search arg t)) + (doc-view-search new-query t)) (defun doc-view-search (new-query &optional backward) "Jump to the next match or initiate a new search if NEW-QUERY is given. @@ -746,7 +817,7 @@ If the current document hasn't been transformed to plain text till now do that first. If BACKWARD is non-nil, jump to the previous match." (interactive "P") - (if (and (not arg) + (if (and (not new-query) doc-view-current-search-matches) (if backward (doc-view-search-previous-match 1) @@ -820,8 +891,7 @@ If BACKWARD is non-nil, jump to the previous match." (defun doc-view-initiate-display () ;; Switch to image display if possible - (if (and (display-images-p) - (image-type-available-p 'png)) + (if (doc-view-mode-p (intern (file-name-extension buffer-file-name))) (progn (doc-view-buffer-message) (setq doc-view-current-page (or doc-view-current-page 1)) @@ -838,8 +908,9 @@ If BACKWARD is non-nil, jump to the previous match." (message "%s" (substitute-command-keys - (concat "No image (png) support available. Type \\[doc-view-toggle-display] " - "to switch to an editing mode."))))) + (concat "No image (png) support available or some conversion utility for " + (file-name-extension buffer-file-name)" files is missing. " + "Type \\[doc-view-toggle-display] to switch to an editing mode."))))) ;;;###autoload (defun doc-view-mode () diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el index c66cbc7933a..780fdd425a3 100644 --- a/lisp/dos-fns.el +++ b/lisp/dos-fns.el @@ -29,6 +29,9 @@ ;;; Code: +(declare-function int86 "dosfns.c") +(declare-function msdos-long-file-names "msdos.c") + ;; This overrides a trivial definition in files.el. (defun convert-standard-filename (filename) "Convert a standard file's name to something suitable for the current OS. diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el index 28cab4ccbcb..878e5c58189 100644 --- a/lisp/dos-w32.el +++ b/lisp/dos-w32.el @@ -370,6 +370,8 @@ filesystem mounted on drive Z:, FILESYSTEM could be \"Z:\"." (defvar printer-name) +(declare-function default-printer-name "w32fns.c") + (defun direct-print-region-function (start end &optional lpr-prog delete-text buf display diff --git a/lisp/ediff-diff.el b/lisp/ediff-diff.el index 06d7b603440..1b51b440f05 100644 --- a/lisp/ediff-diff.el +++ b/lisp/ediff-diff.el @@ -35,9 +35,9 @@ (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-util) - (load "ediff-util.el" nil nil 'nosuffix)) + (load "ediff-util.el" nil t 'nosuffix)) )) ;; end pacifier @@ -343,6 +343,7 @@ one optional arguments, diff-number to refine.") (get-buffer-create (ediff-unique-buffer-name "*ediff-errors" "*")))) (ediff-with-current-buffer ediff-error-buffer + (setq buffer-undo-list t) (erase-buffer) (insert (ediff-with-current-buffer diff-buff (buffer-string))) (goto-char (point-min)) diff --git a/lisp/ediff-help.el b/lisp/ediff-help.el index 0c37be31372..833260db673 100644 --- a/lisp/ediff-help.el +++ b/lisp/ediff-help.el @@ -33,7 +33,7 @@ (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) )) ;; end pacifier diff --git a/lisp/ediff-init.el b/lisp/ediff-init.el index dd69b52b022..b46562b5fde 100644 --- a/lisp/ediff-init.el +++ b/lisp/ediff-init.el @@ -37,10 +37,6 @@ (defvar ediff-multiframe) (defvar ediff-use-toolbar-p) (defvar mswindowsx-bitmap-file-path) - -(and noninteractive - (eval-when-compile - (load "ange-ftp" 'noerror))) ;; end pacifier ;; This is used to avoid compilation warnings. When emacs/xemacs forms can diff --git a/lisp/ediff-merg.el b/lisp/ediff-merg.el index d9d19f17630..95f3efca93b 100644 --- a/lisp/ediff-merg.el +++ b/lisp/ediff-merg.el @@ -37,9 +37,9 @@ (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-util) - (load "ediff-util.el" nil nil 'nosuffix)) + (load "ediff-util.el" nil t 'nosuffix)) )) ;; end pacifier diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el index 51502615cf7..97c05e3b3cb 100644 --- a/lisp/ediff-mult.el +++ b/lisp/ediff-mult.el @@ -115,9 +115,9 @@ (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-util) - (load "ediff-util.el" nil nil 'nosuffix)) + (load "ediff-util.el" nil t 'nosuffix)) )) ;; end pacifier diff --git a/lisp/ediff-ptch.el b/lisp/ediff-ptch.el index 2efa2ac3012..905a07c53df 100644 --- a/lisp/ediff-ptch.el +++ b/lisp/ediff-ptch.el @@ -43,11 +43,11 @@ (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-mult) - (load "ediff-mult.el" nil nil 'nosuffix)) + (load "ediff-mult.el" nil t 'nosuffix)) (or (featurep 'ediff) - (load "ediff.el" nil nil 'nosuffix)) + (load "ediff.el" nil t 'nosuffix)) )) ;; end pacifier diff --git a/lisp/ediff-util.el b/lisp/ediff-util.el index 2ed8f73a282..a642167474c 100644 --- a/lisp/ediff-util.el +++ b/lisp/ediff-util.el @@ -41,27 +41,23 @@ (defvar ediff-after-quit-hook-internal nil) -(and noninteractive - (eval-when-compile - (load "reporter" 'noerror))) - (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (provide 'ediff-util) ; to break recursive load cycle (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-help) - (load "ediff-help.el" nil nil 'nosuffix)) + (load "ediff-help.el" nil t 'nosuffix)) (or (featurep 'ediff-mult) - (load "ediff-mult.el" nil nil 'nosuffix)) + (load "ediff-mult.el" nil t 'nosuffix)) (or (featurep 'ediff-wind) - (load "ediff-wind.el" nil nil 'nosuffix)) + (load "ediff-wind.el" nil t 'nosuffix)) (or (featurep 'ediff-diff) - (load "ediff-diff.el" nil nil 'nosuffix)) + (load "ediff-diff.el" nil t 'nosuffix)) (or (featurep 'ediff-merg) - (load "ediff-merg.el" nil nil 'nosuffix)) + (load "ediff-merg.el" nil t 'nosuffix)) (or (featurep 'ediff) - (load "ediff.el" nil nil 'nosuffix)) + (load "ediff.el" nil t 'nosuffix)) (or (featurep 'ediff-tbar) (featurep 'emacs) (load "ediff-tbar.el" 'noerror nil 'nosuffix)) @@ -400,6 +396,9 @@ to invocation.") (setq ediff-error-buffer (get-buffer-create (ediff-unique-buffer-name "*ediff-errors" "*"))) + (with-current-buffer ediff-error-buffer + (setq buffer-undo-list t)) + (ediff-with-current-buffer buffer-A (ediff-strip-mode-line-format)) (ediff-with-current-buffer buffer-B (ediff-strip-mode-line-format)) (if ediff-3way-job @@ -2818,6 +2817,9 @@ up an appropriate window config." "To resume, type M-x eregistry and select the desired Ediff session")) +;; ediff-barf-if-not-control-buffer ensures only called from ediff. +(declare-function ediff-version "ediff" ()) + (defun ediff-status-info () "Show the names of the buffers or files being operated on by Ediff. Hit \\[ediff-recenter] to reset the windows afterward." diff --git a/lisp/ediff-vers.el b/lisp/ediff-vers.el index 293acc5a854..0fd06176b46 100644 --- a/lisp/ediff-vers.el +++ b/lisp/ediff-vers.el @@ -41,7 +41,7 @@ (load "rcs" 'noerror) ;; (load "vc" 'noerror) ; this sometimes causes compiler error (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) ))) ;; end pacifier diff --git a/lisp/ediff-wind.el b/lisp/ediff-wind.el index 8b72a673d17..e13d89ac6eb 100644 --- a/lisp/ediff-wind.el +++ b/lisp/ediff-wind.el @@ -43,11 +43,11 @@ (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-util) - (load "ediff-util.el" nil nil 'nosuffix)) + (load "ediff-util.el" nil t 'nosuffix)) (or (featurep 'ediff-help) - (load "ediff-help.el" nil nil 'nosuffix)) + (load "ediff-help.el" nil t 'nosuffix)) (or (featurep 'ediff-tbar) (featurep 'emacs) (load "ediff-tbar.el" 'noerror nil 'nosuffix)) @@ -77,7 +77,7 @@ Ediff provides a choice of three functions: `ediff-setup-windows-plain', for doing everything in one frame, `ediff-setup-windows-multiframe', which sets the control panel in a separate frame, and `ediff-setup-windows-automatic' (the default), which chooses an appropriate -behaviour based on the current window system. If the multiframe function +behavior based on the current window system. If the multiframe function detects that one of the buffers A/B is seen in some other frame, it will try to keep that buffer in that frame. @@ -147,6 +147,10 @@ In this case, Ediff will use those frames to display these buffers." :type 'function :group 'ediff-window) +;; Definitions hidden from the compiler by compat wrappers. +(declare-function ediff-display-pixel-width "ediff-init") +(declare-function ediff-display-pixel-height "ediff-init") + (defconst ediff-control-frame-parameters (list '(name . "Ediff") diff --git a/lisp/ediff.el b/lisp/ediff.el index a2aafc90292..a53b93aee5b 100644 --- a/lisp/ediff.el +++ b/lisp/ediff.el @@ -113,22 +113,20 @@ (defvar ediff-last-dir-patch) (defvar ediff-patch-default-directory) -(and noninteractive - (eval-when-compile - (load-library "dired") - (load-library "info") - (load "pcl-cvs" 'noerror))) + (eval-when-compile + (and noninteractive + (load "dired" nil t)) (let ((load-path (cons (expand-file-name ".") load-path))) (provide 'ediff) ; to break recursive load cycle (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) + (load "ediff-init.el" nil t 'nosuffix)) (or (featurep 'ediff-mult) - (load "ediff-mult.el" nil nil 'nosuffix)) + (load "ediff-mult.el" nil t 'nosuffix)) (or (featurep 'ediff-ptch) - (load "ediff-ptch.el" nil nil 'nosuffix)) + (load "ediff-ptch.el" nil t 'nosuffix)) (or (featurep 'ediff-vers) - (load "ediff-vers.el" nil nil 'nosuffix)) + (load "ediff-vers.el" nil t 'nosuffix)) )) ;; end pacifier @@ -363,6 +361,7 @@ (list (cons 'ediff-job-name job-name)) merge-buffer-file))) +(declare-function diff-latest-backup-file "diff" (fn)) ;;;###autoload (defalias 'ediff 'ediff-files) @@ -1424,9 +1423,11 @@ Uses `vc.el' or `rcs.el' depending on `ediff-version-control-package'." When called interactively, displays the version." (interactive) (if (interactive-p) - (message (ediff-version)) + (message "%s" (ediff-version)) (format "Ediff %s of %s" ediff-version ediff-date))) +;; info is run first, and will autoload info.el. +(declare-function Info-goto-node "info" (nodename &optional fork)) ;;;###autoload (defun ediff-documentation (&optional node) diff --git a/lisp/emacs-lisp/authors.el b/lisp/emacs-lisp/authors.el index 50d2f41f7ae..486a02d2c6b 100644 --- a/lisp/emacs-lisp/authors.el +++ b/lisp/emacs-lisp/authors.el @@ -418,24 +418,6 @@ author and what he did in hash table TABLE. See the description of (nconc entry (list (cons action 1)))))))) -(defun authors-process-lines (program &rest args) - "Execute PROGRAM with ARGS, returning its output as a list of lines. -Signal an error if the program returns with a non-zero exit status." - (with-temp-buffer - (let ((status (apply 'call-process program nil (current-buffer) nil args))) - (unless (eq status 0) - (error "%s exited with status %s" program status)) - (goto-char (point-min)) - (let (lines) - (while (not (eobp)) - (setq lines (cons (buffer-substring-no-properties - (line-beginning-position) - (line-end-position)) - lines)) - (forward-line 1)) - (nreverse lines))))) - - (defun authors-canonical-author-name (author) "Return a canonicalized form of AUTHOR, an author name. If AUTHOR has an alias, use that. Remove email addresses. Capitalize @@ -605,7 +587,7 @@ Result is a buffer *Authors* containing authorship information, and a buffer *Authors Errors* containing references to unknown files." (interactive "DEmacs source directory: ") (setq root (expand-file-name root)) - (let ((logs (authors-process-lines "find" root "-name" "ChangeLog*")) + (let ((logs (process-lines "find" root "-name" "ChangeLog*")) (table (make-hash-table :test 'equal)) (buffer-name "*Authors*") authors-checked-files-alist @@ -617,7 +599,7 @@ buffer *Authors Errors* containing references to unknown files." (when (string-match "ChangeLog\\(.[0-9]+\\)?$" log) (message "Scanning %s..." log) (authors-scan-change-log log table))) - (let ((els (authors-process-lines "find" root "-name" "*.el"))) + (let ((els (process-lines "find" root "-name" "*.el"))) (dolist (file els) (message "Scanning %s..." file) (authors-scan-el file table))) diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el index a2a929d9601..4940e2fd8c6 100644 --- a/lisp/emacs-lisp/backquote.el +++ b/lisp/emacs-lisp/backquote.el @@ -92,7 +92,7 @@ For example (backquote-list* 'a 'b 'c) => (a b . c)" "Symbol used to represent a splice inside a backquote.") ;;;###autoload -(defmacro backquote (arg) +(defmacro backquote (structure) "Argument STRUCTURE describes a template to build. The whole structure acts as if it were quoted except for certain @@ -106,7 +106,7 @@ b => (ba bb bc) ; assume b has this value `(a ,@b c) => (a ba bb bc c) ; splice in the value of b Vectors work just like lists. Nested backquotes are permitted." - (cdr (backquote-process arg))) + (cdr (backquote-process structure))) ;; GNU Emacs has no reader macros diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index bc864aab490..eb8c80af145 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -185,6 +185,7 @@ ;;; Code: (require 'bytecomp) +(eval-when-compile (require 'cl)) (defun byte-compile-log-lap-1 (format &rest args) (if (aref byte-code-vector 0) @@ -276,6 +277,8 @@ ;; Isn't it an error for `string' not to be unibyte?? --stef (if (fboundp 'string-as-unibyte) (setq string (string-as-unibyte string))) + ;; `byte-compile-splice-in-already-compiled-code' + ;; takes care of inlining the body. (cons `(lambda ,(aref fn 0) (byte-code ,string ,(aref fn 2) ,(aref fn 3))) (cdr form))) @@ -625,13 +628,24 @@ ;; ;; It is now safe to optimize code such that it introduces new bindings. -;; I'd like this to be a defsubst, but let's not be self-referential... -(defmacro byte-compile-trueconstp (form) - ;; Returns non-nil if FORM is a non-nil constant. - `(cond ((consp ,form) (eq (car ,form) 'quote)) - ((not (symbolp ,form))) - ((eq ,form t)) - ((keywordp ,form)))) +(defsubst byte-compile-trueconstp (form) + "Return non-nil if FORM always evaluates to a non-nil value." + (cond ((consp form) + (case (car form) + (quote (cadr form)) + (progn (byte-compile-trueconstp (car (last (cdr form))))))) + ((not (symbolp form))) + ((eq form t)) + ((keywordp form)))) + +(defsubst byte-compile-nilconstp (form) + "Return non-nil if FORM always evaluates to a nil value." + (cond ((consp form) + (case (car form) + (quote (null (cadr form))) + (progn (byte-compile-nilconstp (car (last (cdr form))))))) + ((not (symbolp form)) nil) + ((null form)))) ;; If the function is being called with constant numeric args, ;; evaluate as much as possible at compile-time. This optimizer @@ -990,17 +1004,17 @@ (setq rest form) (while (setq rest (cdr rest)) (cond ((byte-compile-trueconstp (car-safe (car rest))) - (cond ((eq rest (cdr form)) - (setq form - (if (cdr (car rest)) - (if (cdr (cdr (car rest))) - (cons 'progn (cdr (car rest))) - (nth 1 (car rest))) - (car (car rest))))) + ;; This branch will always be taken: kill the subsequent ones. + (cond ((eq rest (cdr form)) ;First branch of `cond'. + (setq form `(progn ,@(car rest)))) ((cdr rest) (setq form (copy-sequence form)) (setcdr (memq (car rest) form) nil))) - (setq rest nil))))) + (setq rest nil)) + ((and (consp (car rest)) + (byte-compile-nilconstp (caar rest))) + ;; This branch will never be taken: kill its body. + (setcdr (car rest) nil))))) ;; ;; Turn (cond (( )) ... ) into (or (cond ... )) (if (eq 'cond (car-safe form)) @@ -1031,11 +1045,9 @@ (byte-optimize-if `(if ,(car (last clause)) ,@(nthcdr 2 form))))))) ((byte-compile-trueconstp clause) - (nth 2 form)) - ((null clause) - (if (nthcdr 4 form) - (cons 'progn (nthcdr 3 form)) - (nth 3 form))) + `(progn ,clause ,(nth 2 form))) + ((byte-compile-nilconstp clause) + `(progn ,clause ,@(nthcdr 3 form))) ((nth 2 form) (if (equal '(nil) (nthcdr 3 form)) (list 'if clause (nth 2 form)) diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 27ee27eda92..82866a07ff7 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -1053,6 +1053,9 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'." (defun byte-compile-warning-series (&rest ignore) nil) +;; (compile-mode) will cause this to be loaded. +(declare-function compilation-forget-errors "compile" ()) + ;; Log the start of a file in *Compile-Log*, and mark it as done. ;; Return the position of the start of the page in the log buffer. ;; But do nothing in batch mode. @@ -1258,7 +1261,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'." (byte-compile-fdefinition (car form) t))) (sig (if (and def (not (eq def t))) (byte-compile-arglist-signature - (if (eq 'lambda (car-safe def)) + (if (memq (car-safe def) '(declared lambda)) (nth 1 def) (if (byte-code-function-p def) (aref def 0) @@ -2274,18 +2277,17 @@ list that represents a doc string reference. (byte-compile-nogroup-warn form)) (when (byte-compile-warning-enabled-p 'free-vars) (push (nth 1 (nth 1 form)) byte-compile-bound-variables)) + ;; Don't compile the expression because it may be displayed to the user. + ;; (when (eq (car-safe (nth 2 form)) 'quote) + ;; ;; (nth 2 form) is meant to evaluate to an expression, so if we have the + ;; ;; final value already, we can byte-compile it. + ;; (setcar (cdr (nth 2 form)) + ;; (byte-compile-top-level (cadr (nth 2 form)) nil 'file))) (let ((tail (nthcdr 4 form))) (while tail - ;; If there are any (function (lambda ...)) expressions, compile - ;; those functions. - (if (and (consp (car tail)) - (eq (car (car tail)) 'function) - (consp (nth 1 (car tail)))) - (setcar tail (byte-compile-lambda (nth 1 (car tail)))) - ;; Likewise for a bare lambda. - (if (and (consp (car tail)) - (eq (car (car tail)) 'lambda)) - (setcar tail (byte-compile-lambda (car tail))))) + (unless (keywordp (car tail)) ;No point optimizing keywords. + ;; Compile the keyword arguments. + (setcar tail (byte-compile-top-level (car tail) nil 'file))) (setq tail (cdr tail)))) form) @@ -2817,6 +2819,20 @@ If FORM is a lambda or a macro, byte-compile it as a function." (cdr body)) (body (list body)))) + +(put 'declare-function 'byte-hunk-handler 'byte-compile-declare-function) +(defun byte-compile-declare-function (form) + (push (cons (nth 1 form) + (if (and (> (length form) 3) + (listp (nth 3 form))) + (list 'declared (nth 3 form)) + t)) ; arglist not specified + byte-compile-function-environment) + ;; We are stating that it _will_ be defined at runtime. + (setq byte-compile-noruntime-functions + (delq (nth 1 form) byte-compile-noruntime-functions)) + nil) + ;; This is the recursive entry point for compiling each subform of an ;; expression. @@ -3496,12 +3512,12 @@ That command is designed for interactive use only" fn)) ;; Return the list of items in CONDITION-PARAM that match PRED-LIST. ;; Only return items that are not in ONLY-IF-NOT-PRESENT. -(defun byte-compile-find-bound-condition (condition-param - pred-list +(defun byte-compile-find-bound-condition (condition-param + pred-list &optional only-if-not-present) (let ((result nil) (nth-one nil) - (cond-list + (cond-list (if (memq (car-safe condition-param) pred-list) ;; The condition appears by itself. (list condition-param) @@ -3509,7 +3525,7 @@ That command is designed for interactive use only" fn)) ;; `and' arguments. (when (eq 'and (car-safe condition-param)) (cdr condition-param))))) - + (dolist (crt cond-list) (when (and (memq (car-safe crt) pred-list) (eq 'quote (car-safe (setq nth-one (nth 1 crt)))) @@ -3531,10 +3547,10 @@ being undefined will be suppressed. If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs), that suppresses all warnings during execution of BODY." (declare (indent 1) (debug t)) - `(let* ((fbound-list (byte-compile-find-bound-condition - ,condition (list 'fboundp) + `(let* ((fbound-list (byte-compile-find-bound-condition + ,condition (list 'fboundp) byte-compile-unresolved-functions)) - (bound-list (byte-compile-find-bound-condition + (bound-list (byte-compile-find-bound-condition ,condition (list 'boundp 'default-boundp))) ;; Maybe add to the bound list. (byte-compile-bound-variables @@ -4264,7 +4280,7 @@ Must be used only with `-batch', and kills Emacs on completion. For example, invoke `emacs -batch -f batch-byte-recompile-directory .'. Optional argument ARG is passed as second argument ARG to -`batch-recompile-directory'; see there for its possible values +`byte-recompile-directory'; see there for its possible values and corresponding effects." ;; command-line-args-left is what is left of the command line (startup.el) (defvar command-line-args-left) ;Avoid 'free variable' warning diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el new file mode 100644 index 00000000000..9fc8a9e61e7 --- /dev/null +++ b/lisp/emacs-lisp/check-declare.el @@ -0,0 +1,311 @@ +;;; check-declare.el --- Check declare-function statements + +;; Copyright (C) 2007 Free Software Foundation, Inc. + +;; Author: Glenn Morris +;; Keywords: lisp, tools, maint + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; The byte-compiler often warns about undefined functions that you +;; know will actually be defined when it matters. The `declare-function' +;; statement allows you to suppress these warnings. This package +;; checks that all such statements in a file or directory are accurate. +;; The entry points are `check-declare-file' and `check-declare-directory'. + +;; For more information, see Info node `elisp(Declaring Functions)'. + +;;; TODO: + +;;; Code: + +(defconst check-declare-warning-buffer "*Check Declarations Warnings*" + "Name of buffer used to display any `check-declare' warnings.") + +(defun check-declare-locate (file basefile) + "Return the full path of FILE. +Expands files with a \".c\" extension relative to the Emacs +\"src/\" directory. Otherwise, `locate-library' searches for FILE. +If that fails, expands FILE relative to BASEFILE's directory part. +The returned file might not exist. If FILE has an \"ext:\" prefix, so does +the result." + (let ((ext (string-match "^ext:" file)) + tfile) + (if ext + (setq file (substring file 4))) + (setq file + (if (string-equal "c" (file-name-extension file)) + (expand-file-name file (expand-file-name "src" source-directory)) + (if (setq tfile (locate-library (file-name-nondirectory file))) + (progn + (setq tfile + (replace-regexp-in-string "\\.elc\\'" ".el" tfile)) + (if (and (not (file-exists-p tfile)) + (file-exists-p (concat tfile ".gz"))) + (concat tfile ".gz") + tfile)) + (setq tfile (expand-file-name file + (file-name-directory basefile))) + (if (or (file-exists-p tfile) + (string-match "\\.el\\'" tfile)) + tfile + (concat tfile ".el"))))) + (if ext (concat "ext:" file) + file))) + +(defun check-declare-scan (file) + "Scan FILE for `declare-function' calls. +Return a list with elements of the form (FNFILE FN ARGLIST FILEONLY), +where only the first two elements need be present. This claims that FNFILE +defines FN, with ARGLIST. FILEONLY non-nil means only check that FNFILE +exists, not that it defines FN. This is for function definitions that we +don't know how to recognize (e.g. some macros)." + (let ((m (format "Scanning %s..." file)) + alist fnfile fn arglist fileonly) + (message "%s" m) + (with-temp-buffer + (insert-file-contents file) + (while (re-search-forward + "^[ \t]*(declare-function[ \t]+\\(\\S-+\\)[ \t]+\ +\"\\(\\S-+\\)\"" nil t) + (setq fn (match-string 1) + fnfile (match-string 2) + fnfile (check-declare-locate fnfile (expand-file-name file)) + arglist (progn + (skip-chars-forward " \t\n") + ;; Use `t' to distinguish no arglist + ;; specified from an empty one. + (if (looking-at "\\((\\|nil\\|t\\)") + (read (current-buffer)) + t)) + fileonly (progn + (skip-chars-forward " \t\n") + (if (looking-at "\\(t\\|'\\sw+\\)") + (match-string 1))) + alist (cons (list fnfile fn arglist fileonly) alist)))) + (message "%sdone" m) + alist)) + +(defun check-declare-errmsg (errlist &optional full) + "Return a string with the number of errors in ERRLIST, if any. +Normally just counts the number of elements in ERRLIST. +With optional argument FULL, sums the number of elements in each element." + (if errlist + (let ((l (length errlist))) + (when full + (setq l 0) + (dolist (e errlist) + (setq l (1+ l)))) + (format "%d problem%s found" l (if (= l 1) "" "s"))) + "OK")) + +(autoload 'byte-compile-arglist-signature "bytecomp") + +(defun check-declare-verify (fnfile fnlist) + "Check that FNFILE contains function definitions matching FNLIST. +Each element of FNLIST has the form (FILE FN ARGLIST FILEONLY), where +only the first two elements need be present. This means FILE claimed FN +was defined in FNFILE with the specified ARGLIST. FILEONLY non-nil means +to only check that FNFILE exists, not that it actually defines FN. + +Returns nil if all claims are found to be true, otherwise a list +of errors with elements of the form \(FILE FN TYPE), where TYPE +is a string giving details of the error." + (let ((m (format "Checking %s..." fnfile)) + (cflag (string-equal "c" (file-name-extension fnfile))) + (ext (string-match "^ext:" fnfile)) + re fn sig siglist arglist type errlist minargs maxargs) + (message "%s" m) + (if ext + (setq fnfile (substring fnfile 4))) + (if (file-exists-p fnfile) + (with-temp-buffer + (insert-file-contents fnfile) + ;; defsubst's don't _have_ to be known at compile time. + (setq re (format (if cflag + "^[ \t]*\\(DEFUN\\)[ \t]*([ \t]*\"%s\"" + "^[ \t]*(\\(fset[ \t]+'\\|def\\(?:un\\|subst\\|\ +ine-\\(?:derived\\|generic\\|\\(?:global\\(?:ized\\)?-\\)?minor\\)-mode\ +\\|\\(?:ine-obsolete-function-\\)?alias[ \t]+'\\)\\)\ +\[ \t]*%s\\([ \t;]+\\|$\\)") + (regexp-opt (mapcar 'cadr fnlist) t))) + (while (re-search-forward re nil t) + (skip-chars-forward " \t\n") + (setq fn (match-string 2) + type (match-string 1) + ;; (min . max) for a fixed number of arguments, or + ;; arglists with optional elements. + ;; (min) for arglists with &rest. + ;; sig = 'err means we could not find an arglist. + sig (cond (cflag + (or + (when (re-search-forward "," nil t 3) + (skip-chars-forward " \t\n") + ;; Assuming minargs and maxargs on same line. + (when (looking-at "\\([0-9]+\\)[ \t]*,[ \t]*\ +\\([0-9]+\\|MANY\\|UNEVALLED\\)") + (setq minargs (string-to-number + (match-string 1)) + maxargs (match-string 2)) + (cons minargs (unless (string-match "[^0-9]" + maxargs) + (string-to-number + maxargs))))) + 'err)) + ((string-match + "\\`define-\\(derived\\|generic\\)-mode\\'" + type) + '(0 . 0)) + ((string-match + "\\`define\\(-global\\(ized\\)?\\)?-minor-mode\\'" + type) + '(0 . 1)) + ;; Prompt to update. + ((string-match + "\\`define-obsolete-function-alias\\>" + type) + 'obsolete) + ;; Can't easily check arguments in these cases. + ((string-match "\\`\\(defalias\\|fset\\)\\>" type) + t) + ((looking-at "\\((\\|nil\\)") + (byte-compile-arglist-signature + (read (current-buffer)))) + (t + 'err)) + ;; alist of functions and arglist signatures. + siglist (cons (cons fn sig) siglist))))) + (dolist (e fnlist) + (setq arglist (nth 2 e) + type + (if (not re) + "file not found" + (if (not (setq sig (assoc (cadr e) siglist))) + (unless (nth 3 e) ; fileonly + "function not found") + (setq sig (cdr sig)) + (cond ((eq sig 'obsolete) ; check even when no arglist specified + "obsolete alias") + ;; arglist t means no arglist specified, as + ;; opposed to an empty arglist. + ((eq arglist t) nil) + ((eq sig t) nil) ; eg defalias - can't check arguments + ((eq sig 'err) + "arglist not found") ; internal error + ((not (equal (byte-compile-arglist-signature + arglist) + sig)) + "arglist mismatch"))))) + (when type + (setq errlist (cons (list (car e) (cadr e) type) errlist)))) + (message "%s%s" m + (if (or re (not ext)) + (check-declare-errmsg errlist) + (progn + (setq errlist nil) + "skipping external file"))) + errlist)) + +(defun check-declare-sort (alist) + "Sort a list with elements FILE (FNFILE ...). +Returned list has elements FNFILE (FILE ...)." + (let (file fnfile rest sort a) + (dolist (e alist) + (setq file (car e)) + (dolist (f (cdr e)) + (setq fnfile (car f) + rest (cdr f)) + (if (setq a (assoc fnfile sort)) + (setcdr a (append (cdr a) (list (cons file rest)))) + (setq sort (cons (list fnfile (cons file rest)) sort))))) + sort)) + +(defun check-declare-warn (file fn fnfile type) + "Warn that FILE made a false claim about FN in FNFILE. +TYPE is a string giving the nature of the error. Warning is displayed in +`check-declare-warning-buffer'." + (display-warning 'check-declare + (format "%s said `%s' was defined in %s: %s" + (file-name-nondirectory file) fn + (file-name-nondirectory fnfile) + type) + nil check-declare-warning-buffer)) + +(defun check-declare-files (&rest files) + "Check veracity of all `declare-function' statements in FILES. +Return a list of any errors found." + (let (alist err errlist) + (dolist (file files) + (setq alist (cons (cons file (check-declare-scan file)) alist))) + ;; Sort so that things are ordered by the files supposed to + ;; contain the defuns. + (dolist (e (check-declare-sort alist)) + (if (setq err (check-declare-verify (car e) (cdr e))) + (setq errlist (cons (cons (car e) err) errlist)))) + (if (get-buffer check-declare-warning-buffer) + (kill-buffer check-declare-warning-buffer)) + ;; Sort back again so that errors are ordered by the files + ;; containing the declare-function statements. + (dolist (e (check-declare-sort errlist)) + (dolist (f (cdr e)) + (check-declare-warn (car e) (cadr f) (car f) (nth 2 f)))) + errlist)) + +;;;###autoload +(defun check-declare-file (file) + "Check veracity of all `declare-function' statements in FILE. +See `check-declare-directory' for more information." + (interactive "fFile to check: ") + (or (file-exists-p file) + (error "File `%s' not found" file)) + (let ((m (format "Checking %s..." file)) + errlist) + (message "%s" m) + (setq errlist (check-declare-files file)) + (message "%s%s" m (check-declare-errmsg errlist)) + errlist)) + +;;;###autoload +(defun check-declare-directory (root) + "Check veracity of all `declare-function' statements under directory ROOT. +Returns non-nil if any false statements are found. For this to +work correctly, the statements must adhere to the format +described in the documentation of `declare-function'." + (interactive "DDirectory to check: ") + (or (file-directory-p (setq root (expand-file-name root))) + (error "Directory `%s' not found" root)) + (let ((m "Checking `declare-function' statements...") + (m2 "Finding files with declarations...") + errlist files) + (message "%s" m) + (message "%s" m2) + (setq files (process-lines "find" root "-name" "*.el" + "-exec" "grep" "-l" + "^[ ]*(declare-function" "{}" ";")) + (message "%s%d found" m2 (length files)) + (when files + (setq errlist (apply 'check-declare-files files)) + (message "%s%s" m (check-declare-errmsg errlist t)) + errlist))) + +(provide 'check-declare) + +;; arch-tag: a4d6cdc4-deb7-4502-b327-0e4ef3d82d96 +;;; check-declare.el ends here. diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el index b802d8acd43..d6c23de0be8 100644 --- a/lisp/emacs-lisp/easymenu.el +++ b/lisp/emacs-lisp/easymenu.el @@ -116,10 +116,15 @@ whenever this expression's value is non-nil. INCLUDE is an expression; this item is only visible if this expression has a non-nil value. `:included' is an alias for `:visible'. + :label FORM + +FORM is an expression that will be dynamically evaluated and whose +value will be used for the menu entry's text label (the default is NAME). + :suffix FORM FORM is an expression that will be dynamically evaluated and whose -value will be concatenated to the menu entry's NAME. +value will be concatenated to the menu entry's label. :style STYLE diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index b3c7c339030..24e26827f7c 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -149,10 +149,14 @@ See the functions `find-function' and `find-variable'." ;; the same name. (if (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library) (setq library (replace-match "" t t library))) - (or (locate-file library - (or find-function-source-path load-path) - (append (find-library-suffixes) load-file-rep-suffixes)) - (error "Can't find library %s" library))) + (or + (locate-file library + (or find-function-source-path load-path) + (find-library-suffixes)) + (locate-file library + (or find-function-source-path load-path) + load-file-rep-suffixes) + (error "Can't find library %s" library))) (defvar find-function-C-source-directory (let ((dir (expand-file-name "src" source-directory))) diff --git a/lisp/emacs-lisp/gulp.el b/lisp/emacs-lisp/gulp.el index 9e0795c8822..5ff2b8f564c 100644 --- a/lisp/emacs-lisp/gulp.el +++ b/lisp/emacs-lisp/gulp.el @@ -78,6 +78,9 @@ Thanks.") :type 'string :group 'gulp) +(declare-function mail-subject "sendmail" ()) +(declare-function mail-send "sendmail" ()) + (defun gulp-send-requests (dir &optional time) "Send requests for updates to the authors of Lisp packages in directory DIR. For each maintainer, the message consists of `gulp-request-header', diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el index 788be284cda..65bbade816e 100644 --- a/lisp/emacs-lisp/lisp.el +++ b/lisp/emacs-lisp/lisp.el @@ -175,9 +175,10 @@ normal recipe (see `beginning-of-defun'). Major modes can define this if defining `defun-prompt-regexp' is not sufficient to handle the mode's needs. -The function (of no args) should go to the line on which the current -defun starts, and return non-nil, or should return nil if it can't -find the beginning.") +The function takes the same argument as `beginning-of-defun' and should +behave similarly, returning non-nil if it found the beginning of a defun. +Ideally it should move to a point right before an open-paren which encloses +the body of the defun.") (defun beginning-of-defun (&optional arg) "Move backward to the beginning of a defun. @@ -218,12 +219,22 @@ is called as a function to find the defun's beginning." (unless arg (setq arg 1)) (cond (beginning-of-defun-function - (if (> arg 0) - (dotimes (i arg) - (funcall beginning-of-defun-function)) - ;; Better not call end-of-defun-function directly, in case - ;; it's not defined. - (end-of-defun (- arg)))) + (condition-case nil + (funcall beginning-of-defun-function arg) + ;; We used to define beginning-of-defun-function as taking no argument + ;; but that makes it impossible to implement correct forward motion: + ;; we used to use end-of-defun for that, but it's not supposed to do + ;; the same thing (it moves to the end of a defun not to the beginning + ;; of the next). + ;; In case the beginning-of-defun-function uses the old calling + ;; convention, fallback on the old implementation. + (wrong-number-of-arguments + (if (> arg 0) + (dotimes (i arg) + (funcall beginning-of-defun-function)) + ;; Better not call end-of-defun-function directly, in case + ;; it's not defined. + (end-of-defun (- arg)))))) ((or defun-prompt-regexp open-paren-in-column-0-is-defun-start) (and (< arg 0) (not (eobp)) (forward-char 1)) @@ -286,11 +297,11 @@ is called as a function to find the defun's beginning." (goto-char (if arg-+ve floor ceiling)) nil)))))))) -(defvar end-of-defun-function nil - "If non-nil, function for function `end-of-defun' to call. -This is used to find the end of the defun instead of using the normal -recipe (see `end-of-defun'). Major modes can define this if the -normal method is not appropriate.") +(defvar end-of-defun-function #'forward-sexp + "Function for `end-of-defun' to call. +This is used to find the end of the defun. +It is called with no argument, right after calling `beginning-of-defun-raw'. +So the function can assume that point is at the beginning of the defun body.") (defun buffer-end (arg) "Return the \"far end\" position of the buffer, in direction ARG. @@ -315,45 +326,38 @@ is called as a function to find the defun's end." (and transient-mark-mode mark-active) (push-mark)) (if (or (null arg) (= arg 0)) (setq arg 1)) - (if end-of-defun-function - (if (> arg 0) - (dotimes (i arg) - (funcall end-of-defun-function)) - ;; Better not call beginning-of-defun-function - ;; directly, in case it's not defined. - (beginning-of-defun (- arg))) - (let ((first t)) - (while (and (> arg 0) (< (point) (point-max))) - (let ((pos (point))) - (while (progn - (if (and first - (progn - (end-of-line 1) - (beginning-of-defun-raw 1))) - nil - (or (bobp) (forward-char -1)) - (beginning-of-defun-raw -1)) - (setq first nil) - (forward-list 1) - (skip-chars-forward " \t") - (if (looking-at "\\s<\\|\n") - (forward-line 1)) - (<= (point) pos)))) - (setq arg (1- arg))) - (while (< arg 0) - (let ((pos (point))) - (beginning-of-defun-raw 1) - (forward-sexp 1) - (forward-line 1) - (if (>= (point) pos) - (if (beginning-of-defun-raw 2) - (progn - (forward-list 1) - (skip-chars-forward " \t") - (if (looking-at "\\s<\\|\n") - (forward-line 1))) - (goto-char (point-min))))) - (setq arg (1+ arg)))))) + (while (> arg 0) + (let ((pos (point))) + (end-of-line 1) + (beginning-of-defun-raw 1) + (while (unless (eobp) + (funcall end-of-defun-function) + (skip-chars-forward " \t") + (if (looking-at "\\s<\\|\n") + (forward-line 1)) + ;; If we started after the end of the previous function, then + ;; try again with the next one. + (when (<= (point) pos) + (or (bobp) (forward-char -1)) + (beginning-of-defun-raw -1) + 'try-again)))) + (setq arg (1- arg))) + (while (< arg 0) + (let ((pos (point))) + (while (unless (bobp) + (beginning-of-line 1) + (beginning-of-defun-raw 1) + (let ((beg (point))) + (funcall end-of-defun-function) + (skip-chars-forward " \t") + (if (looking-at "\\s<\\|\n") + (forward-line 1)) + ;; If we started from within the function just found, then + ;; try again with the previous one. + (when (>= (point) pos) + (goto-char beg) + 'try-again))))) + (setq arg (1+ arg)))) (defun mark-defun (&optional allow-extend) "Put mark at end of this defun, point at beginning. @@ -562,12 +566,47 @@ character." ;; "Unbalanced parentheses", but those may not be so ;; accurate/helpful, e.g. quotes may actually be ;; mismatched. - (error "Unmatched bracket or quote")) - (error (cond ((eq 'scan-error (car data)) - (goto-char (nth 2 data)) - (error "Unmatched bracket or quote")) - (t (signal (car data) (cdr data))))))) + (error "Unmatched bracket or quote")))) +(defun field-complete (table &optional predicate) + (let* ((pattern (field-string-no-properties)) + (completion (try-completion pattern table predicate))) + (cond ((eq completion t)) + ((null completion) + (message "Can't find completion for \"%s\"" pattern) + (ding)) + ((not (string= pattern completion)) + (delete-region (field-beginning) (field-end)) + (insert completion) + ;; Don't leave around a completions buffer that's out of date. + (let ((win (get-buffer-window "*Completions*" 0))) + (if win (with-selected-window win (bury-buffer))))) + (t + (let ((minibuf-is-in-use + (eq (minibuffer-window) (selected-window)))) + (unless minibuf-is-in-use + (message "Making completion list...")) + (let ((list (all-completions pattern table predicate))) + (setq list (sort list 'string<)) + (or (eq predicate 'fboundp) + (let (new) + (while list + (setq new (cons (if (fboundp (intern (car list))) + (list (car list) " ") + (car list)) + new)) + (setq list (cdr list))) + (setq list (nreverse new)))) + (if (> (length list) 1) + (with-output-to-temp-buffer "*Completions*" + (display-completion-list list pattern)) + ;; Don't leave around a completions buffer that's + ;; out of date. + (let ((win (get-buffer-window "*Completions*" 0))) + (if win (with-selected-window win (bury-buffer)))))) + (unless minibuf-is-in-use + (message "Making completion list...%s" "done"))))))) + (defun lisp-complete-symbol (&optional predicate) "Perform completion on Lisp symbol preceding point. Compare that symbol against the known Lisp symbols. diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el index 93cf434292a..d9ce48e23a6 100644 --- a/lisp/emacs-lisp/ring.el +++ b/lisp/emacs-lisp/ring.el @@ -51,8 +51,8 @@ (defun ring-p (x) "Return t if X is a ring; nil otherwise." (and (consp x) (integerp (car x)) - (consp (cdr x)) (integerp (car (cdr x))) - (vectorp (cdr (cdr x))))) + (consp (cdr x)) (integerp (cadr x)) + (vectorp (cddr x)))) ;;;###autoload (defun make-ring (size) @@ -60,11 +60,11 @@ (cons 0 (cons 0 (make-vector size nil)))) (defun ring-insert-at-beginning (ring item) - "Add to RING the item ITEM. Add it at the front, as the oldest item." - (let* ((vec (cdr (cdr ring))) + "Add to RING the item ITEM, at the front, as the oldest item." + (let* ((vec (cddr ring)) (veclen (length vec)) (hd (car ring)) - (ln (car (cdr ring)))) + (ln (cadr ring))) (setq ln (min veclen (1+ ln)) hd (ring-minus1 hd veclen)) (aset vec hd item) @@ -73,16 +73,16 @@ (defun ring-plus1 (index veclen) "Return INDEX+1, with wraparound." - (let ((new-index (+ index 1))) + (let ((new-index (1+ index))) (if (= new-index veclen) 0 new-index))) (defun ring-minus1 (index veclen) "Return INDEX-1, with wraparound." - (- (if (= 0 index) veclen index) 1)) + (- (if (zerop index) veclen index) 1)) (defun ring-length (ring) "Return the number of elements in the RING." - (car (cdr ring))) + (cadr ring)) (defun ring-index (index head ringlen veclen) "Convert nominal ring index INDEX to an internal index. @@ -95,26 +95,26 @@ VECLEN is the size of the vector in the ring." (defun ring-empty-p (ring) "Return t if RING is empty; nil otherwise." - (zerop (car (cdr ring)))) + (zerop (cadr ring))) (defun ring-size (ring) "Return the size of RING, the maximum number of elements it can contain." - (length (cdr (cdr ring)))) + (length (cddr ring))) (defun ring-copy (ring) "Return a copy of RING." - (let* ((vec (cdr (cdr ring))) - (hd (car ring)) - (ln (car (cdr ring)))) + (let ((vec (cddr ring)) + (hd (car ring)) + (ln (cadr ring))) (cons hd (cons ln (copy-sequence vec))))) (defun ring-insert (ring item) "Insert onto ring RING the item ITEM, as the newest (last) item. If the ring is full, dump the oldest item to make room." - (let* ((vec (cdr (cdr ring))) + (let* ((vec (cddr ring)) (veclen (length vec)) (hd (car ring)) - (ln (car (cdr ring)))) + (ln (cadr ring))) (prog1 (aset vec (mod (+ hd ln) veclen) item) (if (= ln veclen) @@ -128,13 +128,13 @@ numeric, remove the element indexed." (if (ring-empty-p ring) (error "Ring empty") (let* ((hd (car ring)) - (ln (car (cdr ring))) - (vec (cdr (cdr ring))) + (ln (cadr ring)) + (vec (cddr ring)) (veclen (length vec)) (tl (mod (1- (+ hd ln)) veclen)) oldelt) - (if (null index) - (setq index (1- ln))) + (when (null index) + (setq index (1- ln))) (setq index (ring-index index hd ln veclen)) (setq oldelt (aref vec index)) (while (/= index tl) @@ -152,7 +152,9 @@ INDEX need not be <= the ring length; the appropriate modulo operation will be performed." (if (ring-empty-p ring) (error "Accessing an empty ring") - (let* ((hd (car ring)) (ln (car (cdr ring))) (vec (cdr (cdr ring)))) + (let ((hd (car ring)) + (ln (cadr ring)) + (vec (cddr ring))) (aref vec (ring-index index hd ln (length vec)))))) (defun ring-elements (ring) @@ -165,15 +167,12 @@ will be performed." (push (aref vect (mod (+ start var) size)) lst)))) (defun ring-member (ring item) - "Return index of ITEM if on RING, else nil. Comparison via `equal'. -The index is 0-based." - (let ((ind 0) - (len (1- (ring-length ring))) - (memberp nil)) - (while (and (<= ind len) - (not (setq memberp (equal item (ring-ref ring ind))))) - (setq ind (1+ ind))) - (and memberp ind))) + "Return index of ITEM if on RING, else nil. +Comparison is done via `equal'. The index is 0-based." + (catch 'found + (dotimes (ind (ring-length ring) nil) + (when (equal item (ring-ref ring ind)) + (throw 'found ind))))) (defun ring-next (ring item) "Return the next item in the RING, after ITEM. @@ -190,12 +189,12 @@ Raise error if ITEM is not in the RING." (ring-ref ring (ring-minus1 curr-index (ring-length ring))))) (defun ring-insert+extend (ring item &optional grow-p) - "Like ring-insert, but if GROW-P is non-nil, then enlarge ring. + "Like `ring-insert', but if GROW-P is non-nil, then enlarge ring. Insert onto ring RING the item ITEM, as the newest (last) item. If the ring is full, behavior depends on GROW-P: If GROW-P is non-nil, enlarge the ring to accommodate the new item. If GROW-P is nil, dump the oldest item to make room for the new." - (let* ((vec (cdr (cdr ring))) + (let* ((vec (cddr ring)) (veclen (length vec)) (hd (car ring)) (ringlen (ring-length ring))) @@ -218,7 +217,8 @@ If the RING is full, behavior depends on GROW-P: If GROW-P is non-nil, enlarge the ring to accommodate the new ITEM. If GROW-P is nil, dump the oldest item to make room for the new." (let (ind) - (while (setq ind (ring-member ring item)) (ring-remove ring ind))) + (while (setq ind (ring-member ring item)) + (ring-remove ring ind))) (ring-insert+extend ring item grow-p)) (defun ring-convert-sequence-to-ring (seq) @@ -227,13 +227,11 @@ If SEQ is already a ring, return it." (if (ring-p seq) seq (let* ((size (length seq)) - (ring (make-ring size)) - (count 0)) - (while (< count size) - (if (or (ring-empty-p ring) - (not (equal (ring-ref ring 0) (elt seq count)))) - (ring-insert-at-beginning ring (elt seq count))) - (setq count (1+ count))) + (ring (make-ring size))) + (dotimes (count size) + (when (or (ring-empty-p ring) + (not (equal (ring-ref ring 0) (elt seq count)))) + (ring-insert-at-beginning ring (elt seq count)))) ring))) ;;; provide ourself: diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el index 27ddeb25718..a0097ef9052 100644 --- a/lisp/emacs-lisp/tcover-ses.el +++ b/lisp/emacs-lisp/tcover-ses.el @@ -1,6 +1,7 @@ ;;;; testcover-ses.el -- Example use of `testcover' to test "SES" -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. ;; Author: Jonathan Yavner ;; Maintainer: Jonathan Yavner @@ -26,6 +27,17 @@ (defvar ses-initial-global-parameters) (defvar ses-mode-map) +(declare-function ses-set-curcell "ses") +(declare-function ses-update-cells "ses") +(declare-function ses-load "ses") +(declare-function ses-vector-delete "ses") +(declare-function ses-create-header-string "ses") +(declare-function ses-read-cell "ses") +(declare-function ses-read-symbol "ses") +(declare-function ses-command-hook "ses") +(declare-function ses-jump "ses") + + ;;;Here are some macros that exercise SES. Set `pause' to t if you want the ;;;macros to pause after each step. (let* ((pause nil) diff --git a/lisp/emacs-lisp/tcover-unsafep.el b/lisp/emacs-lisp/tcover-unsafep.el index b999ce63b8c..42c3ebef4e7 100644 --- a/lisp/emacs-lisp/tcover-unsafep.el +++ b/lisp/emacs-lisp/tcover-unsafep.el @@ -111,6 +111,7 @@ ) "A-list of (FORM . REASON)... that`unsafep' should decide are unsafe.") +(declare-function unsafep-function "unsafep" (fun)) ;;;######################################################################### (defun testcover-unsafep () diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el index 0fed5962fcb..b11f7ca9d5c 100644 --- a/lisp/emacs-lisp/timer.el +++ b/lisp/emacs-lisp/timer.el @@ -356,6 +356,9 @@ This function is called, by name, directly by the C code." "Non-nil if EVENT is a timeout event." (and (listp event) (eq (car event) 'timer-event))) + +(declare-function diary-entry-time "diary-lib" (s)) + ;;;###autoload (defun run-at-time (time repeat function &rest args) "Perform an action at time TIME. diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index fbb39ee66d3..1f696788869 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el @@ -286,7 +286,7 @@ enabled." "*If non-nil, only highlight region if marked with S-. When this is non-nil, CUA toggles `transient-mark-mode' on when the region is marked using shifted movement keys, and off when the mark is cleared. -But when the mark was set using \\[cua-set-mark], transient-mark-mode +But when the mark was set using \\[cua-set-mark], Transient Mark mode is not turned on." :type 'boolean :group 'cua) @@ -406,8 +406,8 @@ and after the region marked by the rectangle to search." "Global key used to toggle the cua rectangle mark." :set #'(lambda (symbol value) (set symbol value) - (when (and (boundp 'cua--keymaps-initalized) - cua--keymaps-initalized) + (when (and (boundp 'cua--keymaps-initialized) + cua--keymaps-initialized) (define-key cua-global-keymap value 'cua-set-rectangle-mark) (when (boundp 'cua--rectangle-keymap) @@ -583,35 +583,37 @@ a cons (TYPE . COLOR), then both properties are affected." ;;; Rectangle support is in cua-rect.el -(autoload 'cua-set-rectangle-mark "cua-rect" nil t nil) +(autoload 'cua-set-rectangle-mark "cua-rect" + "Start rectangle at mouse click position." t nil) ;; Stub definitions until it is loaded +(defvar cua--rectangle) +(defvar cua--last-killed-rectangle) +(unless (featurep 'cua-rect) + (setq cua--rectangle nil + cua--last-killed-rectangle nil)) -(when (not (featurep 'cua-rect)) - (defvar cua--rectangle) - (setq cua--rectangle nil) - (defvar cua--last-killed-rectangle) - (setq cua--last-killed-rectangle nil)) - - +;; All behind cua--rectangle tests. +(declare-function cua-copy-rectangle "cua-rect" (arg)) +(declare-function cua-cut-rectangle "cua-rect" (arg)) +(declare-function cua--rectangle-left "cua-rect" (&optional val)) +(declare-function cua--delete-rectangle "cua-rect" ()) +(declare-function cua--insert-rectangle "cua-rect" + (rect &optional below paste-column line-count)) +(declare-function cua--rectangle-corner "cua-rect" (&optional advance)) +(declare-function cua--rectangle-assert "cua-rect" ()) ;;; Global Mark support is in cua-gmrk.el (autoload 'cua-toggle-global-mark "cua-gmrk" nil t nil) ;; Stub definitions until cua-gmrk.el is loaded - -(when (not (featurep 'cua-gmrk)) - (defvar cua--global-mark-active) +(defvar cua--global-mark-active) +(unless (featurep 'cua-gmrk) (setq cua--global-mark-active nil)) - -(provide 'cua-base) - -(eval-when-compile - (require 'cua-rect) - (require 'cua-gmrk) - ) +(declare-function cua--insert-at-global-mark "cua-gmrk" (str &optional msg)) +(declare-function cua--global-mark-post-command "cua-gmrk" ()) ;;; Low-level Interface @@ -874,6 +876,8 @@ With numeric prefix arg, copy to register 0-9 instead." (if (fboundp 'cua--cancel-rectangle) (cua--cancel-rectangle))) +(declare-function x-clipboard-yank "../term/x-win" ()) + (defun cua-paste (arg) "Paste last cut or copied region or rectangle. An active region is deleted before executing the command. @@ -918,6 +922,7 @@ If global mark is active, copy from register or one character." (cond (regtxt (cond + ;; This being a cons implies cua-rect is loaded? ((consp regtxt) (cua--insert-rectangle regtxt)) ((stringp regtxt) (insert-for-yank regtxt)) (t (message "Unknown data in register %c" cua--register)))) @@ -954,8 +959,8 @@ If global mark is active, copy from register or one character." (defun cua-paste-pop (arg) "Replace a just-pasted text or rectangle with a different text. -See `yank-pop' for details about the default behaviour. For an alternative -behaviour, see `cua-paste-pop-rotate-temporarily'." +See `yank-pop' for details about the default behavior. For an alternative +behavior, see `cua-paste-pop-rotate-temporarily'." (interactive "P") (cond ((eq last-command 'cua--paste-rectangle) @@ -1225,22 +1230,26 @@ If ARG is the atom `-', scroll upward by nearly full screen." ;; Handle shifted cursor keys and other movement commands. ;; If region is not active, region is activated if key is shifted. - ;; If region is active, region is cancelled if key is unshifted (and region not started with C-SPC). - ;; If rectangle is active, expand rectangle in specified direction and ignore the movement. + ;; If region is active, region is cancelled if key is unshifted + ;; (and region not started with C-SPC). + ;; If rectangle is active, expand rectangle in specified direction and + ;; ignore the movement. ((if window-system + ;; Shortcut for window-system, assuming that input-decode-map is empty. (memq 'shift (event-modifiers (aref (this-single-command-raw-keys) 0))) (or + ;; Check if the final key-sequence was shifted. (memq 'shift (event-modifiers (aref (this-single-command-keys) 0))) - ;; See if raw escape sequence maps to a shifted event, e.g. S-up or C-S-home. - (and (boundp 'local-function-key-map) - local-function-key-map - (let ((ev (lookup-key local-function-key-map - (this-single-command-raw-keys)))) - (and (vector ev) - (symbolp (setq ev (aref ev 0))) - (string-match "S-" (symbol-name ev))))))) + ;; If not, maybe the raw key-sequence was mapped by input-decode-map + ;; to a shifted key (and then mapped down to its unshifted form). + (let* ((keys (this-single-command-raw-keys)) + (ev (lookup-key input-decode-map keys))) + (or (and (vector ev) (memq 'shift (event-modifiers (aref ev 0)))) + ;; Or maybe, the raw key-sequence was not an escape sequence + ;; and was shifted (and then mapped down to its unshifted form). + (memq 'shift (event-modifiers (aref keys 0))))))) (unless mark-active (push-mark-command nil t)) (setq cua--last-region-shifted t) @@ -1326,8 +1335,8 @@ If ARG is the atom `-', scroll upward by nearly full screen." (defvar cua--cua-keys-keymap (make-sparse-keymap)) (defvar cua--prefix-override-keymap (make-sparse-keymap)) (defvar cua--prefix-repeat-keymap (make-sparse-keymap)) -(defvar cua--global-mark-keymap (make-sparse-keymap)) ; Initalized when cua-gmrk.el is loaded -(defvar cua--rectangle-keymap (make-sparse-keymap)) ; Initalized when cua-rect.el is loaded +(defvar cua--global-mark-keymap (make-sparse-keymap)) ; Initialized when cua-gmrk.el is loaded +(defvar cua--rectangle-keymap (make-sparse-keymap)) ; Initialized when cua-rect.el is loaded (defvar cua--region-keymap (make-sparse-keymap)) (defvar cua--ena-cua-keys-keymap nil) @@ -1370,7 +1379,7 @@ If ARG is the atom `-', scroll upward by nearly full screen." (and cua--global-mark-active (not (window-minibuffer-p))))) -(defvar cua--keymaps-initalized nil) +(defvar cua--keymaps-initialized nil) (defun cua--shift-control-prefix (prefix arg) ;; handle S-C-x and S-C-c by emulating the fast double prefix function. @@ -1534,9 +1543,9 @@ shifted movement key, set `cua-highlight-region-shift-only'." (setq mark-even-if-inactive t) (setq highlight-nonselected-windows nil) - (unless cua--keymaps-initalized + (unless cua--keymaps-initialized (cua--init-keymaps) - (setq cua--keymaps-initalized t)) + (setq cua--keymaps-initialized t)) (if cua-mode (progn @@ -1600,7 +1609,7 @@ shifted movement key, set `cua-highlight-region-shift-only'." (setq cua--debug (not cua--debug))) -(provide 'cua) +(provide 'cua-base) ;;; arch-tag: 21fb6289-ba25-4fee-bfdc-f9fb351acf05 ;;; cua-base.el ends here diff --git a/lisp/emulation/cua-gmrk.el b/lisp/emulation/cua-gmrk.el index 6dc4d179d3d..6211a3c3154 100644 --- a/lisp/emulation/cua-gmrk.el +++ b/lisp/emulation/cua-gmrk.el @@ -27,8 +27,6 @@ ;;; Code: -(provide 'cua-gmrk) - (eval-when-compile (require 'cua-base) (require 'cua-rect) @@ -386,5 +384,7 @@ With prefix argument, don't jump to global mark when cancelling it." (setq cua--global-mark-initialized t)) +(provide 'cua-gmrk) + ;;; arch-tag: 553d8076-a91d-48ae-825d-6cb962a5f67f ;;; cua-gmrk.el ends here diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el index 5c4bc011464..f6b50336815 100644 --- a/lisp/emulation/cua-rect.el +++ b/lisp/emulation/cua-rect.el @@ -33,12 +33,8 @@ ;;; Code: -(provide 'cua-rect) - (eval-when-compile - (require 'cua-base) - (require 'cua-gmrk) -) + (require 'cua-base)) ;;; Rectangle support @@ -1061,6 +1057,9 @@ The text previously in the rectangle is overwritten by the blanks." ;; (setq cua-save-point (point)) )))) +(declare-function cua--cut-rectangle-to-global-mark "cua-gmrk" (as-text)) +(declare-function cua--copy-rectangle-to-global-mark "cua-gmrk" (as-text)) + (defun cua-copy-rectangle-as-text (&optional arg delete) "Copy rectangle, but store as normal text." (interactive "P") @@ -1491,5 +1490,7 @@ With prefix arg, indent to that column." (setq cua--rectangle-initialized t)) +(provide 'cua-rect) + ;;; arch-tag: b730df53-17b9-4a89-bd63-4a71ec196731 ;;; cua-rect.el ends here diff --git a/lisp/emulation/edt-vt100.el b/lisp/emulation/edt-vt100.el index 4e094a5f703..fbe56c2c341 100644 --- a/lisp/emulation/edt-vt100.el +++ b/lisp/emulation/edt-vt100.el @@ -39,6 +39,8 @@ ;; The following functions are called by the EDT screen width commands defined ;; in edt.el. +(declare-function vt100-wide-mode "../term/vt100" (&optional arg)) + (defun edt-set-term-width-80 () "Set terminal width to 80 columns." (vt100-wide-mode -1)) diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el index 4a68e258cb1..1674e7a266b 100644 --- a/lisp/emulation/edt.el +++ b/lisp/emulation/edt.el @@ -166,28 +166,23 @@ ;;;; VARIABLES and CONSTANTS ;;;; -;; For backward compatibility to Emacs 19. -(or (fboundp 'defgroup) - (defmacro defgroup (&rest rest))) - (defgroup edt nil "Emacs emulating EDT." :prefix "edt-" :group 'emulations) ;; To silence the byte-compiler -(eval-when-compile - (defvar *EDT-keys*) - (defvar edt-default-global-map) - (defvar edt-last-copied-word) - (defvar edt-learn-macro-count) - (defvar edt-orig-page-delimiter) - (defvar edt-orig-transient-mark-mode) - (defvar edt-rect-start-point) - (defvar edt-user-global-map) - (defvar rect-start-point) - (defvar time-string) - (defvar zmacs-region-stays)) +(defvar *EDT-keys*) +(defvar edt-default-global-map) +(defvar edt-last-copied-word) +(defvar edt-learn-macro-count) +(defvar edt-orig-page-delimiter) +(defvar edt-orig-transient-mark-mode) +(defvar edt-rect-start-point) +(defvar edt-user-global-map) +(defvar rect-start-point) +(defvar time-string) +(defvar zmacs-region-stays) ;;; ;;; Version Information @@ -198,11 +193,6 @@ ;;; User Configurable Variables ;;; -;; For backward compatibility to Emacs 19. -(or (fboundp 'defcustom) - (defmacro defcustom (var value doc &rest ignore) - `(defvar ,var ,value ,doc))) - (defcustom edt-keep-current-page-delimiter nil "*Emacs MUST be restarted for a change in value to take effect! Non-nil leaves Emacs value of `page-delimiter' unchanged within EDT @@ -1628,6 +1618,8 @@ Argument NUM is the percentage into the buffer to move." (indent-region (point) (mark) nil) (fill-region (point) (mark)))) + +(declare-function c-mark-function "cc-cmds" ()) ;;; ;;; MARK SECTION WISELY ;;; @@ -2237,7 +2229,10 @@ Optional argument USER-SETUP non-nil means called from function ;; function edt-setup-extra-default-bindings. (define-prefix-command 'edt-user-gold-map) (fset 'edt-user-gold-map (copy-keymap 'edt-default-gold-map)) - (edt-setup-user-bindings) + ;; This is a function that the user can define for custom bindings. + ;; See etc/edt-user.doc. + (if (fboundp 'edt-setup-user-bindings) + (edt-setup-user-bindings)) (edt-select-user-global-map)) (defun edt-select-default-global-map() diff --git a/lisp/emulation/pc-select.el b/lisp/emulation/pc-select.el index a4e304616da..c35044b70ec 100644 --- a/lisp/emulation/pc-select.el +++ b/lisp/emulation/pc-select.el @@ -135,8 +135,8 @@ restored to their original values when PC Selection mode is toggled off.") (unless pc-select-default-key-bindings (let ((lst - ;; This is to avoid confusion with the delete-selection-mode - ;; On simple displays you cant see that a region is active and + ;; This is to avoid confusion with the delete-selection-mode. + ;; On simple displays you can't see that a region is active and ;; will be deleted on the next keypress IMHO especially for ;; copy-region-as-kill this is confusing. ;; The same goes for exchange-point-and-mark @@ -182,7 +182,7 @@ restored to their original values when PC Selection mode is toggled off.") ([prior] . scroll-down-nomark) ;; Next four lines are from Pete Forman. - ([C-down] . forward-paragraph-nomark) ; KNextPara cDn + ([C-down] . forward-paragraph-nomark) ; KNextPara cDn ([C-up] . backward-paragraph-nomark) ; KPrevPara cUp ([S-C-down] . forward-paragraph-mark) ([S-C-up] . backward-paragraph-mark)))) @@ -281,10 +281,17 @@ and `transient-mark-mode'." ;;;; ;; non-interactive ;;;; -(defun ensure-mark() +(defun pc-select-ensure-mark () ;; make sure mark is active ;; test if it is active, if it isn't, set it and activate it - (or mark-active (set-mark-command nil))) + (or mark-active (set-mark-command nil)) + ;; Remember who activated the mark. + (setq mark-active 'pc-select)) + +(defun pc-select-maybe-deactivate-mark () + ;; maybe switch off mark (only if *we* switched it on) + (when (eq mark-active 'pc-select) + (deactivate-mark))) ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;; forward and mark @@ -294,7 +301,7 @@ and `transient-mark-mode'." "Ensure mark is active; move point right ARG characters (left if ARG negative). On reaching end of buffer, stop and signal error." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (forward-char arg)) (defun forward-word-mark (&optional arg) @@ -303,13 +310,13 @@ Normally returns t. If an edge of the buffer is reached, point is left there and nil is returned." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (forward-word arg)) (defun forward-line-mark (&optional arg) "Ensure mark is active; move cursor vertically down ARG lines." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (forward-line arg) (setq this-command 'forward-line) ) @@ -319,7 +326,7 @@ and nil is returned." With argument, do it that many times. Negative arg -N means move backward across N balanced expressions." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (forward-sexp arg)) (defun forward-paragraph-mark (&optional arg) @@ -331,7 +338,7 @@ A line which `paragraph-start' matches either separates paragraphs A paragraph end is the beginning of a line which is not part of the paragraph to which the end of the previous line belongs, or the end of the buffer." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (forward-paragraph arg)) (defun next-line-mark (&optional arg) @@ -350,7 +357,7 @@ a semipermanent goal column to which this command always moves. Then it does not try to move vertically. This goal column is stored in `goal-column', which is nil when there is none." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (with-no-warnings (next-line arg)) (setq this-command 'next-line)) @@ -359,14 +366,14 @@ in `goal-column', which is nil when there is none." With argument ARG not nil or 1, move forward ARG - 1 lines first. If scan reaches end of buffer, stop there without error." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (end-of-line arg) (setq this-command 'end-of-line)) (defun backward-line-mark (&optional arg) "Ensure mark is active; move cursor vertically up ARG lines." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (if (null arg) (setq arg 1)) (forward-line (- arg)) @@ -379,7 +386,7 @@ A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll upward. When calling from a program, supply a number as argument or nil." (interactive "P") - (ensure-mark) + (pc-select-ensure-mark) (cond (pc-select-override-scroll-error (condition-case nil (scroll-down arg) (beginning-of-buffer (goto-char (point-min))))) @@ -395,7 +402,7 @@ of the accessible part of the buffer. Don't use this command in Lisp programs! \(goto-char \(point-max)) is faster and avoids clobbering the mark." (interactive "P") - (ensure-mark) + (pc-select-ensure-mark) (let ((size (- (point-max) (point-min)))) (goto-char (if arg (- (point-max) @@ -427,7 +434,7 @@ Don't use this command in Lisp programs! "Deactivate mark; move point right ARG characters \(left if ARG negative). On reaching end of buffer, stop and signal error." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (forward-char arg)) (defun forward-word-nomark (&optional arg) @@ -436,13 +443,13 @@ Normally returns t. If an edge of the buffer is reached, point is left there and nil is returned." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (forward-word arg)) (defun forward-line-nomark (&optional arg) "Deactivate mark; move cursor vertically down ARG lines." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (forward-line arg) (setq this-command 'forward-line) ) @@ -452,7 +459,7 @@ and nil is returned." With argument, do it that many times. Negative arg -N means move backward across N balanced expressions." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (forward-sexp arg)) (defun forward-paragraph-nomark (&optional arg) @@ -464,7 +471,7 @@ A line which `paragraph-start' matches either separates paragraphs A paragraph end is the beginning of a line which is not part of the paragraph to which the end of the previous line belongs, or the end of the buffer." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (forward-paragraph arg)) (defun next-line-nomark (&optional arg) @@ -483,7 +490,7 @@ a semipermanent goal column to which this command always moves. Then it does not try to move vertically. This goal column is stored in `goal-column', which is nil when there is none." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (with-no-warnings (next-line arg)) (setq this-command 'next-line)) @@ -492,14 +499,14 @@ in `goal-column', which is nil when there is none." With argument ARG not nil or 1, move forward ARG - 1 lines first. If scan reaches end of buffer, stop there without error." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (end-of-line arg) (setq this-command 'end-of-line)) (defun backward-line-nomark (&optional arg) "Deactivate mark; move cursor vertically up ARG lines." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (if (null arg) (setq arg 1)) (forward-line (- arg)) @@ -512,7 +519,7 @@ A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll upward. When calling from a program, supply a number as argument or nil." (interactive "P") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (cond (pc-select-override-scroll-error (condition-case nil (scroll-down arg) (beginning-of-buffer (goto-char (point-min))))) @@ -528,7 +535,7 @@ of the accessible part of the buffer. Don't use this command in Lisp programs! \(goto-char (point-max)) is faster and avoids clobbering the mark." (interactive "P") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (let ((size (- (point-max) (point-min)))) (goto-char (if arg (- (point-max) @@ -561,14 +568,14 @@ Don't use this command in Lisp programs! "Ensure mark is active; move point left ARG characters (right if ARG negative). On attempt to pass beginning or end of buffer, stop and signal error." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (backward-char arg)) (defun backward-word-mark (&optional arg) "Ensure mark is active; move backward until encountering the end of a word. With argument, do this that many times." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (backward-word arg)) (defun backward-sexp-mark (&optional arg) @@ -576,7 +583,7 @@ With argument, do this that many times." With argument, do it that many times. Negative arg -N means move forward across N balanced expressions." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (backward-sexp arg)) (defun backward-paragraph-mark (&optional arg) @@ -591,7 +598,7 @@ blank line. See `forward-paragraph' for more information." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (backward-paragraph arg)) (defun previous-line-mark (&optional arg) @@ -608,7 +615,7 @@ If you are thinking of using this in a Lisp program, consider using `forward-line' with a negative argument instead. It is usually easier to use and more reliable (no dependence on goal column, etc.)." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (with-no-warnings (previous-line arg)) (setq this-command 'previous-line)) @@ -617,7 +624,7 @@ to use and more reliable (no dependence on goal column, etc.)." With argument ARG not nil or 1, move forward ARG - 1 lines first. If scan reaches end of buffer, stop there without error." (interactive "p") - (ensure-mark) + (pc-select-ensure-mark) (beginning-of-line arg)) @@ -627,7 +634,7 @@ A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll downward. When calling from a program, supply a number as argument or nil." (interactive "P") - (ensure-mark) + (pc-select-ensure-mark) (cond (pc-select-override-scroll-error (condition-case nil (scroll-up arg) (end-of-buffer (goto-char (point-max))))) @@ -643,7 +650,7 @@ of the accessible part of the buffer. Don't use this command in Lisp programs! \(goto-char (p\oint-min)) is faster and avoids clobbering the mark." (interactive "P") - (ensure-mark) + (pc-select-ensure-mark) (let ((size (- (point-max) (point-min)))) (goto-char (if arg (+ (point-min) @@ -663,14 +670,14 @@ Don't use this command in Lisp programs! "Deactivate mark; move point left ARG characters (right if ARG negative). On attempt to pass beginning or end of buffer, stop and signal error." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (backward-char arg)) (defun backward-word-nomark (&optional arg) "Deactivate mark; move backward until encountering the end of a word. With argument, do this that many times." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (backward-word arg)) (defun backward-sexp-nomark (&optional arg) @@ -678,7 +685,7 @@ With argument, do this that many times." With argument, do it that many times. Negative arg -N means move forward across N balanced expressions." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (backward-sexp arg)) (defun backward-paragraph-nomark (&optional arg) @@ -693,7 +700,7 @@ blank line. See `forward-paragraph' for more information." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (backward-paragraph arg)) (defun previous-line-nomark (&optional arg) @@ -706,7 +713,7 @@ The command \\[set-goal-column] can be used to create a semipermanent goal column to which this command always moves. Then it does not try to move vertically." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (with-no-warnings (previous-line arg)) (setq this-command 'previous-line)) @@ -715,7 +722,7 @@ Then it does not try to move vertically." With argument ARG not nil or 1, move forward ARG - 1 lines first. If scan reaches end of buffer, stop there without error." (interactive "p") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (beginning-of-line arg)) (defun scroll-up-nomark (&optional arg) @@ -724,7 +731,7 @@ A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll downward. When calling from a program, supply a number as argument or nil." (interactive "P") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (cond (pc-select-override-scroll-error (condition-case nil (scroll-up arg) (end-of-buffer (goto-char (point-max))))) @@ -740,7 +747,7 @@ of the accessible part of the buffer. Don't use this command in Lisp programs! \(goto-char (point-min)) is faster and avoids clobbering the mark." (interactive "P") - (setq mark-active nil) + (pc-select-maybe-deactivate-mark) (let ((size (- (point-max) (point-min)))) (goto-char (if arg (+ (point-min) @@ -968,21 +975,5 @@ but before calling PC Selection mode): (setq pc-select-key-bindings-alist nil pc-select-saved-settings-alist nil)))) - -;;;###autoload -(defcustom pc-selection-mode nil - "Toggle PC Selection mode. -Change mark behavior to emulate Motif, MAC or MS-Windows cut and paste style, -and cursor movement commands. -This mode enables Delete Selection mode and Transient Mark mode. -Setting this variable directly does not take effect; -you must modify it using \\[customize] or \\[pc-selection-mode]." - :set (lambda (symbol value) - (pc-selection-mode (if value 1 -1))) - :initialize 'custom-initialize-default - :type 'boolean - :group 'pc-select - :require 'pc-select) - -;;; arch-tag: 10697b70-ae07-4f3e-ad23-7814a3f418c2 +;; arch-tag: 10697b70-ae07-4f3e-ad23-7814a3f418c2 ;;; pc-select.el ends here diff --git a/lisp/emulation/tpu-edt.el b/lisp/emulation/tpu-edt.el index 425ac450fae..c5ae34e0f07 100644 --- a/lisp/emulation/tpu-edt.el +++ b/lisp/emulation/tpu-edt.el @@ -273,7 +273,6 @@ ;;; Code: -(eval-when-compile (require 'cl)) ;; we use picture-mode functions (require 'picture) @@ -1367,6 +1366,9 @@ The search is performed in the current direction." ;; tpu-search-forward (t) tpu-search-reverse (t) ;; tpu-search-forward-exit (t) tpu-search-backward-exit (t) +(declare-function tpu-emacs-search "tpu-edt") +(declare-function tpu-emacs-rev-search "tpu-edt") + (defun tpu-set-search (&optional arg) "Set the search functions and set the search direction to the current direction. If an argument is specified, don't set the search direction." @@ -2432,7 +2434,10 @@ If FILE is nil, try to load a default file. The default file names are (if (eq tpu-global-map parent) (set-keymap-parent map (keymap-parent parent)) (setq map parent))))) - (ignore-errors (ad-disable-regexp "\\`tpu-")) + ;; Only has an effect if the advice in tpu-extras has been activated. + (condition-case nil + (with-no-warnings (ad-disable-regexp "\\`tpu-")) + (error nil)) (setq tpu-edt-mode nil)) diff --git a/lisp/emulation/vi.el b/lisp/emulation/vi.el index 81ad04b60d9..de7bcffdf0e 100644 --- a/lisp/emulation/vi.el +++ b/lisp/emulation/vi.el @@ -1375,6 +1375,8 @@ The following CHAR will be the name for the command or macro." (setq char (read-char)) (vi-ask-for-info char)))) +(declare-function c-mark-function "cc-cmds" ()) + (defun vi-mark-region (arg region) "Mark region appropriately. The next char REGION is d(efun),s(-exp),b(uffer), p(aragraph), P(age), f(unction in C/Pascal etc.), w(ord), e(nd of sentence), diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el index 5e13edb9495..8603169819f 100644 --- a/lisp/emulation/viper-cmd.el +++ b/lisp/emulation/viper-cmd.el @@ -27,7 +27,6 @@ ;;; Code: (provide 'viper-cmd) -(require 'advice) ;; Compiler pacifier (defvar viper-minibuffer-current-face) @@ -48,23 +47,6 @@ (defvar initial) (defvar undo-beg-posn) (defvar undo-end-posn) - -;; loading happens only in non-interactive compilation -;; in order to spare non-viperized emacs from being viperized -(if noninteractive - (eval-when-compile - (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-util) - (load "viper-util.el" nil nil 'nosuffix)) - (or (featurep 'viper-keym) - (load "viper-keym.el" nil nil 'nosuffix)) - (or (featurep 'viper-mous) - (load "viper-mous.el" nil nil 'nosuffix)) - (or (featurep 'viper-macs) - (load "viper-macs.el" nil nil 'nosuffix)) - (or (featurep 'viper-ex) - (load "viper-ex.el" nil nil 'nosuffix)) - ))) ;; end pacifier @@ -3097,6 +3079,9 @@ On reaching beginning of line, stop and signal error." (setq this-command 'next-line) (if com (viper-execute-com 'viper-next-line val com)))) +(declare-function widget-type "wid-edit" (widget)) +(declare-function widget-button-press "wid-edit" (pos &optional event)) +(declare-function viper-set-hooks "viper" ()) (defun viper-next-line-at-bol (arg) "Next line at beginning of line. diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el index caeecd12c8a..ccc06e0b938 100644 --- a/lisp/emulation/viper-ex.el +++ b/lisp/emulation/viper-ex.el @@ -47,12 +47,8 @@ (if noninteractive (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-util) - (load "viper-util.el" nil nil 'nosuffix)) - (or (featurep 'viper-keym) - (load "viper-keym.el" nil nil 'nosuffix)) (or (featurep 'viper-cmd) - (load "viper-cmd.el" nil nil 'nosuffix)) + (load "viper-cmd.el" nil t 'nosuffix)) ))) ;; end pacifier diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el index 1b1e07a0a0c..539a561bb5b 100644 --- a/lisp/emulation/viper-init.el +++ b/lisp/emulation/viper-init.el @@ -26,8 +26,6 @@ ;;; Code: -(provide 'viper-init) - ;; compiler pacifier (defvar mark-even-if-inactive) (defvar quail-mode) @@ -429,15 +427,11 @@ delete the text being replaced, as in standard Vi." "*Cursor color when Viper is in Replace state." :type 'string :group 'viper) -(if (fboundp 'make-variable-frame-local) - (make-variable-frame-local 'viper-replace-overlay-cursor-color)) (defcustom viper-insert-state-cursor-color "Green" "Cursor color when Viper is in insert state." :type 'string :group 'viper) -(if (fboundp 'make-variable-frame-local) - (make-variable-frame-local 'viper-insert-state-cursor-color)) ;; viper-emacs-state-cursor-color doesn't work well. Causes cursor colors to be ;; confused in some cases. So, this var is nulled for now. @@ -446,13 +440,17 @@ delete the text being replaced, as in standard Vi." "Cursor color when Viper is in Emacs state." :type 'string :group 'viper) -(if (fboundp 'make-variable-frame-local) - (make-variable-frame-local 'viper-emacs-state-cursor-color)) ;; internal var, used to remember the default cursor color of emacs frames (defvar viper-vi-state-cursor-color nil) + (if (fboundp 'make-variable-frame-local) - (make-variable-frame-local 'viper-vi-state-cursor-color)) + (mapc 'make-variable-frame-local + '(viper-replace-overlay-cursor-color + viper-insert-state-cursor-color + viper-emacs-state-cursor-color + viper-vi-state-cursor-color))) + (viper-deflocalvar viper-replace-overlay nil "") (put 'viper-replace-overlay 'permanent-local t) @@ -1025,6 +1023,9 @@ Should be set in `~/.viper' file." (setq cursor-type '(bar . 2)))) +(provide 'viper-init) + + ;; Local Variables: ;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun) ;; End: diff --git a/lisp/emulation/viper-keym.el b/lisp/emulation/viper-keym.el index 0e502720f5e..85a94075720 100644 --- a/lisp/emulation/viper-keym.el +++ b/lisp/emulation/viper-keym.el @@ -26,8 +26,6 @@ ;;; Code: -(provide 'viper-keym) - ;; compiler pacifier (defvar viper-always) (defvar viper-current-state) @@ -35,19 +33,13 @@ (defvar viper-expert-level) (defvar viper-ex-style-editing) (defvar viper-ex-style-motion) - -;; loading happens only in non-interactive compilation -;; in order to spare non-viperized emacs from being viperized -(if noninteractive - (eval-when-compile - (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-util) - (load "viper-util.el" nil nil 'nosuffix)) - ))) ;; end pacifier (require 'viper-util) +(declare-function viper-ex "viper-ex" (arg &optional string)) +(declare-function viper-normalize-minor-mode-map-alist "viper-cmd" ()) +(declare-function viper-set-mode-vars-for "viper-cmd" (state)) ;;; Variables @@ -702,6 +694,9 @@ form ((key . function) (key . function) ... )." alist)) +(provide 'viper-keym) + + ;;; Local Variables: ;;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun) ;;; End: diff --git a/lisp/emulation/viper-macs.el b/lisp/emulation/viper-macs.el index 788feaf86e6..6eb7687c4e6 100644 --- a/lisp/emulation/viper-macs.el +++ b/lisp/emulation/viper-macs.el @@ -39,14 +39,8 @@ (if noninteractive (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-util) - (load "viper-util.el" nil nil 'nosuffix)) - (or (featurep 'viper-keym) - (load "viper-keym.el" nil nil 'nosuffix)) - (or (featurep 'viper-mous) - (load "viper-mous.el" nil nil 'nosuffix)) (or (featurep 'viper-cmd) - (load "viper-cmd.el" nil nil 'nosuffix)) + (load "viper-cmd.el" nil t 'nosuffix)) ))) ;; end pacifier diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el index 7a47d321890..dd727cd5f84 100644 --- a/lisp/emulation/viper-mous.el +++ b/lisp/emulation/viper-mous.el @@ -42,10 +42,8 @@ (if noninteractive (eval-when-compile (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-util) - (load "viper-util.el" nil nil 'nosuffix)) (or (featurep 'viper-cmd) - (load "viper-cmd.el" nil nil 'nosuffix)) + (load "viper-cmd.el" nil t 'nosuffix)) ))) ;; end pacifier diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el index c757eb63aef..87bf5235b81 100644 --- a/lisp/emulation/viper-util.el +++ b/lisp/emulation/viper-util.el @@ -44,12 +44,6 @@ (require 'ring) -(if noninteractive - (eval-when-compile - (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-init) - (load "viper-init.el" nil nil 'nosuffix)) - ))) ;; end pacifier (require 'viper-init) @@ -380,6 +374,8 @@ +(declare-function viper-forward-Word "viper-cmd" (arg)) + ;;; Support for :e, :r, :w file globbing ;; Glob the file spec. diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el index 65d40e8bad7..bb3e4eb583d 100644 --- a/lisp/emulation/viper.el +++ b/lisp/emulation/viper.el @@ -297,28 +297,15 @@ ;;; Code: -(require 'advice) -(require 'ring) - ;; compiler pacifier (defvar mark-even-if-inactive) (defvar quail-mode) (defvar viper-expert-level) (defvar viper-mode-string) (defvar viper-major-mode-modifier-list) - -;; loading happens only in non-interactive compilation -;; in order to spare non-viperized emacs from being viperized -(if noninteractive - (eval-when-compile - (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'viper-init) - (load "viper-init.el" nil nil 'nosuffix)) - (or (featurep 'viper-cmd) - (load "viper-cmd.el" nil nil 'nosuffix)) - ))) ;; end pacifier +(require 'advice) (require 'viper-init) (require 'viper-keym) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 929df097790..bd20dfbed45 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,41 @@ +2007-12-01 Glenn Morris + + * erc-backend.el (erc-server-send-ping): Move after definition of + erc-server-send. + + * erc.el (iswitchb-temp-buflist, iswitchb-read-buffer) + (erc-controls-strip): Declare for compiler. + (erc-iswitchb): Don't require iswitchb when compiling. Test + iswitchb-mode is bound. + +2007-11-30 Dan Nicolaescu + + * erc.el (open-ssl-stream, open-tls-stream, erc-network-name): + Declare as functions. + +2007-11-29 Giorgos Keramidas (tiny change) + + * erc-backend.el, erc.el: + Parse 307 (nick has identified) responses. + +2007-11-15 Juanma Barranquero + + * erc.el (erc-open): + * erc-backend.el (define-erc-response-handler): + * erc-log.el (log): + * erc-match.el (erc-log-matches): Fix typos in docstrings. + +2007-11-11 Michael Olson + + * erc-autoaway.el (erc-autoaway-possibly-set-away): + * erc-netsplit.el (erc-netsplit-timer): + * erc-notify.el (erc-notify-timer): + * erc-track.el (erc-user-is-active): Only run if we have + successfully established a connection to the server and have + logged in. I suspect that sending messages too soon may make some + IRC servers not respond well, particularly when the network + connection is iffy or subject to traffic-shaping. + 2007-11-01 Michael Olson * erc-compat.el (erc-set-write-file-functions): New compatibility diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el index c70beb112e2..4c841387d7f 100644 --- a/lisp/erc/erc-autoaway.el +++ b/lisp/erc/erc-autoaway.el @@ -248,7 +248,8 @@ exceeds `erc-autoaway-idle-seconds'." ;; A test for (erc-server-process-alive) is not necessary, because ;; this function is called from `erc-timer-hook', which is called ;; whenever the server sends something to the client. - (when (and erc-auto-set-away + (when (and erc-server-connected + erc-auto-set-away (not erc-autoaway-caused-away) (erc-autoaway-some-open-server-buffer)) (let ((idle-time (erc-time-diff erc-autoaway-last-sent-time diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 4e250490e9c..c0f4205c012 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -461,27 +461,6 @@ Currently this is called by `erc-send-input'." (upcase-word 1) (buffer-string))) -(defun erc-server-send-ping (buf) - "Send a ping to the IRC server buffer in BUF. -Additionally, detect whether the IRC process has hung." - (if (buffer-live-p buf) - (with-current-buffer buf - (if (and erc-server-send-ping-timeout - (> - (erc-time-diff (erc-current-time) - erc-server-last-received-time) - erc-server-send-ping-timeout)) - (progn - ;; if the process is hung, kill it - (setq erc-server-timed-out t) - (delete-process erc-server-process)) - (erc-server-send (format "PING %.0f" (erc-current-time))))) - ;; remove timer if the server buffer has been killed - (let ((timer (assq buf erc-server-ping-timer-alist))) - (when timer - (erc-cancel-timer (cdr timer)) - (setcdr timer nil))))) - (defun erc-server-setup-periodical-ping (buffer) "Set up a timer to periodically ping the current server. The current buffer is given by BUFFER." @@ -775,6 +754,27 @@ protection algorithm." (message "ERC: No process running") nil))) +(defun erc-server-send-ping (buf) + "Send a ping to the IRC server buffer in BUF. +Additionally, detect whether the IRC process has hung." + (if (buffer-live-p buf) + (with-current-buffer buf + (if (and erc-server-send-ping-timeout + (> + (erc-time-diff (erc-current-time) + erc-server-last-received-time) + erc-server-send-ping-timeout)) + (progn + ;; if the process is hung, kill it + (setq erc-server-timed-out t) + (delete-process erc-server-process)) + (erc-server-send (format "PING %.0f" (erc-current-time))))) + ;; remove timer if the server buffer has been killed + (let ((timer (assq buf erc-server-ping-timer-alist))) + (when timer + (erc-cancel-timer (cdr timer)) + (setcdr timer nil))))) + ;; From Circe (defun erc-server-send-queue (buffer) "Send messages in `erc-server-flood-queue'. @@ -1018,13 +1018,13 @@ NAME is the response name as sent by the server (see the IRC RFC for meanings). This creates: - - a hook variable `erc-server-NAME-functions' initialised to `erc-server-NAME'. + - a hook variable `erc-server-NAME-functions' initialized to `erc-server-NAME'. - a function `erc-server-NAME' with body FN-BODY. If ALIASES is non-nil, each alias in ALIASES is `defalias'ed to `erc-server-NAME'. Alias hook variables are created as `erc-server-ALIAS-functions' and -initialised to the same default value as `erc-server-NAME-functions'. +initialized to the same default value as `erc-server-NAME-functions'. FN-BODY is the body of `erc-server-NAME' it may refer to the two function arguments PROC and PARSED. @@ -1564,6 +1564,16 @@ See `erc-display-server-message'." nil (erc-display-message parsed 'notice 'active 's306 ?m (erc-response.contents parsed))) +(define-erc-response-handler (307) + "Display nick-identified message." nil + (multiple-value-bind (nick user message) + (cdr (erc-response.command-args parsed)) + (erc-display-message + parsed 'notice 'active 's307 + ?n nick + ?m (mapconcat 'identity (cddr (erc-response.command-args parsed)) + " ")))) + (define-erc-response-handler (311 314) "WHOIS/WHOWAS notices." nil (let ((fname (erc-response.contents parsed)) diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el index 8b5e07a383e..fe3e703f554 100644 --- a/lisp/erc/erc-log.el +++ b/lisp/erc/erc-log.el @@ -224,8 +224,8 @@ format is defined through a formatting function on Since automatic logging is not always a Good Thing (especially if people say things in different coding systems), you can turn logging -behaviour on and off with the variable `erc-enable-logging', which can -also be a predicate function. To only log when you are not set away, use: +behavior on and off with the variable `erc-enable-logging', which can +also be a predicate function. To only log when you are not set away, use: \(setq erc-enable-logging (lambda (buffer) diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el index c147b6566f8..a4752588ebd 100644 --- a/lisp/erc/erc-match.el +++ b/lisp/erc/erc-match.el @@ -530,11 +530,11 @@ Use this defun with `erc-insert-modify-hook'." (defun erc-log-matches (match-type nickuserhost message) "Log matches in a separate buffer, determined by MATCH-TYPE. -The behaviour of this function is controlled by the variables -`erc-log-matches-types-alist' and `erc-log-matches-flag'. Specify the -match types which should be logged in the former, and -deactivate/activate match logging in the latter. See -`erc-log-match-format'." +The behavior of this function is controlled by the variables +`erc-log-matches-types-alist' and `erc-log-matches-flag'. +Specify the match types which should be logged in the former, +and deactivate/activate match logging in the latter. +See `erc-log-match-format'." (let ((match-buffer-name (cdr (assq match-type erc-log-matches-types-alist))) (nick (nth 0 (erc-parse-user nickuserhost)))) diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el index 83bc0dffc0c..b20b7ad738b 100644 --- a/lisp/erc/erc-netsplit.el +++ b/lisp/erc/erc-netsplit.el @@ -173,13 +173,14 @@ join from that split has been detected or not.") (defun erc-netsplit-timer (now) "Clean cruft from `erc-netsplit-list' older than 10 minutes." - (dolist (elt erc-netsplit-list) - (when (> (erc-time-diff (cadr elt) now) 600) - (when erc-netsplit-debug - (erc-display-message - nil 'notice (current-buffer) - (concat "Netsplit: Removing " (car elt)))) - (setq erc-netsplit-list (delq elt erc-netsplit-list))))) + (when erc-server-connected + (dolist (elt erc-netsplit-list) + (when (> (erc-time-diff (cadr elt) now) 600) + (when erc-netsplit-debug + (erc-display-message + nil 'notice (current-buffer) + (concat "Netsplit: Removing " (car elt)))) + (setq erc-netsplit-list (delq elt erc-netsplit-list)))))) ;;;###autoload (defun erc-cmd-WHOLEFT () diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el index 9216631a9b4..34556a00d6c 100644 --- a/lisp/erc/erc-notify.el +++ b/lisp/erc/erc-notify.el @@ -111,7 +111,8 @@ changes." ;;;; Timer handler (defun erc-notify-timer (now) - (when (and erc-notify-list + (when (and erc-server-connected + erc-notify-list (> (erc-time-diff erc-last-ison-time now) erc-notify-interval)) diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el index ad3eaf73a4b..15de2094214 100644 --- a/lisp/erc/erc-track.el +++ b/lisp/erc/erc-track.el @@ -665,8 +665,9 @@ only consider active buffers visible.") (defun erc-user-is-active (&rest ignore) "Set `erc-buffer-activity'." - (setq erc-buffer-activity (erc-current-time)) - (erc-track-modified-channels)) + (when erc-server-connected + (setq erc-buffer-activity (erc-current-time)) + (erc-track-modified-channels))) (defun erc-track-get-buffer-window (buffer frame-param) (if (eq frame-param 'selected-visible) diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index fab8f7ca1b9..e4e9268bfbe 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1693,6 +1693,11 @@ nil." (put 'erc-with-all-buffers-of-server 'lisp-indent-function 1) (put 'erc-with-all-buffers-of-server 'edebug-form-spec '(form form body)) +;; (iswitchb-mode) will autoload iswitchb.el +(defvar iswitchb-temp-buflist) +(declare-function iswitchb-read-buffer "iswitchb" + (prompt &optional default require-match start matches-set)) + (defun erc-iswitchb (&optional arg) "Use `iswitchb-read-buffer' to prompt for a ERC buffer to switch to. When invoked with prefix argument, use all erc buffers. Without prefix @@ -1703,9 +1708,7 @@ If `erc-track-mode' is in enabled, put the last element of Due to some yet unresolved reason, global function `iswitchb-mode' needs to be active for this function to work." (interactive "P") - (eval-when-compile - (require 'iswitchb)) - (let ((enabled iswitchb-mode)) + (let ((enabled (bound-and-true-p iswitchb-mode))) (or enabled (iswitchb-mode 1)) (unwind-protect (let ((iswitchb-make-buflist-hook @@ -1924,7 +1927,7 @@ already connected and just create a separate buffer for the new target CHANNEL. Use PASSWD as user password on the server. If TGT-LIST is -non-nil, use it to initialise `erc-default-recipients'. +non-nil, use it to initialize `erc-default-recipients'. Returns the buffer for the given server or channel." (let ((server-announced-name (when (and (boundp 'erc-session-server) @@ -2165,6 +2168,8 @@ Arguments are the same as for `erc'." (defalias 'erc-select-ssl 'erc-ssl) +(declare-function open-ssl-stream "ext:ssl" (name buffer host service)) + (defun erc-open-ssl-stream (name buffer host port) "Open an SSL stream to an IRC server. The process will be given the name NAME, its target buffer will be @@ -2189,6 +2194,8 @@ Arguments are the same as for `erc'." (let ((erc-server-connect-function 'erc-open-tls-stream)) (apply 'erc r))) +(declare-function open-tls-stream "tls" (name buffer host port)) + (defun erc-open-tls-stream (name buffer host port) "Open an TLS stream to an IRC server. The process will be given the name NAME, its target buffer will be @@ -2225,6 +2232,8 @@ but you won't see it. WARNING: Do not set this variable directly! Instead, use the function `erc-toggle-debug-irc-protocol' to toggle its value.") +(declare-function erc-network-name "erc-networks" ()) + (defun erc-log-irc-protocol (string &optional outbound) "Append STRING to the buffer *erc-protocol*. @@ -5955,6 +5964,9 @@ if `erc-away' is non-nil." (cond (lag (format "lag:%.0f" lag)) (t "")))) +;; erc-goodies is required at end of this file. +(declare-function erc-controls-strip "erc-goodies" (str)) + (defun erc-update-mode-line-buffer (buffer) "Update the mode line in a single ERC buffer BUFFER." (with-current-buffer buffer @@ -6205,6 +6217,7 @@ All windows are opened in the current frame." (s303 . "Is online: %n") (s305 . "%m") (s306 . "%m") + (s307 . "%n %m") (s311 . "%n is %f (%u@%h)") (s312 . "%n is/was on server %s (%c)") (s313 . "%n is an IRC operator") diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el index 8ecc335523b..dd61dac0594 100644 --- a/lisp/eshell/em-alias.el +++ b/lisp/eshell/em-alias.el @@ -22,17 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-alias) - -(eval-when-compile (require 'esh-maint)) -(require 'eshell) - -(defgroup eshell-alias nil - "Command aliases allow for easy definition of alternate commands." - :tag "Command aliases" - ;; :link '(info-link "(eshell)Command aliases") - :group 'eshell-module) - ;;; Commentary: ;; Command aliases greatly simplify the definition of new commands. @@ -62,19 +51,8 @@ ;; ;; Aliases are written to disk immediately after being defined or ;; deleted. The filename in which they are kept is defined by the -;; following variable: +;; variable eshell-aliases-file. -(defcustom eshell-aliases-file (concat eshell-directory-name "alias") - "*The file in which aliases are kept. -Whenever an alias is defined by the user, using the `alias' command, -it will be written to this file. Thus, alias definitions (and -deletions) are always permanent. This approach was chosen for the -sake of simplicity, since that's pretty much the only benefit to be -gained by using this module." - :type 'file - :group 'eshell-alias) - -;;; ;; The format of this file is quite basic. It specifies the alias ;; definitions in almost exactly the same way that the user entered ;; them, minus any argument quoting (since interpolation is not done @@ -102,19 +80,12 @@ gained by using this module." ;; mispelled command, once a given tolerance threshold has been ;; reached. -(defcustom eshell-bad-command-tolerance 3 - "*The number of failed commands to ignore before creating an alias." - :type 'integer - ;; :link '(custom-manual "(eshell)Auto-correction of bad commands") - :group 'eshell-alias) - -;;; -;; Whenever the same bad command name is encountered this many times, -;; the user will be prompted in the minibuffer to provide an alias -;; name. An alias definition will then be created which will result -;; in an equal call to the correct name. In this way, Eshell -;; gradually learns about the commands that the user mistypes -;; frequently, and will automatically correct them! +;; Whenever the same bad command name is encountered +;; `eshell-bad-command-tolerance' times, the user will be prompted in +;; the minibuffer to provide an alias name. An alias definition will +;; then be created which will result in an equal call to the correct +;; name. In this way, Eshell gradually learns about the commands that +;; the user mistypes frequently, and will automatically correct them! ;; ;; Note that a '$*' is automatically appended at the end of the alias ;; definition, so that entering it is unnecessary when specifying the @@ -122,6 +93,32 @@ gained by using this module." ;;; Code: +(eval-when-compile + (require 'esh-util)) +(require 'eshell) + +(defgroup eshell-alias nil + "Command aliases allow for easy definition of alternate commands." + :tag "Command aliases" + ;; :link '(info-link "(eshell)Command aliases") + :group 'eshell-module) + +(defcustom eshell-aliases-file (concat eshell-directory-name "alias") + "*The file in which aliases are kept. +Whenever an alias is defined by the user, using the `alias' command, +it will be written to this file. Thus, alias definitions (and +deletions) are always permanent. This approach was chosen for the +sake of simplicity, since that's pretty much the only benefit to be +gained by using this module." + :type 'file + :group 'eshell-alias) + +(defcustom eshell-bad-command-tolerance 3 + "*The number of failed commands to ignore before creating an alias." + :type 'integer + ;; :link '(custom-manual "(eshell)Auto-correction of bad commands") + :group 'eshell-alias) + (defcustom eshell-alias-load-hook '(eshell-alias-initialize) "*A hook that gets run when `eshell-alias' is loaded." :type 'hook @@ -180,6 +177,9 @@ command, which will automatically write them to the file named by (eshell-write-aliases-list)) nil) +(defvar pcomplete-stub) +(autoload 'pcomplete-here "pcomplete") + (defun pcomplete/eshell-mode/alias () "Completion function for Eshell's `alias' command." (pcomplete-here (eshell-alias-completions pcomplete-stub))) @@ -274,5 +274,7 @@ These are all the command aliases which begin with NAME." eshell-prevent-alias-expansion)))) (eshell-parse-command alias)))))))))) +(provide 'em-alias) + ;;; arch-tag: 8b018fc1-4e07-4ccc-aa73-c0a1ba361f82 ;;; em-alias.el ends here diff --git a/lisp/eshell/em-banner.el b/lisp/eshell/em-banner.el index 17d930a055d..b9642f41df6 100644 --- a/lisp/eshell/em-banner.el +++ b/lisp/eshell/em-banner.el @@ -22,18 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-banner) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-banner nil - "This sample module displays a welcome banner at login. -It exists so that others wishing to create their own Eshell extension -modules may have a simple template to begin with." - :tag "Login banner" - ;; :link '(info-link "(eshell)Login banner") - :group 'eshell-module) - ;;; Commentary: ;; There is nothing to be done or configured in order to use this @@ -51,6 +39,23 @@ modules may have a simple template to begin with." ;; In this case, it allows the user to change the string which ;; displays at login time. +;;; Code: + +(eval-when-compile + (require 'cl) + (require 'esh-mode) + (require 'eshell)) + +(require 'esh-util) + +(defgroup eshell-banner nil + "This sample module displays a welcome banner at login. +It exists so that others wishing to create their own Eshell extension +modules may have a simple template to begin with." + :tag "Login banner" + ;; :link '(info-link "(eshell)Login banner") + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-banner-message "Welcome to the Emacs shell\n\n" @@ -61,10 +66,6 @@ This can be any sexp, and should end with at least two newlines." (put 'eshell-banner-message 'risky-local-variable t) -;;; Code: - -(require 'esh-util) - (defcustom eshell-banner-load-hook '(eshell-banner-initialize) "*A list of functions to run when `eshell-banner' is loaded." :type 'hook @@ -90,5 +91,7 @@ This can be any sexp, and should end with at least two newlines." (goto-char (point-min)) (looking-at msg))) +(provide 'em-banner) + ;;; arch-tag: e738b4ef-8671-42ae-a757-291779b92491 ;;; em-banner.el ends here diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el index 458f6918de4..57f9a094141 100644 --- a/lisp/eshell/em-basic.el +++ b/lisp/eshell/em-basic.el @@ -22,19 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-basic) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-basic nil - "The \"basic\" code provides a set of convenience functions which -are traditionally considered shell builtins. Since all of the -functionality provided by them is accessible through Lisp, they are -not really builtins at all, but offer a command-oriented way to do the -same thing." - :tag "Basic shell commands" - :group 'eshell-module) - ;;; Commentary: ;; There are very few basic Eshell commands -- so-called builtins. @@ -48,14 +35,6 @@ same thing." ;; echo as an argument), or whether it should try to act like a normal ;; shell echo, and always result in a flat string being returned. -(defcustom eshell-plain-echo-behavior nil - "*If non-nil, `echo' tries to behave like an ordinary shell echo. -This comes at some detriment to Lisp functionality. However, the Lisp -equivalent of `echo' can always be achieved by using `identity'." - :type 'boolean - :group 'eshell-basic) - -;;; ;; An example of the difference is the following: ;; ;; echo Hello world @@ -83,8 +62,27 @@ equivalent of `echo' can always be achieved by using `identity'." ;;; Code: +(eval-when-compile + (require 'esh-util)) + (require 'esh-opt) +(defgroup eshell-basic nil + "The \"basic\" code provides a set of convenience functions which +are traditionally considered shell builtins. Since all of the +functionality provided by them is accessible through Lisp, they are +not really builtins at all, but offer a command-oriented way to do the +same thing." + :tag "Basic shell commands" + :group 'eshell-module) + +(defcustom eshell-plain-echo-behavior nil + "*If non-nil, `echo' tries to behave like an ordinary shell echo. +This comes at some detriment to Lisp functionality. However, the Lisp +equivalent of `echo' can always be achieved by using `identity'." + :type 'boolean + :group 'eshell-basic) + ;;; Functions: (defun eshell-echo (args &optional output-newline) @@ -180,8 +178,7 @@ or `eshell-printn' for display." "Warning: umask changed for all new files created by Emacs.\n")) nil)) -(eval-when-compile - (defvar print-func)) +(provide 'em-basic) ;;; arch-tag: 385a31b1-cb95-46f0-9829-9d352ee77db8 ;;; em-basic.el ends here diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el index 7247033a235..b5f666a6bf6 100644 --- a/lisp/eshell/em-cmpl.el +++ b/lisp/eshell/em-cmpl.el @@ -22,18 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-cmpl) - -(eval-when-compile (require 'esh-maint)) -(require 'esh-util) - -(defgroup eshell-cmpl nil - "This module provides a programmable completion function bound to -the TAB key, which allows for completing command names, file names, -variable names, arguments, etc." - :tag "Argument completion" - :group 'eshell-module) - ;;; Commentary: ;; Eshell, by using the pcomplete package, provides a full @@ -82,6 +70,19 @@ variable names, arguments, etc." ;; This only works well if the completion function has provided Eshell ;; with sufficient pointers to locate the relevant help text. +;;; Code: + +(eval-when-compile + (require 'eshell)) +(require 'esh-util) + +(defgroup eshell-cmpl nil + "This module provides a programmable completion function bound to +the TAB key, which allows for completing command names, file names, +variable names, arguments, etc." + :tag "Argument completion" + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-cmpl-load-hook '(eshell-cmpl-initialize) @@ -296,7 +297,7 @@ to writing a completion function." (define-key eshell-mode-map [tab] 'pcomplete) (define-key eshell-mode-map [(control ?i)] 'pcomplete) ;; jww (1999-10-19): Will this work on anything but X? - (if (eshell-under-xemacs-p) + (if (featurep 'xemacs) (define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse) (define-key eshell-mode-map [(shift iso-lefttab)] 'pcomplete-reverse) (define-key eshell-mode-map [(shift control ?i)] 'pcomplete-reverse)) @@ -448,7 +449,7 @@ to writing a completion function." (all-completions filename obarray 'functionp)) completions))))))) -;;; Code: +(provide 'em-cmpl) ;;; arch-tag: 0e914699-673a-45f8-8cbf-82e1dbc571bc ;;; em-cmpl.el ends here diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index 02556661b1b..8a1e81621bc 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -22,20 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-dirs) - -(eval-when-compile (require 'esh-maint)) -(require 'eshell) - -(defgroup eshell-dirs nil - "Directory navigation involves changing directories, examining the -current directory, maintaining a directory stack, and also keeping -track of a history of the last directory locations the user was in. -Emacs does provide standard Lisp definitions of `pwd' and `cd', but -they lack somewhat in feel from the typical shell equivalents." - :tag "Directory navigation" - :group 'eshell-module) - ;;; Commentary: ;; The only special feature that Eshell offers in the last-dir-ring. @@ -57,9 +43,21 @@ they lack somewhat in feel from the typical shell equivalents." ;; Eshell sessions. It is a separate mechanism from `pushd' and ;; `popd', and the two may be used at the same time. +;;; Code: + +(require 'eshell) (require 'ring) (require 'esh-opt) +(defgroup eshell-dirs nil + "Directory navigation involves changing directories, examining the +current directory, maintaining a directory stack, and also keeping +track of a history of the last directory locations the user was in. +Emacs does provide standard Lisp definitions of `pwd' and `cd', but +they lack somewhat in feel from the typical shell equivalents." + :tag "Directory navigation" + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-dirs-load-hook '(eshell-dirs-initialize) @@ -566,7 +564,7 @@ in the minibuffer: (write-region (point-min) (point-max) file nil 'no-message)))))))) -;;; Code: +(provide 'em-dirs) ;;; arch-tag: 1e9c5a95-f1bd-45f8-ad36-55aac706e787 ;;; em-dirs.el ends here diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el index 2e95aaefae0..b08ddd77e19 100644 --- a/lisp/eshell/em-glob.el +++ b/lisp/eshell/em-glob.el @@ -22,19 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -;;; Code: - -(provide 'em-glob) - -(eval-when-compile (require 'esh-maint)) -(require 'esh-util) - -(defgroup eshell-glob nil - "This module provides extended globbing syntax, similar what is used -by zsh for filename generation." - :tag "Extended filename globbing" - :group 'eshell-module) - ;;; Commentary: ;; The globbing code used by Eshell closely follows the syntax used by @@ -63,6 +50,17 @@ by zsh for filename generation." ;; owned by the user 'johnw'. See [Value modifiers and predicates], ;; for more information about argument predication. +;;; Code: + +(eval-when-compile (require 'eshell)) +(require 'esh-util) + +(defgroup eshell-glob nil + "This module provides extended globbing syntax, similar what is used +by zsh for filename generation." + :tag "Extended filename globbing" + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-glob-load-hook '(eshell-glob-initialize) @@ -356,5 +354,7 @@ the form: (eshell-glob-entries (car rdirs) globs recurse-p) (setq rdirs (cdr rdirs))))) +(provide 'em-glob) + ;;; arch-tag: d0548f54-fb7c-4978-a88e-f7c26f7f68ca ;;; em-glob.el ends here diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el index 88e15423956..2dd2b31d34a 100644 --- a/lisp/eshell/em-hist.el +++ b/lisp/eshell/em-hist.el @@ -22,16 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-hist) - -(eval-when-compile (require 'esh-maint)) -(require 'eshell) - -(defgroup eshell-hist nil - "This module provides command history management." - :tag "History list management" - :group 'eshell-module) - ;;; Commentary: ;; Eshell's history facility imitates the syntax used by bash @@ -70,6 +60,12 @@ (require 'ring) (require 'esh-opt) (require 'em-pred) +(require 'eshell) + +(defgroup eshell-hist nil + "This module provides command history management." + :tag "History list management" + :group 'eshell-module) ;;; User Variables: @@ -988,5 +984,7 @@ If N is negative, search backwards for the -Nth previous match." (isearch-done) (eshell-send-input)) +(provide 'em-hist) + ;;; arch-tag: 1a847333-f864-4b96-9acd-b549d620b6c6 ;;; em-hist.el ends here diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el index d6b4f3aed29..01a6bb87a1f 100644 --- a/lisp/eshell/em-ls.el +++ b/lisp/eshell/em-ls.el @@ -22,9 +22,16 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-ls) +;;; Commentary: -(eval-when-compile (require 'esh-maint)) +;; Most of the command switches recognized by GNU's ls utility are +;; supported ([(fileutils)ls invocation]). + +;;; Code: + +(eval-when-compile (require 'eshell)) +(require 'esh-util) +(require 'esh-opt) (defgroup eshell-ls nil "This module implements the \"ls\" utility fully in Lisp. If it is @@ -35,14 +42,6 @@ properties to colorize its output based on the setting of :tag "Implementation of `ls' in Lisp" :group 'eshell-module) -;;; Commentary: - -;; Most of the command switches recognized by GNU's ls utility are -;; supported ([(fileutils)ls invocation]). - -(require 'esh-util) -(require 'esh-opt) - ;;; User Variables: (defvar eshell-ls-orig-insert-directory @@ -922,7 +921,7 @@ to use, and each member of which is the width of that column (car file))))) (car file)) -;;; Code: +(provide 'em-ls) ;;; arch-tag: 9295181c-0cb2-499c-999b-89f5359842cb ;;; em-ls.el ends here diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index a7f68e4e222..628b8b61143 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -22,18 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-pred) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-pred nil - "This module allows for predicates to be applied to globbing -patterns (similar to zsh), in addition to string modifiers which can -be applied either to globbing results, variable references, or just -ordinary strings." - :tag "Value modifiers and predicates" - :group 'eshell-module) - ;;; Commentary: ;; Argument predication is used to affect which members of a list are @@ -61,6 +49,16 @@ ordinary strings." ;;; Code: +(eval-when-compile (require 'eshell)) + +(defgroup eshell-pred nil + "This module allows for predicates to be applied to globbing +patterns (similar to zsh), in addition to string modifiers which can +be applied either to globbing results, variable references, or just +ordinary strings." + :tag "Value modifiers and predicates" + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-pred-load-hook '(eshell-pred-initialize) @@ -602,5 +600,7 @@ that 'ls -l' will show in the first column of its display. " (lambda (str) (split-string str ,sep))) lst)))) +(provide 'em-pred) + ;;; arch-tag: 8b5ce022-17f3-4c40-93c7-5faafaa63f31 ;;; em-pred.el ends here diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el index ddbf74f5c42..57a1da74177 100644 --- a/lisp/eshell/em-prompt.el +++ b/lisp/eshell/em-prompt.el @@ -22,9 +22,14 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-prompt) +;;; Commentary: -(eval-when-compile (require 'esh-maint)) +;; Most of the prompt navigation commands of `comint-mode' are +;; supported, such as C-c C-n, C-c C-p, etc. + +;;; Code: + +(eval-when-compile (require 'eshell)) (defgroup eshell-prompt nil "This module provides command prompts, and navigation between them, @@ -32,11 +37,6 @@ as is common with most shells." :tag "Command prompts" :group 'eshell-module) -;;; Commentary: - -;; Most of the prompt navigation commands of `comint-mode' are -;; supported, such as C-c C-n, C-c C-p, etc. - ;;; User Variables: (defcustom eshell-prompt-load-hook '(eshell-prompt-initialize) @@ -173,7 +173,7 @@ If this takes us past the end of the current line, don't skip at all." (<= (match-end 0) eol)) (goto-char (match-end 0))))) -;;; Code: +(provide 'em-prompt) ;;; arch-tag: 01c1574b-ce70-4e89-bc38-e6619f61e208 ;;; em-prompt.el ends here diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el index 898f0b9d301..b550016fbe1 100644 --- a/lisp/eshell/em-rebind.el +++ b/lisp/eshell/em-rebind.el @@ -22,9 +22,11 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-rebind) +;;; Commentary: -(eval-when-compile (require 'esh-maint)) +;;; Code: + +(eval-when-compile (require 'eshell)) (defgroup eshell-rebind nil "This module allows for special keybindings that only take effect @@ -39,8 +41,6 @@ the behavior of normal shells while the user editing new input text." :tag "Rebind keys at input" :group 'eshell-module) -;;; Commentary: - ;;; User Variables: (defcustom eshell-rebind-load-hook '(eshell-rebind-initialize) @@ -242,7 +242,7 @@ input." (eshell-life-is-too-much))) (eshell-delete-backward-char (- arg))))) -;;; Code: +(provide 'em-rebind) ;;; arch-tag: 76d84f12-cc56-4d67-9b7d-c6b44ad20530 ;;; em-rebind.el ends here diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el index 50fdc3ccccc..0a83881c03f 100644 --- a/lisp/eshell/em-script.el +++ b/lisp/eshell/em-script.el @@ -22,9 +22,9 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-script) +;;; Commentary: -(eval-when-compile (require 'esh-maint)) +;;; Code: (require 'eshell) @@ -34,8 +34,6 @@ commands, as a script file." :tag "Running script files." :group 'eshell-module) -;;; Commentary: - ;;; User Variables: (defcustom eshell-script-load-hook '(eshell-script-initialize) @@ -137,7 +135,7 @@ environment, binding ARGS to $1, $2, etc.") (put 'eshell/. 'eshell-no-numeric-conversions t) -;;; Code: +(provide 'em-script) ;;; arch-tag: a346439d-5ba8-4faf-ac2b-3aacfeaa4647 ;;; em-script.el ends here diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el index f99a64bd17d..ffb1b4a4d92 100644 --- a/lisp/eshell/em-smart.el +++ b/lisp/eshell/em-smart.el @@ -22,21 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-smart) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-smart nil - "This module combines the facility of normal, modern shells with -some of the edit/review concepts inherent in the design of Plan 9's -9term. See the docs for more details. - -Most likely you will have to turn this option on and play around with -it to get a real sense of how it works." - :tag "Smart display of output" - ;; :link '(info-link "(eshell)Smart display of output") - :group 'eshell-module) - ;;; Commentary: ;; The best way to get a sense of what this code is trying to do is by @@ -84,6 +69,21 @@ it to get a real sense of how it works." ;; (such as pwd), where the screen is mostly full, consumption can ;; increase by orders of magnitude. +;;; Code: + +(eval-when-compile (require 'eshell)) + +(defgroup eshell-smart nil + "This module combines the facility of normal, modern shells with +some of the edit/review concepts inherent in the design of Plan 9's +9term. See the docs for more details. + +Most likely you will have to turn this option on and play around with +it to get a real sense of how it works." + :tag "Smart display of output" + ;; :link '(info-link "(eshell)Smart display of output") + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-smart-load-hook '(eshell-smart-initialize) @@ -322,7 +322,7 @@ and the end of the buffer are still visible." (if clear (remove-hook 'pre-command-hook 'eshell-smart-display-move t)))) -;;; Code: +(provide 'em-smart) ;;; arch-tag: 8c0112c7-379c-4d54-9a1c-204d68786a4b ;;; em-smart.el ends here diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el index 541773a4b5b..6ee698148da 100644 --- a/lisp/eshell/em-term.el +++ b/lisp/eshell/em-term.el @@ -22,19 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-term) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-term nil - "This module causes visual commands (e.g., 'vi') to be executed by -the `term' package, which comes with Emacs. This package handles most -of the ANSI control codes, allowing curses-based applications to run -within an Emacs window. The variable `eshell-visual-commands' defines -which commands are considered visual in nature." - :tag "Running visual commands" - :group 'eshell-module) - ;;; Commentary: ;; At the moment, eshell is stream-based in its interactive input and @@ -45,8 +32,20 @@ which commands are considered visual in nature." ;; buffer, giving the illusion that Eshell itself is allowing these ;; visual processes to execute. +;;; Code: + +(eval-when-compile (require 'eshell)) (require 'term) +(defgroup eshell-term nil + "This module causes visual commands (e.g., 'vi') to be executed by +the `term' package, which comes with Emacs. This package handles most +of the ANSI control codes, allowing curses-based applications to run +within an Emacs window. The variable `eshell-visual-commands' defines +which commands are considered visual in nature." + :tag "Running visual commands" + :group 'eshell-module) + ;;; User Variables: (defcustom eshell-term-load-hook '(eshell-term-initialize) @@ -264,7 +263,7 @@ allowed." ; "Switch to line (\"cooked\") sub-mode of eshell-term mode." ; (use-local-map term-old-mode-map)) -;;; Code: +(provide 'em-term) ;;; arch-tag: ab7c8fe4-3101-4257-925b-1354c6b2fe9d ;;; em-term.el ends here diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index 33514d515af..e970c87f501 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -22,9 +22,22 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-unix) +;;; Commentary: + +;; This file contains implementations of several UNIX command in Emacs +;; Lisp, for several reasons: +;; +;; 1) it makes them available on all platforms where the Lisp +;; functions used are available +;; +;; 2) it makes their functionality accessible and modified by the +;; Lisp programmer. +;; +;; 3) it allows Eshell to refrain from having to invoke external +;; processes for common operations. + +;;; Code: -(eval-when-compile (require 'esh-maint)) (require 'eshell) (defgroup eshell-unix nil @@ -40,20 +53,6 @@ by name)." :tag "UNIX commands in Lisp" :group 'eshell-module) -;;; Commentary: - -;; This file contains implementations of several UNIX command in Emacs -;; Lisp, for several reasons: -;; -;; 1) it makes them available on all platforms where the Lisp -;; functions used are available -;; -;; 2) it makes their functionality accessible and modified by the -;; Lisp programmer. -;; -;; 3) it allows Eshell to refrain from having to invoke external -;; processes for common operations. - (defcustom eshell-unix-load-hook '(eshell-unix-initialize) "*A list of functions to run when `eshell-unix' is loaded." :type 'hook @@ -78,7 +77,7 @@ receiving side of a command pipeline." :type 'boolean :group 'eshell-unix) -(defcustom eshell-plain-locate-behavior (eshell-under-xemacs-p) +(defcustom eshell-plain-locate-behavior (featurep 'xemacs) "*If non-nil, standalone \"locate\" commands will behave normally. Standalone in this context means not redirected, and not on the receiving side of a command pipeline." @@ -137,8 +136,6 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine." :type 'boolean :group 'eshell-unix) -(require 'esh-opt) - ;;; Functions: (defun eshell-unix-initialize () @@ -169,7 +166,7 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine." (put 'eshell/man 'eshell-no-numeric-conversions t) (defun eshell/info (&rest args) - "Runs the info command in-frame with the same behaviour as command-line `info', ie: + "Run the info command in-frame with the same behavior as command-line `info', ie: 'info' => goes to top info window 'info arg1' => IF arg1 is a file, then visits arg1 'info arg1' => OTHERWISE goes to top info window and then menu item arg1 @@ -1050,7 +1047,7 @@ Show wall-clock time elapsed during execution of COMMAND.") (put 'eshell/occur 'eshell-no-numeric-conversions t) -;;; Code: +(provide 'em-unix) ;;; arch-tag: 2462edd2-a76a-4cf2-897d-92e9a82ac1c9 ;;; em-unix.el ends here diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el index bd48afb6bd6..f0a92eb0c60 100644 --- a/lisp/eshell/em-xtra.el +++ b/lisp/eshell/em-xtra.el @@ -22,9 +22,14 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'em-xtra) +;;; Commentary: -(eval-when-compile (require 'esh-maint)) +;;; Code: + +(eval-when-compile + (require 'eshell) + (require 'pcomplete)) +(require 'compile) (defgroup eshell-xtra nil "This module defines some extra alias functions which are entirely @@ -34,10 +39,6 @@ naturally accessible within Emacs." :tag "Extra alias functions" :group 'eshell-module) -;;; Commentary: - -(require 'compile) - ;;; Functions: (defun eshell/expr (&rest args) @@ -117,7 +118,7 @@ naturally accessible within Emacs." (defalias 'pcomplete/bcc 'pcomplete/bcc32) -;;; Code: +(provide 'em-xtra) ;;; arch-tag: f944cfda-a118-470c-a0d6-b41a3a5c99c7 ;;; em-xtra.el ends here diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index 011e2a55520..7db152d3604 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -22,9 +22,15 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. +;;; Commentary: + +;; Parsing of arguments can be extended by adding functions to the +;; hook `eshell-parse-argument-hook'. For a good example of this, see +;; `eshell-parse-drive-letter', defined in eshell-dirs.el. + (provide 'esh-arg) -(eval-when-compile (require 'esh-maint)) +(eval-when-compile (require 'eshell)) (defgroup eshell-arg nil "Argument parsing involves transforming the arguments passed on the @@ -33,12 +39,6 @@ yield the values intended." :tag "Argument parsing" :group 'eshell) -;;; Commentary: - -;; Parsing of arguments can be extended by adding functions to the -;; hook `eshell-parse-argument-hook'. For a good example of this, see -;; `eshell-parse-drive-letter', defined in eshell-dirs.el. - (defcustom eshell-parse-argument-hook (list ;; a term such as #, or # is a buffer diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index f999bdcdf6d..247d6c74604 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -22,18 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-cmd) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-cmd nil - "Executing an Eshell command is as simple as typing it in and -pressing . There are several different kinds of commands, -however." - :tag "Command invocation" - ;; :link '(info-link "(eshell)Command invocation") - :group 'eshell) - ;;; Commentary: ;;;_* Invoking external commands @@ -64,11 +52,6 @@ however." ;; functions always take precedence, set ;; `eshell-prefer-lisp-functions' to t. -(defcustom eshell-prefer-lisp-functions nil - "*If non-nil, prefer Lisp functions to external commands." - :type 'boolean - :group 'eshell-cmd) - ;;;_* Alias functions ;; ;; Whenever a command is specified using a simple name, such as 'ls', @@ -112,17 +95,44 @@ however." ;; ;; Lisp arguments are identified using the following regexp: +;;;_* Command hooks +;; +;; There are several hooks involved with command execution, which can +;; be used either to change or augment Eshell's behavior. + + +;;; Code: + +(require 'esh-util) +(unless (featurep 'xemacs) + (require 'eldoc)) +(require 'esh-arg) +(require 'esh-proc) +(require 'esh-ext) + +(eval-when-compile + (require 'pcomplete)) + + +(defgroup eshell-cmd nil + "Executing an Eshell command is as simple as typing it in and +pressing . There are several different kinds of commands, +however." + :tag "Command invocation" + ;; :link '(info-link "(eshell)Command invocation") + :group 'eshell) + +(defcustom eshell-prefer-lisp-functions nil + "*If non-nil, prefer Lisp functions to external commands." + :type 'boolean + :group 'eshell-cmd) + (defcustom eshell-lisp-regexp "\\([(`]\\|#'\\)" "*A regexp which, if matched at beginning of an argument, means Lisp. Such arguments will be passed to `read', and then evaluated." :type 'regexp :group 'eshell-cmd) -;;;_* Command hooks -;; -;; There are several hooks involved with command execution, which can -;; be used either to change or augment Eshell's behavior. - (defcustom eshell-pre-command-hook nil "*A hook run before each interactive command is invoked." :type 'hook @@ -219,15 +229,6 @@ return non-nil if the command is complex." (function :tag "Predicate"))) :group 'eshell-cmd) -;;; Code: - -(require 'esh-util) -(unless (eshell-under-xemacs-p) - (require 'eldoc)) -(require 'esh-arg) -(require 'esh-proc) -(require 'esh-ext) - ;;; User Variables: (defcustom eshell-cmd-load-hook '(eshell-cmd-initialize) @@ -394,6 +395,18 @@ hooks should be run before and after the command." (list 'eshell-commands commands) commands))) +(defun eshell-debug-command (tag subform) + "Output a debugging message to '*eshell last cmd*'." + (let ((buf (get-buffer-create "*eshell last cmd*")) + (text (eshell-stringify eshell-current-command))) + (save-excursion + (set-buffer buf) + (if (not tag) + (erase-buffer) + (insert "\n\C-l\n" tag "\n\n" text + (if subform + (concat "\n\n" (eshell-stringify subform)) "")))))) + (defun eshell-debug-show-parsed-args (terms) "Display parsed arguments in the debug buffer." (ignore @@ -956,18 +969,6 @@ at the moment are: "Completion for the `debug' command." (while (pcomplete-here '("errors" "commands")))) -(defun eshell-debug-command (tag subform) - "Output a debugging message to '*eshell last cmd*'." - (let ((buf (get-buffer-create "*eshell last cmd*")) - (text (eshell-stringify eshell-current-command))) - (save-excursion - (set-buffer buf) - (if (not tag) - (erase-buffer) - (insert "\n\C-l\n" tag "\n\n" text - (if subform - (concat "\n\n" (eshell-stringify subform)) "")))))) - (defun eshell-invoke-directly (command input) (let ((base (cadr (nth 2 (nth 2 (cadr command))))) name) (if (and (eq (car base) 'eshell-trap-errors) @@ -1418,5 +1419,7 @@ messages, and errors." (defalias 'eshell-lisp-command* 'eshell-lisp-command) +(provide 'esh-cmd) + ;;; arch-tag: 8e4f3867-a0c5-441f-96ba-ddd142d94366 ;;; esh-cmd.el ends here diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el index 11090f97b83..b3fc5c30bbe 100644 --- a/lisp/eshell/esh-ext.el +++ b/lisp/eshell/esh-ext.el @@ -22,17 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-ext) - -(eval-when-compile (require 'esh-maint)) -(require 'esh-util) - -(defgroup eshell-ext nil - "External commands are invoked when operating system executables are -loaded into memory, thus beginning a new process." - :tag "External commands" - :group 'eshell) - ;;; Commentary: ;; To force a command to invoked external, either provide an explicit @@ -43,6 +32,18 @@ loaded into memory, thus beginning a new process." ;; /bin/grep ; will definitely invoke /bin/grep ;; *grep ; will also invoke /bin/grep +(provide 'esh-ext) + +(eval-when-compile + (require 'esh-cmd)) +(require 'esh-util) + +(defgroup eshell-ext nil + "External commands are invoked when operating system executables are +loaded into memory, thus beginning a new process." + :tag "External commands" + :group 'eshell) + ;;; User Variables: (defcustom eshell-ext-load-hook '(eshell-ext-initialize) @@ -211,7 +212,7 @@ causing the user to wonder if anything's really going on..." (find-file-name-handler default-directory 'shell-command)))) (if (and handler - (not (and (eshell-under-xemacs-p) + (not (and (featurep 'xemacs) (eq handler 'dired-handler-fn)))) (eshell-remote-command handler command args)) (let ((interp (eshell-find-interpreter command))) diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index 897f9942d47..15a4af86346 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -22,17 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-io) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-io nil - "Eshell's I/O management code provides a scheme for treating many -different kinds of objects -- symbols, files, buffers, etc. -- as -though they were files." - :tag "I/O management" - :group 'eshell) - ;;; Commentary: ;; At the moment, only output redirection is supported in Eshell. To @@ -68,6 +57,17 @@ though they were files." ;; (+ 1 2) > a > b > c ; prints number to all three files ;; (+ 1 2) > a | wc ; prints to 'a', and pipes to 'wc' +(provide 'esh-io) + +(eval-when-compile (require 'eshell)) + +(defgroup eshell-io nil + "Eshell's I/O management code provides a scheme for treating many +different kinds of objects -- symbols, files, buffers, etc. -- as +though they were files." + :tag "I/O management" + :group 'eshell) + ;;; User Variables: (defcustom eshell-io-load-hook '(eshell-io-initialize) @@ -417,6 +417,10 @@ it defaults to `insert'." (defvar eshell-print-queue nil) (defvar eshell-print-queue-count -1) +(defsubst eshell-print (object) + "Output OBJECT to the standard output handle." + (eshell-output-object object eshell-output-handle)) + (defun eshell-flush (&optional reset-p) "Flush out any lines that have been queued for printing. Must be called before printing begins with -1 as its argument, and @@ -445,10 +449,6 @@ after all printing is over with no argument." (concat eshell-print-queue (apply 'concat strings)) eshell-print-queue-count (1+ eshell-print-queue-count)))) -(defsubst eshell-print (object) - "Output OBJECT to the standard output handle." - (eshell-output-object object eshell-output-handle)) - (defsubst eshell-error (object) "Output OBJECT to the standard error handle." (eshell-output-object object eshell-error-handle)) diff --git a/lisp/eshell/esh-maint.el b/lisp/eshell/esh-maint.el index 61a4ef9510d..3398014ff55 100644 --- a/lisp/eshell/esh-maint.el +++ b/lisp/eshell/esh-maint.el @@ -26,6 +26,8 @@ ;;; Code: +;; This cannot be moved to the end of the file without causing a +;; recursive require during bootstrap. (provide 'esh-maint) (and (fboundp 'font-lock-add-keywords) @@ -35,11 +37,7 @@ ("(eshell-deftest\\>" . font-lock-keyword-face) ("(eshell-condition-case\\>" . font-lock-keyword-face)))) -(if (file-directory-p "../pcomplete") - (add-to-list 'load-path "../pcomplete")) - -(if (locate-library "pcomplete") - (require 'pcomplete)) +(require 'pcomplete nil t) ; why? (eval-when-compile (require 'cl) diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 8b7338f8833..eb618f6b6b8 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -22,15 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-mode) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-mode nil - "This module contains code for handling input from the user." - :tag "User interface" - :group 'eshell) - ;;; Commentary: ;; Basically, Eshell is used just like shell mode (). The @@ -68,11 +59,19 @@ ;; ;; @ will move backward a complete shell argument. +(provide 'esh-mode) + +(eval-when-compile (require 'esh-util)) (require 'esh-module) (require 'esh-cmd) (require 'esh-io) (require 'esh-var) +(defgroup eshell-mode nil + "This module contains code for handling input from the user." + :tag "User interface" + :group 'eshell) + ;;; User Variables: (defcustom eshell-mode-unload-hook nil @@ -222,11 +221,6 @@ This is used by `eshell-watch-for-password-prompt'." (define-abbrev-table 'eshell-mode-abbrev-table ()) -(eval-when-compile - (unless (eshell-under-xemacs-p) - (defalias 'characterp 'ignore) - (defalias 'char-int 'ignore))) - (if (not eshell-mode-syntax-table) (let ((i 0)) (setq eshell-mode-syntax-table (make-syntax-table)) @@ -269,7 +263,7 @@ This is used by `eshell-watch-for-password-prompt'." (modify-syntax-entry ?\[ "(] " eshell-mode-syntax-table) (modify-syntax-entry ?\] ")[ " eshell-mode-syntax-table) ;; All non-word multibyte characters should be `symbol'. - (if (eshell-under-xemacs-p) + (if (featurep 'xemacs) (map-char-table (function (lambda (key val) @@ -470,7 +464,7 @@ This is used by `eshell-watch-for-password-prompt'." (eshell-deftest mode command-running-p "Modeline shows no command running" - (or (eshell-under-xemacs-p) + (or (featurep 'xemacs) (not eshell-status-in-modeline) (and (memq 'eshell-command-running-string mode-line-format) (equal eshell-command-running-string "--")))) diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el index 17067197909..cf9c2595a87 100644 --- a/lisp/eshell/esh-module.el +++ b/lisp/eshell/esh-module.el @@ -23,11 +23,15 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. +;;; Code: + (provide 'esh-module) (eval-when-compile - (require 'esh-maint) - (require 'cl)) + (require 'cl) + (require 'esh-util)) + +(require 'esh-util) (defgroup eshell-module nil "The `eshell-module' group is for Eshell extension modules, which @@ -36,10 +40,7 @@ customizing the variable `eshell-modules-list'." :tag "Extension modules" :group 'eshell) -;;; Commentary: - -(require 'esh-util) - +(eval-and-compile (defun eshell-load-defgroups (&optional directory) "Load `defgroup' statements from Eshell's module files." (let ((vc-handled-backends nil)) ; avoid VC fucking things up @@ -68,7 +69,9 @@ customizing the variable `eshell-modules-list'." (if defgroup (insert defgroup "\n\n"))) (setq files (cdr files)))) - (save-buffer)))) + ;; Don't make backups, to avoid prompting the user if there are + ;; excess backup versions. + (save-buffer 0))))) ;; load the defgroup's for the standard extension modules, so that ;; documentation can be provided when the user customize's diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el index 66310895131..ec2279dff29 100644 --- a/lisp/eshell/esh-opt.el +++ b/lisp/eshell/esh-opt.el @@ -22,9 +22,11 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. +;;; Commentary: + (provide 'esh-opt) -(eval-when-compile (require 'esh-maint)) +(eval-when-compile (require 'esh-ext)) (defgroup eshell-opt nil "The options processing code handles command argument parsing for @@ -32,8 +34,6 @@ Eshell commands implemented in Lisp." :tag "Command options processing" :group 'eshell) -;;; Commentary: - ;;; User Functions: (defmacro eshell-eval-using-options (name macro-args diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index 7338756e3f8..c679ea7440a 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -22,9 +22,13 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. +;;; Commentary: + (provide 'esh-proc) -(eval-when-compile (require 'esh-maint)) +(eval-when-compile + (require 'eshell) + (require 'esh-util)) (defgroup eshell-proc nil "When Eshell invokes external commands, it always does so @@ -33,8 +37,6 @@ finish." :tag "Process management" :group 'eshell) -;;; Commentary: - ;;; User Variables: (defcustom eshell-proc-load-hook '(eshell-proc-initialize) diff --git a/lisp/eshell/esh-test.el b/lisp/eshell/esh-test.el index b4d65fa1f5e..a8e029b629c 100644 --- a/lisp/eshell/esh-test.el +++ b/lisp/eshell/esh-test.el @@ -22,15 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-test) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-test nil - "This module is meant to ensure that Eshell is working correctly." - :tag "Eshell test suite" - :group 'eshell) - ;;; Commentary: ;; The purpose of this module is to verify that Eshell works as @@ -39,8 +30,16 @@ ;;; Code: +(eval-when-compile + (require 'eshell) + (require 'esh-util)) (require 'esh-mode) +(defgroup eshell-test nil + "This module is meant to ensure that Eshell is working correctly." + :tag "Eshell test suite" + :group 'eshell) + ;;; User Variables: (defface eshell-test-ok @@ -236,5 +235,7 @@ "\n")))) nil t)) +(provide 'esh-test) + ;;; arch-tag: 6e32275a-8285-4a4e-b7cf-819aa7c86b8e ;;; esh-test.el ends here diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index 25afdc38506..50243e76032 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -22,19 +22,15 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-util) +;;; Commentary: -(eval-when-compile (require 'esh-maint)) +;;; Code: (defgroup eshell-util nil "This is general utility code, meant for use by Eshell itself." :tag "General utilities" :group 'eshell) -;;; Commentary: - -(require 'pp) - ;;; User Variables: (defcustom eshell-stringify-t t @@ -139,10 +135,6 @@ function `string-to-number'." ;;; Functions: -(defsubst eshell-under-xemacs-p () - "Return non-nil if we are running under XEmacs." - (boundp 'xemacs-logo)) - (defsubst eshell-under-windows-p () "Return non-nil if we are running under MS-DOS/Windows." (memq system-type '(ms-dos windows-nt))) @@ -433,7 +425,9 @@ list." ;; "args out of range" error in `sit-for', if this function ;; runs while point is in the minibuffer and the users attempt ;; to use completion. Don't ask me. - (ignore-errors (sit-for 0 0))) + (condition-case nil + (sit-for 0 0) + (error nil))) (defun eshell-read-passwd-file (file) "Return an alist correlating gids to group names in FILE." @@ -636,7 +630,7 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable. (autoload 'parse-time-string "parse-time")) (eval-when-compile - (load "ange-ftp" t)) + (require 'ange-ftp nil t)) (defun eshell-parse-ange-ls (dir) (let (entry) @@ -785,7 +779,7 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable. ; (or result ; (file-attributes filename)))) -;;; Code: +(provide 'esh-util) ;;; arch-tag: 70159778-5c7a-480a-bae4-3ad332fca19d ;;; esh-util.el ends here diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index 7c04b5a942a..dbc8802a9c5 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -22,18 +22,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'esh-var) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell-var nil - "Variable interpolation is introduced whenever the '$' character -appears unquoted in any argument (except when that argument is -surrounded by single quotes). It may be used to interpolate a -variable value, a subcommand, or even the result of a Lisp form." - :tag "Variable handling" - :group 'eshell) - ;;; Commentary: ;; These are the possible variable interpolation syntaxes. Also keep @@ -118,9 +106,25 @@ variable value, a subcommand, or even the result of a Lisp form." ;; contains the exit code of the last command (0 or 1 for Lisp ;; functions, based on successful completion). +(provide 'esh-var) + +(eval-when-compile + (require 'pcomplete) + (require 'esh-test) + (require 'esh-util) + (require 'esh-opt) + (require 'esh-mode)) (require 'env) (require 'ring) +(defgroup eshell-var nil + "Variable interpolation is introduced whenever the '$' character +appears unquoted in any argument (except when that argument is +surrounded by single quotes). It may be used to interpolate a +variable value, a subcommand, or even the result of a Lisp form." + :tag "Variable handling" + :group 'eshell) + ;;; User Variables: (defcustom eshell-var-load-hook '(eshell-var-initialize) diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el index 23e36149174..58bc72a3ea9 100644 --- a/lisp/eshell/eshell.el +++ b/lisp/eshell/eshell.el @@ -24,21 +24,6 @@ ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. -(provide 'eshell) - -(eval-when-compile (require 'esh-maint)) - -(defgroup eshell nil - "Eshell is a command shell implemented entirely in Emacs Lisp. It -invokes no external processes beyond those requested by the user. It -is intended to be a functional replacement for command shells such as -bash, zsh, rc, 4dos; since Emacs itself is capable of handling most of -the tasks accomplished by such tools." - :tag "The Emacs shell" - :link '(info-link "(eshell)Top") - :version "21.1" - :group 'applications) - ;;; Commentary: ;;;_* What does Eshell offer you? @@ -73,33 +58,9 @@ the tasks accomplished by such tools." ;; @ Alias functions, both Lisp and Eshell-syntax ;; @ Piping, sequenced commands, background jobs, etc... ;; -;;;_* Eshell is free software -;; -;; Eshell 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 3, 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 Eshell; see the file COPYING. If not, write to the Free -;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -;; MA 02110-1301, USA. -;; ;;;_* How to begin ;; -;; To start using Eshell, add the following to your .emacs file: -;; -;; (load "eshell-auto") -;; -;; This will define all of the necessary autoloads. -;; -;; Now type `M-x eshell'. See the INSTALL file for full installation -;; instructions. +;; To start using Eshell, simply type `M-x eshell'. ;; ;;;_* Philosophy ;; @@ -263,12 +224,28 @@ the tasks accomplished by such tools." ;; will only have to read in this one file, which will greatly speed ;; things up. +(eval-when-compile + (require 'cl) + (require 'esh-util)) +(require 'esh-util) +(require 'esh-mode) + +(defgroup eshell nil + "Eshell is a command shell implemented entirely in Emacs Lisp. It +invokes no external processes beyond those requested by the user. It +is intended to be a functional replacement for command shells such as +bash, zsh, rc, 4dos; since Emacs itself is capable of handling most of +the tasks accomplished by such tools." + :tag "The Emacs shell" + :link '(info-link "(eshell)Top") + :version "21.1" + :group 'applications) + + ;;;_* User Options ;; ;; The following user options modify the behavior of Eshell overall. - -(unless (featurep 'esh-util) - (load "esh-util" nil t)) +(defvar eshell-buffer-name) (defsubst eshell-add-to-window-buffer-names () "Add `eshell-buffer-name' to `same-window-buffer-names'." @@ -280,19 +257,19 @@ the tasks accomplished by such tools." (delete eshell-buffer-name same-window-buffer-names))) (defcustom eshell-load-hook nil - "*A hook run once Eshell has been loaded." + "A hook run once Eshell has been loaded." :type 'hook :group 'eshell) (defcustom eshell-unload-hook '(eshell-remove-from-window-buffer-names eshell-unload-all-modules) - "*A hook run when Eshell is unloaded from memory." + "A hook run when Eshell is unloaded from memory." :type 'hook :group 'eshell) (defcustom eshell-buffer-name "*eshell*" - "*The basename used for Eshell buffers." + "The basename used for Eshell buffers." :set (lambda (symbol value) ;; remove the old value of `eshell-buffer-name', if present (if (boundp 'eshell-buffer-name) @@ -309,7 +286,7 @@ the tasks accomplished by such tools." (member eshell-buffer-name same-window-buffer-names)) (defcustom eshell-directory-name (convert-standard-filename "~/.eshell/") - "*The directory where Eshell control files should be kept." + "The directory where Eshell control files should be kept." :type 'directory :group 'eshell) @@ -356,10 +333,8 @@ buffer selected (or created)." ;; `same-window-buffer-names', which is done when Eshell is loaded (assert (and buf (buffer-live-p buf))) (pop-to-buffer buf) - (if (fboundp 'eshell-mode) - (unless (eq major-mode 'eshell-mode) - (eshell-mode)) - (error "`eshell-auto' must be loaded before Eshell can be used")) + (unless (eq major-mode 'eshell-mode) + (eshell-mode)) buf)) (defun eshell-return-exits-minibuffer () @@ -406,7 +381,6 @@ With prefix ARG, insert output into the current buffer at point." (format " >>> #" (buffer-name (current-buffer)))))) (save-excursion - (require 'esh-mode) (let ((buf (set-buffer (generate-new-buffer " *eshell cmd*"))) (eshell-non-interactive-p t)) (eshell-mode) @@ -465,7 +439,6 @@ corresponding to a successful execution." (if (and status-var (symbolp status-var)) (set status-var 0))) (with-temp-buffer - (require 'esh-mode) (let ((eshell-non-interactive-p t)) (eshell-mode) (let ((result (eshell-do-eval @@ -483,40 +456,12 @@ corresponding to a successful execution." ;;;_* Reporting bugs ;; -;; Since Eshell has not yet been in use by a wide audience, and since -;; the number of possible configurations is quite large, it is certain -;; that many bugs slipped past the rigors of testing it was put -;; through. If you do encounter a bug, on any system, please report +;; If you do encounter a bug, on any system, please report ;; it -- in addition to any particular oddities in your configuration ;; -- so that the problem may be corrected for the benefit of others. -(defconst eshell-report-bug-address "johnw@gnu.org" - "E-mail address to send Eshell bug reports to.") - ;;;###autoload -(defun eshell-report-bug (topic) - "Report a bug in Eshell. -Prompts for the TOPIC. Leaves you in a mail buffer. -Please include any configuration details that might be involved." - (interactive "sBug Subject: ") - (compose-mail eshell-report-bug-address topic) - (goto-char (point-min)) - (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) - (forward-line 1) - (let ((signature (buffer-substring (point) (point-max)))) - ;; Discourage users from writing non-English text. - (set-buffer-multibyte nil) - (delete-region (point) (point-max)) - (insert signature) - (backward-char (length signature))) - (insert "emacs-version: " (emacs-version)) - (insert "\n\nThere appears to be a bug in Eshell.\n\n" - "Please describe exactly what actions " - "triggered the bug and the precise\n" - "symptoms of the bug:\n\n") - ;; This is so the user has to type something in order to send - ;; the report easily. - (use-local-map (nconc (make-sparse-keymap) (current-local-map)))) +(define-obsolete-function-alias 'eshell-report-bug 'report-emacs-bug "23.1") ;;; Code: @@ -543,5 +488,7 @@ Emacs." (run-hooks 'eshell-load-hook) +(provide 'eshell) + ;;; arch-tag: 9d4d5214-0e4e-4e02-b349-39add640d63f ;;; eshell.el ends here diff --git a/lisp/ffap.el b/lisp/ffap.el index 8c338bd947a..d045e5aa7f9 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -1045,6 +1045,9 @@ Assumes the buffer has not changed." ;; Older: (apply 'copy-region-as-kill ffap-string-at-point-region) (message "Copied to kill ring: %s" str)))) +;; External. +(declare-function w3-view-this-url "ext:w3" (&optional no-show)) + (defun ffap-url-at-point nil "Return url from around point if it exists, or nil." ;; Could use w3's url-get-url-at-point instead. Both handle "URL:", @@ -1687,20 +1690,8 @@ Only intended for interactive use." ;;; Bug Reporter: -(defun ffap-bug nil - "Submit a bug report for the ffap package." - ;; Important: keep the version string here in synch with that at top - ;; of file! Could use lisp-mnt from Emacs 19, but that would depend - ;; on being able to find the ffap.el source file. - (interactive) - (require 'reporter) - (let ((reporter-prompt-for-summary-p t)) - (reporter-submit-bug-report - "Michelangelo Grigni " - "ffap" - (mapcar 'intern (all-completions "ffap-" obarray 'boundp))))) - -(fset 'ffap-submit-bug 'ffap-bug) ; another likely name +(define-obsolete-function-alias 'ffap-bug 'report-emacs-bug "23.1") +(define-obsolete-function-alias 'ffap-submit-bug 'report-emacs-bug "23.1") ;;; Hooks for Gnus, VM, Rmail: @@ -1724,6 +1715,13 @@ Only intended for interactive use." (defvar gnus-summary-buffer) (defvar gnus-article-buffer) +;; This code is called from gnus. +(declare-function gnus-summary-select-article "gnus-sum" + (&optional all-headers force pseudo article)) + +(declare-function gnus-configure-windows "gnus-win" + (setting &optional force)) + (defun ffap-gnus-wrapper (form) ; used by both commands below (and (eq (current-buffer) (get-buffer gnus-summary-buffer)) (gnus-summary-select-article)) ; get article of current line diff --git a/lisp/filecache.el b/lisp/filecache.el index 18c537fed7c..5138c947b7d 100644 --- a/lisp/filecache.el +++ b/lisp/filecache.el @@ -780,10 +780,6 @@ match REGEXP." ;; Keybindings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;###autoload (define-key minibuffer-local-completion-map [C-tab] 'file-cache-minibuffer-complete) -;;;###autoload (define-key minibuffer-local-map [C-tab] 'file-cache-minibuffer-complete) -;;;###autoload (define-key minibuffer-local-must-match-map [C-tab] 'file-cache-minibuffer-complete) - (provide 'filecache) ;;; arch-tag: 433d3ca4-4af2-47ce-b2cf-1f727460f538 diff --git a/lisp/files.el b/lisp/files.el index a7dd79b8a88..8d5fcfda8c2 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -213,6 +213,15 @@ have fast storage with limited space, such as a RAM disk." ;; The system null device. (Should reference NULL_DEVICE from C.) (defvar null-device "/dev/null" "The system null device.") +(declare-function msdos-long-file-names "msdos.c") +(declare-function w32-long-file-name "w32proc.c") +(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep)) +(declare-function dired-unmark "dired" (arg)) +(declare-function dired-do-flagged-delete "dired" (&optional nomessage)) +(declare-function dos-8+3-filename "dos-fns" (filename)) +(declare-function vms-read-directory "vms-patch" (dirname switches buffer)) +(declare-function view-mode-disable "view" ()) + (defvar file-name-invalid-regexp (cond ((and (eq system-type 'ms-dos) (not (msdos-long-file-names))) (concat "^\\([^A-Z[-`a-z]\\|..+\\)?:\\|" ; colon except after drive @@ -2428,7 +2437,11 @@ Otherwise, return nil; point may be changed." ;; put them in the first line of ;; such a file without screwing up ;; the interpreter invocation. - (and (looking-at "^#!") 2)) t) + ;; The same holds for + ;; '\" + ;; in man pages (preprocessor + ;; magic for the `man' program). + (and (looking-at "^\\(#!\\|'\\\\\"\\)") 2)) t) (progn (skip-chars-forward " \t") (setq beg (point)) @@ -2619,7 +2632,7 @@ n -- to ignore the local variables list.") (if offer-save '(?! ?y ?n ?\s ?\C-g) '(?y ?n ?\s ?\C-g))) done) (while (not done) - (message prompt) + (message "%s" prompt) (setq char (read-event)) (if (numberp char) (cond ((eq char ?\C-v) diff --git a/lisp/font-lock.el b/lisp/font-lock.el index f8201250096..dab7c9b3af4 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -886,6 +886,13 @@ The value of this variable is used when Font Lock mode is turned on." (defvar lazy-lock-mode) (defvar jit-lock-mode) +(declare-function fast-lock-after-fontify-buffer "fast-lock") +(declare-function fast-lock-after-unfontify-buffer "fast-lock") +(declare-function fast-lock-mode "fast-lock") +(declare-function lazy-lock-after-fontify-buffer "lazy-lock") +(declare-function lazy-lock-after-unfontify-buffer "lazy-lock") +(declare-function lazy-lock-mode "lazy-lock") + (defun font-lock-turn-on-thing-lock () (let ((thing-mode (font-lock-value-in-major-mode font-lock-support-mode))) (cond ((eq thing-mode 'fast-lock-mode) diff --git a/lisp/gnus/format-spec.el b/lisp/format-spec.el similarity index 100% rename from lisp/gnus/format-spec.el rename to lisp/format-spec.el diff --git a/lisp/frame.el b/lisp/frame.el index 1c11829475b..df3ed16f574 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -292,8 +292,9 @@ there (in decreasing order of priority)." ;; the buffer of the selected window, which fails when the selected ;; window is the minibuffer. (let ((old-buffer (current-buffer)) - (window-system-frame-alist (cdr (assq initial-window-system - window-system-default-frame-alist)))) + (window-system-frame-alist + (cdr (assq initial-window-system + window-system-default-frame-alist)))) (when (and frame-notice-user-settings (null frame-initial-frame)) @@ -599,6 +600,8 @@ is not considered (see `next-frame')." 0)) (select-frame-set-input-focus (selected-frame))) +(declare-function x-initialize-window-system "term/x-win" ()) + (defun make-frame-on-display (display &optional parameters) "Make a frame on X display DISPLAY. The optional second argument PARAMETERS specifies additional frame parameters." @@ -714,7 +717,8 @@ setup is for focus to follow the pointer." (let ((type (terminal-live-p (cdr (assq 'terminal parameters))))) (cond ((eq type t) nil) - ((eq type nil) (error "Terminal %s does not exist" (cdr (assq 'terminal parameters)))) + ((eq type nil) (error "Terminal %s does not exist" + (cdr (assq 'terminal parameters)))) (t type)))) ((assq 'window-system parameters) (cdr (assq 'window-system parameters))) @@ -725,7 +729,10 @@ setup is for focus to follow the pointer." (unless frame-creation-function (error "Don't know how to create a frame on window system %s" w)) (run-hooks 'before-make-frame-hook) - (setq frame (funcall frame-creation-function (append parameters (cdr (assq w window-system-default-frame-alist))))) + (setq frame + (funcall frame-creation-function + (append parameters + (cdr (assq w window-system-default-frame-alist))))) (normal-erase-is-backspace-setup-frame frame) ;; Inherit the original frame's parameters. (dolist (param frame-inherited-parameters) @@ -1126,6 +1133,8 @@ bars (top, bottom, or nil)." "Return the terminal that is now selected." (frame-terminal (selected-frame))) +(declare-function msdos-mouse-p "dosfns.c") + (defun display-mouse-p (&optional display) "Return non-nil if DISPLAY has a mouse available. DISPLAY can be a display name, a frame, or nil (meaning the selected diff --git a/lisp/generic-x.el b/lisp/generic-x.el index fbabf6e6996..f400b299b9e 100644 --- a/lisp/generic-x.el +++ b/lisp/generic-x.el @@ -383,6 +383,10 @@ your changes into effect." "Generic mode for HOSTS files.")) ;;; Windows INF files + +;; If i-g-m-f-f-h is defined, then so is i-g-m. +(declare-function ini-generic-mode "generic-x") + (when (memq 'inf-generic-mode generic-extras-enable-list) (define-generic-mode inf-generic-mode @@ -443,6 +447,8 @@ like an INI file. You can add this hook to `find-file-hook'." '((nil "^\\s-*\\(.*\\)\\s-*=" 1)))))) "Generic mode for MS-Windows Registry files.")) +(declare-function w32-shell-name "w32-fns" ()) + ;;; DOS/Windows BAT files (when (memq 'bat-generic-mode generic-extras-enable-list) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7ac757f24e2..bb92d478277 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,422 @@ +2007-12-05 Katsumi Yamaoka + + * gnus-art.el (gnus-use-idna) + * gnus-start.el (gnus-site-init-file) + * message.el (message-use-idna) + * mm-uu.el (mm-uu-hide-markers) + * smiley.el (smiley-style): Revert changes that suppress warnings. + +2007-12-05 Katsumi Yamaoka + + * gnus-art.el (gnus-article-browse-html-parts): Add meta html tag to + specify charset to html source. Reported by Christoph Conrad + . + +2007-12-05 Katsumi Yamaoka + + * gnus-art.el (gnus-use-idna): Don't directly refer to the value of + idna-program in order to suppress byte compile warning issued by XEmacs + that came to byte compile the default value section of defcustom forms + recently. + + * gnus-start.el (gnus-site-init-file): Don't directly refer to the + value of installation-directory. + + * message.el (message-use-idna): Don't directly refer to the value of + idna-program. + + * mm-uu.el (mm-uu-hide-markers): Don't directly call defined-colors. + + * smiley.el (smiley-style): Don't directly call face-attribute. + +2007-12-04 Reiner Steib + + * gnus-group.el (gnus-group-highlight-line): Add FIXME. + + * gnus-dired.el: Reduce Gnus dependencies. + (gnus-ems, gnus-msg, gnus-util, message, mm-decode, mml): Don't + require. Use autoloads instead. + (mml-attach-file, mm-default-file-encoding, mailcap-extension-to-mime) + (mailcap-mime-info, mm-mailcap-command, ps-print-preprint) + (message-buffers, gnus-setup-message, gnus-print-buffer): Autoload. + (gnus-dired-mode): Adjust doc string. + (gnus-dired-mail-mode): New variable. + (gnus-dired-mode-map): Avoid using `gnus-define-keys'. + (gnus-dired-mode): Avoid using `gnus-run-hooks'. + (gnus-dired-mail-buffers): New function. Return mail or message + composition buffers. + (gnus-dired-attach): Use it. + (gnus-dired-find-file-mailcap): Call `mailcap-mime-info' with + NO-DECODE. + (gnus-dired-print): Use `gnus-print-buffer' depending on + `gnus-dired-mail-mode'. + +2007-12-04 Katsumi Yamaoka + + * rfc2047.el (rfc2047-encoded-word-regexp) + (rfc2047-encoded-word-regexp-loose): Move forward; add comments + explaining what regexp patterns are for. + +2007-12-04 Glenn Morris + + * password.el: Move to ../password-cache.el. + + * mml1991.el (password-read, password-cache-add, password-cache-remove): + * mml2015.el (password-read, password-cache-add, password-cache-remove): + * mml-smime.el (password-read, password-cache-add) + (password-cache-remove): + No need to autoload, since mml-sec requires password. + + * gnus.el (gnus-spam-resend-to, gnus-ham-resend-to): + * message.el (gnus-extract-address-components): + * mml-smime.el (gnus-extract-address-components): Define for compiler. + + * mml-sec.el, sieve-manage.el, smime.el: Require password-cache or + password. + +2007-12-03 Reiner Steib + + * mailcap.el: Reduce dependencies. + (mail-header-parse-content-type): Autoload. + (mailcap-delete-duplicates): New alias. + (mailcap-mime-info): Add optional argument NO-DECODE. + (mailcap-mime-types): Use mailcap-delete-duplicates. + + * message.el (message-ignored-supersedes-headers): Add "X-ID". + +2007-12-03 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-uu-extract-map): Add a command for the yenc + function. + + * gnus-uu.el (gnus-uu-decode-yenc): New command. + (gnus-uu-yenc-article): New function. + + * yenc.el (yenc-first-part-p, yenc-last-part-p): New functions. + + * mm-uu.el (mm-uu-yenc-extract): Get the data from the original + buffer. + +2007-12-02 Glenn Morris + + * sasl-cram.el, sasl-digest.el, sasl-ntlm.el, sasl.el: + Move to ../net. + + * binhex.el, uudecode.el: Move to ../mail. + + * encrypt.el: Remove file. + +2007-12-01 Reiner Steib + + * message.el (message-cite-prefix-regexp): Remove `-' and `+' to avoid + matches on patches. + + * gnus-art.el (gnus-article-browse-html-article): Mention + `mm-text-html-renderer' in the doc string. + + * rfc2047.el (rfc2047-encode-max-chars): Refer to RFC 2047 in doc + string. Add comments. + + * message.el (message-idna-to-ascii-rhs-1): Don't call `idna-to-ascii' + if rhs is ASCII. + +2007-12-01 Glenn Morris + + * dig.el, dns.el: Move to ../net. + * format-spec.el, hex-util.el, sha1.el: Move to ../. + + * mail-source.el (top-level): Require format-spec before + eval-when-compile. + +2007-11-30 Glenn Morris + + * encrypt.el: Require password, rather than autoloading password-read. + +2007-11-28 Elias Oltmanns + + * gnus.el (gnus-method-to-server): Add an optional parameter so the + caller can indicate whether the cache should be disregarded for this + call. This way the result of the call is reproducible at all times and + can be considered a canonical server name for the supplied method. + (gnus-agent-method-p): Canonicalize server names by pushing their + method through `gnus-method-to-server' using the no-cache argument. + + * gnus-srvr.el (gnus-server-insert-server-line): Call + `gnus-method-to-server' with `no-cache' argument. + + * gnus-agent.el (gnus-agent-toggle-plugged): Don't call + gnus-agent-possibly-synchronize-flags as this should be called when the + server is actually being opened. + (gnus-agent-possibly-synchronize-flags) + (gnus-agent-possibly-synchronize-flags-server): Move check for the + flags file of an agentized server to the latter function. + + * gnus-int.el (gnus-agent-possibly-synchronize-flags-server): Autoload. + (gnus-open-server): Call gnus-agent-possibly-synchronize-flags-server + after a connection has been established successfully. + +2007-11-28 Katsumi Yamaoka + + * gnus-art.el (article-display-face): Force to display face if called + interactively; check if gnus-article-x-face-too-ugly matches author. + (article-display-x-face): Display face even if From header is missing + as article-display-face does. + +2007-11-28 Richard Stallman + + * md4.el: Move to ../. + * hmac-def.el, hmac-md5.el, ntlm.el: Move to ../net. + +2007-11-27 Reiner Steib + + * mail-source.el (mail-sources): Default to fetch from file for + compatibility with default of nnmail-spool-file. + +2007-11-27 Katsumi Yamaoka + + * rfc2047.el (rfc2047-allow-irregular-q-encoded-words): New variable. + (rfc2047-encodable-p): Use rfc2047-encoded-word-regexp instead of "=?" + to look for encoded word that should be encoded again. + (rfc2047-encoded-word-regexp): Make B encoding pattern strict. + (rfc2047-encoded-word-regexp-loose): New constant that has loose Q + encoding pattern. + (rfc2047-decode-region): Switch strict regexp and loose one according + to rfc2047-allow-irregular-q-encoded-words. + +2007-11-26 Simon Josefsson + + * imap.el: Move to ../net directory. + +2007-11-25 Romain Francoise + + * gnus-msg.el (gnus-summary-reply): Delete extra paren. + +2007-11-24 Reiner Steib + + * nnmail.el (nnmail-spool-file): Remove obsolete variable. + (nnmail-get-new-mail): Remove code using `nnmail-spool-file'. + + * gnus-start.el (defvar, gnus-get-unread-articles): Remove code using + `nnmail-spool-file'. + + * nnkiboze.el (nnkiboze-generate-groups): Don't bind obsolete + `nnmail-spool-file'. + + * gnus-move.el (gnus-change-server): Ditto. + + * gnus-kill.el (gnus-batch-score): Ditto. + + * gnus-cache.el (gnus-jog-cache): Ditto. + + * gnus-msg.el (gnus-summary-reply): Ignore + gnus-confirm-mail-reply-to-news for wide and very wide replies. + +2007-11-24 Reiner Steib + + * gnus-cache.el (gnus-cache-generate-nov-databases): Use + nnml-generate-nov-databases-directory instead of + nnml-generate-nov-databases-1. + +2007-11-24 Glenn Morris + + * message.el (message-tool-bar-retro): Update for rename + mail_send.xpm->mail-send.xpm. + +2007-11-22 Reiner Steib + + * smime.el (smime-cert-by-ldap-1): Use `ldap-search' instead of + `smime-ldap-search' for Emacs 22 and up. + +2007-11-22 Reiner Steib + + * hashcash.el: Move to ../mail directory. + + * smime-ldap.el: Remove. Not used in Emacs 22 and up. + + * smime.el (smime-cert-by-ldap-1): Use `ldap-search' instead of + `smime-ldap-search' for Emacs 22 and up. + +2007-11-22 Stefan Monnier + + * gnus-art.el (gnus-article-truncate-lines): Use `truncate-lines'. + + * message.el (message-send-mail-function): Fix error convention. + (message-mailer-swallows-blank-line, message-send-mail-with-sendmail) + (message-widen-reply, message-send-mail, message-talkative-question) + (message-with-reply-buffer, message-generate-new-buffer-clone-locals) + (message-clone-locals, message-send-news): Use with-current-buffer. + (message-insert-or-toggle-importance): Remove unused var `valid'. + (message-make-references): Remove unused var `new-references'. + (message-make-mail-followup-to): Remove unused var `subscribed-lists'. + +2007-11-22 Juanma Barranquero + + * spam.el (spam-find-spam, spam-enter-list): Doc fixes. + (spam-split-symbolic-return-positive): Reflow docstring. + (spam-backends, spam-summary-exit-behavior) + (spam-mark-ham-unread-before-move-from-spam-group) + (spam-summary-score-preferred-header, spam-sa-learn-spam-switch) + (spam-sa-learn-ham-switch, spam-sa-learn-unregister-switch) + (spam-clear-cache, spam-backend-check, spam-install-backend) + (spam-install-statistical-backend, spam-list-of-processors) + (spam-group-processor-p, spam-split, spam-bogofilter-score) + (spam-bsfilter-score, spam-check-bsfilter, spam-crm114-score) + (spam-check-crm114, spam-initialize, spam-unload-hook): + Fix typos in docstrings. + +2007-11-21 Katsumi Yamaoka + + * gnus-start.el (gnus-get-unread-articles): Mark groups as having never + been checked if they have never been read and those group levels are + higher than the one that a user specified. + +2007-11-21 Katsumi Yamaoka + + * gnus-start.el (gnus-get-unread-articles): Don't prevent from checking + foreign groups unless a group level is specified by a user. + Reported by Dan Nicolaescu . + +2007-11-21 Reiner Steib + + * message.el (message-send-mail-function): Require sendmail. + +2007-11-20 Reiner Steib + + * message.el (message-send-mail-function): Check for smtpmail too. + + * utf7.el (utf7-encode, utf7-decode): Use coding system + `utf-7'/`utf-7-imap' from utf-7.el' if available. + + * message.el (message-send-mail-function): New function. + (message-send-mail-function): Set default using + message-send-mail-function. Adjust doc string. + (message-send-mail-with-mailclient): New function. + +2007-11-17 Richard Stallman + + * assistant.el: Remove file. + +2007-11-16 Dan Nicolaescu + + * smime.el (from): + * rfc2047.el (message-posting-charset): + * qp.el (mm-use-ultra-safe-encoding): + * pop3.el (parse-time-months): + * nnrss.el (mm-text-html-renderer, mm-text-html-washer-alist): + * nnml.el (files): + * nnheader.el (gnus-newsgroup-name, nnheader-file-coding-system) + (jka-compr-compression-info-list, ange-ftp-path-format) + (efs-path-regexp): + * nndiary.el (files): + * mml2015.el (mc-default-scheme, mc-schemes, pgg-default-user-id) + (pgg-errors-buffer, pgg-output-buffer, epg-user-id-alist) + (epg-digest-algorithm-alist, inhibit-redisplay) + (password-cache-expiry): + * mml1991.el (pgg-default-user-id, pgg-errors-buffer) + (pgg-output-buffer, password-cache-expiry): + * mml.el (mml-dnd-protocol-alist, ange-ftp-name-format) + (efs-path-regexp): + * mml-smime.el (epg-user-id-alist, epg-digest-algorithm-alist) + (inhibit-redisplay): + * mm-uu.el (file-name, start-point, end-point, entry) + (gnus-newsgroup-name, gnus-newsgroup-charset): + * mm-util.el (mm-mime-mule-charset-alist, latin-unity-coding-systems) + (latin-unity-ucs-list): + * mm-bodies.el (mm-uu-yenc-decode-function, mm-uu-decode-function) + (mm-uu-binhex-decode-function): + * message.el (gnus-message-group-art, gnus-list-identifiers, ) + (rmail-enable-mime-composing, gnus-local-organization) + (gnus-post-method, gnus-select-method, gnus-active-hashtb) + (gnus-read-active-file, facemenu-add-face-function) + (facemenu-remove-face-function, gnus-article-decoded-p) + (tool-bar-mode): + * mail-source.el (display-time-mail-function): + * gnus-util.el (nnmail-pathname-coding-system) + (nnmail-active-file-coding-system, gnus-emphasize-whitespace-regexp) + (gnus-original-article-buffer, gnus-user-agent) + (rmail-default-rmail-file, mm-text-coding-system, tool-bar-mode) + (xemacs-codename, sxemacs-codename, emacs-program-version): + * gnus-sum.el (tool-bar-mode, gnus-tmp-header, number): + * gnus-start.el (gnus-agent-covered-methods) + (gnus-agent-file-loading-local, gnus-agent-file-loading-cache) + (gnus-current-headers, gnus-thread-indent-array, gnus-newsgroup-name) + (gnus-newsgroup-headers, gnus-group-list-mode) + (gnus-group-mark-positions, gnus-newsgroup-data) + (gnus-newsgroup-unreads, nnoo-state-alist) + (gnus-current-select-method, mail-sources) + (nnmail-scan-directory-mail-source-once, nnmail-split-history) + (nnmail-spool-file, gnus-cache-active-hashtb): + * gnus-mh.el (mh-lib-progs): + * gnus-ems.el (gnus-tmp-unread, gnus-tmp-replied) + (gnus-tmp-score-char, gnus-tmp-indentation, gnus-tmp-opening-bracket) + (gnus-tmp-lines, gnus-tmp-name, gnus-tmp-closing-bracket) + (gnus-tmp-subject-or-nil, gnus-check-before-posting, gnus-mouse-face) + (gnus-group-buffer): + * gnus-cite.el (font-lock-defaults-computed, font-lock-keywords) + (font-lock-set-defaults): + * gnus-art.el (tool-bar-map, w3m-minor-mode-map) + (gnus-face-properties-alist, charset, gnus-summary-article-menu) + (gnus-summary-post-menu, total-parts, type, condition, length): + * gnus-agent.el (gnus-agent-read-agentview): + * flow-fill.el (show-trailing-whitespace): + * gnus-group.el (tool-bar-mode, nnrss-group-alist): Remove unnecessary + eval-and-compile wrappers for byte compiler pacifiers. + + * mm-view.el (mm-inline-image-xemacs): Only do something for XEmacs. + (mm-display-inline-fontify): Check for featurep 'xemacs not + extent-list. + + * mm-decode.el (mm-display-external): Check for featurep 'xemacs not + itimer-list. + (mm-create-image-xemacs): Only do something for XEmacs. + (mm-image-fit-p): Check for featurep 'xemacs not glyph-width. + + * mm-util.el (mm-find-buffer-file-coding-system): Add check for XEmacs. + + * gnus-registry.el (gnus-adaptive-word-syntax-table): + * gnus-fun.el (gnus-face-properties-alist): Pacify byte compiler. + +2007-11-15 Juanma Barranquero + + * nnimap.el (nnimap-split-download-body): + * gnus-demon.el (gnus-demon): + * gnus-uu.el (gnus-uu-default-view-rules): Fix typos in docstrings. + +2007-11-15 Katsumi Yamaoka + + * nntp.el (nntp-insert-buffer-substring, nntp-copy-to-buffer): New + macros. + (nntp-wait-for, nntp-retrieve-articles, nntp-async-trigger) + (nntp-retrieve-headers-with-xover): Use nntp-insert-buffer-substring to + copy data from unibyte buffer to multibyte current buffer. + (nntp-retrieve-headers, nntp-retrieve-groups); Use nntp-copy-to-buffer + to copy data from unibyte current buffer to multibyte buffer. + (nntp-make-process-buffer): Make process buffer unibyte. + + * pop3.el (pop3-open-server): Fix typo in Lisp code. + +2007-11-14 Denys Duchier (tiny change) + + * pop3.el (pop3-open-server): Accept and process data more robustly at + connexion start to avoid spurious "POP SSL connexion failed" errors. + +2007-11-14 Katsumi Yamaoka + + * gnus-start.el (gnus-active-to-gnus-format): Use unibyte buffer to + read group names. + +2007-11-12 Reiner Steib + + * gnus-msg.el (gnus-confirm-mail-reply-to-news): Adjust :version. + +2007-11-12 Katsumi Yamaoka + + * nnmail.el (nnmail-parse-active): Make group names unibyte. + (nnmail-save-active): Use a unibyte buffer when saving active file, + which may contain non-ASCII group names. + + * nnml.el (nnml-request-group): Decode group names in messages. + 2007-11-05 Reiner Steib * message.el (message-citation-line-function) @@ -265,7 +684,7 @@ 2007-10-04 Reiner Steib - * Relicense "GPLv2 or later" files to "GPLv3 or later". + * Relicense "GPLv2 or later" files to "GPLv3 or later". 2007-09-27 Teodor Zlatanov @@ -10350,7 +10769,7 @@ eval-when-compile, to define gnus-agent-set-cat-groups as the setf method of gnus-agent-cat-groups even when the buffer has been evaled. - (gnus-agent-save-active,gnus-agent-save-active-1): Merged to + (gnus-agent-save-active, gnus-agent-save-active-1): Merged to delete gnus-agent-save-active-1. (gnus-agent-save-groups): Deleted. Identical to gnus-agent-save-active. @@ -10361,12 +10780,12 @@ servers. Add use of min/max range limits from server's local file. (gnus-agent-save-alist): Removed unused optional argument. - (gnus-agent-load-local,gnus-agent-read-and-cache-local), - (gnus-agent-read-local,gnus-agent-save-local,gnus-agent-get-local), + (gnus-agent-load-local, gnus-agent-read-and-cache-local), + (gnus-agent-read-local, gnus-agent-save-local, gnus-agent-get-local), (gnus-agent-set-local): A per-server file that keeps min/max range - limits for articles known to the agent. Provides a fast mechanism + limits for articles known to the agent. Provides a fast mechanism for altering many active ranges. - (gnus-agent-expire-group,gnus-agent-expire): No longer save the + (gnus-agent-expire-group, gnus-agent-expire): No longer save the active file (local makes it unnecessary). (gnus-agent-regenerate-group): Fixed XEmacs compatibility. diff --git a/lisp/gnus/assistant.el b/lisp/gnus/assistant.el deleted file mode 100644 index 25ff1732f8f..00000000000 --- a/lisp/gnus/assistant.el +++ /dev/null @@ -1,487 +0,0 @@ -;;; assistant.el --- guiding users through Emacs setup -;; Copyright (C) 2004, 2005 Free Software Foundation, Inc. - -;; Author: Lars Magne Ingebrigtsen -;; Keywords: util - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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 3, or (at your option) -;; any later version. - -;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Commentary: - -;;; Code: - -(eval-when-compile - (require 'cl)) - -(require 'widget) -(require 'wid-edit) - -(autoload 'gnus-error "gnus-util") -(autoload 'netrc-get "netrc") -(autoload 'netrc-machine "netrc") -(autoload 'netrc-parse "netrc") - -(defvar assistant-readers - '(("variable" assistant-variable-reader) - ("validate" assistant-sexp-reader) - ("result" assistant-list-reader) - ("next" assistant-list-reader) - ("text" assistant-text-reader))) - -(defface assistant-field '((t (:bold t))) - "Face used for editable fields." - :group 'gnus-article-emphasis) -;; backward-compatibility alias -(put 'assistant-field-face 'face-alias 'assistant-field) - -;;; Internal variables - -(defvar assistant-data nil) -(defvar assistant-current-node nil) -(defvar assistant-previous-nodes nil) -(defvar assistant-widgets nil) - -(defun assistant-parse-buffer () - (let (results command value) - (goto-char (point-min)) - (while (search-forward "@" nil t) - (if (not (looking-at "[^ \t\n]+")) - (error "Dangling @") - (setq command (downcase (match-string 0))) - (goto-char (match-end 0))) - (setq value - (if (looking-at "[ \t]*\n") - (let (start) - (forward-line 1) - (setq start (point)) - (unless (re-search-forward (concat "^@end " command) nil t) - (error "No @end %s found" command)) - (beginning-of-line) - (prog1 - (buffer-substring start (point)) - (forward-line 1))) - (skip-chars-forward " \t") - (prog1 - (buffer-substring (point) (point-at-eol)) - (forward-line 1)))) - (push (list command (assistant-reader command value)) - results)) - (assistant-segment (nreverse results)))) - -(defun assistant-text-reader (text) - (with-temp-buffer - (insert text) - (goto-char (point-min)) - (let ((start (point)) - (sections nil)) - (while (re-search-forward "@\\([^{]+\\){\\([^}]+\\)}" nil t) - (push (buffer-substring start (match-beginning 0)) - sections) - (push (list (match-string 1) (match-string 2)) - sections) - (setq start (point))) - (push (buffer-substring start (point-max)) - sections) - (nreverse sections)))) - -;; Segment the raw assistant data into a list of nodes. -(defun assistant-segment (list) - (let ((ast nil) - (node nil) - (title (pop list))) - (dolist (elem list) - (when (and (equal (car elem) "node") - node) - (push (list "save" nil) node) - (push (nreverse node) ast) - (setq node nil)) - (push elem node)) - (when node - (push (list "save" nil) node) - (push (nreverse node) ast)) - (cons title (nreverse ast)))) - -(defun assistant-reader (command value) - (let ((formatter (cadr (assoc command assistant-readers)))) - (if (not formatter) - value - (funcall formatter value)))) - -(defun assistant-list-reader (value) - (car (read-from-string (concat "(" value ")")))) - -(defun assistant-variable-reader (value) - (let ((section (car (read-from-string (concat "(" value ")"))))) - (append section (list 'default)))) - -(defun assistant-sexp-reader (value) - (if (zerop (length value)) - nil - (car (read-from-string value)))) - -(defun assistant-buffer-name (title) - (format "*Assistant %s*" title)) - -(defun assistant-get (ast command) - (cadr (assoc command ast))) - -(defun assistant-set (ast command value) - (let ((elem (assoc command ast))) - (when elem - (setcar (cdr elem) value)))) - -(defun assistant-get-list (ast command) - (let ((result nil)) - (dolist (elem ast) - (when (equal (car elem) command) - (push elem result))) - (nreverse result))) - -;;;###autoload -(defun assistant (file) - "Assist setting up Emacs based on FILE." - (interactive "fAssistant file name: ") - (let ((ast - (with-temp-buffer - (insert-file-contents file) - (assistant-parse-buffer)))) - (pop-to-buffer (assistant-buffer-name (assistant-get ast "title"))) - (assistant-render ast))) - -(defun assistant-render (ast) - (let ((first-node (assistant-get (nth 1 ast) "node"))) - (set (make-local-variable 'assistant-data) ast) - (set (make-local-variable 'assistant-current-node) nil) - (set (make-local-variable 'assistant-previous-nodes) nil) - (assistant-render-node first-node))) - -(defun assistant-find-node (node-name) - (let ((ast (cdr assistant-data))) - (while (and ast - (not (string= node-name (assistant-get (car ast) "node")))) - (pop ast)) - (car ast))) - -(defun assistant-node-name (node) - (assistant-get node "node")) - -(defun assistant-previous-node-text (node) - (format "<< Go back to %s" node)) - -(defun assistant-next-node-text (node) - (if (and node - (not (eq node 'finish))) - (format "Proceed to %s >>" node) - "Finish")) - -(defun assistant-set-defaults (node &optional forcep) - (dolist (variable (assistant-get-list node "variable")) - (setq variable (cadr variable)) - (when (or (eq (nth 3 variable) 'default) - forcep) - (setcar (nthcdr 3 variable) - (assistant-eval (nth 2 variable)))))) - -(defun assistant-get-variable (node variable &optional type raw) - (let ((variables (assistant-get-list node "variable")) - (result nil) - elem) - (while (and (setq elem (pop variables)) - (not result)) - (setq elem (cadr elem)) - (when (eq (intern variable) (car elem)) - (if type - (setq result (nth 1 elem)) - (setq result (if raw (nth 3 elem) - (format "%s" (nth 3 elem))))))) - result)) - -(defun assistant-set-variable (node variable value) - (let ((variables (assistant-get-list node "variable")) - elem) - (while (setq elem (pop variables)) - (setq elem (cadr elem)) - (when (eq (intern variable) (car elem)) - (setcar (nthcdr 3 elem) value))))) - -(defun assistant-render-text (text node) - (unless (and text node) - (gnus-error - 5 - "The assistant was asked to render invalid text or node data")) - (dolist (elem text) - (if (stringp elem) - ;; Ordinary text - (insert elem) - ;; A variable to be inserted as a widget. - (let* ((start (point)) - (variable (cadr elem)) - (type (assistant-get-variable node variable 'type))) - (cond - ((eq (car-safe type) :radio) - (push - (apply - #'widget-create - 'radio-button-choice - :assistant-variable variable - :assistant-node node - :value (assistant-get-variable node variable) - :notify (lambda (widget &rest ignore) - (assistant-set-variable - (widget-get widget :assistant-node) - (widget-get widget :assistant-variable) - (widget-value widget)) - (assistant-render-node - (assistant-get - (widget-get widget :assistant-node) - "node"))) - (cadr type)) - assistant-widgets)) - ((eq (car-safe type) :set) - (push - (apply - #'widget-create - 'set - :assistant-variable variable - :assistant-node node - :value (assistant-get-variable node variable nil t) - :notify (lambda (widget &rest ignore) - (assistant-set-variable - (widget-get widget :assistant-node) - (widget-get widget :assistant-variable) - (widget-value widget)) - (assistant-render-node - (assistant-get - (widget-get widget :assistant-node) - "node"))) - (cadr type)) - assistant-widgets)) - (t - (push - (widget-create - 'editable-field - :value-face 'assistant-field - :assistant-variable variable - (assistant-get-variable node variable)) - assistant-widgets) - ;; The editable-field widget apparently inserts a newline; - ;; remove it. - (delete-char -1) - (add-text-properties start (point) - (list - 'bold t - 'face 'assistant-field - 'not-read-only t)))))))) - -(defun assistant-render-node (node-name) - (let ((node (assistant-find-node node-name)) - (inhibit-read-only t) - (previous assistant-current-node) - (buffer-read-only nil)) - (unless node - (gnus-error 5 "The node for %s could not be found" node-name)) - (set (make-local-variable 'assistant-widgets) nil) - (assistant-set-defaults node) - (if (equal (assistant-get node "type") "interstitial") - (assistant-render-node (nth 0 (assistant-find-next-nodes node-name))) - (setq assistant-current-node node-name) - (when previous - (push previous assistant-previous-nodes)) - (erase-buffer) - (insert (cadar assistant-data) "\n\n") - (insert node-name "\n\n") - (assistant-render-text (assistant-get node "text") node) - (insert "\n\n") - (when assistant-previous-nodes - (assistant-node-button 'previous (car assistant-previous-nodes))) - (widget-create - 'push-button - :assistant-node node-name - :notify (lambda (widget &rest ignore) - (let* ((node (widget-get widget :assistant-node))) - (assistant-set-defaults (assistant-find-node node) 'force) - (assistant-render-node node))) - "Reset") - (insert "\n") - (dolist (nnode (assistant-find-next-nodes)) - (assistant-node-button 'next nnode) - (insert "\n")) - - (goto-char (point-min)) - (assistant-make-read-only)))) - -(defun assistant-make-read-only () - (let ((start (point-min)) - end) - (while (setq end (text-property-any start (point-max) 'not-read-only t)) - (put-text-property start end 'read-only t) - (put-text-property start end 'rear-nonsticky t) - (while (get-text-property end 'not-read-only) - (incf end)) - (setq start end)) - (put-text-property start (point-max) 'read-only t))) - -(defun assistant-node-button (type node) - (let ((text (if (eq type 'next) - (assistant-next-node-text node) - (assistant-previous-node-text node)))) - (widget-create - 'push-button - :assistant-node node - :assistant-type type - :notify (lambda (widget &rest ignore) - (let* ((node (widget-get widget :assistant-node)) - (type (widget-get widget :assistant-type))) - (if (eq type 'previous) - (progn - (setq assistant-current-node nil) - (pop assistant-previous-nodes)) - (assistant-get-widget-values) - (assistant-validate)) - (if (null node) - (assistant-finish) - (assistant-render-node node)))) - text) - (use-local-map widget-keymap))) - -(defun assistant-validate-types (node) - (dolist (variable (assistant-get-list node "variable")) - (setq variable (cadr variable)) - (let ((type (nth 1 variable)) - (value (nth 3 variable))) - (when - (cond - ((eq type :number) - (string-match "[^0-9]" value)) - (t - nil)) - (error "%s is not of type %s: %s" - (car variable) type value))))) - -(defun assistant-get-widget-values () - (let ((node (assistant-find-node assistant-current-node))) - (dolist (widget assistant-widgets) - (assistant-set-variable - node (widget-get widget :assistant-variable) - (widget-value widget))))) - -(defun assistant-validate () - (let* ((node (assistant-find-node assistant-current-node)) - (validation (assistant-get node "validate")) - result) - (assistant-validate-types node) - (when validation - (when (setq result (assistant-eval validation)) - (unless (y-or-n-p (format "Error: %s. Continue? " result)) - (error "%s" result)))) - (assistant-set node "save" t))) - -;; (defun assistant-find-next-node (&optional node) -;; (let* ((node (assistant-find-node (or node assistant-current-node))) -;; (node-name (assistant-node-name node)) -;; (nexts (assistant-get-list node "next")) -;; next elem applicable) - -;; (while (setq elem (pop nexts)) -;; (when (assistant-eval (car (cadr elem))) -;; (setq applicable (cons elem applicable)))) - -;; ;; return the first thing we can -;; (cadr (cadr (pop applicable))))) - -(defun assistant-find-next-nodes (&optional node) - (let* ((node (assistant-find-node (or node assistant-current-node))) - (nexts (assistant-get-list node "next")) - next elem applicable return) - - (while (setq elem (pop nexts)) - (when (assistant-eval (car (cadr elem))) - (setq applicable (cons elem applicable)))) - - ;; return the first thing we can - - (while (setq elem (pop applicable)) - (push (cadr (cadr elem)) return)) - - return)) - -(defun assistant-get-all-variables () - (let ((variables nil)) - (dolist (node (cdr assistant-data)) - (setq variables - (append (assistant-get-list node "variable") - variables))) - variables)) - -(defun assistant-eval (form) - (let ((bindings nil)) - (dolist (variable (assistant-get-all-variables)) - (setq variable (cadr variable)) - (push (list (car variable) - (if (eq (nth 3 variable) 'default) - nil - (if (listp (nth 3 variable)) - `(list ,@(nth 3 variable)) - (nth 3 variable)))) - bindings)) - (eval - `(let ,bindings - ,form)))) - -(defun assistant-finish () - (let ((results nil) - result) - (dolist (node (cdr assistant-data)) - (when (assistant-get node "save") - (setq result (assistant-get node "result")) - (push (list (car result) - (assistant-eval (cadr result))) - results))) - (message "Results: %s" - (nreverse results)))) - -;;; Validation functions. - -(defun assistant-validate-connect-to-server (server port) - (let* ((error nil) - (stream - (condition-case err - (open-network-stream "nntpd" nil server port) - (error (setq error err))))) - (if (and (processp stream) - (memq (process-status stream) '(open run))) - (progn - (delete-process stream) - nil) - error))) - -(defun assistant-authinfo-data (server port type) - (when (file-exists-p "~/.authinfo") - (netrc-get (netrc-machine (netrc-parse "~/.authinfo") - server port) - (if (eq type 'user) - "login" - "password")))) - -(defun assistant-password-required-p () - nil) - -(provide 'assistant) - -;;; arch-tag: 0404bfa2-9226-4611-8d3f-335c2416175b -;;; assistant.el ends here diff --git a/lisp/gnus/canlock.el b/lisp/gnus/canlock.el index fed5598104d..145a2e518d2 100644 --- a/lisp/gnus/canlock.el +++ b/lisp/gnus/canlock.el @@ -6,18 +6,20 @@ ;; Author: Katsumi Yamaoka ;; Keywords: news, cancel-lock, hmac, sha1, rfc2104 -;; This program is free software; you can redistribute it and/or modify +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) ;; any later version. -;; This program is distributed in the hope that it will be useful, +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. diff --git a/lisp/gnus/ecomplete.el b/lisp/gnus/ecomplete.el index 1c333fd2e03..42a75916277 100644 --- a/lisp/gnus/ecomplete.el +++ b/lisp/gnus/ecomplete.el @@ -1,5 +1,6 @@ ;;; ecomplete.el --- electric completion of addresses and the like -;; Copyright (C) 2006 Free Software Foundation, Inc. + +;; Copyright (C) 2006, 2007 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: mail diff --git a/lisp/gnus/encrypt.el b/lisp/gnus/encrypt.el deleted file mode 100644 index 1fb54a280eb..00000000000 --- a/lisp/gnus/encrypt.el +++ /dev/null @@ -1,296 +0,0 @@ -;;; encrypt.el --- file encryption routines -;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -;; Author: Teodor Zlatanov -;; Created: 2003/01/24 -;; Keywords: files - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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 3, or (at your option) -;; any later version. - -;; GNU Emacs 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 GNU Emacs; 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 module addresses data encryption. Page breaks are used for -;;; grouping declarations and documentation relating to each -;;; particular aspect. - -;;; Use in Gnus like this: -;;; (setq -;;; nnimap-authinfo-file "~/.authinfo.enc" -;;; nntp-authinfo-file "~/.authinfo.enc" -;;; smtpmail-auth-credentials "~/.authinfo.enc" -;;; ;; using the AES256 cipher, feel free to use your own favorite -;;; encrypt-file-alist (quote (("~/.authinfo.enc" (gpg "AES256")))) -;;; password-cache-expiry 600) - -;;; Then write ~/.authinfo.enc: - -;;; 1) open the old authinfo -;;; C-x C-f ~/.authinfo - -;;; 2) write the new authinfo.enc -;;; M-x encrypt-write-file-contents RET ~/.authinfo.enc - -;;; 3) verify the new authinfo is correct (this will show the contents in the minibuffer) -;;; M-: (encrypt-get-file-contents "~/.authinfo.enc") - - -;;; Code: - -;; autoload password -(eval-and-compile - (autoload 'password-read "password")) - -(defgroup encrypt '((password-cache custom-variable) - (password-cache-expiry custom-variable)) - "File encryption configuration." - :group 'applications) - -(defcustom encrypt-file-alist nil - "List of file names or regexes matched with encryptions. -Format example: - '((\"beta\" - (gpg \"AES\")) - (\"/home/tzz/alpha\" - (encrypt-xor \"Semi-Secret\")))" - - :type '(repeat - (list :tag "Encryption entry" - (radio :tag "What to encrypt" - (file :tag "Filename") - (regexp :tag "Regular expression match")) - (radio :tag "How to encrypt it" - (list - :tag "GPG Encryption" - (const :tag "GPG Program" gpg) - (radio :tag "Choose a cipher" - (const :tag "3DES Encryption" "3DES") - (const :tag "CAST5 Encryption" "CAST5") - (const :tag "Blowfish Encryption" "BLOWFISH") - (const :tag "AES Encryption" "AES") - (const :tag "AES192 Encryption" "AES192") - (const :tag "AES256 Encryption" "AES256") - (const :tag "Twofish Encryption" "TWOFISH") - (string :tag "Cipher Name"))) - (list - :tag "Built-in simple XOR" - (const :tag "XOR Encryption" encrypt-xor) - (string :tag "XOR Cipher Value (seed value)"))))) - :group 'encrypt) - -;; TODO: now, load gencrypt.el and if successful, modify the -;; custom-type of encrypt-file-alist to add the gencrypt.el options - -;; (plist-get (symbol-plist 'encrypt-file-alist) 'custom-type) -;; then use plist-put - -(defcustom encrypt-gpg-path (executable-find "gpg") - "Path to the GPG program." - :type '(radio - (file :tag "Location of the GPG executable") - (const :tag "GPG is not installed" nil)) - :group 'encrypt) - -(defvar encrypt-temp-prefix "encrypt" - "Prefix for temporary filenames") - -;;;###autoload -(defun encrypt-find-model (filename) - "Given a filename, find a encrypt-file-alist entry" - (dolist (entry encrypt-file-alist) - (let ((match (nth 0 entry)) - (model (nth 1 entry))) - (when (or (eq match filename) - (string-match match filename)) - (return model))))) - -;;;###autoload -(defun encrypt-insert-file-contents (file &optional model) - "Decrypt FILE into the current buffer." - (interactive "fFile to insert: ") - (let* ((model (or model (encrypt-find-model file))) - (method (nth 0 model)) - (cipher (nth 1 model)) - (password-key (format "encrypt-password-%s-%s %s" - (symbol-name method) cipher file)) - (passphrase - (password-read-and-add - (format "%s password for cipher %s (file %s)? " - file (symbol-name method) cipher) - password-key)) - (buffer-file-coding-system 'binary) - (coding-system-for-read 'binary) - outdata) - - ;; note we only insert-file-contents if the method is known to be valid - (cond - ((eq method 'gpg) - (insert-file-contents file) - (setq outdata (encrypt-gpg-decode-buffer passphrase cipher))) - ((eq method 'encrypt-xor) - (insert-file-contents file) - (setq outdata (encrypt-xor-decode-buffer passphrase cipher)))) - - (if outdata - (progn - (message "%s was decrypted with %s (cipher %s)" - file (symbol-name method) cipher) - (delete-region (point-min) (point-max)) - (goto-char (point-min)) - (insert outdata)) - ;; the decryption failed, alas - (password-cache-remove password-key) - (gnus-error 5 "%s was NOT decrypted with %s (cipher %s)" - file (symbol-name method) cipher)))) - -(defun encrypt-get-file-contents (file &optional model) - "Decrypt FILE and return the contents." - (interactive "fFile to decrypt: ") - (with-temp-buffer - (encrypt-insert-file-contents file model) - (buffer-string))) - -(defun encrypt-put-file-contents (file data &optional model) - "Encrypt the DATA to FILE, then continue normally." - (with-temp-buffer - (insert data) - (encrypt-write-file-contents file model))) - -(defun encrypt-write-file-contents (file &optional model) - "Encrypt the current buffer to FILE, then continue normally." - (interactive "sFile to write: ") - (setq model (or model (encrypt-find-model file))) - (if model - (let* ((method (nth 0 model)) - (cipher (nth 1 model)) - (password-key (format "encrypt-password-%s-%s %s" - (symbol-name method) cipher file)) - (passphrase - (password-read - (format "%s password for cipher %s? " - (symbol-name method) cipher) - password-key)) - outdata) - - (cond - ((eq method 'gpg) - (setq outdata (encrypt-gpg-encode-buffer passphrase cipher))) - ((eq method 'encrypt-xor) - (setq outdata (encrypt-xor-encode-buffer passphrase cipher)))) - - (if outdata - (progn - (message "%s was encrypted with %s (cipher %s)" - file (symbol-name method) cipher) - (delete-region (point-min) (point-max)) - (goto-char (point-min)) - (insert outdata) - ;; do not confirm overwrites - (write-file file nil)) - ;; the decryption failed, alas - (password-cache-remove password-key) - (gnus-error 5 "%s was NOT encrypted with %s (cipher %s)" - file (symbol-name method) cipher))) - (gnus-error 1 "%s has no associated encryption model! See encrypt-file-alist." file))) - -(defun encrypt-xor-encode-buffer (passphrase cipher) - (encrypt-xor-process-buffer passphrase cipher t)) - -(defun encrypt-xor-decode-buffer (passphrase cipher) - (encrypt-xor-process-buffer passphrase cipher nil)) - -(defun encrypt-xor-process-buffer (passphrase - cipher - &optional encode) - "Given PASSPHRASE, xor-encode or decode the contents of the current buffer." - (let* ((bs (buffer-substring-no-properties (point-min) (point-max))) - ;; passphrase-sum is a simple additive checksum of the - ;; passphrase and the cipher - (passphrase-sum - (when (stringp passphrase) - (apply '+ (append cipher passphrase nil)))) - new-list) - - (with-temp-buffer - (if encode - (progn - (dolist (x (append bs nil)) - (setq new-list (cons (logxor x passphrase-sum) new-list))) - - (dolist (x new-list) - (insert (format "%d " x)))) - (progn - (setq new-list (reverse (split-string bs))) - (dolist (x new-list) - (setq x (string-to-number x)) - (insert (format "%c" (logxor x passphrase-sum)))))) - (buffer-substring-no-properties (point-min) (point-max))))) - -(defun encrypt-gpg-encode-buffer (passphrase cipher) - (encrypt-gpg-process-buffer passphrase cipher t)) - -(defun encrypt-gpg-decode-buffer (passphrase cipher) - (encrypt-gpg-process-buffer passphrase cipher nil)) - -(defun encrypt-gpg-process-buffer (passphrase - cipher - &optional encode) - "With PASSPHRASE, use GPG to encode or decode the current buffer." - (let* ((program encrypt-gpg-path) - (input (buffer-substring-no-properties (point-min) (point-max))) - (temp-maker (if (fboundp 'make-temp-file) - 'make-temp-file - 'make-temp-name)) - (temp-file (funcall temp-maker encrypt-temp-prefix)) - (default-enable-multibyte-characters nil) - (args `("--cipher-algo" ,cipher - "--status-fd" "2" - "--logger-fd" "2" - "--passphrase-fd" "0" - "--no-tty")) - exit-status exit-data) - - (when encode - (setq args - (append args - '("--symmetric" - "--armor")))) - - (if program - (with-temp-buffer - (when passphrase - (insert passphrase "\n")) - (insert input) - (setq exit-status - (apply #'call-process-region (point-min) (point-max) program - t `(t ,temp-file) nil args)) - (if (equal exit-status 0) - (setq exit-data - (buffer-substring-no-properties (point-min) (point-max))) - (with-temp-buffer - (when (file-exists-p temp-file) - (insert-file-contents temp-file)) - (gnus-error 5 (format "%s exited abnormally: '%s' [%s]" - program exit-status (buffer-string))))) - (delete-file temp-file)) - (gnus-error 5 "GPG is not installed.")) - exit-data)) - -(provide 'encrypt) -;;; encrypt.el ends here - -;; arch-tag: d907e4f1-71b5-42b1-a180-fc7b84ff0648 diff --git a/lisp/gnus/flow-fill.el b/lisp/gnus/flow-fill.el index 1644ed0f8f2..a13cd23156d 100644 --- a/lisp/gnus/flow-fill.el +++ b/lisp/gnus/flow-fill.el @@ -154,8 +154,7 @@ RFC 2646 suggests 66 characters for readability." ;; Test vectors. -(eval-when-compile - (defvar show-trailing-whitespace)) +(defvar show-trailing-whitespace) (defvar fill-flowed-encode-tests `( diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el index 0271186273a..22ffd585973 100644 --- a/lisp/gnus/gnus-agent.el +++ b/lisp/gnus/gnus-agent.el @@ -636,8 +636,7 @@ manipulated as follows: (gnus-agent-make-mode-line-string " Plugged" 'mouse-2 'gnus-agent-toggle-plugged)) - (gnus-agent-go-online gnus-agent-go-online) - (gnus-agent-possibly-synchronize-flags)) + (gnus-agent-go-online gnus-agent-go-online)) (t (gnus-agent-close-connections) (setq gnus-plugged set-to) @@ -868,8 +867,7 @@ be a select method." (interactive) (save-excursion (dolist (gnus-command-method (gnus-agent-covered-methods)) - (when (and (file-exists-p (gnus-agent-lib-file "flags")) - (eq (gnus-server-status gnus-command-method) 'ok)) + (when (eq (gnus-server-status gnus-command-method) 'ok) (gnus-agent-possibly-synchronize-flags-server gnus-command-method))))) (defun gnus-agent-synchronize-flags-server (method) @@ -905,11 +903,13 @@ be a select method." (defun gnus-agent-possibly-synchronize-flags-server (method) "Synchronize flags for server according to `gnus-agent-synchronize-flags'." - (when (or (and gnus-agent-synchronize-flags - (not (eq gnus-agent-synchronize-flags 'ask))) - (and (eq gnus-agent-synchronize-flags 'ask) - (gnus-y-or-n-p (format "Synchronize flags on server `%s'? " - (cadr method))))) + (when (and (file-exists-p (gnus-agent-lib-file "flags")) + (or (and gnus-agent-synchronize-flags + (not (eq gnus-agent-synchronize-flags 'ask))) + (and (eq gnus-agent-synchronize-flags 'ask) + (gnus-y-or-n-p + (format "Synchronize flags on server `%s'? " + (cadr method)))))) (gnus-agent-synchronize-flags-server method))) ;;;###autoload @@ -2104,8 +2104,7 @@ doesn't exist, to valid the overview buffer." ;; Keeps the compiler from warning about the free variable in ;; gnus-agent-read-agentview. -(eval-when-compile - (defvar gnus-agent-read-agentview)) +(defvar gnus-agent-read-agentview) (defun gnus-agent-load-alist (group) "Load the article-state alist for GROUP." diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 0c98babcad5..4bb9ceb97ba 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -28,9 +28,9 @@ ;;; Code: (eval-when-compile - (require 'cl) - (defvar tool-bar-map) - (defvar w3m-minor-mode-map)) + (require 'cl)) +(defvar tool-bar-map) +(defvar w3m-minor-mode-map) (require 'gnus) ;; Avoid the "Recursive load suspected" error in Emacs 21.1. @@ -2222,7 +2222,7 @@ unfolded." (mail-header-fold-field) (goto-char (point-max)))))) -(defcustom gnus-article-truncate-lines default-truncate-lines +(defcustom gnus-article-truncate-lines (default-value 'truncate-lines) "Value of `truncate-lines' in Gnus Article buffer. Valid values are nil, t, `head', `first', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles'." @@ -2332,12 +2332,11 @@ long lines iff arg is positive." (forward-line 1) (point)))))) -(eval-when-compile - (defvar gnus-face-properties-alist)) +(defvar gnus-face-properties-alist) -(defun article-display-face () +(defun article-display-face (&optional force) "Display any Face headers in the header." - (interactive) + (interactive (list 'force)) (let ((wash-face-p buffer-read-only)) (gnus-with-article-headers ;; When displaying parts, this function can be called several times on @@ -2347,7 +2346,8 @@ long lines iff arg is positive." ;; read-only. (if (and wash-face-p (memq 'face gnus-article-wash-types)) (gnus-delete-images 'face) - (let (face faces from) + (let ((from (message-fetch-field "from")) + face faces) (save-current-buffer (when (and wash-face-p (gnus-buffer-live-p gnus-original-article-buffer) @@ -2355,16 +2355,22 @@ long lines iff arg is positive." (set-buffer gnus-original-article-buffer)) (save-restriction (mail-narrow-to-head) - (while (gnus-article-goto-header "Face") - (push (mail-header-field-value) faces)))) + (when (or force + ;; Check whether this face is censored. + (not (and gnus-article-x-face-too-ugly + (or from + (setq from (message-fetch-field "from"))) + (string-match gnus-article-x-face-too-ugly + from)))) + (while (gnus-article-goto-header "Face") + (push (mail-header-field-value) faces))))) (when faces (goto-char (point-min)) - (let ((from (gnus-article-goto-header "from")) - png image) - (unless from + (let (png image) + (unless (setq from (gnus-article-goto-header "from")) (insert "From:") (setq from (point)) - (insert "[no `from' set]\n")) + (insert " [no `from' set]\n")) (while faces (when (setq png (gnus-convert-face-to-png (pop faces))) (setq image @@ -2389,7 +2395,8 @@ long lines iff arg is positive." ;; instead. (gnus-delete-images 'xface) ;; Display X-Faces. - (let (x-faces from face) + (let ((from (message-fetch-field "from")) + x-faces face) (save-current-buffer (when (and wash-face-p (gnus-buffer-live-p gnus-original-article-buffer) @@ -2400,43 +2407,41 @@ long lines iff arg is positive." (set-buffer gnus-original-article-buffer)) (save-restriction (mail-narrow-to-head) - (while (gnus-article-goto-header "X-Face") - (push (mail-header-field-value) x-faces)) - (setq from (message-fetch-field "from")))) - ;; Sending multiple EOFs to xv doesn't work, so we only do a - ;; single external face. - (when (stringp gnus-article-x-face-command) - (setq x-faces (list (car x-faces)))) - (when (and x-faces - gnus-article-x-face-command - (or force - ;; Check whether this face is censored. - (not gnus-article-x-face-too-ugly) - (and from - (not (string-match gnus-article-x-face-too-ugly - from))))) - (while (setq face (pop x-faces)) - ;; We display the face. - (cond ((stringp gnus-article-x-face-command) - ;; The command is a string, so we interpret the command - ;; as a, well, command, and fork it off. - (let ((process-connection-type nil)) - (gnus-set-process-query-on-exit-flag - (start-process - "article-x-face" nil shell-file-name - shell-command-switch gnus-article-x-face-command) - nil) - (with-temp-buffer - (insert face) - (process-send-region "article-x-face" - (point-min) (point-max))) - (process-send-eof "article-x-face"))) - ((functionp gnus-article-x-face-command) - ;; The command is a lisp function, so we call it. - (funcall gnus-article-x-face-command face)) - (t - (error "%s is not a function" - gnus-article-x-face-command)))))))))) + (and gnus-article-x-face-command + (or force + ;; Check whether this face is censored. + (not (and gnus-article-x-face-too-ugly + (or from + (setq from (message-fetch-field "from"))) + (string-match gnus-article-x-face-too-ugly + from)))) + (while (gnus-article-goto-header "X-Face") + (push (mail-header-field-value) x-faces))))) + (when x-faces + ;; We display the face. + (cond ((functionp gnus-article-x-face-command) + ;; The command is a lisp function, so we call it. + (mapc gnus-article-x-face-command x-faces)) + ((stringp gnus-article-x-face-command) + ;; The command is a string, so we interpret the command + ;; as a, well, command, and fork it off. + (let ((process-connection-type nil)) + (gnus-set-process-query-on-exit-flag + (start-process + "article-x-face" nil shell-file-name + shell-command-switch gnus-article-x-face-command) + nil) + ;; Sending multiple EOFs to xv doesn't work, + ;; so we only do a single external face. + (with-temp-buffer + (insert (car x-faces)) + (process-send-region "article-x-face" + (point-min) (point-max))) + (process-send-eof "article-x-face"))) + (t + (error "`%s' set to `%s' is not a function" + gnus-article-x-face-command + 'gnus-article-x-face-command))))))))) (defun article-decode-mime-words () "Decode all MIME-encoded words in the article." @@ -2726,7 +2731,7 @@ charset defined in `gnus-summary-show-article-charset-alist' is used." ;; Put the mark meaning this part was rendered by emacs-w3m. 'mm-inline-text-html-with-w3m t)))) -(eval-when-compile (defvar charset)) ;; Bound by `article-wash-html'. +(defvar charset) ;; Bound by `article-wash-html'. (defun gnus-article-wash-html-with-w3m-standalone () "Wash the current buffer with w3m." @@ -2797,8 +2802,37 @@ Recurse into multiparts." (string-match "text/html" (car (mm-handle-type handle)))) (let ((tmp-file (mm-make-temp-file ;; Do we need to care for 8.3 filenames? - "mm-" nil ".html"))) - (mm-save-part-to-file handle tmp-file) + "mm-" nil ".html")) + (charset (mail-content-type-get (mm-handle-type handle) + 'charset))) + (if charset + ;; Add a meta html tag to specify charset. + (mm-with-unibyte-buffer + (insert (with-current-buffer (mm-handle-buffer handle) + (if (eq charset 'gnus-decoded) + (mm-encode-coding-string + (buffer-string) + (setq charset 'utf-8)) + (buffer-string)))) + (setq charset (format "\ +" + charset)) + (goto-char (point-min)) + (let ((case-fold-search t)) + (cond (;; Don't modify existing meta tag. + (re-search-forward "\ +]+>" + nil t)) + ((re-search-forward "[\t\n\r ]*" nil t) + (insert charset "\n")) + (t + (re-search-forward "\ +]+\\|[\t\n\r ]*\\)>[\t\n\r ]*" + nil t) + (insert "\n" charset "\n\n")))) + (mm-write-region (point-min) (point-max) + tmp-file nil nil nil 'binary t)) + (mm-save-part-to-file handle tmp-file)) (add-to-list 'gnus-article-browse-html-temp-list tmp-file) (add-hook 'gnus-summary-prepare-exit-hook 'gnus-article-browse-delete-temp-files) @@ -2824,7 +2858,10 @@ Warning: Spammers use links to images in HTML articles to verify whether you have read the message. As `gnus-article-browse-html-article' passes the unmodified HTML content to the browser without eliminating these \"web bugs\" you -should only use it for mails from trusted senders." +should only use it for mails from trusted senders. + +If you alwasy want to display HTML part in the browser, set +`mm-text-html-renderer' to nil." ;; Cf. `mm-w3m-safe-url-regexp' (interactive) (save-window-excursion @@ -3529,9 +3566,8 @@ This format is defined by the `gnus-article-time-format' variable." gnus-newsgroup-name 'highlight-words t))) gnus-emphasis-alist))))) -(eval-when-compile - (defvar gnus-summary-article-menu) - (defvar gnus-summary-post-menu)) +(defvar gnus-summary-article-menu) +(defvar gnus-summary-post-menu) ;;; Saving functions. @@ -7903,12 +7939,11 @@ For example: (funcall (cadr elem))))))) ;; Dynamic variables. -(eval-when-compile - (defvar part-number) - (defvar total-parts) - (defvar type) - (defvar condition) - (defvar length)) +(defvar part-number) +(defvar total-parts) +(defvar type) +(defvar condition) +(defvar length) (defun gnus-treat-predicate (val) (cond diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el index 1e76e3ac57b..6341c8e48d8 100644 --- a/lisp/gnus/gnus-bookmark.el +++ b/lisp/gnus/gnus-bookmark.el @@ -1,6 +1,6 @@ ;;; gnus-bookmark.el --- Bookmarks in Gnus -;; Copyright (C) 2006 Free Software Foundation, Inc. +;; Copyright (C) 2006, 2007 Free Software Foundation, Inc. ;; Author: Bastien Guerry ;; Keywords: news diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el index fecb0685858..4f61a0f2759 100644 --- a/lisp/gnus/gnus-cache.el +++ b/lisp/gnus/gnus-cache.el @@ -92,7 +92,7 @@ it's not cached." (defvar gnus-cache-total-fetched-hashtb nil) (eval-and-compile - (autoload 'nnml-generate-nov-databases-1 "nnml") + (autoload 'nnml-generate-nov-databases-directory "nnml") (autoload 'nnvirtual-find-group-art "nnvirtual")) @@ -620,7 +620,6 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache" (interactive) (let ((gnus-mark-article-hook nil) (gnus-expert-user t) - (nnmail-spool-file nil) (mail-sources nil) (gnus-use-dribble-file nil) (gnus-novice-user nil) @@ -756,7 +755,7 @@ If LOW, update the lower bound instead." (interactive (list gnus-cache-directory)) (gnus-cache-close) (let ((nnml-generate-active-function 'identity)) - (nnml-generate-nov-databases-1 dir)) + (nnml-generate-nov-databases-directory dir)) (setq gnus-cache-total-fetched-hashtb nil) diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el index 5d1b2b26a8e..908a75513e4 100644 --- a/lisp/gnus/gnus-cite.el +++ b/lisp/gnus/gnus-cite.el @@ -1170,10 +1170,9 @@ Returns nil if there is no such line before LIMIT, t otherwise." (setq count (1+ count)))))) ;; "Keywords for highlighting different levels of message citations.") -(eval-when-compile - (defvar font-lock-defaults-computed) - (defvar font-lock-keywords) - (defvar font-lock-set-defaults)) +(defvar font-lock-defaults-computed) +(defvar font-lock-keywords) +(defvar font-lock-set-defaults) (eval-and-compile (unless (featurep 'xemacs) diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el index 6d37120bd59..845a467c574 100644 --- a/lisp/gnus/gnus-cus.el +++ b/lisp/gnus/gnus-cus.el @@ -949,20 +949,18 @@ articles in the thread. (gnus-score-set 'touched '(t) alist)) (bury-buffer)) -(eval-when-compile - (defvar category-fields nil) - (defvar gnus-agent-cat-name) - (defvar gnus-agent-cat-score-file) - (defvar gnus-agent-cat-length-when-short) - (defvar gnus-agent-cat-length-when-long) - (defvar gnus-agent-cat-low-score) - (defvar gnus-agent-cat-high-score) - (defvar gnus-agent-cat-enable-expiration) - (defvar gnus-agent-cat-days-until-old) - (defvar gnus-agent-cat-predicate) - (defvar gnus-agent-cat-groups) - (defvar gnus-agent-cat-enable-undownloaded-faces) -) +(defvar category-fields nil) +(defvar gnus-agent-cat-name) +(defvar gnus-agent-cat-score-file) +(defvar gnus-agent-cat-length-when-short) +(defvar gnus-agent-cat-length-when-long) +(defvar gnus-agent-cat-low-score) +(defvar gnus-agent-cat-high-score) +(defvar gnus-agent-cat-enable-expiration) +(defvar gnus-agent-cat-days-until-old) +(defvar gnus-agent-cat-predicate) +(defvar gnus-agent-cat-groups) +(defvar gnus-agent-cat-enable-undownloaded-faces) (defun gnus-trim-whitespace (s) (when (string-match "\\`[ \n\t]+" s) diff --git a/lisp/gnus/gnus-demon.el b/lisp/gnus/gnus-demon.el index 98d098c51cf..421d4a07ee7 100644 --- a/lisp/gnus/gnus-demon.el +++ b/lisp/gnus/gnus-demon.el @@ -39,7 +39,7 @@ (autoload 'parse-time-string "parse-time" nil nil) (defgroup gnus-demon nil - "Demonic behaviour." + "Demonic behavior." :group 'gnus) (defcustom gnus-demon-handlers nil diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el index fa9ef21bd1a..97e61a013c8 100644 --- a/lisp/gnus/gnus-dired.el +++ b/lisp/gnus/gnus-dired.el @@ -42,25 +42,55 @@ ;;; Code: (require 'dired) -(require 'gnus-ems) -(require 'gnus-msg) -(require 'gnus-util) -(require 'message) -(require 'mm-encode) -(require 'mml) +(autoload 'mml-attach-file "mml") +(autoload 'mm-default-file-encoding "mm-decode");; Shift this to `mailcap.el'? +(autoload 'mailcap-extension-to-mime "mailcap") +(autoload 'mailcap-mime-info "mailcap") + +;; Maybe shift this function to `mailcap.el'? +(autoload 'mm-mailcap-command "mm-decode") + +(autoload 'ps-print-preprint "ps-print") + +;; Autoloads to avoid byte-compiler warnings. These are used only if the user +;; customizes `gnus-dired-mail-mode' to use Message and/or Gnus. +(autoload 'message-buffers "message") +(autoload 'gnus-setup-message "gnus-msg") +(autoload 'gnus-print-buffer "gnus-sum") (defvar gnus-dired-mode nil - "Minor mode for intersections of gnus and dired.") + "Minor mode for intersections of MIME mail composition and dired.") (defvar gnus-dired-mode-map nil) (unless gnus-dired-mode-map (setq gnus-dired-mode-map (make-sparse-keymap)) - (gnus-define-keys gnus-dired-mode-map - "\C-c\C-m\C-a" gnus-dired-attach - "\C-c\C-m\C-l" gnus-dired-find-file-mailcap - "\C-c\C-m\C-p" gnus-dired-print)) + (define-key gnus-dired-mode-map "\C-c\C-m\C-a" 'gnus-dired-attach) + (define-key gnus-dired-mode-map "\C-c\C-m\C-l" 'gnus-dired-find-file-mailcap) + (define-key gnus-dired-mode-map "\C-c\C-m\C-p" 'gnus-dired-print)) + +;; FIXME: Make it customizable, change the default to `mail-user-agent' when +;; this file if renamed (e.g. to `dired-mime.el'). + +(defcustom gnus-dired-mail-mode 'gnus-user-agent ;; mail-user-agent + "Your preference for a mail composition package. +See `mail-user-agent' for more information." + :group 'mail ;; dired? + :version "23.0" ;; No Gnus + :type '(radio (function-item :tag "Default Emacs mail" + :format "%t\n" + sendmail-user-agent) + (function-item :tag "Emacs interface to MH" + :format "%t\n" + mh-e-user-agent) + (function-item :tag "Gnus Message package" + :format "%t\n" + message-user-agent) + (function-item :tag "Gnus Message with full Gnus features" + :format "%t\n" + gnus-user-agent) + (function :tag "Other"))) (defun gnus-dired-mode (&optional arg) "Minor mode for intersections of gnus and dired. @@ -73,14 +103,31 @@ (> (prefix-numeric-value arg) 0))) (when gnus-dired-mode (add-minor-mode 'gnus-dired-mode "" gnus-dired-mode-map) - (gnus-run-hooks 'gnus-dired-mode-hook)))) + (save-current-buffer + (run-hooks 'gnus-dired-mode-hook))))) ;;;###autoload (defun turn-on-gnus-dired-mode () "Convenience method to turn on gnus-dired-mode." + (interactive) (gnus-dired-mode 1)) -;; Method to attach files to a gnus composition. +(defun gnus-dired-mail-buffers () + "Return a list of active mail composition buffers." + (if (and (memq gnus-dired-mail-mode '(message-user-agent gnus-user-agent)) + (require 'message) + (fboundp 'message-buffers)) + (message-buffers) + ;; Cf. `message-buffers' in `message.el': + (let (buffers) + (save-excursion + (dolist (buffer (buffer-list t)) + (set-buffer buffer) + (when (eq major-mode 'mail-mode) + (push (buffer-name buffer) buffers)))) + (nreverse buffers)))) + +;; Method to attach files to a mail composition. (defun gnus-dired-attach (files-to-attach) "Attach dired's marked files to a gnus message composition. If called non-interactively, FILES-TO-ATTACH should be a list of @@ -102,22 +149,25 @@ filenames." (mapconcat (lambda (f) (file-name-nondirectory f)) files-to-attach ", ")) - (setq bufs (message-buffers)) + (setq bufs (gnus-dired-mail-buffers)) - ;; set up destination message buffer + ;; set up destination mail composition buffer (if (and bufs - (y-or-n-p "Attach files to existing message buffer? ")) + (y-or-n-p "Attach files to existing mail composition buffer? ")) (setq destination (if (= (length bufs) 1) (get-buffer (car bufs)) - (completing-read "Attach to which message buffer: " + (completing-read "Attach to which mail composition buffer: " (mapcar (lambda (b) (cons b (get-buffer b))) bufs) nil t))) - ;; setup a new gnus message buffer - (gnus-setup-message 'message (message-mail)) + ;; setup a new mail composition buffer + (if (eq gnus-dired-mail-mode 'gnus-user-agent) + (gnus-setup-message 'message (message-mail)) + ;; FIXME: Is this the right thing? + (compose-mail)) (setq destination (current-buffer))) ;; set buffer to destination buffer, and attach files @@ -151,7 +201,8 @@ If ARG is non-nil, open it in a new buffer." (setq method (cdr (assoc 'viewer (car (mailcap-mime-info mime-type - 'all))))))) + 'all + 'no-decode))))))) (let ((view-command (mm-mailcap-command method file-name nil))) (message "viewing via %s" view-command) (start-process "*display*" @@ -186,7 +237,8 @@ file to save in." (mailcap-extension-to-mime (match-string 0 file-name))) (stringp - (setq method (mailcap-mime-info mime-type "print")))) + (setq method (mailcap-mime-info mime-type "print" + 'no-decode)))) (call-process shell-file-name nil (generate-new-buffer " *mm*") nil @@ -194,7 +246,10 @@ file to save in." (mm-mailcap-command method file-name mime-type)) (with-temp-buffer (insert-file-contents file-name) - (gnus-print-buffer)) + (if (eq gnus-dired-mail-mode 'gnus-user-agent) + (gnus-print-buffer) + ;; FIXME: + (error "MIME print only implemeted via Gnus"))) (ps-despool print-to)))) ((file-symlink-p file-name) (error "File is a symlink to a nonexistent target")) diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index f37b1b73416..79e513b5f05 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -74,19 +74,18 @@ (defvar gnus-mouse-face-prop 'mouse-face "Property used for highlighting mouse regions."))) -(eval-when-compile - (defvar gnus-tmp-unread) - (defvar gnus-tmp-replied) - (defvar gnus-tmp-score-char) - (defvar gnus-tmp-indentation) - (defvar gnus-tmp-opening-bracket) - (defvar gnus-tmp-lines) - (defvar gnus-tmp-name) - (defvar gnus-tmp-closing-bracket) - (defvar gnus-tmp-subject-or-nil) - (defvar gnus-check-before-posting) - (defvar gnus-mouse-face) - (defvar gnus-group-buffer)) +(defvar gnus-tmp-unread) +(defvar gnus-tmp-replied) +(defvar gnus-tmp-score-char) +(defvar gnus-tmp-indentation) +(defvar gnus-tmp-opening-bracket) +(defvar gnus-tmp-lines) +(defvar gnus-tmp-name) +(defvar gnus-tmp-closing-bracket) +(defvar gnus-tmp-subject-or-nil) +(defvar gnus-check-before-posting) +(defvar gnus-mouse-face) +(defvar gnus-group-buffer) (defun gnus-ems-redefine () (cond diff --git a/lisp/gnus/gnus-fun.el b/lisp/gnus/gnus-fun.el index 162cc7e1984..05454960e38 100644 --- a/lisp/gnus/gnus-fun.el +++ b/lisp/gnus/gnus-fun.el @@ -34,6 +34,8 @@ (require 'gnus-util) (require 'gnus) +(defvar gnus-face-properties-alist) + (defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory) "*Directory where X-Face PBM files are stored." :version "22.1" diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 942a1cf4947..5843214e48a 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -28,8 +28,8 @@ ;;; Code: (eval-when-compile - (require 'cl) - (defvar tool-bar-mode)) + (require 'cl)) +(defvar tool-bar-mode) (require 'gnus) (require 'gnus-start) @@ -1655,6 +1655,24 @@ if it is a string, only list groups matching REGEXP." (ticked (gnus-range-length (cdr (assq 'tick marked)))) (group-age (gnus-group-timestamp-delta group)) (inhibit-read-only t)) + ;; FIXME: http://thread.gmane.org/gmane.emacs.gnus.general/65451/focus=65465 + ;; ====================================================================== + ;; From: Richard Stallman + ;; Subject: Re: Rewriting gnus-group-highlight-line (was: [...]) + ;; Cc: ding@gnus.org + ;; Date: Sat, 27 Oct 2007 19:41:20 -0400 + ;; Message-ID: + ;; + ;; [...] + ;; The kludge is that the alist elements contain expressions that refer + ;; to local variables with short names. Perhaps write your own tiny + ;; evaluator that handles just `and', `or', and numeric comparisons + ;; and just a few specific variables. + ;; ====================================================================== + ;; + ;; Similar for other evaluated variables. Grep for risky-local-variable + ;; to find them! -- rsteib + ;; ;; Eval the cars of the lists until we find a match. (while (and list (not (eval (caar list)))) @@ -2875,8 +2893,8 @@ If SOLID (the prefix), create a solid group." (cons (current-buffer) (if (eq major-mode 'gnus-summary-mode) 'summary 'group)))))) +(defvar nnrss-group-alist) (eval-when-compile - (defvar nnrss-group-alist) (defun nnrss-discover-feed (arg)) (defun nnrss-save-server-data (arg))) (defun gnus-group-make-rss-group (&optional url) diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el index 52b5e350653..ac2b7237866 100644 --- a/lisp/gnus/gnus-int.el +++ b/lisp/gnus/gnus-int.el @@ -36,6 +36,7 @@ (autoload 'gnus-agent-expire "gnus-agent") (autoload 'gnus-agent-regenerate-group "gnus-agent") (autoload 'gnus-agent-read-servers-validate-native "gnus-agent") +(autoload 'gnus-agent-possibly-synchronize-flags-server "gnus-agent") (defcustom gnus-open-server-hook nil "Hook called just before opening connection to the news server." @@ -278,6 +279,11 @@ If it is down, start it up (again)." ;; prompting with "go offline?". This is only a concern ;; when the agent's backend fails to open the server. (gnus-open-server gnus-command-method)) + (when (and (eq (cadr elem) 'ok) gnus-agent + (gnus-agent-method-p gnus-command-method)) + (save-excursion + (gnus-agent-possibly-synchronize-flags-server + gnus-command-method))) result))))) (defun gnus-close-server (gnus-command-method) diff --git a/lisp/gnus/gnus-kill.el b/lisp/gnus/gnus-kill.el index 5778a02e168..2d64a76b6c6 100644 --- a/lisp/gnus/gnus-kill.el +++ b/lisp/gnus/gnus-kill.el @@ -687,7 +687,6 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" (concat "options -n " (mapconcat 'identity command-line-args-left " ")))) (gnus-expert-user t) - (nnmail-spool-file nil) (mail-sources nil) (gnus-use-dribble-file nil) (gnus-batch-mode t) diff --git a/lisp/gnus/gnus-mh.el b/lisp/gnus/gnus-mh.el index 66321c0d3e8..48a85071e67 100644 --- a/lisp/gnus/gnus-mh.el +++ b/lisp/gnus/gnus-mh.el @@ -41,8 +41,7 @@ (require 'gnus-msg) (require 'gnus-sum) -(eval-when-compile - (defvar mh-lib-progs)) +(defvar mh-lib-progs) (defun gnus-summary-save-article-folder (&optional arg) "Append the current article to an mh folder. diff --git a/lisp/gnus/gnus-move.el b/lisp/gnus/gnus-move.el index 0a97f8d5bd6..cf5cde692ff 100644 --- a/lisp/gnus/gnus-move.el +++ b/lisp/gnus/gnus-move.el @@ -47,8 +47,7 @@ Update the .newsrc.eld file to reflect the change of nntp server." ;; First start Gnus. (let ((gnus-activate-level 0) - (mail-sources nil) - (nnmail-spool-file nil)) + (mail-sources nil)) (gnus)) (save-excursion diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index 891ed1bc269..735b9ed629b 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -265,7 +265,7 @@ This can also be a function receiving the group name as the only parameter, which should return non-nil if a confirmation is needed; or a regexp, in which case a confirmation is asked for if the group name matches the regexp." - :version "22.1" + :version "23.0" ;; No Gnus (default changed) :group 'gnus-message :type '(choice (const :tag "No" nil) (const :tag "Yes" t) @@ -1101,7 +1101,10 @@ If VERY-WIDE, make a very wide reply." ((functionp gnus-confirm-mail-reply-to-news) (funcall gnus-confirm-mail-reply-to-news gnus-newsgroup-name)) (t gnus-confirm-mail-reply-to-news))) - (y-or-n-p "Really reply by mail to article author? ")) + (if (or wide very-wide) + t ;; Ignore gnus-confirm-mail-reply-to-news for wide and very + ;; wide replies. + (y-or-n-p "Really reply by mail to article author? "))) (let* ((article (if (listp (car yank)) (caar yank) diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 2ccf70efc46..d45cc6c5d6d 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el @@ -63,6 +63,8 @@ (require 'gnus-util) (require 'nnmail) +(defvar gnus-adaptive-word-syntax-table) + (defvar gnus-registry-dirty t "Boolean set to t when the registry is modified") diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el index ca087f9ca4d..77e06ee04f8 100644 --- a/lisp/gnus/gnus-srvr.el +++ b/lisp/gnus/gnus-srvr.el @@ -280,7 +280,7 @@ The following commands are available: ;; Insert the text. (eval gnus-server-line-format-spec)) (list 'gnus-server (intern gnus-tmp-name) - 'gnus-named-server (intern (gnus-method-to-server method)))))) + 'gnus-named-server (intern (gnus-method-to-server method t)))))) (defun gnus-enter-server-buffer () "Set up the server buffer." diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el index 39de524b156..2c1b6677949 100644 --- a/lisp/gnus/gnus-start.el +++ b/lisp/gnus/gnus-start.el @@ -39,11 +39,11 @@ (autoload 'gnus-agent-possibly-alter-active "gnus-agent") (eval-when-compile - (require 'cl) + (require 'cl)) - (defvar gnus-agent-covered-methods nil) - (defvar gnus-agent-file-loading-local nil) - (defvar gnus-agent-file-loading-cache nil)) +(defvar gnus-agent-covered-methods) +(defvar gnus-agent-file-loading-local) +(defvar gnus-agent-file-loading-cache) (defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc") "Your `.newsrc' file. @@ -652,21 +652,20 @@ the first newsgroup." ;;; General various misc type functions. ;; Silence byte-compiler. -(eval-when-compile - (defvar gnus-current-headers) - (defvar gnus-thread-indent-array) - (defvar gnus-newsgroup-name) - (defvar gnus-newsgroup-headers) - (defvar gnus-group-list-mode) - (defvar gnus-group-mark-positions) - (defvar gnus-newsgroup-data) - (defvar gnus-newsgroup-unreads) - (defvar nnoo-state-alist) - (defvar gnus-current-select-method) - (defvar mail-sources) - (defvar nnmail-scan-directory-mail-source-once) - (defvar nnmail-split-history) - (defvar nnmail-spool-file)) +(defvar gnus-current-headers) +(defvar gnus-thread-indent-array) +(defvar gnus-newsgroup-name) +(defvar gnus-newsgroup-headers) +(defvar gnus-group-list-mode) +(defvar gnus-group-mark-positions) +(defvar gnus-newsgroup-data) +(defvar gnus-newsgroup-unreads) +(defvar nnoo-state-alist) +(defvar gnus-current-select-method) +(defvar mail-sources) +(defvar nnmail-scan-directory-mail-source-once) +(defvar nnmail-split-history) +(defvar nnmail-spool-file) (defun gnus-close-all-servers () "Close all servers." @@ -1514,8 +1513,8 @@ newsgroup." (setq killed (cdr killed))))) ;; We want to inline a function from gnus-cache, so we cheat here: +(defvar gnus-cache-active-hashtb) (eval-when-compile - (defvar gnus-cache-active-hashtb) (defun gnus-cache-possibly-alter-active (group active) "Alter the ACTIVE info for GROUP to reflect the articles in the cache." (when gnus-cache-active-hashtb @@ -1672,7 +1671,7 @@ If SCAN, request a scan of that group as well." (defun gnus-get-unread-articles (&optional level) (setq gnus-server-method-cache nil) (let* ((newsrc (cdr gnus-newsrc-alist)) - (level (or level gnus-activate-level (1+ gnus-level-subscribed))) + (alevel (or level gnus-activate-level (1+ gnus-level-subscribed))) (foreign-level (min (cond ((and gnus-activate-foreign-newsgroups @@ -1681,11 +1680,11 @@ If SCAN, request a scan of that group as well." ((numberp gnus-activate-foreign-newsgroups) gnus-activate-foreign-newsgroups) (t 0)) - level)) + alevel)) (methods-cache nil) (type-cache nil) scanned-methods info group active method retrieve-groups cmethod - method-type ignore) + method-type) (gnus-message 6 "Checking new news...") (while newsrc @@ -1722,7 +1721,6 @@ If SCAN, request a scan of that group as well." 'foreign))) (push (cons method method-type) type-cache)) - (setq ignore nil) (cond ((and method (eq method-type 'foreign)) ;; These groups are foreign. Check the level. (if (<= (gnus-info-level info) foreign-level) @@ -1736,9 +1734,17 @@ If SCAN, request a scan of that group as well." (when (fboundp (intern (concat (symbol-name (car method)) "-request-update-info"))) (inline (gnus-request-update-info info method)))) - (setq ignore t))) + (if (and level + ;; If `active' is nil that means the group has + ;; never been read, the group should be marked + ;; as having never been checked (see below). + active + (> (gnus-info-level info) level)) + ;; Don't check groups of which levels are higher + ;; than the one that a user specified. + (setq active 'ignore)))) ;; These groups are native or secondary. - ((> (gnus-info-level info) level) + ((> (gnus-info-level info) alevel) ;; We don't want these groups. (setq active 'ignore)) ;; Activate groups. @@ -1758,11 +1764,7 @@ If SCAN, request a scan of that group as well." ;; not required. (if (and (or nnmail-scan-directory-mail-source-once - (null (assq 'directory - (or mail-sources - (if (listp nnmail-spool-file) - nnmail-spool-file - (list nnmail-spool-file)))))) + (null (assq 'directory mail-sources))) (member method scanned-methods)) (setq active (gnus-activate-group group)) (setq active (gnus-activate-group group 'scan)) @@ -1775,10 +1777,6 @@ If SCAN, request a scan of that group as well." ((eq active 'ignore) ;; Don't do anything. ) - ((and active ignore) - ;; The level of the foreign group is higher than the specified - ;; value. - ) (active (inline (gnus-get-unread-articles-in-group info active t))) (t @@ -2106,7 +2104,8 @@ If SCAN, request a scan of that group as well." (if (equal method gnus-select-method) (gnus-make-hashtable (count-lines (point-min) (point-max))) - (gnus-make-hashtable 4096))))))) + (gnus-make-hashtable 4096)))))) + group max min) ;; Delete unnecessary lines. (goto-char (point-min)) (cond @@ -2141,8 +2140,12 @@ If SCAN, request a scan of that group as well." (insert prefix) (zerop (forward-line 1))))))) ;; Store the active file in a hash table. - (goto-char (point-min)) - (let (group max min) + ;; Use a unibyte buffer in order to make `read' read non-ASCII + ;; group names (which have been encoded) as unibyte strings. + (mm-with-unibyte-buffer + (insert-buffer-substring cur) + (setq cur (current-buffer)) + (goto-char (point-min)) (while (not (eobp)) (condition-case () (progn diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index bc5ed9f0fb5..b082a8b152e 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -28,8 +28,10 @@ ;;; Code: (eval-when-compile - (require 'cl) - (defvar tool-bar-mode)) + (require 'cl)) + +(defvar tool-bar-mode) +(defvar gnus-tmp-header) (require 'gnus) (require 'gnus-group) @@ -2193,6 +2195,7 @@ increase the score of each group you read." "O" gnus-uu-decode-save "b" gnus-uu-decode-binhex "B" gnus-uu-decode-binhex + "Y" gnus-uu-decode-yenc "p" gnus-uu-decode-postscript "P" gnus-uu-decode-postscript-and-save) @@ -4954,7 +4957,6 @@ Unscored articles will be counted as having a score of zero." (defvar gnus-tmp-root-expunged nil) (defvar gnus-tmp-dummy-line nil) -(eval-when-compile (defvar gnus-tmp-header)) (defun gnus-extra-header (type &optional header) "Return the extra header of TYPE." (or (cdr (assq type (mail-header-extra (or header gnus-tmp-header)))) @@ -5592,8 +5594,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (gnus-get-predicate display))) ;; Uses the dynamically bound `number' variable. -(eval-when-compile - (defvar number)) +(defvar number) (defun gnus-article-marked-p (type &optional article) (let ((article (or article number))) (cond diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index cf174d90ac8..de01fb2db11 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -36,16 +36,16 @@ ;;; Code: (eval-when-compile - (require 'cl) - ;; Fixme: this should be a gnus variable, not nnmail-. - (defvar nnmail-pathname-coding-system) - (defvar nnmail-active-file-coding-system) + (require 'cl)) +;; Fixme: this should be a gnus variable, not nnmail-. +(defvar nnmail-pathname-coding-system) +(defvar nnmail-active-file-coding-system) + +;; Inappropriate references to other parts of Gnus. +(defvar gnus-emphasize-whitespace-regexp) +(defvar gnus-original-article-buffer) +(defvar gnus-user-agent) - ;; Inappropriate references to other parts of Gnus. - (defvar gnus-emphasize-whitespace-regexp) - (defvar gnus-original-article-buffer) - (defvar gnus-user-agent) - ) (require 'time-date) (require 'netrc) @@ -982,9 +982,10 @@ with potentially long computations." ;; version fails halfway, however it provides the rmail-select-summary ;; macro which uses the following functions: (autoload 'rmail-summary-displayed "rmail") - (autoload 'rmail-maybe-display-summary "rmail"))) - (defvar rmail-default-rmail-file) - (defvar mm-text-coding-system)) + (autoload 'rmail-maybe-display-summary "rmail")))) + +(defvar rmail-default-rmail-file) +(defvar mm-text-coding-system) (defun gnus-output-to-rmail (filename &optional ask) "Append the current article to an Rmail file named FILENAME." @@ -1551,8 +1552,7 @@ Return nil otherwise." display)) display))))) -(eval-when-compile - (defvar tool-bar-mode)) +(defvar tool-bar-mode) (defun gnus-tool-bar-update (&rest ignore) "Update the tool bar." @@ -1621,10 +1621,9 @@ predicate on the elements." (push (pop list1) res))) (nconc (nreverse res) list1 list2)))) -(eval-when-compile - (defvar xemacs-codename) - (defvar sxemacs-codename) - (defvar emacs-program-version)) +(defvar xemacs-codename) +(defvar sxemacs-codename) +(defvar emacs-program-version) (defun gnus-emacs-version () "Stringified Emacs version." diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el index 20937562096..3a045c2c234 100644 --- a/lisp/gnus/gnus-uu.el +++ b/lisp/gnus/gnus-uu.el @@ -35,6 +35,7 @@ (require 'message) (require 'gnus-msg) (require 'mm-decode) +(require 'yenc) (defgroup gnus-extract nil "Extracting encoded files." @@ -75,7 +76,7 @@ ("\\.\\(tar\\|arj\\|zip\\|zoo\\|arc\\|gz\\|Z\\|lzh\\|ar\\|lha\\)$" "gnus-uu-archive")) "*Default actions to be taken when the user asks to view a file. -To change the behaviour, you can either edit this variable or set +To change the behavior, you can either edit this variable or set `gnus-uu-user-view-rules' to something useful. For example: @@ -95,7 +96,7 @@ at that point in the command string. If there's no \"%s\" in the command string, the file name will be appended to the command string before executing. -There are several user variables to tailor the behaviour of gnus-uu to +There are several user variables to tailor the behavior of gnus-uu to your needs. First we have `gnus-uu-user-view-rules', which is the variable gnus-uu first consults when trying to decide how to view a file. If this variable contains no matches, gnus-uu examines the @@ -346,6 +347,7 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (defvar gnus-uu-file-name nil) (defvar gnus-uu-uudecode-process nil) (defvar gnus-uu-binhex-article-name nil) +(defvar gnus-uu-yenc-article-name nil) (defvar gnus-uu-work-dir nil) @@ -412,6 +414,17 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir))) (gnus-uu-decode-with-method 'gnus-uu-binhex-article n dir)) +(defun gnus-uu-decode-yenc (n dir) + "Decode the yEnc-encoded current article." + (interactive + (list current-prefix-arg + (file-name-as-directory + (read-file-name "yEnc decode and save in dir: " + gnus-uu-default-dir + gnus-uu-default-dir)))) + (setq gnus-uu-yenc-article-name nil) + (gnus-uu-decode-with-method 'gnus-uu-yenc-article n dir nil t)) + (defun gnus-uu-decode-uu-view (&optional n) "Uudecodes and views the current article." (interactive "P") @@ -1016,6 +1029,39 @@ When called interactively, prompt for REGEXP." (cons gnus-uu-binhex-article-name state) state))) +;; yEnc + +(defun gnus-uu-yenc-article (buffer in-state) + (save-excursion + (set-buffer gnus-original-article-buffer) + (widen) + (let ((file-name (yenc-extract-filename)) + state start-char) + (when (not file-name) + (setq state (list 'wrong-type))) + + (if (memq 'wrong-type state) + () + (when (yenc-first-part-p) + (setq gnus-uu-yenc-article-name + (expand-file-name file-name gnus-uu-work-dir)) + (push 'begin state)) + (when (yenc-last-part-p) + (push 'end state)) + (unless state + (push 'middle state)) + (mm-with-unibyte-buffer + (insert-buffer gnus-original-article-buffer) + (yenc-decode-region (point-min) (point-max)) + (when (and (member 'begin state) + (file-exists-p gnus-uu-yenc-article-name)) + (delete-file gnus-uu-yenc-article-name)) + (mm-append-to-file (point-min) (point-max) + gnus-uu-yenc-article-name))) + (if (memq 'begin state) + (cons file-name state) + state)))) + ;; PostScript (defun gnus-uu-decode-postscript-article (process-buffer in-state) diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index b09511ea9c4..bd96e52d65f 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -43,6 +43,8 @@ (defvar gnus-spam-autodetect-methods) (defvar gnus-spam-newsgroup-contents) (defvar gnus-spam-process-destinations) +(defvar gnus-spam-resend-to) +(defvar gnus-ham-resend-to) (defvar gnus-spam-process-newsgroups) @@ -3519,15 +3521,16 @@ that that variable is buffer-local to the summary buffers." (nth 1 method)))) method))) -(defsubst gnus-method-to-server (method) +(defsubst gnus-method-to-server (method &optional nocache) (catch 'server-name (setq method (or method gnus-select-method)) ;; Perhaps it is already in the cache. - (mapc (lambda (name-method) - (if (equal (cdr name-method) method) - (throw 'server-name (car name-method)))) - gnus-server-method-cache) + (unless nocache + (mapc (lambda (name-method) + (if (equal (cdr name-method) method) + (throw 'server-name (car name-method)))) + gnus-server-method-cache)) (mapc (lambda (server-alist) @@ -4252,14 +4255,16 @@ Allow completion over sensible values." ;;; Agent functions -(defun gnus-agent-method-p (method) +(defun gnus-agent-method-p (method-or-server) "Say whether METHOD is covered by the agent." - (or (eq (car gnus-agent-method-p-cache) method) - (setq gnus-agent-method-p-cache - (cons method - (member (if (stringp method) - method - (gnus-method-to-server method)) gnus-agent-covered-methods)))) + (or (eq (car gnus-agent-method-p-cache) method-or-server) + (let* ((method (if (stringp method-or-server) + (gnus-server-to-method method-or-server) + method-or-server)) + (server (gnus-method-to-server method t))) + (setq gnus-agent-method-p-cache + (cons method-or-server + (member server gnus-agent-covered-methods))))) (cdr gnus-agent-method-p-cache)) (defun gnus-online (method) diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el index abf32756498..39595b767ad 100644 --- a/lisp/gnus/mail-source.el +++ b/lisp/gnus/mail-source.el @@ -27,18 +27,20 @@ ;;; Code: +(require 'format-spec) (eval-when-compile (require 'cl) - (require 'imap) - (eval-when-compile (defvar display-time-mail-function))) + (require 'imap)) (eval-and-compile (autoload 'pop3-movemail "pop3") (autoload 'pop3-get-message-count "pop3") (autoload 'nnheader-cancel-timer "nnheader")) -(require 'format-spec) (require 'mm-util) (require 'message) ;; for `message-directory' +(defvar display-time-mail-function) + + (defgroup mail-source nil "The mail-fetching library." :version "21.1" @@ -56,15 +58,16 @@ (list 'const (car a))) imap-stream-alist))) -(defcustom mail-sources nil - "*Where the mail backends will look for incoming mail. +(defcustom mail-sources '((file)) + "Where the mail backends will look for incoming mail. This variable is a list of mail source specifiers. See Info node `(gnus)Mail Source Specifiers'." :group 'mail-source + :version "23.0" ;; No Gnus :link '(custom-manual "(gnus)Mail Source Specifiers") :type `(choice - (const nil) - (repeat + (const :tag "None" nil) + (repeat :tag "List" (choice :format "%[Value Menu%] %v" :value (file) (cons :tag "Spool file" diff --git a/lisp/gnus/mailcap.el b/lisp/gnus/mailcap.el index 6839a6472b7..063b2ec2f44 100644 --- a/lisp/gnus/mailcap.el +++ b/lisp/gnus/mailcap.el @@ -33,8 +33,14 @@ ;;; Code: (eval-when-compile (require 'cl)) -(require 'mail-parse) -(require 'mm-util) +(autoload 'mail-header-parse-content-type "mail-parse") + +;; `mm-delete-duplicates' is an alias for `delete-dups' in Emacs 22. +(defalias 'mailcap-delete-duplicates + (if (fboundp 'delete-dups) + 'delete-dups + (autoload 'mm-delete-duplicates "mm-util") + 'mm-delete-duplicates)) (defgroup mailcap nil "Definition of viewers for MIME types." @@ -722,7 +728,7 @@ If TEST is not given, it defaults to t." t) (t nil)))) -(defun mailcap-mime-info (string &optional request) +(defun mailcap-mime-info (string &optional request no-decode) "Get the MIME viewer command for STRING, return nil if none found. Expects a complete content-type header line as its argument. @@ -732,7 +738,11 @@ entry) will be returned. If it is a string, then the mailcap field corresponding to that string will be returned (print, description, whatever). If a number, then all the information for this specific viewer is returned. If `all', then all possible viewers for -this type is returned." +this type is returned. + +If NO-DECODE is non-nil, don't decode STRING." + ;; NO-DECODE avoids calling `mail-header-parse-content-type' from + ;; `mail-parse.el' (let ( major ; Major encoding (text, etc) minor ; Minor encoding (html, etc) @@ -746,7 +756,10 @@ this type is returned." viewer ; The one and only viewer ctl) (save-excursion - (setq ctl (mail-header-parse-content-type (or string "text/plain"))) + (setq ctl + (if no-decode + (list (or string "text/plain")) + (mail-header-parse-content-type (or string "text/plain")))) (setq major (split-string (car ctl) "/")) (setq minor (cadr major) major (car major)) @@ -766,7 +779,7 @@ this type is returned." (setq viewer (car passed))) (cond ((and (null viewer) (not (equal major "default")) request) - (mailcap-mime-info "default" request)) + (mailcap-mime-info "default" request no-decode)) ((or (null request) (equal request "")) (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info)) ((stringp request) @@ -976,7 +989,7 @@ If FORCE, re-parse even if already parsed." (defun mailcap-mime-types () "Return a list of MIME media types." (mailcap-parse-mimetypes) - (mm-delete-duplicates + (mailcap-delete-duplicates (nconc (mapcar 'cdr mailcap-mime-extensions) (apply diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 895c36a6beb..3aaa8c25745 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -32,9 +32,8 @@ ;;; Code: (eval-when-compile - (require 'cl) - (defvar gnus-message-group-art) - (defvar gnus-list-identifiers)) ; gnus-sum is required where necessary + (require 'cl)) + (require 'hashcash) (require 'canlock) (require 'mailheader) @@ -51,6 +50,11 @@ (require 'rfc822) (require 'ecomplete) +(autoload 'mailclient-send-it "mailclient") ;; Emacs 22 or contrib/ + +(defvar gnus-message-group-art) +(defvar gnus-list-identifiers) ; gnus-sum is required where necessary +(defvar rmail-enable-mime-composing) (defgroup message '((user-mail-address custom-variable) (user-full-name custom-variable)) @@ -269,7 +273,7 @@ included. Organization and User-Agent are optional." :link '(custom-manual "(message)Mail Headers") :type 'regexp) -(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|^X-Payment:\\|^Approved:" +(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-ID:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|^X-Payment:\\|^Approved:" "*Header lines matching this regexp will be deleted before posting. It's best to delete old Path and Date headers before posting to avoid any confusion." @@ -474,8 +478,7 @@ This is used by `message-kill-buffer'." :group 'message-buffers :type 'boolean) -(eval-when-compile - (defvar gnus-local-organization)) +(defvar gnus-local-organization) (defcustom message-user-organization (or (and (boundp 'gnus-local-organization) (stringp gnus-local-organization) @@ -585,21 +588,21 @@ Done before generating the new subject of a forward." :type 'regexp) (defcustom message-cite-prefix-regexp - (if (string-match "[[:digit:]]" "1") ;; support POSIX? - "\\([ \t]*[-_.[:word:]]+>+\\|[ \t]*[]>|}+]\\)+" + (if (string-match "[[:digit:]]" "1") + ;; Support POSIX? XEmacs 21.5.27 doesn't. + "\\([ \t]*[_.[:word:]]+>+\\|[ \t]*[]>|}]\\)+" ;; ?-, ?_ or ?. MUST NOT be in syntax entry w. (let (non-word-constituents) (with-syntax-table text-mode-syntax-table (setq non-word-constituents (concat - (if (string-match "\\w" "-") "" "-") (if (string-match "\\w" "_") "" "_") (if (string-match "\\w" ".") "" ".")))) (if (equal non-word-constituents "") - "\\([ \t]*\\(\\w\\)+>+\\|[ \t]*[]>|}+]\\)+" + "\\([ \t]*\\(\\w\\)+>+\\|[ \t]*[]>|}]\\)+" (concat "\\([ \t]*\\(\\w\\|[" non-word-constituents - "]\\)+>+\\|[ \t]*[]>|}+]\\)+")))) + "]\\)+>+\\|[ \t]*[]>|}]\\)+")))) "*Regexp matching the longest possible citation prefix on a line." :version "22.1" :group 'message-insertion @@ -618,28 +621,36 @@ Done before generating the new subject of a forward." :link '(custom-manual "(message)Canceling News") :type 'string) +(defvar smtpmail-default-smtp-server) + +(defun message-send-mail-function () + "Return suitable value for the variable `message-send-mail-function'." + (cond ((and (require 'sendmail) + (boundp 'sendmail-program) + sendmail-program + (executable-find sendmail-program)) + 'message-send-mail-with-sendmail) + ((and (locate-library "smtpmail") + (require 'smtpmail) + smtpmail-default-smtp-server) + 'message-smtpmail-send-it) + ((locate-library "mailclient") + 'message-send-mail-with-mailclient) + (t + (lambda () + (error "Don't know how to send mail. Please customize `message-send-mail-function'"))))) + ;; Useful to set in site-init.el -(defcustom message-send-mail-function - (let ((program (if (boundp 'sendmail-program) - ;; see paths.el - sendmail-program))) - (cond - ((and program - (string-match "/" program) ;; Skip path - (file-executable-p program)) - 'message-send-mail-with-sendmail) - ((and program - (executable-find program)) - 'message-send-mail-with-sendmail) - (t - 'smtpmail-send-it))) +(defcustom message-send-mail-function (message-send-mail-function) "Function to call to send the current buffer as mail. The headers should be delimited by a line whose contents match the variable `mail-header-separator'. -Valid values include `message-send-mail-with-sendmail' (the default), +Valid values include `message-send-mail-with-sendmail' `message-send-mail-with-mh', `message-send-mail-with-qmail', -`message-smtpmail-send-it', `smtpmail-send-it' and `feedmail-send-it'. +`message-smtpmail-send-it', `smtpmail-send-it', +`feedmail-send-it' and `message-send-mail-with-mailclient'. The +default is system dependent. See also `send-mail-function'." :type '(radio (function-item message-send-mail-with-sendmail) @@ -648,8 +659,12 @@ See also `send-mail-function'." (function-item message-smtpmail-send-it) (function-item smtpmail-send-it) (function-item feedmail-send-it) - (function :tag "Other")) + (function :tag "Other") + (function-item message-send-mail-with-mailclient + :tag "Use Mailclient package") + (function :tag "Other")) :group 'message-sending + :initialize 'custom-initialize-default :link '(custom-manual "(message)Mail Variables") :group 'message-mail) @@ -816,9 +831,8 @@ might set this variable to '(\"-f\" \"you@some.where\")." :type '(choice (function) (repeat string))) -(eval-when-compile - (defvar gnus-post-method) - (defvar gnus-select-method)) +(defvar gnus-post-method) +(defvar gnus-select-method) (defcustom message-post-method (cond ((and (boundp 'gnus-post-method) (listp gnus-post-method) @@ -1122,8 +1136,7 @@ these lines." (file-readable-p "/etc/sendmail.cf") (let ((buffer (get-buffer-create " *temp*"))) (unwind-protect - (save-excursion - (set-buffer buffer) + (with-current-buffer buffer (insert-file-contents "/etc/sendmail.cf") (goto-char (point-min)) (let ((case-fold-search nil)) @@ -1205,7 +1218,7 @@ If nil, you might be asked to input the charset." (defcustom message-dont-reply-to-names (and (boundp 'rmail-dont-reply-to-names) rmail-dont-reply-to-names) "*Addresses to prune when doing wide replies. -This can be a regexp or a list of regexps. Also, a value of nil means +This can be a regexp or a list of regexps. Also, a value of nil means exclude your own user name only." :version "21.1" :group 'message @@ -1617,7 +1630,7 @@ functionality to work." (defcustom message-generate-hashcash (if (executable-find "hashcash") t) "*Whether to generate X-Hashcash: headers. -If `t', always generate hashcash headers. If `opportunistic', +If t, always generate hashcash headers. If `opportunistic', only generate hashcash headers if it can be done without the user waiting (i.e., only asynchronously). @@ -1640,9 +1653,8 @@ You must have the \"hashcash\" binary installed, see `hashcash-path'." (defvar message-inserted-headers nil) ;; Byte-compiler warning -(eval-when-compile - (defvar gnus-active-hashtb) - (defvar gnus-read-active-file)) +(defvar gnus-active-hashtb) +(defvar gnus-read-active-file) ;;; Regexp matching the delimiter of messages in UNIX mail format ;;; (UNIX From lines), minus the initial ^. It should be a copy @@ -1916,8 +1928,7 @@ see `message-narrow-to-headers-or-head'." "Evaluate FORMS in the reply buffer, if it exists." `(when (and message-reply-buffer (buffer-name message-reply-buffer)) - (save-excursion - (set-buffer message-reply-buffer) + (with-current-buffer message-reply-buffer ,@forms))) (put 'message-with-reply-buffer 'lisp-indent-function 0) @@ -2662,9 +2673,8 @@ Prefixed with two \\[universal-argument]'s, display the PGG manual." (defvar message-tool-bar-map nil) -(eval-when-compile - (defvar facemenu-add-face-function) - (defvar facemenu-remove-face-function)) +(defvar facemenu-add-face-function) +(defvar facemenu-remove-face-function) ;;; Forbidden properties ;; @@ -3084,8 +3094,7 @@ or in the synonym headers, defined by `message-header-synonyms'." (let ((follow-to (and message-reply-buffer (buffer-name message-reply-buffer) - (save-excursion - (set-buffer message-reply-buffer) + (with-current-buffer message-reply-buffer (message-get-reply-headers t))))) (save-excursion (save-restriction @@ -3337,8 +3346,7 @@ The three allowed values according to RFC 1327 are `high', `normal' and `low'." (interactive) (save-excursion - (let ((valid '("high" "normal" "low")) - (new "high") + (let ((new "high") cur) (save-restriction (message-narrow-to-headers) @@ -3612,7 +3620,7 @@ Really top post? "))) (defun message-buffers () "Return a list of active message buffers." (let (buffers) - (save-excursion + (save-current-buffer (dolist (buffer (buffer-list t)) (set-buffer buffer) (when (and (eq major-mode 'message-mode) @@ -3620,8 +3628,6 @@ Really top post? "))) (push (buffer-name buffer) buffers)))) (nreverse buffers))) -(eval-when-compile (defvar mail-citation-hook)) ; Compiler directive - (defun message-cite-original-1 (strip-signature) "Cite an original message. If STRIP-SIGNATURE is non-nil, strips off the signature from the @@ -3688,6 +3694,8 @@ This function uses `mail-citation-hook' if that is non-nil." "Cite function in the standard Message manner." (message-cite-original-1 nil)) +(defvar gnus-extract-address-components) + (defun message-insert-formatted-citation-line (&optional from date) "Function that inserts a formatted citation line. @@ -4304,8 +4312,7 @@ This function could be useful in `message-setup-hook'." ;; Let the user do all of the above. (run-hooks 'message-header-hook)) (unwind-protect - (save-excursion - (set-buffer tembuf) + (with-current-buffer tembuf (erase-buffer) ;; Avoid copying text props (except hard newlines). (insert (with-current-buffer mailbuf @@ -4450,8 +4457,7 @@ If you always want Gnus to send messages in one piece, set (unless (or (null cpr) (and (numberp cpr) (zerop cpr))) (error "Sending...failed with exit value %d" cpr))) (when message-interactive - (save-excursion - (set-buffer errbuf) + (with-current-buffer errbuf (goto-char (point-min)) (while (re-search-forward "\n+ *" nil t) (replace-match "; ")) @@ -4532,6 +4538,13 @@ manual for details." (run-hooks 'message-send-mail-hook) (smtpmail-send-it)) +(defun message-send-mail-with-mailclient () + "Send the prepared message buffer with `mailclient-send-it'. +This only differs from `smtpmail-send-it' that this command evaluates +`message-send-mail-hook' just before sending a message." + (run-hooks 'message-send-mail-hook) + (mailclient-send-it)) + (defun message-canlock-generate () "Return a string that is non-trivial to guess. Do not use this for anything important, it is cryptographically weak." @@ -4614,8 +4627,7 @@ Otherwise, generate and save a value for `canlock-password' first." (message-check-news-syntax))) nil (unwind-protect - (save-excursion - (set-buffer tembuf) + (with-current-buffer tembuf (buffer-disable-undo) (erase-buffer) ;; Avoid copying text props (except hard newlines). @@ -5278,8 +5290,7 @@ In posting styles use `(\"Expires\" (make-expires-date 30))'." "Return the References header for this message." (when message-reply-headers (let ((message-id (mail-header-message-id message-reply-headers)) - (references (mail-header-references message-reply-headers)) - new-references) + (references (mail-header-references message-reply-headers))) (if (or references message-id) (concat (or references "") (and references " ") (or message-id "")) @@ -5527,8 +5538,7 @@ subscribed address (and not the additional To and Cc header contents)." (mapcar 'funcall message-subscribed-address-functions)))) (save-match-data - (let ((subscribed-lists nil) - (list + (let ((list (loop for recipient in recipients when (loop for regexp in mft-regexps when (string-match regexp recipient) return t) @@ -5549,7 +5559,9 @@ subscribed address (and not the additional To and Cc header contents)." (mapcar 'downcase (mapcar 'car (mail-header-parse-addresses field)))))) - (setq ace (downcase (idna-to-ascii rhs))) + (setq ace (if (string-match "\\`[[:ascii:]]+\\'" rhs) + rhs + (downcase (idna-to-ascii rhs)))) (when (and (not (equal rhs ace)) (or (not (eq message-use-idna 'ask)) (y-or-n-p (format "Replace %s with %s in %s:? " @@ -6873,8 +6885,7 @@ the message." (setq subject (funcall func subject)))) subject)))) -(eval-when-compile - (defvar gnus-article-decoded-p)) +(defvar gnus-article-decoded-p) ;;;###autoload @@ -7088,8 +7099,6 @@ is for the internal use." (rmail-msg-restore-non-pruned-header))) (message-forward-make-body forward-buffer)) -(eval-when-compile (defvar rmail-enable-mime-composing)) - ;; Fixme: Should have defcustom. ;;;###autoload (defun message-insinuate-rmail () @@ -7311,8 +7320,7 @@ which specify the range to operate on." (mapcar #'delete-overlay (overlays-in (point-min) (point-max))))) ;; Support for toolbar -(eval-when-compile - (defvar tool-bar-mode)) +(defvar tool-bar-mode) ;; Note: The :set function in the `message-tool-bar*' variables will only ;; affect _new_ message buffers. We might add a function that walks thru all @@ -7377,7 +7385,7 @@ See `gmm-tool-bar-from-list' for details on the format of the list." (defcustom message-tool-bar-retro '(;; Old Emacs 21 icon for consistency. - (message-send-and-exit "gnus/mail_send") + (message-send-and-exit "gnus/mail-send") (message-kill-buffer "close") (message-dont-send "cancel") (mml-attach-file "attach" mml-mode-map) @@ -7556,9 +7564,8 @@ The following arguments may contain lists of values." (if (and show (setq text (message-flatten-list text))) (save-window-excursion - (save-excursion - (with-output-to-temp-buffer " *MESSAGE information message*" - (set-buffer " *MESSAGE information message*") + (with-output-to-temp-buffer " *MESSAGE information message*" + (with-current-buffer " *MESSAGE information message*" (fundamental-mode) ; for Emacs 20.4+ (mapc 'princ text) (goto-char (point-min)))) @@ -7581,16 +7588,13 @@ Then clone the local variables and values from the old buffer to the new one, cloning only the locals having a substring matching the regexp VARSTR." (let ((oldbuf (current-buffer))) - (save-excursion - (set-buffer (generate-new-buffer name)) + (with-current-buffer (generate-new-buffer name) (message-clone-locals oldbuf varstr) (current-buffer)))) (defun message-clone-locals (buffer &optional varstr) "Clone the local variables from BUFFER to the current buffer." - (let ((locals (save-excursion - (set-buffer buffer) - (buffer-local-variables))) + (let ((locals (with-current-buffer buffer (buffer-local-variables))) (regexp "^gnus\\|^nn\\|^message\\|^sendmail\\|^smtp\\|^user-mail-address")) (mapcar (lambda (local) diff --git a/lisp/gnus/mm-bodies.el b/lisp/gnus/mm-bodies.el index 20af36564f7..0560c51ba41 100644 --- a/lisp/gnus/mm-bodies.el +++ b/lisp/gnus/mm-bodies.el @@ -26,14 +26,14 @@ ;;; Code: -(eval-when-compile - (defvar mm-uu-decode-function) - (defvar mm-uu-binhex-decode-function)) - (require 'mm-util) (require 'rfc2047) (require 'mm-encode) +(defvar mm-uu-yenc-decode-function) +(defvar mm-uu-decode-function) +(defvar mm-uu-binhex-decode-function) + ;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL, ;; BS, vertical TAB, form feed, and ^_ ;; @@ -170,8 +170,6 @@ If no encoding was done, nil is returned." ;;; Functions for decoding ;;; -(eval-when-compile (defvar mm-uu-yenc-decode-function)) - (defun mm-decode-content-transfer-encoding (encoding &optional type) "Decodes buffer encoded with ENCODING, returning success status. If TYPE is `text/plain' CRLF->LF translation may occur." diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 14e5c255d2a..71ef9bcdf55 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -895,7 +895,7 @@ external if displayed external." ;; a vector in Emacs but is a list in XEmacs) ;; requires that it is lexically scoped. (timer (run-at-time 2.0 nil 'ignore))) - (if (boundp 'itimer-list) + (if (featurep 'xemacs) (lambda (process state) (when (eq 'exit (process-status process)) (if (memq timer itimer-list) @@ -1364,34 +1364,35 @@ be determined." (mm-handle-set-cache handle spec)))))) (defun mm-create-image-xemacs (type) - (cond - ((equal type "xbm") - ;; xbm images require special handling, since - ;; the only way to create glyphs from these - ;; (without a ton of work) is to write them - ;; out to a file, and then create a file - ;; specifier. - (let ((file (mm-make-temp-file - (expand-file-name "emm" mm-tmp-directory) - nil ".xbm"))) - (unwind-protect - (progn - (write-region (point-min) (point-max) file) - (make-glyph (list (cons 'x file)))) - (ignore-errors - (delete-file file))))) - (t - (make-glyph - (vector - (or (mm-image-type-from-buffer) - (intern type)) - :data (buffer-string)))))) + (when (featurep 'xemacs) + (cond + ((equal type "xbm") + ;; xbm images require special handling, since + ;; the only way to create glyphs from these + ;; (without a ton of work) is to write them + ;; out to a file, and then create a file + ;; specifier. + (let ((file (mm-make-temp-file + (expand-file-name "emm" mm-tmp-directory) + nil ".xbm"))) + (unwind-protect + (progn + (write-region (point-min) (point-max) file) + (make-glyph (list (cons 'x file)))) + (ignore-errors + (delete-file file))))) + (t + (make-glyph + (vector + (or (mm-image-type-from-buffer) + (intern type)) + :data (buffer-string))))))) (defun mm-image-fit-p (handle) "Say whether the image in HANDLE will fit the current window." (let ((image (mm-get-image handle))) (or (not image) - (if (fboundp 'glyph-width) + (if (featurep 'xemacs) ;; XEmacs' glyphs can actually tell us about their width, so ;; lets be nice and smart about them. (or mm-inline-large-images diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el index cfc6c949be0..edb7521dbf3 100644 --- a/lisp/gnus/mm-util.el +++ b/lisp/gnus/mm-util.el @@ -36,6 +36,8 @@ (require 'timer)) (require 'timer))) +(defvar mm-mime-mule-charset-alist ) + (eval-and-compile (mapc (lambda (elem) @@ -837,9 +839,10 @@ This affects whether coding conversion should be attempted generally." (autoload 'latin-unity-massage-name "latin-unity") (autoload 'latin-unity-maybe-remap "latin-unity") (autoload 'latin-unity-representations-feasible-region "latin-unity") - (autoload 'latin-unity-representations-present-region "latin-unity") - (defvar latin-unity-coding-systems) - (defvar latin-unity-ucs-list)) + (autoload 'latin-unity-representations-present-region "latin-unity")) + +(defvar latin-unity-coding-systems) +(defvar latin-unity-ucs-list) (defun mm-xemacs-find-mime-charset-1 (begin end) "Determine which MIME charset to use to send region as message. @@ -1375,7 +1378,7 @@ gzip, bzip2, etc. are allowed." (funcall (symbol-value 'set-auto-coding-function) nil (- (point-max) (point-min))) (error nil))))) - ((featurep 'file-coding) ;; XEmacs + ((and (featurep 'xemacs) (featurep 'file-coding)) ;; XEmacs (let ((case-fold-search t) (end (point-at-eol)) codesys start) diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el index c7f6b16a1c8..52d47b728ef 100644 --- a/lisp/gnus/mm-uu.el +++ b/lisp/gnus/mm-uu.el @@ -272,7 +272,7 @@ If PROPERTIES is non-nil, PROPERTIES are applied to the buffer, see `set-text-properties'. If PROPERTIES equals t, this means to apply the face `mm-uu-extract'." (let ((obuf (current-buffer)) - (coding-system + (coding-system ;; Might not exist in non-MULE XEmacs (when (boundp 'buffer-file-coding-system) buffer-file-coding-system))) @@ -305,11 +305,10 @@ apply the face `mm-uu-extract'." (mm-uu-configure) -(eval-when-compile - (defvar file-name) - (defvar start-point) - (defvar end-point) - (defvar entry)) +(defvar file-name) +(defvar start-point) +(defvar end-point) +(defvar entry) (defun mm-uu-uu-filename () (if (looking-at ".+") @@ -375,8 +374,7 @@ apply the face `mm-uu-extract'." (list mm-dissect-disposition (cons 'filename file-name)))) -(eval-when-compile - (defvar gnus-newsgroup-name)) +(defvar gnus-newsgroup-name) (defun mm-uu-emacs-sources-test () (setq file-name (match-string 1)) @@ -430,7 +428,12 @@ apply the face `mm-uu-extract'." (cons 'filename file-name))))) (defun mm-uu-yenc-extract () - (mm-make-handle (mm-uu-copy-to-buffer start-point end-point) + ;; This might not be exactly correct, but we sure can't get the + ;; binary data from the article buffer, since that's already in a + ;; non-binary charset. So get it from the original article buffer. + (mm-make-handle (save-excursion + (set-buffer gnus-original-article-buffer) + (mm-uu-copy-to-buffer start-point end-point)) (list (or (and file-name (string-match "\\.[^\\.]+$" file-name) (mailcap-extension-to-mime @@ -465,8 +468,7 @@ apply the face `mm-uu-extract'." (y-or-n-p "Verify pgp signed part? ") (message "")))))) -(eval-when-compile - (defvar gnus-newsgroup-charset)) +(defvar gnus-newsgroup-charset) (defun mm-uu-pgp-signed-extract-1 (handles ctl) (let ((buf (mm-uu-copy-to-buffer (point-min) (point-max)))) diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el index ffaf0ed68ba..cb4f42dabcf 100644 --- a/lisp/gnus/mm-view.el +++ b/lisp/gnus/mm-view.el @@ -97,19 +97,20 @@ (delete-region b (+ b 2))))))) (defun mm-inline-image-xemacs (handle) - (insert "\n\n") - (forward-char -2) - (let ((annot (make-annotation (mm-get-image handle) nil 'text)) - buffer-read-only) - (mm-handle-set-undisplayer - handle - `(lambda () - (let ((b ,(point-marker)) - buffer-read-only) - (delete-annotation ,annot) - (delete-region (- b 2) b)))) - (set-extent-property annot 'mm t) - (set-extent-property annot 'duplicable t))) + (when (featurep 'xemacs) + (insert "\n\n") + (forward-char -2) + (let ((annot (make-annotation (mm-get-image handle) nil 'text)) + buffer-read-only) + (mm-handle-set-undisplayer + handle + `(lambda () + (let ((b ,(point-marker)) + buffer-read-only) + (delete-annotation ,annot) + (delete-region (- b 2) b)))) + (set-extent-property annot 'mm t) + (set-extent-property annot 'duplicable t)))) (eval-and-compile (if (featurep 'xemacs) @@ -568,7 +569,7 @@ ;; By default, XEmacs font-lock uses non-duplicable text ;; properties. This code forces all the text properties ;; to be copied along with the text. - (when (fboundp 'extent-list) + (when (featurep 'xemacs) (map-extents (lambda (ext ignored) (set-extent-property ext 'duplicable t) nil) diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el index 29bc0d41a1b..e7ecc06164f 100644 --- a/lisp/gnus/mml-sec.el +++ b/lisp/gnus/mml-sec.el @@ -27,7 +27,9 @@ ;;; Code: (eval-when-compile (require 'cl)) -(require 'password) +(or (require 'password-cache nil t) + (require 'password)) + (autoload 'mml2015-sign "mml2015") (autoload 'mml2015-encrypt "mml2015") (autoload 'mml1991-sign "mml1991") diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el index c00ac416b8b..07dc1ab4ccb 100644 --- a/lisp/gnus/mml-smime.el +++ b/lisp/gnus/mml-smime.el @@ -142,6 +142,8 @@ Whether the passphrase is cached at all is controlled by nil)) (goto-char (point-max))) +(defvar gnus-extract-address-components) + (defun mml-smime-openssl-sign-query () ;; query information (what certificate) from user when MML tag is ;; added, for use later by the signing process @@ -298,13 +300,13 @@ Whether the passphrase is cached at all is controlled by (defun mml-smime-openssl-verify-test (handle ctl) smime-openssl-program) -(eval-and-compile - (autoload 'epg-make-context "epg")) +(defvar epg-user-id-alist) +(defvar epg-digest-algorithm-alist) +(defvar inhibit-redisplay) +(defvar password-cache-expiry) (eval-when-compile - (defvar epg-user-id-alist) - (defvar epg-digest-algorithm-alist) - (defvar inhibit-redisplay) + (autoload 'epg-make-context "epg") (autoload 'epg-context-set-armor "epg") (autoload 'epg-context-set-signers "epg") (autoload 'epg-context-result-for "epg") @@ -321,12 +323,6 @@ Whether the passphrase is cached at all is controlled by (autoload 'epg-expand-group "epg-config") (autoload 'epa-select-keys "epa")) -(eval-when-compile - (defvar password-cache-expiry) - (autoload 'password-read "password") - (autoload 'password-cache-add "password") - (autoload 'password-cache-remove "password")) - (defvar mml-smime-epg-secret-key-id-list nil) (defun mml-smime-epg-passphrase-callback (context key-id ignore) diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el index 7fbc8bb3209..c5b7796ffaf 100644 --- a/lisp/gnus/mml.el +++ b/lisp/gnus/mml.el @@ -53,6 +53,7 @@ (defvar message-required-mail-headers) (defvar message-required-news-headers) (defvar dnd-protocol-alist) +(defvar mml-dnd-protocol-alist) (defcustom mml-content-type-parameters '(name access-type expiration size permission format) @@ -806,9 +807,9 @@ If MML is non-nil, return the buffer up till the correspondent mml tag." (mail-header-encode-parameter (symbol-name type) value)))))) -(eval-when-compile - (defvar ange-ftp-name-format) - (defvar efs-path-regexp)) +(defvar ange-ftp-name-format) +(defvar efs-path-regexp) + (defun mml-parse-file-name (path) (if (if (boundp 'efs-path-regexp) (string-match efs-path-regexp path) diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el index f6d2dcc7ad5..be9981676e6 100644 --- a/lisp/gnus/mml1991.el +++ b/lisp/gnus/mml1991.el @@ -244,10 +244,9 @@ Whether the passphrase is cached at all is controlled by ;; pgg wrapper -(eval-when-compile - (defvar pgg-default-user-id) - (defvar pgg-errors-buffer) - (defvar pgg-output-buffer)) +(defvar pgg-default-user-id) +(defvar pgg-errors-buffer) +(defvar pgg-output-buffer) (defun mml1991-pgg-sign (cont) (let ((pgg-text-mode t) @@ -313,11 +312,11 @@ Whether the passphrase is cached at all is controlled by ;; epg wrapper -(eval-and-compile - (autoload 'epg-make-context "epg")) +(defvar epg-user-id-alist) +(defvar password-cache-expiry) -(eval-when-compile - (defvar epg-user-id-alist) +(eval-and-compile + (autoload 'epg-make-context "epg") (autoload 'epg-passphrase-callback-function "epg") (autoload 'epa-select-keys "epa") (autoload 'epg-list-keys "epg") @@ -330,12 +329,6 @@ Whether the passphrase is cached at all is controlled by (autoload 'epg-configuration "epg-config") (autoload 'epg-expand-group "epg-config")) -(eval-when-compile - (defvar password-cache-expiry) - (autoload 'password-read "password") - (autoload 'password-cache-add "password") - (autoload 'password-cache-remove "password")) - (defvar mml1991-epg-secret-key-id-list nil) (defun mml1991-epg-passphrase-callback (context key-id ignore) diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el index 1760e4615ce..28d1929399e 100644 --- a/lisp/gnus/mml2015.el +++ b/lisp/gnus/mml2015.el @@ -173,9 +173,8 @@ Whether the passphrase is cached at all is controlled by (autoload 'mc-cleanup-recipient-headers "mc-toplev") (autoload 'mc-sign-generic "mc-toplev")) -(eval-when-compile - (defvar mc-default-scheme) - (defvar mc-schemes)) +(defvar mc-default-scheme) +(defvar mc-schemes) (defvar mml2015-decrypt-function 'mailcrypt-decrypt) (defvar mml2015-verify-function 'mailcrypt-verify) @@ -707,10 +706,9 @@ Whether the passphrase is cached at all is controlled by ;;; pgg wrapper -(eval-when-compile - (defvar pgg-default-user-id) - (defvar pgg-errors-buffer) - (defvar pgg-output-buffer)) +(defvar pgg-default-user-id) +(defvar pgg-errors-buffer) +(defvar pgg-output-buffer) (eval-and-compile (autoload 'pgg-decrypt-region "pgg") @@ -945,13 +943,12 @@ Whether the passphrase is cached at all is controlled by ;;; epg wrapper -(eval-and-compile - (autoload 'epg-make-context "epg")) +(defvar epg-user-id-alist) +(defvar epg-digest-algorithm-alist) +(defvar inhibit-redisplay) -(eval-when-compile - (defvar epg-user-id-alist) - (defvar epg-digest-algorithm-alist) - (defvar inhibit-redisplay) +(eval-and-compile + (autoload 'epg-make-context "epg") (autoload 'epg-context-set-armor "epg") (autoload 'epg-context-set-textmode "epg") (autoload 'epg-context-set-signers "epg") @@ -972,11 +969,7 @@ Whether the passphrase is cached at all is controlled by (autoload 'epg-expand-group "epg-config") (autoload 'epa-select-keys "epa")) -(eval-when-compile - (defvar password-cache-expiry) - (autoload 'password-read "password") - (autoload 'password-cache-add "password") - (autoload 'password-cache-remove "password")) +(defvar password-cache-expiry) (defvar mml2015-epg-secret-key-id-list nil) diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el index 015c0643893..3767828a766 100644 --- a/lisp/gnus/nndiary.el +++ b/lisp/gnus/nndiary.el @@ -1085,7 +1085,7 @@ all. This may very well take some time.") (unless no-active (nnmail-save-active nndiary-group-alist nndiary-active-file)))))) -(eval-when-compile (defvar files)) +(defvar files) (defun nndiary-generate-active-info (dir) ;; Update the active info for this group. (let* ((group (nnheader-file-to-group diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el index 031d2c3d0fb..11cb4bff55c 100644 --- a/lisp/gnus/nnheader.el +++ b/lisp/gnus/nnheader.el @@ -32,6 +32,9 @@ (eval-when-compile (require 'cl)) (defvar nnmail-extra-headers) +(defvar gnus-newsgroup-name) +(defvar nnheader-file-coding-system) +(defvar jka-compr-compression-info-list) ;; Requiring `gnus-util' at compile time creates a circular ;; dependency between nnheader.el and gnus-util.el. @@ -696,7 +699,6 @@ the line could be found." (erase-buffer)) (current-buffer)) -(eval-when-compile (defvar jka-compr-compression-info-list)) (defvar nnheader-numerical-files (if (boundp 'jka-compr-compression-info-list) (concat "\\([0-9]+\\)\\(" @@ -939,9 +941,8 @@ first. Otherwise, find the newest one, though it may take a time." (car results) (car (sort results 'file-newer-than-file-p))))) -(eval-when-compile - (defvar ange-ftp-path-format) - (defvar efs-path-regexp)) +(defvar ange-ftp-path-format) +(defvar efs-path-regexp) (defun nnheader-re-read-dir (path) "Re-read directory PATH if PATH is on a remote system." (if (and (fboundp 'efs-re-read-dir) (boundp 'efs-path-regexp)) diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 28938e4c0a6..9b0fab70469 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -208,7 +208,7 @@ This is generally not required, and will slow things down considerably. You may need it if you want to use an advanced splitting function that analyzes the body before splitting the article. If this variable is nil, bodies will not be downloaded; if this -variable is the symbol `default' the default behaviour is +variable is the symbol `default' the default behavior is used (which currently is nil, unless you use a statistical spam.el test); if this variable is another non-nil value bodies will be downloaded." diff --git a/lisp/gnus/nnkiboze.el b/lisp/gnus/nnkiboze.el index 78e35c410bb..06acca8c09d 100644 --- a/lisp/gnus/nnkiboze.el +++ b/lisp/gnus/nnkiboze.el @@ -198,8 +198,7 @@ "\"Usage: emacs -batch -l nnkiboze -f nnkiboze-generate-groups\". Finds out what articles are to be part of the nnkiboze groups." (interactive) - (let ((nnmail-spool-file nil) - (mail-sources nil) + (let ((mail-sources nil) (gnus-use-dribble-file nil) (gnus-read-active-file t) (gnus-expert-user t)) diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el index 7608660f019..e05c286b1ab 100644 --- a/lisp/gnus/nnmail.el +++ b/lisp/gnus/nnmail.el @@ -240,16 +240,11 @@ If non-nil, also update the cache when copy or move articles." :group 'nnmail :type 'boolean) -(defcustom nnmail-spool-file '((file)) - "*Where the mail backends will look for incoming mail. -This variable is a list of mail source specifiers. -This variable is obsolete; `mail-sources' should be used instead." - :group 'nnmail-files - :type 'sexp) (make-obsolete-variable 'nnmail-spool-file "This option is obsolete in Gnus 5.9. \ Use `mail-sources' instead.") ;; revision 5.29 / p0-85 / Gnus 5.9 +;; Variable removed in No Gnus v0.7 (defcustom nnmail-resplit-incoming nil "*If non-nil, re-split incoming procmail sorted mail." @@ -693,7 +688,7 @@ nn*-request-list should have been called before calling this function." (setq group (symbol-name group))) (if (and (numberp (setq max (read buffer))) (numberp (setq min (read buffer)))) - (push (list group (cons min max)) + (push (list (mm-string-as-unibyte group) (cons min max)) group-assoc))) (error nil)) (widen) @@ -708,6 +703,7 @@ nn*-request-list should have been called before calling this function." (let ((coding-system-for-write nnmail-active-file-coding-system)) (when file-name (with-temp-file file-name + (mm-disable-multibyte) (nnmail-generate-active group-assoc))))) (defun nnmail-generate-active (alist) @@ -1764,10 +1760,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (defun nnmail-get-new-mail (method exit-func temp &optional group spool-func) "Read new incoming mail." - (let* ((sources (or mail-sources - (if (listp nnmail-spool-file) - nnmail-spool-file - (list nnmail-spool-file)))) + (let* ((sources mail-sources) fetching-sources (group-in group) (i 0) @@ -1777,20 +1770,6 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (when (and (nnmail-get-value "%s-get-new-mail" method) sources) (while (setq source (pop sources)) - ;; Be compatible with old values. - (cond - ((stringp source) - (setq source - (cond - ((string-match "^po:" source) - (list 'pop :user (substring source (match-end 0)))) - ((file-directory-p source) - (list 'directory :path source)) - (t - (list 'file :path source))))) - ((eq source 'procmail) - (message "Invalid value for nnmail-spool-file: `procmail'") - nil)) ;; Hack to only fetch the contents of a single group's spool file. (when (and (eq (car source) 'directory) (null nnmail-scan-directory-mail-source-once) diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el index 04b6af72aed..e7674168484 100644 --- a/lisp/gnus/nnmaildir.el +++ b/lisp/gnus/nnmaildir.el @@ -1,5 +1,6 @@ ;;; nnmaildir.el --- maildir backend for Gnus -;; Public domain. + +;; This file is in the public domain. ;; Author: Paul Jarc diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el index 0f159181026..8a5afbe5b60 100644 --- a/lisp/gnus/nnml.el +++ b/lisp/gnus/nnml.el @@ -258,7 +258,8 @@ non-nil.") (string-to-number (file-name-nondirectory path))))))) (deffoo nnml-request-group (group &optional server dont-check) - (let ((file-name-coding-system nnmail-pathname-coding-system)) + (let ((file-name-coding-system nnmail-pathname-coding-system) + (decoded (nnml-decoded-group-name group server))) (cond ((not (nnml-possibly-change-directory group server)) (nnheader-report 'nnml "Invalid group (no such directory)")) @@ -268,15 +269,15 @@ non-nil.") ((not (file-directory-p nnml-current-directory)) (nnheader-report 'nnml "%s is not a directory" nnml-current-directory)) (dont-check - (nnheader-report 'nnml "Group %s selected" group) + (nnheader-report 'nnml "Group %s selected" decoded) t) (t (nnheader-re-read-dir nnml-current-directory) (nnmail-activate 'nnml) (let ((active (nth 1 (assoc group nnml-group-alist)))) (if (not active) - (nnheader-report 'nnml "No such group: %s" group) - (nnheader-report 'nnml "Selected group %s" group) + (nnheader-report 'nnml "No such group: %s" decoded) + (nnheader-report 'nnml "Selected group %s" decoded) (nnheader-insert "211 %d %d %d %s\n" (max (1+ (- (cdr active) (car active))) 0) (car active) (cdr active) group))))))) @@ -885,7 +886,7 @@ Unless no-active is non-nil, update the active file too." (unless no-active (nnmail-save-active nnml-group-alist nnml-active-file))))))) -(eval-when-compile (defvar files)) +(defvar files) (defun nnml-generate-active-info (dir) ;; Update the active info for this group. (let ((group (directory-file-name dir)) diff --git a/lisp/gnus/nnnil.el b/lisp/gnus/nnnil.el index 926553365d3..5c5e3c1af91 100644 --- a/lisp/gnus/nnnil.el +++ b/lisp/gnus/nnnil.el @@ -1,8 +1,11 @@ ;;; nnnil.el --- empty backend for Gnus -;; Public domain. + +;; This file is in the public domain. ;; Author: Paul Jarc +;; This file is part of GNU Emacs. + ;; GNU Emacs 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 3, or (at your option) diff --git a/lisp/gnus/nnrss.el b/lisp/gnus/nnrss.el index 5241f9d80e6..f72166b0455 100644 --- a/lisp/gnus/nnrss.el +++ b/lisp/gnus/nnrss.el @@ -195,9 +195,8 @@ used to render text. If it is nil, text will simply be folded.") (deffoo nnrss-close-group (group &optional server) t) -(eval-when-compile - (defvar mm-text-html-renderer) - (defvar mm-text-html-washer-alist)) +(defvar mm-text-html-renderer) +(defvar mm-text-html-washer-alist) (deffoo nnrss-request-article (article &optional group server buffer) (setq group (nnrss-decode-group-name group)) diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el index c8c14da4df7..356ffefddeb 100644 --- a/lisp/gnus/nntp.el +++ b/lisp/gnus/nntp.el @@ -364,6 +364,32 @@ be restored and the command retried." (throw 'nntp-with-open-group-error t)) +(defmacro nntp-insert-buffer-substring (buffer &optional start end) + "Copy string from unibyte buffer to multibyte current buffer." + (if (featurep 'xemacs) + `(insert-buffer-substring ,buffer ,start ,end) + `(if enable-multibyte-characters + (insert (with-current-buffer ,buffer + (mm-string-to-multibyte + ,(if (or start end) + `(buffer-substring (or ,start (point-min)) + (or ,end (point-max))) + '(buffer-string))))) + (insert-buffer-substring ,buffer ,start ,end)))) + +(defmacro nntp-copy-to-buffer (buffer start end) + "Copy string from unibyte current buffer to multibyte buffer." + (if (featurep 'xemacs) + `(copy-to-buffer ,buffer ,start ,end) + `(let ((string (buffer-substring ,start ,end))) + (with-current-buffer ,buffer + (erase-buffer) + (insert (if enable-multibyte-characters + (mm-string-to-multibyte string) + string)) + (goto-char (point-min)) + nil)))) + (defsubst nntp-wait-for (process wait-for buffer &optional decode discard) "Wait for WAIT-FOR to arrive from PROCESS." @@ -409,7 +435,7 @@ be restored and the command retried." (save-excursion (set-buffer buffer) (goto-char (point-max)) - (insert-buffer-substring (process-buffer process)) + (nntp-insert-buffer-substring (process-buffer process)) ;; Nix out "nntp reading...." message. (when nntp-have-messaged (setq nntp-have-messaged nil) @@ -653,7 +679,7 @@ command whose response triggered the error." nntp-server-buffer)) (buffer (and process (process-buffer process)))) - ;; When I an able to identify the + ;; When I am able to identify the ;; connection to the server AND I've ;; received NO reponse for ;; nntp-connection-timeout seconds. @@ -738,7 +764,7 @@ command whose response triggered the error." (nnheader-fold-continuation-lines) ;; Remove all "\r"'s. (nnheader-strip-cr) - (copy-to-buffer nntp-server-buffer (point-min) (point-max)) + (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max)) 'headers))))) (deffoo nntp-retrieve-groups (groups &optional server) @@ -820,7 +846,8 @@ command whose response triggered the error." (if (not nntp-server-list-active-group) (progn - (copy-to-buffer nntp-server-buffer (point-min) (point-max)) + (nntp-copy-to-buffer nntp-server-buffer + (point-min) (point-max)) 'group) ;; We have read active entries, so we just delete the ;; superfluous gunk. @@ -828,7 +855,7 @@ command whose response triggered the error." (while (re-search-forward "^[.2-5]" nil t) (delete-region (match-beginning 0) (progn (forward-line 1) (point)))) - (copy-to-buffer nntp-server-buffer (point-min) (point-max)) + (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max)) 'active))))))) (deffoo nntp-retrieve-articles (articles &optional group server) @@ -893,7 +920,7 @@ command whose response triggered the error." (narrow-to-region (setq point (goto-char (point-max))) (progn - (insert-buffer-substring buf last-point (cdr entry)) + (nntp-insert-buffer-substring buf last-point (cdr entry)) (point-max))) (setq last-point (cdr entry)) (nntp-decode-text) @@ -1206,7 +1233,7 @@ password contained in '~/.nntp-authinfo'." (format " *server %s %s %s*" nntp-address nntp-port-number (gnus-buffer-exists-p buffer)))) - (mm-enable-multibyte) + (mm-disable-multibyte) (set (make-local-variable 'after-change-functions) nil) (set (make-local-variable 'nntp-process-wait-for) nil) (set (make-local-variable 'nntp-process-callback) nil) @@ -1390,7 +1417,7 @@ password contained in '~/.nntp-authinfo'." (goto-char (point-max)) (save-restriction (narrow-to-region (point) (point)) - (insert-buffer-substring buf start) + (nntp-insert-buffer-substring buf start) (when decode (nntp-decode-text)))))) ;; report it. @@ -1619,7 +1646,7 @@ password contained in '~/.nntp-authinfo'." (when in-process-buffer-p (set-buffer buf) (goto-char (point-max)) - (insert-buffer-substring process-buffer) + (nntp-insert-buffer-substring process-buffer) (set-buffer process-buffer) (erase-buffer) (set-buffer buf)) diff --git a/lisp/gnus/pop3.el b/lisp/gnus/pop3.el index c8e309d8c14..d152c2480ad 100644 --- a/lisp/gnus/pop3.el +++ b/lisp/gnus/pop3.el @@ -36,6 +36,7 @@ ;;; Code: (require 'mail-utils) +(defvar parse-time-months) (defgroup pop3 nil "Post Office Protocol." @@ -241,16 +242,23 @@ Returns the process associated with the connection." mailhost port))) (when process ;; There's a load of info printed that needs deleting. - (while (when (memq (process-status process) '(open run)) - (pop3-accept-process-output process) - (goto-char (point-max)) - (forward-line -1) - (if (looking-at "\\+OK") - (progn - (delete-region (point-min) (point)) - nil) + (let ((again 't)) + ;; repeat until + ;; - either we received the +OK line + ;; - or accept-process-output timed out without getting + ;; anything + (while (and again + (setq again (memq (process-status process) + '(open run)))) + (setq again (pop3-accept-process-output process)) + (goto-char (point-max)) + (forward-line -1) + (cond ((looking-at "\\+OK") + (setq again nil) + (delete-region (point-min) (point))) + ((not again) (pop3-quit process) - (error "POP SSL connexion failed")))) + (error "POP SSL connexion failed"))))) process))) ((eq pop3-stream-type 'starttls) ;; gnutls-cli, openssl don't accept service names @@ -327,8 +335,6 @@ Return the response string if optional second argument is non-nil." (forward-char))) (set-marker end nil)) -(eval-when-compile (defvar parse-time-months)) - ;; Copied from message-make-date. (defun pop3-make-date (&optional now) "Make a valid date header. diff --git a/lisp/gnus/qp.el b/lisp/gnus/qp.el index 5689a70f3ac..8ae34f193a1 100644 --- a/lisp/gnus/qp.el +++ b/lisp/gnus/qp.el @@ -31,7 +31,7 @@ ;;; Code: (require 'mm-util) -(eval-when-compile (defvar mm-use-ultra-safe-encoding)) +(defvar mm-use-ultra-safe-encoding) ;;;###autoload (defun quoted-printable-decode-region (from to &optional coding-system) diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el index b789061853f..aa9999a7722 100644 --- a/lisp/gnus/rfc2047.el +++ b/lisp/gnus/rfc2047.el @@ -30,8 +30,8 @@ ;;; Code: (eval-when-compile - (require 'cl) - (defvar message-posting-charset)) + (require 'cl)) +(defvar message-posting-charset) (require 'qp) (require 'mm-util) @@ -101,6 +101,40 @@ quoted-printable and base64 respectively.") (defvar rfc2047-encode-encoded-words t "Whether encoded words should be encoded again.") +(defvar rfc2047-allow-irregular-q-encoded-words t + "*Whether to decode irregular Q-encoded words.") + +(eval-and-compile ;; Necessary to hard code them in `rfc2047-decode-region'. + (defconst rfc2047-encoded-word-regexp + "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\\?\ +\\(B\\?[+/0-9A-Za-z]*=*\ +\\|Q\\?[ ->@-~]*\ +\\)\\?=" + "Regexp that matches encoded word." + ;; The patterns for the B encoding and the Q encoding, i.e. the ones + ;; beginning with "B" and "Q" respectively, are restricted into only + ;; the characters that those encodings may generally use. + ) + (defconst rfc2047-encoded-word-regexp-loose + "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\\?\ +\\(B\\?[+/0-9A-Za-z]*=*\ +\\|Q\\?\\(?:\\?+[ -<>@-~]\\)?\\(?:[ ->@-~]+\\?+[ -<>@-~]\\)*[ ->@-~]*\\?*\ +\\)\\?=" + "Regexp that matches encoded word allowing loose Q encoding." + ;; The pattern for the Q encoding, i.e. the one beginning with "Q", + ;; is similar to: + ;; "Q\\?\\(\\?+[^\n=?]\\)?\\([^\n?]+\\?+[^\n=?]\\)*[^\n?]*\\?*" + ;; <--------1-------><----------2,3----------><--4--><-5-> + ;; They mean: + ;; 1. After "Q?", allow "?"s that follow a character other than "=". + ;; 2. Allow "=" after "Q?"; it isn't regarded as the terminator. + ;; 3. In the middle of an encoded word, allow "?"s that follow a + ;; character other than "=". + ;; 4. Allow any characters other than "?" in the middle of an + ;; encoded word. + ;; 5. At the end, allow "?"s. + )) + ;;; ;;; Functions for encoding RFC2047 messages ;;; @@ -287,7 +321,6 @@ Should be called narrowed to the head of the message." ;; Fixme: This, and the require below may not be the Right Thing, but ;; should be safe just before release. -- fx 2001-02-08 -(eval-when-compile (defvar message-posting-charset)) (defun rfc2047-encodable-p () "Return non-nil if any characters in current buffer need encoding in headers. @@ -298,7 +331,7 @@ The buffer may be narrowed." (goto-char (point-min)) (or (and rfc2047-encode-encoded-words (prog1 - (search-forward "=?" nil t) + (re-search-forward rfc2047-encoded-word-regexp nil t) (goto-char (point-min)))) (and charsets (not (equal charsets (list (car message-posting-charset)))))))) @@ -533,10 +566,19 @@ By default, the string is treated as containing addresses (see (rfc2047-encode-region (point-min) (point-max)) (buffer-string))) +;; From RFC 2047: +;; 2. Syntax of encoded-words +;; [...] +;; While there is no limit to the length of a multiple-line header +;; field, each line of a header field that contains one or more +;; 'encoded-word's is limited to 76 characters. +;; +;; In `rfc2047-encode-parameter' it is bound to nil, so don't defconst it. (defvar rfc2047-encode-max-chars 76 "Maximum characters of each header line that contain encoded-words. -If it is nil, encoded-words will not be folded. Too small value may -cause an error. Don't change this for no particular reason.") +According to RFC 2047, it is 76. If it is nil, encoded-words +will not be folded. Too small value may cause an error. You +should not change this value.") (defun rfc2047-encode-1 (column string cs encoder start crest tail &optional eword) @@ -827,11 +869,6 @@ it, put the following line in your ~/.gnus.el file: ;;; Functions for decoding RFC2047 messages ;;; -(eval-and-compile - (defconst rfc2047-encoded-word-regexp - "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\ -\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?=")) - (defvar rfc2047-quote-decoded-words-containing-tspecials nil "If non-nil, quote decoded words containing special characters.") @@ -950,10 +987,12 @@ If ADDRESS-MIME is non-nil, strip backslashes which precede characters other than `\"' and `\\' in quoted strings." (interactive "r") (let ((case-fold-search t) - (eword-regexp (eval-when-compile - ;; Ignore whitespace between encoded-words. - (concat "[\n\t ]*\\(" rfc2047-encoded-word-regexp - "\\)"))) + (eword-regexp + (if rfc2047-allow-irregular-q-encoded-words + (eval-when-compile + (concat "[\n\t ]*\\(" rfc2047-encoded-word-regexp-loose "\\)")) + (eval-when-compile + (concat "[\n\t ]*\\(" rfc2047-encoded-word-regexp "\\)")))) b e match words) (save-excursion (save-restriction @@ -969,7 +1008,7 @@ other than `\"' and `\\' in quoted strings." (while match (push (list (match-string 2) ;; charset (char-after (match-beginning 3)) ;; encoding - (match-string 4) ;; encoded-text + (substring (match-string 3) 2) ;; encoded-text (match-string 1)) ;; encoded-word words) ;; Look for the subsequent encoded-words. diff --git a/lisp/gnus/sieve-manage.el b/lisp/gnus/sieve-manage.el index d8bd965718d..5cf14f7eb32 100644 --- a/lisp/gnus/sieve-manage.el +++ b/lisp/gnus/sieve-manage.el @@ -76,7 +76,8 @@ ;;; Code: -(require 'password) +(or (require 'password-cache nil t) + (require 'password)) (eval-when-compile (require 'sasl) (require 'starttls)) diff --git a/lisp/gnus/smime-ldap.el b/lisp/gnus/smime-ldap.el deleted file mode 100644 index 882f9f80c6f..00000000000 --- a/lisp/gnus/smime-ldap.el +++ /dev/null @@ -1,206 +0,0 @@ -;;; smime-ldap.el --- client interface to LDAP for Emacs - -;; Copyright (C) 1998, 1999, 2000, 2005 Free Software Foundation, Inc. - -;; Author: Oscar Figueiredo -;; Maintainer: Arne J,Ax(Brgensen -;; Created: February 2005 -;; Keywords: comm - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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 3, or (at your option) -;; any later version. - -;; GNU Emacs 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 GNU Emacs; 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 file has a slightly changed implementation of Emacs 21.3's -;; ldap-search and ldap-search-internal from ldap.el. The changes are -;; made to achieve compatibility with OpenLDAP v2 and to make it -;; possible to retrieve LDAP attributes that are tagged ie ";binary". - -;; The file also adds a compatibility layer for Emacs and XEmacs. - -;;; Code: - -(require 'ldap) - -(defun smime-ldap-search (filter &optional host attributes attrsonly withdn) - "Perform an LDAP search. -FILTER is the search filter in RFC1558 syntax. -HOST is the LDAP host on which to perform the search. -ATTRIBUTES are the specific attributes to retrieve, nil means -retrieve all. -ATTRSONLY, if non-nil, retrieves the attributes only, without -the associated values. -If WITHDN is non-nil, each entry in the result will be prepended with -its distinguished name WITHDN. -Additional search parameters can be specified through -`ldap-host-parameters-alist', which see." - (interactive "sFilter:") - ;; for XEmacs - (if (fboundp 'ldap-search-entries) - (ldap-search-entries filter host attributes attrsonly) - ;; for Emacs 22 - (if (>= emacs-major-version 22) - (cdr (ldap-search filter host attributes attrsonly)) - ;; for Emacs 21.x - (or host - (setq host ldap-default-host) - (error "No LDAP host specified")) - (let ((host-plist (cdr (assoc host ldap-host-parameters-alist))) - result) - (setq result (smime-ldap-search-internal - (append host-plist - (list 'host host - 'filter filter - 'attributes attributes - 'attrsonly attrsonly - 'withdn withdn)))) - (cdr (if ldap-ignore-attribute-codings - result - (mapcar (function - (lambda (record) - (mapcar 'ldap-decode-attribute record))) - result))))))) - -(defun smime-ldap-search-internal (search-plist) - "Perform a search on a LDAP server. -SEARCH-PLIST is a property list describing the search request. -Valid keys in that list are: -`host' is a string naming one or more (blank-separated) LDAP servers to -to try to connect to. Each host name may optionally be of the form HOST:PORT. -`filter' is a filter string for the search as described in RFC 1558. -`attributes' is a list of strings indicating which attributes to retrieve -for each matching entry. If nil, return all available attributes. -`attrsonly', if non-nil, indicates that only attributes are retrieved, -not their associated values. -`base' is the base for the search as described in RFC 1779. -`scope' is one of the three symbols `sub', `base' or `one'. -`binddn' is the distinguished name of the user to bind as (in RFC 1779 syntax). -`passwd' is the password to use for simple authentication. -`deref' is one of the symbols `never', `always', `search' or `find'. -`timelimit' is the timeout limit for the connection in seconds. -`sizelimit' is the maximum number of matches to return. -`withdn' if non-nil each entry in the result will be prepended with -its distinguished name DN. -The function returns a list of matching entries. Each entry is itself -an alist of attribute/value pairs." - (let ((buf (get-buffer-create " *ldap-search*")) - (bufval (get-buffer-create " *ldap-value*")) - (host (or (plist-get search-plist 'host) - ldap-default-host)) - (filter (plist-get search-plist 'filter)) - (attributes (plist-get search-plist 'attributes)) - (attrsonly (plist-get search-plist 'attrsonly)) - (base (or (plist-get search-plist 'base) - ldap-default-base)) - (scope (plist-get search-plist 'scope)) - (binddn (plist-get search-plist 'binddn)) - (passwd (plist-get search-plist 'passwd)) - (deref (plist-get search-plist 'deref)) - (timelimit (plist-get search-plist 'timelimit)) - (sizelimit (plist-get search-plist 'sizelimit)) - (withdn (plist-get search-plist 'withdn)) - (numres 0) - arglist dn name value record result) - (if (or (null filter) - (equal "" filter)) - (error "No search filter")) - (setq filter (cons filter attributes)) - (save-excursion - (set-buffer buf) - (erase-buffer) - (if (and host - (not (equal "" host))) - (setq arglist (nconc arglist (list (format "-h%s" host))))) - (if (and attrsonly - (not (equal "" attrsonly))) - (setq arglist (nconc arglist (list "-A")))) - (if (and base - (not (equal "" base))) - (setq arglist (nconc arglist (list (format "-b%s" base))))) - (if (and scope - (not (equal "" scope))) - (setq arglist (nconc arglist (list (format "-s%s" scope))))) - (if (and binddn - (not (equal "" binddn))) - (setq arglist (nconc arglist (list (format "-D%s" binddn))))) - (if (and passwd - (not (equal "" passwd))) - (setq arglist (nconc arglist (list (format "-w%s" passwd))))) - (if (and deref - (not (equal "" deref))) - (setq arglist (nconc arglist (list (format "-a%s" deref))))) - (if (and timelimit - (not (equal "" timelimit))) - (setq arglist (nconc arglist (list (format "-l%s" timelimit))))) - (if (and sizelimit - (not (equal "" sizelimit))) - (setq arglist (nconc arglist (list (format "-z%s" sizelimit))))) - (eval `(call-process ldap-ldapsearch-prog - nil - buf - nil - ,@arglist - "-tt" ; Write values to temp files - "-x" - "-LL" - ; ,@ldap-ldapsearch-args - ,@filter)) - (insert "\n") - (goto-char (point-min)) - - (while (re-search-forward "[\t\n\f]+ " nil t) - (replace-match "" nil nil)) - (goto-char (point-min)) - - (if (looking-at "usage") - (error "Incorrect ldapsearch invocation") - (message "Parsing results... ") - (while (progn - (skip-chars-forward " \t\n") - (not (eobp))) - (setq dn (buffer-substring (point) (save-excursion - (end-of-line) - (point)))) - (forward-line 1) - (while (looking-at (concat "^\\(\\w*\\)\\(;\\w*\\)?[=:\t ]+" - "\\(<[\t ]*file://\\)?\\(.*\\)$")) - (setq name (match-string 1) - value (match-string 4)) - (save-excursion - (set-buffer bufval) - (erase-buffer) - (insert-file-contents-literally value) - (delete-file value) - (setq value (buffer-substring (point-min) (point-max)))) - (setq record (cons (list name value) - record)) - (forward-line 1)) - (setq result (cons (if withdn - (cons dn (nreverse record)) - (nreverse record)) result)) - (setq record nil) - (skip-chars-forward " \t\n") - (message "Parsing results... %d" numres) - (1+ numres)) - (message "Parsing results... done") - (nreverse result))))) - -(provide 'smime-ldap) - -;; arch-tag: 87e6bc44-21fc-4e9b-a89b-f55f031f78f8 -;;; smime-ldap.el ends here diff --git a/lisp/gnus/smime.el b/lisp/gnus/smime.el index ee62fd8124b..31545c16044 100644 --- a/lisp/gnus/smime.el +++ b/lisp/gnus/smime.el @@ -122,8 +122,8 @@ ;;; Code: (require 'dig) -(require 'smime-ldap) -(require 'password) +(or (require 'password-cache nil t) + (require 'password)) (eval-when-compile (require 'cl)) (eval-and-compile @@ -424,8 +424,7 @@ Any details (stdout and stderr) are left in the buffer specified by (insert-buffer-substring smime-details-buffer) nil)) -(eval-when-compile - (defvar from)) +(defvar from) (defun smime-decrypt-region (b e keyfile) "Decrypt S/MIME message in region between B and E with key in KEYFILE. @@ -590,8 +589,17 @@ A string or a list of strings is returned." (defun smime-cert-by-ldap-1 (mail host) "Get cetificate for MAIL from the ldap server at HOST." - (let ((ldapresult (smime-ldap-search (concat "mail=" mail) - host '("userCertificate") nil)) + (let ((ldapresult + (funcall + (if (or (featurep 'xemacs) + ;; For Emacs >= 22 we don't need smime-ldap.el + (< emacs-major-version 22)) + (progn + (require 'smime-ldap) + 'smime-ldap-search) + 'ldap-search) + (concat "mail=" mail) + host '("userCertificate") nil)) (retbuf (generate-new-buffer (format "*certificate for %s*" mail))) cert) (if (and (>= (length ldapresult) 1) diff --git a/lisp/gnus/spam-wash.el b/lisp/gnus/spam-wash.el index d1be1816a4f..be9a822dd2f 100644 --- a/lisp/gnus/spam-wash.el +++ b/lisp/gnus/spam-wash.el @@ -1,21 +1,21 @@ ;;; spam-wash.el --- wash spam before analysis -;; Copyright (C) 2004 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2007 Free Software Foundation, Inc. ;; Author: Andrew Cohen ;; Keywords: mail ;; This file is part of GNU Emacs. -;; This is free software; you can redistribute it and/or modify it -;; under the terms of the GNU General Public License as published by +;; GNU Emacs 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 3, or (at your option) ;; any later version. -;; This 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. +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el index 4164d3f718b..fddebb1d290 100644 --- a/lisp/gnus/spam.el +++ b/lisp/gnus/spam.el @@ -81,7 +81,7 @@ ;;{{{ Main parameters. (defvar spam-backends nil "List of spam.el backends with all the pertinent data. -Populated by spam-install-backend-super.") +Populated by `spam-install-backend-super'.") (defgroup spam nil "Spam configuration." @@ -91,13 +91,13 @@ Populated by spam-install-backend-super.") (defcustom spam-summary-exit-behavior 'default "Exit behavior at the time of summary exit. -Note that setting the spam-use-move or spam-use-copy backends on +Note that setting the `spam-use-move' or `spam-use-copy' backends on a group through group/topic parameters overrides this mechanism." - :type '(choice (const 'default :tag + :type '(choice (const 'default :tag "Move spam out of all groups. Move ham out of spam groups.") - (const 'move-all :tag + (const 'move-all :tag "Move spam out of all groups. Move ham out of all groups.") - (const 'move-none :tag + (const 'move-none :tag "Never move spam or ham out of any groups.")) :group 'spam) @@ -124,8 +124,7 @@ a group through group/topic parameters overrides this mechanism." (defcustom spam-split-symbolic-return-positive nil "Whether `spam-split' should ALWAYS work with symbols or group names. -Do not set this if you use `spam-split' in a fancy split - method." +Do not set this if you use `spam-split' in a fancy split method." :type 'boolean :group 'spam) @@ -139,7 +138,7 @@ without losing it to the automatic spam-marking process." (defcustom spam-mark-ham-unread-before-move-from-spam-group nil "Whether ham should be marked unread before it's moved. -The article is moved out of a spam group according to ham-process-destination. +The article is moved out of a spam group according to `ham-process-destination'. This variable is an official entry in the international Longest Variable Name Competition." :type 'boolean @@ -403,7 +402,7 @@ Only meaningful if you enable `spam-use-regex-body'." :group 'spam) (defcustom spam-summary-score-preferred-header nil - "Preferred header to use for spam-summary-score." + "Preferred header to use for `spam-summary-score'." :type '(choice :tag "Header name" (symbol :tag "SpamAssassin etc" X-Spam-Status) (symbol :tag "Bogofilter" X-Bogosity) @@ -621,17 +620,17 @@ order for SpamAssassin to recognize the new registered spam." :group 'spam-spamassassin) (defcustom spam-sa-learn-spam-switch "--spam" - "The switch that sa-learn uses to register spam messages" + "The switch that sa-learn uses to register spam messages." :type 'string :group 'spam-spamassassin) (defcustom spam-sa-learn-ham-switch "--ham" - "The switch that sa-learn uses to register ham messages" + "The switch that sa-learn uses to register ham messages." :type 'string :group 'spam-spamassassin) (defcustom spam-sa-learn-unregister-switch "--forget" - "The switch that sa-learn uses to unregister messages messages" + "The switch that sa-learn uses to unregister messages messages." :type 'string :group 'spam-spamassassin) @@ -722,7 +721,7 @@ finds ham or spam.") ;;{{{ convenience functions (defun spam-clear-cache (symbol) - "Clear the spam-caches entry for a check." + "Clear the `spam-caches' entry for a check." (remhash symbol spam-caches)) (defun spam-xor (a b) @@ -730,7 +729,7 @@ finds ham or spam.") (and (or a b) (not (and a b)))) (defun spam-set-difference (list1 list2) - "Return a set difference of LIST1 and LIST2. + "Return a set difference of LIST1 and LIST2. When either list is nil, the other is returned." (if (and list1 list2) ;; we have two non-nil lists @@ -837,15 +836,14 @@ Accepts incoming CHECK, ham registration function HRF, spam registration function SRF, ham unregistration function HUF, spam unregistration function SUF, and an indication whether the backend is STATISTICAL." - (setq spam-backends (add-to-list 'spam-backends backend)) (while properties (let ((property (pop properties)) (value (pop properties))) (if (spam-backend-property-valid-p property) (put backend property value) - (gnus-error - 5 + (gnus-error + 5 "spam-install-backend-super got an invalid property %s" property))))) @@ -875,7 +873,7 @@ The value nil means that the check does not yield a decision, and so, that further checks are needed. The value t means that the message is definitely not spam, and that further spam checks should be inhibited. Otherwise, a mailgroup name or the symbol -'spam (depending on spam-split-symbolic-return) is returned where +'spam (depending on `spam-split-symbolic-return') is returned where the mail should go, and further checks are also inhibited. The usual mailgroup name is the value of `spam-split-group', meaning that the message is definitely a spam." @@ -892,7 +890,7 @@ that the message is definitely a spam." (setq info (format "Backend %s has the following properties:\n" backend)) (dolist (property (spam-backend-properties)) - (setq info (format "%s%s=%s\n" + (setq info (format "%s%s=%s\n" info property (get backend property)))) @@ -907,13 +905,13 @@ CLASSIFICATION is 'ham or 'spam." (if (and (spam-classification-valid-p classification) (spam-backend-function-type-valid-p type)) - (let ((retrieval - (intern + (let ((retrieval + (intern (format "spam-backend-%s-%s-function" classification type)))) (funcall retrieval backend)) - (gnus-error + (gnus-error 5 "%s was passed invalid backend %s, classification %s, or type %s" "spam-backend-function" @@ -921,21 +919,21 @@ CLASSIFICATION is 'ham or 'spam." classification type))) -(defun spam-backend-article-list-property (classification +(defun spam-backend-article-list-property (classification &optional unregister) "Property name of article list with CLASSIFICATION and UNREGISTER." (let* ((r (if unregister "unregister" "register")) (prop (format "%s-%s" classification r))) prop)) -(defun spam-backend-get-article-todo-list (backend - classification +(defun spam-backend-get-article-todo-list (backend + classification &optional unregister) - "Get the articles to be processed for BACKEND and CLASSIFICATION. + "Get the articles to be processed for BACKEND and CLASSIFICATION. With UNREGISTER, get articles to be unregistered. This is a temporary storage function - nothing here persists." (get - backend + backend (intern (spam-backend-article-list-property classification unregister)))) (defun spam-backend-put-article-todo-list (backend classification list &optional unregister) @@ -977,7 +975,7 @@ The previous backend settings for ALIAS are erased." ;; install alias with no properties at first (spam-install-backend-super alias) - + (dolist (property (spam-backend-properties)) (put alias property (get backend property)))) @@ -991,8 +989,8 @@ Accepts ham registration function HRF, spam registration function SRF, ham unregistration function HUF, spam unregistration function SUF. The backend has no incoming check and can't be statistical." - (spam-install-backend-super - backend + (spam-install-backend-super + backend 'hrf hrf 'srf srf 'huf huf 'suf suf 'mover t)) (defun spam-install-nocheck-backend (backend hrf srf huf suf) @@ -1001,7 +999,7 @@ Accepts ham registration function HRF, spam registration function SRF, ham unregistration function HUF, spam unregistration function SUF. The backend has no incoming check and can't be statistical (it could be, but in practice that doesn't happen)." - (spam-install-backend-super + (spam-install-backend-super backend 'hrf hrf 'srf srf 'huf huf 'suf suf)) @@ -1010,8 +1008,8 @@ statistical (it could be, but in practice that doesn't happen)." Accepts incoming CHECK, ham registration function HRF, spam registration function SRF, ham unregistration function HUF, spam unregistration function SUF. The backend won't be -statistical (use spam-install-statistical-backend for that)." - (spam-install-backend-super +statistical (use `spam-install-statistical-backend' for that)." + (spam-install-backend-super backend 'check check 'hrf hrf 'srf srf 'huf huf 'suf suf)) @@ -1020,15 +1018,15 @@ statistical (use spam-install-statistical-backend for that)." Accepts incoming CHECK, ham registration function HRF, spam registration function SRF, ham unregistration function HUF, spam unregistration function SUF. The backend will be -statistical (use spam-install-backend for non-statistical +statistical (use `spam-install-backend' for non-statistical backends)." - (spam-install-backend-super + (spam-install-backend-super backend 'check check 'statistical t 'hrf hrf 'srf srf 'huf huf 'suf suf)) (defun spam-install-statistical-checkonly-backend (backend check) "Install a statistical BACKEND than can only CHECK for spam." - (spam-install-backend-super + (spam-install-backend-super backend 'check check 'statistical t)) @@ -1084,7 +1082,7 @@ backends)." nil nil) -(spam-install-backend 'spam-use-BBDB +(spam-install-backend 'spam-use-BBDB 'spam-check-BBDB 'spam-BBDB-register-routine nil @@ -1128,7 +1126,7 @@ backends)." 'spam-stat-unregister-ham-routine 'spam-stat-unregister-spam-routine) -(spam-install-statistical-backend 'spam-use-spamassassin +(spam-install-statistical-backend 'spam-use-spamassassin 'spam-check-spamassassin 'spam-spamassassin-register-ham-routine 'spam-spamassassin-register-spam-routine @@ -1224,13 +1222,13 @@ Note this has to be fast." With SPECIFIC-HEADER, returns only that header's score. Will not return a nil score." (let (score) - (dolist (header + (dolist (header (if specific-header (list specific-header) (spam-necessary-extra-headers))) - (setq score + (setq score (spam-extra-header-to-number header headers)) - (when score + (when score (return))) (or score 0))) @@ -1258,7 +1256,7 @@ Will not return a nil score." (let (found) (dolist (backend (spam-backend-list)) (when (and (spam-backend-statistical-p backend) - (or (symbol-value backend) + (or (symbol-value backend) (memq backend force-symbols))) (setq found backend))) found)) @@ -1287,14 +1285,14 @@ This list contains pairs associating the obsolete ham/spam exit processor variables with a classification and a spam-use-* variable. When the processor variable is nil, just the classification and spam-use-* check variable are used. This is -superceded by the new spam backend code, so it's only consulted +superseded by the new spam backend code, so it's only consulted for backwards compatibility.") (defun spam-group-processor-p (group backend &optional classification) "Checks if GROUP has a BACKEND with CLASSIFICATION registered. Also accepts the obsolete processors, which can be found in gnus.el and in spam-list-of-processors. In the case of mover -backends, checks the setting of spam-summary-exit-behavior in +backends, checks the setting of `spam-summary-exit-behavior' in addition to the set values for the group." (if (and (stringp group) (symbolp backend)) @@ -1315,7 +1313,7 @@ addition to the set values for the group." ;; spam-summary-exit-behavior-logic for mover backends (unless found (when (spam-backend-mover-p backend) - (setq + (setq found (cond ((eq spam-summary-exit-behavior 'move-all) t) @@ -1325,7 +1323,7 @@ addition to the set values for the group." ;; move ham out of spam groups (and (eq classification 'ham) (spam-group-spam-contents-p group)))) - (t (gnus-error 5 "Unknown spam-summary-exit-behavior: %s" + (t (gnus-error 5 "Unknown spam-summary-exit-behavior: %s" spam-summary-exit-behavior)))))) found)) @@ -1385,8 +1383,8 @@ addition to the set values for the group." ;; call spam-register-routine with specific articles to unregister, ;; when there are articles to unregister and the check is enabled (when (and unregister-list (symbol-value backend)) - (spam-backend-put-article-todo-list backend - classification + (spam-backend-put-article-todo-list backend + classification unregister-list t)))))) @@ -1398,7 +1396,7 @@ addition to the set values for the group." gnus-newsgroup-name backend classification) - (spam-backend-put-article-todo-list backend + (spam-backend-put-article-todo-list backend classification (spam-list-articles gnus-newsgroup-articles @@ -1457,11 +1455,11 @@ addition to the set values for the group." article) (gnus-summary-mark-article article gnus-expirable-mark)) (gnus-summary-set-process-mark article) - + (if respool ; respooling is with a "fake" group (let ((spam-split-disabled (or spam-split-disabled - (and (eq classification 'ham) + (and (eq classification 'ham) spam-disable-spam-split-during-ham-respool)))) (gnus-message 9 "Respooling article %d with method %s" article respool-method) @@ -1476,7 +1474,7 @@ addition to the set values for the group." (gnus-message 9 "Moving article %d to group %s" article group) (gnus-summary-move-article nil group))))) ; else move articles - + ;; now delete the articles, unless a) copy is t, and there was a copy done ;; b) a move was done to a single group ;; c) backend-supports-deletions is nil @@ -1488,33 +1486,33 @@ addition to the set values for the group." (when articles (let ((gnus-novice-user nil)) ; don't ask me if I'm sure (gnus-summary-delete-article nil))))) - + (gnus-summary-yank-process-mark) (length articles)))) (defun spam-copy-spam-routine (articles) - (spam-copy-or-move-routine - t + (spam-copy-or-move-routine + t (gnus-parameter-spam-process-destination gnus-newsgroup-name) articles 'spam)) (defun spam-move-spam-routine (articles) - (spam-copy-or-move-routine + (spam-copy-or-move-routine nil (gnus-parameter-spam-process-destination gnus-newsgroup-name) articles 'spam)) (defun spam-copy-ham-routine (articles) - (spam-copy-or-move-routine - t + (spam-copy-or-move-routine + t (gnus-parameter-ham-process-destination gnus-newsgroup-name) articles 'ham)) (defun spam-move-ham-routine (articles) - (spam-copy-or-move-routine + (spam-copy-or-move-routine nil (gnus-parameter-ham-process-destination gnus-newsgroup-name) articles @@ -1570,9 +1568,9 @@ to find it out)." ((equal field 'extra) (mail-header-extra data-header)) (t - (gnus-error - 5 - "spam-fetch-field-fast: unknown field %s requested" + (gnus-error + 5 + "spam-fetch-field-fast: unknown field %s requested" field) nil)) (gnus-message 6 "Article %d has a nil data header" article))))) @@ -1621,7 +1619,7 @@ to find it out)." This function can be used as an entry in the variable `nnmail-split-fancy', for example like this: (: spam-split). It can take checks as parameters. A string as a parameter will set the -spam-split-group to that string. +`spam-split-group' to that string. See the Info node `(gnus)Fancy Mail Splitting' for more details." (interactive) @@ -1673,7 +1671,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." decision)))))))) (defun spam-find-spam () - "This function will detect spam in the current newsgroup using spam-split." + "Detect spam in the current newsgroup using `spam-split'." (interactive) (let* ((group gnus-newsgroup-name) @@ -1685,7 +1683,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." gnus-newsgroup-unseen)) article-cannot-be-faked) - + (dolist (backend methods) (when (spam-backend-statistical-p backend) (setq article-cannot-be-faked t) @@ -1702,10 +1700,10 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (subject (spam-fetch-field-subject-fast article)) (sender (spam-fetch-field-from-fast article)) registry-lookup) - + (unless id (gnus-message 6 "Article %d has no message ID!" article)) - + (when (and id spam-log-to-registry) (setq registry-lookup (spam-log-registration-type id 'incoming)) (when registry-lookup @@ -1732,12 +1730,12 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (apply 'spam-split methods)))))) (if (equal split-return 'spam) (gnus-summary-mark-article article gnus-spam-mark)) - + (when (and id split-return spam-log-to-registry) (when (zerop (gnus-registry-group-count id)) (gnus-registry-add-group id group subject sender)) - + (unless registry-lookup (spam-log-processing-to-registry id @@ -1763,11 +1761,11 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (delcount 0)) ;; clear the old lists right away - (spam-backend-put-article-todo-list backend + (spam-backend-put-article-todo-list backend classification nil nil) - (spam-backend-put-article-todo-list backend + (spam-backend-put-article-todo-list backend classification nil t) @@ -1778,29 +1776,29 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (incf delcount) (setq rlist (delq article rlist)) (setq ulist (delq article ulist)))) - + (unless (zerop delcount) - (gnus-message - 9 + (gnus-message + 9 "%d messages were saved the trouble of unregistering and then registering" delcount)) - + ;; unregister articles (unless (zerop (length ulist)) (let ((num (spam-unregister-routine classification backend ulist))) (when (> num 0) - (gnus-message + (gnus-message 6 "%d %s messages were unregistered by backend %s." num classification backend)))) - + ;; register articles (unless (zerop (length rlist)) (let ((num (spam-register-routine classification backend rlist))) (when (> num 0) - (gnus-message + (gnus-message 6 "%d %s messages were registered by backend %s." num @@ -1808,12 +1806,12 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." backend))))))))) (defun spam-unregister-routine (classification - backend + backend specific-articles) (spam-register-routine classification backend specific-articles t)) (defun spam-register-routine (classification - backend + backend specific-articles &optional unregister) (when (and (spam-classification-valid-p classification) @@ -2134,7 +2132,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (save-excursion (save-window-excursion (bbdb-records nil t) - (mapatoms + (mapatoms (lambda (symbol) (intern (downcase (symbol-name symbol)) bbdb-cache)) bbdb-hashtable)))) @@ -2311,8 +2309,8 @@ With a non-nil REMOVE, remove them." (defun spam-enter-list (addresses file &optional remove) "Enter ADDRESSES into the given FILE. -Either the whitelist or the blacklist files can be used. With -REMOVE not nil, remove the ADDRESSES." +Either the whitelist or the blacklist files can be used. +With a non-nil REMOVE, remove the ADDRESSES." (if (stringp addresses) (spam-enter-list (list addresses) file remove) ;; else, we have a list of addresses here @@ -2467,7 +2465,7 @@ REMOVE not nil, remove the ADDRESSES." (spam-report-resend-register-routine articles t)) (defun spam-report-resend-register-routine (articles &optional ham) - (let* ((resend-to-gp + (let* ((resend-to-gp (if ham (gnus-parameter-ham-resend-to gnus-newsgroup-name) (gnus-parameter-spam-resend-to gnus-newsgroup-name))) @@ -2492,7 +2490,7 @@ REMOVE not nil, remove the ADDRESSES." ;; return something sensible if the score can't be determined (defun spam-bogofilter-score (&optional recheck) - "Get the Bogofilter spamicity score" + "Get the Bogofilter spamicity score." (interactive "P") (save-window-excursion (gnus-summary-show-article t) @@ -2509,10 +2507,10 @@ REMOVE not nil, remove the ADDRESSES." (when (eq spam-bogofilter-valid 'unknown) (setq spam-bogofilter-valid (not (string-match "^bogofilter version 0\\.\\([0-9]\\|1[01]\\)\\." - (shell-command-to-string + (shell-command-to-string (format "%s -V" spam-bogofilter-program)))))) spam-bogofilter-valid) - + (defun spam-check-bogofilter (&optional score) "Check the Bogofilter backend for the classification of this message." (if (spam-verify-bogofilter) @@ -2550,7 +2548,7 @@ REMOVE not nil, remove the ADDRESSES." (when (stringp article-string) (with-temp-buffer (insert article-string) - + (apply 'call-process-region (point-min) (point-max) spam-bogofilter-program @@ -2736,7 +2734,7 @@ REMOVE not nil, remove the ADDRESSES." ;; return something sensible if the score can't be determined (defun spam-bsfilter-score (&optional recheck) - "Get the Bsfilter spamicity score" + "Get the Bsfilter spamicity score." (interactive "P") (save-window-excursion (gnus-summary-show-article t) @@ -2749,7 +2747,7 @@ REMOVE not nil, remove the ADDRESSES." (or score "0")))) (defun spam-check-bsfilter (&optional score) - "Check the Bsfilter backend for the classification of this message" + "Check the Bsfilter backend for the classification of this message." (let ((article-buffer-name (buffer-name)) (dir spam-bsfilter-database-directory) return) @@ -2823,7 +2821,7 @@ REMOVE not nil, remove the ADDRESSES." ;; return something sensible if the score can't be determined (defun spam-crm114-score () - "Get the CRM114 Mailfilter pR" + "Get the CRM114 Mailfilter pR." (interactive) (save-window-excursion (gnus-summary-show-article t) @@ -2835,7 +2833,7 @@ REMOVE not nil, remove the ADDRESSES." (or score "0")))) (defun spam-check-crm114 (&optional score) - "Check the CRM114 Mailfilter backend for the classification of this message" + "Check the CRM114 Mailfilter backend for the classification of this message." (let ((article-buffer-name (buffer-name)) (db spam-crm114-database-directory) return) @@ -2897,9 +2895,9 @@ REMOVE not nil, remove the ADDRESSES." (defun spam-initialize (&rest symbols) "Install the spam.el hooks and do other initialization. When SYMBOLS is given, set those variables to t. This is so you -can call spam-initialize before you set spam-use-* variables on +can call `spam-initialize' before you set spam-use-* variables on explicitly, and matters only if you need the extra headers -installed through spam-necessary-extra-headers." +installed through `spam-necessary-extra-headers'." (interactive) (dolist (var symbols) @@ -2923,7 +2921,7 @@ installed through spam-necessary-extra-headers." (add-hook 'gnus-summary-prepared-hook 'spam-find-spam)) (defun spam-unload-hook () - "Uninstall the spam.el hooks" + "Uninstall the spam.el hooks." (interactive) (remove-hook 'gnus-save-newsrc-hook 'spam-maybe-spam-stat-save) (remove-hook 'gnus-get-top-new-news-hook 'spam-maybe-spam-stat-load) diff --git a/lisp/gnus/utf7.el b/lisp/gnus/utf7.el index dbe749cad69..deba6d131e4 100644 --- a/lisp/gnus/utf7.el +++ b/lisp/gnus/utf7.el @@ -209,20 +209,26 @@ Characters are in raw byte pairs in narrowed buffer." (defun utf7-encode (string &optional for-imap) "Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil." - (let ((default-enable-multibyte-characters t)) - (with-temp-buffer - (insert string) - (utf7-encode-internal for-imap) - (buffer-string)))) + (if (and (coding-system-p 'utf-7) (coding-system-p 'utf-7-imap)) + ;; Emacs 23 with proper support for IMAP + (encode-coding-string string (if for-imap 'utf-7-imap 'utf-7)) + (let ((default-enable-multibyte-characters t)) + (with-temp-buffer + (insert string) + (utf7-encode-internal for-imap) + (buffer-string))))) (defun utf7-decode (string &optional for-imap) "Decode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil." - (let ((default-enable-multibyte-characters nil)) - (with-temp-buffer - (insert string) - (utf7-decode-internal for-imap) - (mm-enable-multibyte) - (buffer-string)))) + (if (and (coding-system-p 'utf-7) (coding-system-p 'utf-7-imap)) + ;; Emacs 23 with proper support for IMAP + (decode-coding-string string (if for-imap 'utf-7-imap 'utf-7)) + (let ((default-enable-multibyte-characters nil)) + (with-temp-buffer + (insert string) + (utf7-decode-internal for-imap) + (mm-enable-multibyte) + (buffer-string))))) (provide 'utf7) diff --git a/lisp/gnus/yenc.el b/lisp/gnus/yenc.el index 7550186b35e..7843f6a9aa0 100644 --- a/lisp/gnus/yenc.el +++ b/lisp/gnus/yenc.el @@ -55,6 +55,25 @@ 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213]) +(defun yenc-first-part-p () + "Say whether the buffer contains the first part of a yEnc file." + (save-excursion + (goto-char (point-min)) + (re-search-forward "^=ybegin part=1 " nil t))) + +(defun yenc-last-part-p () + "Say whether the buffer contains the last part of a yEnc file." + (save-excursion + (goto-char (point-min)) + (let (total-size end-size) + (when (re-search-forward "^=ybegin.*size=\\([0-9]+\\)" nil t) + (setq total-size (match-string 1))) + (when (re-search-forward "^=ypart.*end=\\([0-9]+\\)" nil t) + (setq end-size (match-string 1))) + (and total-size + end-size + (string= total-size end-size))))) + ;;;###autoload (defun yenc-decode-region (start end) "Yenc decode region between START and END using an internal decoder." diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 2bfd4176567..5aa8860ae9d 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -248,6 +248,8 @@ face (according to `face-differs-from-default-p')." src-file file-name))) +(declare-function ad-get-advice-info "advice" (function)) + ;;;###autoload (defun describe-function-1 (function) (let* ((advised (and (featurep 'advice) (ad-get-advice-info function))) diff --git a/lisp/help.el b/lisp/help.el index ac6af2d9e50..c6650e1cf21 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1029,7 +1029,7 @@ scroll the \"other\" window." ".") (other ", \\[scroll-other-window] to scroll help.") (t ", \\[scroll-up] to scroll help.")))) - (message + (message "%s" (substitute-command-keys (concat quit-part scroll-part))))) (defun help-window-setup-finish (window &optional reuse keep-frame) diff --git a/lisp/gnus/hex-util.el b/lisp/hex-util.el similarity index 80% rename from lisp/gnus/hex-util.el rename to lisp/hex-util.el index 981516e4b2a..3a1df204127 100644 --- a/lisp/gnus/hex-util.el +++ b/lisp/hex-util.el @@ -6,21 +6,21 @@ ;; Author: Shuhei KOBAYASHI ;; Keywords: data -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; 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 3, or -;; (at your option) any later version. +;; GNU Emacs 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 3, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, +;; GNU Emacs 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; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 80133d227ab..b09a3e26979 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -55,6 +55,13 @@ (defvar ibuffer-tmp-hide-regexps) (defvar ibuffer-tmp-show-regexps) +(declare-function ibuffer-mark-on-buffer "ibuf-ext" + (func &optional ibuffer-mark-on-buffer-mark group)) +(declare-function ibuffer-format-qualifier "ibuf-ext" (qualifier)) +(declare-function ibuffer-generate-filter-groups "ibuf-ext" + (bmarklist &optional noempty nodefault)) +(declare-function ibuffer-format-filter-group-data "ibuf-ext" (filter)) + (defgroup ibuffer nil "An advanced replacement for `buffer-menu'. diff --git a/lisp/ido.el b/lisp/ido.el index 0a077f9dab6..4658a887716 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -1309,6 +1309,7 @@ Value is an integer which is number of chars to right of prompt.") (unwind-protect (with-current-buffer buf (erase-buffer) + (insert ";;; -*- coding: utf-8 -*-\n") (setq buffer-file-coding-system 'utf-8) (ido-pp 'ido-last-directory-list) (ido-pp 'ido-work-directory-list) @@ -1317,7 +1318,7 @@ Value is an integer which is number of chars to right of prompt.") (if (listp ido-unc-hosts-cache) (ido-pp 'ido-unc-hosts-cache) (insert "\n;; ----- ido-unc-hosts-cache -----\nt\n")) - (insert "\n;; Local Variables:\n;; coding: utf-8\n;; End:\n") + (insert "\n") (write-file ido-save-directory-list-file nil)) (kill-buffer buf))))) @@ -2281,9 +2282,10 @@ If cursor is not at the end of the user input, move to end of input." filename t)) ((and ido-use-filename-at-point - (setq fn (if (eq ido-use-filename-at-point 'guess) - (with-no-warnings (ffap-guesser)) - (ffap-string-at-point))) + (setq fn (with-no-warnings + (if (eq ido-use-filename-at-point 'guess) + (ffap-guesser) + (ffap-string-at-point)))) (not (string-match "^http:/" fn)) (setq d (file-name-directory fn)) (file-directory-p d)) @@ -3363,6 +3365,8 @@ for first matching file." (nconc ido-temp-list items) (setq ido-temp-list items))) +(declare-function tramp-tramp-file-p "tramp" (name)) + (defun ido-file-name-all-completions-1 (dir) (cond ((ido-nonreadable-directory-p dir) '()) @@ -3370,24 +3374,25 @@ for first matching file." ;; Caller must have done that if necessary. ((and ido-enable-tramp-completion - (or (fboundp 'tramp-completion-mode) + (or (fboundp 'tramp-completion-mode-p) (require 'tramp nil t)) (string-match "\\`/[^/]+[:@]\\'" dir)) ;; Strip method:user@host: part of tramp completions. ;; Tramp completions do not include leading slash. - (let ((len (1- (length dir))) - (compl - (or (file-name-all-completions "" dir) - ;; work around bug in ange-ftp. - ;; /ftp:user@host: => nil - ;; /ftp:user@host:./ => ok - (and - (not (string= "/ftp:" dir)) - (tramp-tramp-file-p dir) - (fboundp 'tramp-ftp-file-name-p) - (funcall 'tramp-ftp-file-name-p dir) - (string-match ":\\'" dir) - (file-name-all-completions "" (concat dir "./")))))) + (let* ((len (1- (length dir))) + (tramp-completion-mode t) + (compl + (or (file-name-all-completions "" dir) + ;; work around bug in ange-ftp. + ;; /ftp:user@host: => nil + ;; /ftp:user@host:./ => ok + (and + (not (string= "/ftp:" dir)) + (tramp-tramp-file-p dir) + (fboundp 'tramp-ftp-file-name-p) + (funcall 'tramp-ftp-file-name-p dir) + (string-match ":\\'" dir) + (file-name-all-completions "" (concat dir "./")))))) (if (and compl (> (length (car compl)) len) (string= (substring (car compl) 0 len) (substring dir 1))) diff --git a/lisp/image-dired.el b/lisp/image-dired.el index 82bfbfb20af..cca9686f237 100644 --- a/lisp/image-dired.el +++ b/lisp/image-dired.el @@ -1184,7 +1184,7 @@ comment." ", ")) (comment (get-text-property (point) 'comment))) (if file-name - (message + (message "%s" (image-dired-format-properties-string dired-buf file-name @@ -1208,7 +1208,7 @@ dired." (if (not (and dired-buf file-name)) (message "No image, or image with correct properties, at point.") (with-current-buffer dired-buf - (message file-name) + (message "%s" file-name) (setq file-name (file-name-nondirectory file-name)) (goto-char (point-min)) (if (search-forward file-name nil t) @@ -2239,7 +2239,7 @@ non-nil." ", ")) (comment (image-dired-get-comment file))) (if file-name - (message + (message "%s" (image-dired-format-properties-string dired-buf file-name diff --git a/lisp/informat.el b/lisp/informat.el index 18a459ba0fe..05be680bfa8 100644 --- a/lisp/informat.el +++ b/lisp/informat.el @@ -32,6 +32,8 @@ (require 'info) +(declare-function texinfo-format-refill "texinfmt" ()) + ;;;###autoload (defun Info-tagify (&optional input-buffer-name) "Create or update Info file tag table in current buffer or in a region." diff --git a/lisp/international/iso-cvt.el b/lisp/international/iso-cvt.el index d7149b8a9bc..f2725e9d854 100644 --- a/lisp/international/iso-cvt.el +++ b/lisp/international/iso-cvt.el @@ -65,7 +65,7 @@ "Spanish translation table.") (defun iso-translate-conventions (from to trans-tab) - "Use the translation table TRANS-TAB to translate the current buffer." + "Translate between FROM and TO using the translation table TRANS-TAB." (save-excursion (save-restriction (narrow-to-region from to) @@ -84,8 +84,8 @@ ;;;###autoload (defun iso-spanish (from to &optional buffer) "Translate net conventions for Spanish to ISO 8859-1. -The region between FROM and TO is translated using -the table `iso-spanish-trans-tab'. +Translate the region between FROM and TO using the table +`iso-spanish-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-spanish-trans-tab)) @@ -102,8 +102,8 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ("\\\\3" "ß") ) "German translation table. -This table uses an aggressive translation approach and may erroneously -translate too much.") +This table uses an aggressive translation approach +and may erroneously translate too much.") (defvar iso-conservative-german-trans-tab '( @@ -117,8 +117,8 @@ translate too much.") ("\\([-a-zA-Z\"`]\\)\\\\3" "\\1ß") ) "German translation table. -This table uses a conservative translation approach and may translate too -little.") +This table uses a conservative translation approach +and may translate too little.") (defvar iso-german-trans-tab iso-aggressive-german-trans-tab "Currently active translation table for German.") @@ -126,8 +126,8 @@ little.") ;;;###autoload (defun iso-german (from to &optional buffer) "Translate net conventions for German to ISO 8859-1. -The region between FROM and TO is translated using -the table `iso-german-trans-tab'. +Translate the region FROM and TO using the table +`iso-german-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-german-trans-tab)) @@ -199,8 +199,8 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ;;;###autoload (defun iso-iso2tex (from to &optional buffer) "Translate ISO 8859-1 characters to TeX sequences. -The region between FROM and TO is translated using -the table `iso-iso2tex-trans-tab'. +Translate the region between FROM and TO using the table +`iso-iso2tex-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-iso2tex-trans-tab)) @@ -386,14 +386,14 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ("!`" "¡") ) "Translation table for translating TeX sequences to ISO 8859-1 characters. -This table is not exhaustive (and due to TeX's power can never be). It only -contains commonly used sequences.") +This table is not exhaustive (and due to TeX's power can never be). +It only contains commonly used sequences.") ;;;###autoload (defun iso-tex2iso (from to &optional buffer) "Translate TeX sequences to ISO 8859-1 characters. -The region between FROM and TO is translated using -the table `iso-tex2iso-trans-tab'. +Translate the region between FROM and TO using the table +`iso-tex2iso-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-tex2iso-trans-tab)) @@ -581,8 +581,8 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ("\\\\3" "ß") ) "Translation table for translating German TeX sequences to ISO 8859-1. -This table is not exhaustive (and due to TeX's power can never be). It only -contains commonly used sequences.") +This table is not exhaustive (and due to TeX's power can never be). +It only contains commonly used sequences.") (defvar iso-iso2gtex-trans-tab '( @@ -651,8 +651,8 @@ contains commonly used sequences.") ;;;###autoload (defun iso-gtex2iso (from to &optional buffer) "Translate German TeX sequences to ISO 8859-1 characters. -The region between FROM and TO is translated using -the table `iso-gtex2iso-trans-tab'. +Translate the region between FROM and TO using the table +`iso-gtex2iso-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-gtex2iso-trans-tab)) @@ -660,8 +660,8 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ;;;###autoload (defun iso-iso2gtex (from to &optional buffer) "Translate ISO 8859-1 characters to German TeX sequences. -The region between FROM and TO is translated using -the table `iso-iso2gtex-trans-tab'. +Translate the region between FROM and TO using the table +`iso-iso2gtex-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-iso2gtex-trans-tab)) @@ -679,8 +679,8 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ;;;###autoload (defun iso-iso2duden (from to &optional buffer) "Translate ISO 8859-1 characters to Duden sequences. -The region between FROM and TO is translated using -the table `iso-iso2duden-trans-tab'. +Translate the region between FROM and TO using the table +`iso-iso2duden-trans-tab'. Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-iso2duden-trans-tab)) @@ -817,7 +817,7 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ;;;###autoload (defun iso-iso2sgml (from to &optional buffer) "Translate ISO 8859-1 characters in the region to SGML entities. -The entities used are from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\". +Use entities from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\". Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-iso2sgml-trans-tab)) @@ -825,7 +825,7 @@ Optional arg BUFFER is ignored (for use in `format-alist')." ;;;###autoload (defun iso-sgml2iso (from to &optional buffer) "Translate SGML entities in the region to ISO 8859-1 characters. -The entities used are from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\". +Use entities from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\". Optional arg BUFFER is ignored (for use in `format-alist')." (interactive "*r") (iso-translate-conventions from to iso-sgml2iso-trans-tab)) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 164c3d7ca99..111c45dd50a 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -1459,6 +1459,9 @@ To deactivate it programmatically, use `inactivate-input-method'." (customize-mark-as-set 'default-input-method)) default-input-method) +(defvar toggle-input-method-active nil + "Non-nil inside `toggle-input-method'.") + (defun toggle-input-method (&optional arg interactive) "Enable or disable multilingual text input method for the current buffer. Only one input method can be enabled at any time in a given buffer. @@ -1478,9 +1481,12 @@ When called interactively, the optional arg INTERACTIVE is non-nil, which marks the variable `default-input-method' as set for Custom buffers." (interactive "P\np") + (if toggle-input-method-active + (error "Recursive use of `toggle-input-method'")) (if (and current-input-method (not arg)) (inactivate-input-method) - (let ((default (or (car input-method-history) default-input-method))) + (let ((toggle-input-method-active t) + (default (or (car input-method-history) default-input-method))) (if (and arg default (equal current-input-method default) (> (length input-method-history) 1)) (setq default (nth 1 input-method-history))) @@ -2590,14 +2596,24 @@ See also `locale-charset-language-names', `locale-language-names', system codeset `%s' for this locale." coding-system codeset)))))))) ;; On Windows, override locale-coding-system, - ;; keyboard-coding-system with system codepage. Note: - ;; selection-coding-system is already set in w32select.c. + ;; default-file-name-coding-system, keyboard-coding-system, + ;; terminal-coding-system with system codepage. (when (boundp 'w32-ansi-code-page) (let ((code-page-coding (intern (format "cp%d" w32-ansi-code-page)))) (when (coding-system-p code-page-coding) (unless frame (setq locale-coding-system code-page-coding)) (set-keyboard-coding-system code-page-coding frame) - (set-terminal-coding-system code-page-coding frame)))) + (set-terminal-coding-system code-page-coding frame) + ;; Set default-file-name-coding-system last, so that Emacs + ;; doesn't try to use cpNNNN when it defines keyboard and + ;; terminal encoding. That's because the above two lines + ;; will want to load code-pages.el, where cpNNNN are + ;; defined; if default-file-name-coding-system were set to + ;; cpNNNN while these two lines run, Emacs will want to use + ;; it for encoding the file name it wants to load. And that + ;; will fail, since cpNNNN is not yet usable until + ;; code-pages.el finishes loading. + (setq default-file-name-coding-system code-page-coding)))) (when (eq system-type 'darwin) ;; On Darwin, file names are always encoded in utf-8, no matter diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el index 541f38d38a3..9ed565eada7 100644 --- a/lisp/international/titdic-cnv.el +++ b/lisp/international/titdic-cnv.el @@ -1112,6 +1112,8 @@ To input symbols and punctuations, type `/' followed by one of `a' to Some infrequent characters are accessed by typing \\, followed by the Cantonese romanization of the respective radical ($(0?f5}(B).")) +(declare-function dos-8+3-filename "dos-fns.el" (filename)) + (defun miscdic-convert (filename &optional dirname) "Convert a dictionary file FILENAME into a Quail package. Optional argument DIRNAME if specified is the directory name under which diff --git a/lisp/isearch-multi.el b/lisp/isearch-multi.el index acd456815a0..9161ef82c7e 100644 --- a/lisp/isearch-multi.el +++ b/lisp/isearch-multi.el @@ -66,15 +66,16 @@ The value is nil when the search still is in the initial buffer.") "Function to call to get the next buffer to search. When this variable is set to a function that returns a buffer, then -after typing another C-s or C-r at a failing search, the search goes +after typing another \\[isearch-forward] or \\[isearch-backward] \ +at a failing search, the search goes to the next buffer in the series and continues searching for the next occurrence. The first argument of this function is the current buffer where the search is currently searching. It defines the base buffer relative to which this function should find the next buffer. When the isearch -direction is backward (when isearch-forward is nil), this function -should return the previous buffer to search. If the second argument of +direction is backward (when `isearch-forward' is nil), this function +should return the previous buffer to search. If the second argument of this function WRAP is non-nil, then it should return the first buffer in the series; and for the backward search, it should return the last buffer in the series.") diff --git a/lisp/log-edit.el b/lisp/log-edit.el index 5c2cf989f62..a2f749ad127 100644 --- a/lisp/log-edit.el +++ b/lisp/log-edit.el @@ -57,6 +57,7 @@ (easy-mmode-defmap log-edit-mode-map `(("\C-c\C-c" . log-edit-done) ("\C-c\C-a" . log-edit-insert-changelog) + ("\C-c\C-d" . log-edit-show-diff) ("\C-c\C-f" . log-edit-show-files) ("\M-n" . log-edit-next-comment) ("\M-p" . log-edit-previous-comment) @@ -79,6 +80,8 @@ ["Insert ChangeLog" log-edit-insert-changelog] ["Add to ChangeLog" log-edit-add-to-changelog] "--" + ["Show diff" log-edit-show-diff + :help "Show the diff for the files to be committed."] ["List files" log-edit-show-files :help "Show the list of relevant files."] "--" @@ -170,6 +173,7 @@ when this variable is set to nil.") (defconst log-edit-files-buf "*log-edit-files*") (defvar log-edit-initial-files nil) (defvar log-edit-callback nil) +(defvar log-edit-diff-function nil) (defvar log-edit-listfun nil) (defvar log-edit-parent-buffer nil) @@ -301,7 +305,7 @@ automatically." (2 font-lock-function-name-face)))) ;;;###autoload -(defun log-edit (callback &optional setup listfun buffer &rest ignore) +(defun log-edit (callback &optional setup params buffer &rest ignore) "Setup a buffer to enter a log message. \\The buffer will be put in `log-edit-mode'. If SETUP is non-nil, the buffer is then erased and `log-edit-hook' is run. @@ -309,8 +313,13 @@ Mark and point will be set around the entire contents of the buffer so that it is easy to kill the contents of the buffer with \\[kill-region]. Once you're done editing the message, pressing \\[log-edit-done] will call `log-edit-done' which will end up calling CALLBACK to do the actual commit. -LISTFUN if non-nil is a function of no arguments returning the list of files - that are concerned by the current operation (using relative names). +PARAMS if non-nil is an alist. The keys for the alist can be: +`log-edit-listfun' and `log-edit-diff-function'. The associated +value for `log-edit-listfun' should be a function with not +arguments that returns the list of files that are concerned by +the current operation (using relative names). The associated +value for `log-edit-diff-function' should be a function with no +arguments that displays a diff of the files concerned by the current operation. If BUFFER is non-nil `log-edit' will jump to that buffer, use it to edit the log message and go back to the current buffer when done. Otherwise, it uses the current buffer." @@ -321,7 +330,13 @@ If BUFFER is non-nil `log-edit' will jump to that buffer, use it to edit the (when setup (erase-buffer)) (log-edit-mode) (set (make-local-variable 'log-edit-callback) callback) - (set (make-local-variable 'log-edit-listfun) listfun) + (if (listp params) + (dolist (crt params) + (set (make-local-variable (car crt)) (cdr crt))) + ;; For backward compatibility with log-edit up to version 22.2 + ;; accept non-list PARAMS to mean `log-edit-list'. + (set (make-local-variable 'log-edit-listfun) params)) + (if buffer (set (make-local-variable 'log-edit-parent-buffer) parent)) (set (make-local-variable 'log-edit-initial-files) (log-edit-files)) (when setup (run-hooks 'log-edit-hook)) @@ -417,6 +432,13 @@ If you want to abort the commit, simply delete the buffer." (indent-rigidly (point-min) (point-max) (- log-edit-common-indent common))))) +(defun log-edit-show-diff () + "Show the diff for the files to be committed." + (interactive) + (if (functionp log-edit-diff-function) + (funcall log-edit-diff-function) + (error "Diff functionality has not been setup"))) + (defun log-edit-show-files () "Show the list of files to be committed." (interactive) diff --git a/lisp/longlines.el b/lisp/longlines.el index f043a48c737..57b5742751f 100644 --- a/lisp/longlines.el +++ b/lisp/longlines.el @@ -207,33 +207,39 @@ major mode changes." "Make hard newlines visible by adding a face. With optional argument ARG, make the hard newlines invisible again." (interactive "P") - (let ((buffer-undo-list t) - (mod (buffer-modified-p))) (if arg (longlines-unshow-hard-newlines) (setq longlines-showing t) - (longlines-show-region (point-min) (point-max))) - (set-buffer-modified-p mod))) + (longlines-show-region (point-min) (point-max)))) (defun longlines-show-region (beg end) "Make hard newlines between BEG and END visible." (let* ((pmin (min beg end)) (pmax (max beg end)) (pos (text-property-not-all pmin pmax 'hard nil)) - (inhibit-read-only t)) + (mod (buffer-modified-p)) + (buffer-undo-list t) + (inhibit-read-only t) + (inhibit-modification-hooks t)) (while pos (put-text-property pos (1+ pos) 'display - (copy-sequence longlines-show-effect)) - (setq pos (text-property-not-all (1+ pos) pmax 'hard nil))))) + (copy-sequence longlines-show-effect)) + (setq pos (text-property-not-all (1+ pos) pmax 'hard nil))) + (restore-buffer-modified-p mod))) (defun longlines-unshow-hard-newlines () "Make hard newlines invisible again." (interactive) (setq longlines-showing nil) - (let ((pos (text-property-not-all (point-min) (point-max) 'hard nil))) + (let ((pos (text-property-not-all (point-min) (point-max) 'hard nil)) + (mod (buffer-modified-p)) + (buffer-undo-list t) + (inhibit-read-only t) + (inhibit-modification-hooks t)) (while pos (remove-text-properties pos (1+ pos) '(display)) - (setq pos (text-property-not-all (1+ pos) (point-max) 'hard nil))))) + (setq pos (text-property-not-all (1+ pos) (point-max) 'hard nil))) + (restore-buffer-modified-p mod))) ;; Wrapping the paragraphs. diff --git a/lisp/gnus/binhex.el b/lisp/mail/binhex.el similarity index 98% rename from lisp/gnus/binhex.el rename to lisp/mail/binhex.el index 88f0e20f17c..c1d1316c82e 100644 --- a/lisp/gnus/binhex.el +++ b/lisp/mail/binhex.el @@ -35,23 +35,28 @@ 'char-int 'identity))) +(defgroup binhex nil + "Decoding of BinHex (binary-to-hexadecimal) data." + :group 'mail + :group 'news) + (defcustom binhex-decoder-program "hexbin" "*Non-nil value should be a string that names a binhex decoder. The program should expect to read binhex data on its standard input and write the converted data to its standard output." :type 'string - :group 'gnus-extract) + :group 'binhex) (defcustom binhex-decoder-switches '("-d") "*List of command line flags passed to the command `binhex-decoder-program'." - :group 'gnus-extract + :group 'binhex :type '(repeat string)) (defcustom binhex-use-external (executable-find binhex-decoder-program) "*Use external binhex program." :version "22.1" - :group 'gnus-extract + :group 'binhex :type 'boolean) (defconst binhex-alphabet-decoding-alist diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el index ce98a608665..14a0a8d4ef1 100644 --- a/lisp/mail/emacsbug.el +++ b/lisp/mail/emacsbug.el @@ -229,6 +229,9 @@ Type SPC to scroll through this section and its subsections.")))) (setq report-emacs-bug-orig-text (buffer-substring (point-min) (point)))) (goto-char user-point))) +(declare-function Info-menu "info" (menu-item &optional fork)) +(declare-function Info-goto-node "info" (nodename &optional fork)) + (defun report-emacs-bug-info () "Go to the Info node on reporting Emacs bugs." (interactive) diff --git a/lisp/gnus/hashcash.el b/lisp/mail/hashcash.el similarity index 98% rename from lisp/gnus/hashcash.el rename to lisp/mail/hashcash.el index 737178b8218..22005ce957e 100644 --- a/lisp/gnus/hashcash.el +++ b/lisp/mail/hashcash.el @@ -126,6 +126,11 @@ For example, you may want to set this to '(\"-Z2\") to reduce header length." (concat (match-string 1 addr) (match-string 2 addr)) addr)) +(declare-function message-narrow-to-headers-or-head "message" ()) +(declare-function message-fetch-field "message" (header &optional not-all)) +(declare-function message-goto-eoh "message" ()) +(declare-function message-narrow-to-headers "message" ()) + (defun hashcash-token-substring () (save-excursion (let ((token "")) diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el index 209b1deacf8..9ef5a02bd26 100644 --- a/lisp/mail/mail-extr.el +++ b/lisp/mail/mail-extr.el @@ -1854,7 +1854,7 @@ place. It affects how `mail-extract-address-components' works." ;; http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1-semic.txt ;; http://www.iana.org/domain-names.htm ;; http://www.iana.org/cctld/cctld-whois.htm -;; Latest change: Mon Jul 8 14:21:59 CEST 2002 +;; Latest change: 2007/11/15 (defconst mail-extr-all-top-level-domains (let ((ob (make-vector 739 0))) @@ -1867,6 +1867,7 @@ place. It affects how `mail-extract-address-components' works." (nth 1 x)))) '( ;; ISO 3166 codes: + ("ac" "Ascension Island") ("ad" "Andorra") ("ae" "United Arab Emirates") ("af" "Afghanistan") @@ -1882,6 +1883,7 @@ place. It affects how `mail-extract-address-components' works." ("at" "Austria" "The Republic of %s") ("au" "Australia") ("aw" "Aruba") + ("ax" "Aland Islands") ("az" "Azerbaijan") ("ba" "Bosnia-Herzegovina") ("bb" "Barbados") @@ -1892,6 +1894,7 @@ place. It affects how `mail-extract-address-components' works." ("bh" "Bahrain") ("bi" "Burundi") ("bj" "Benin") + ("bl" "Saint Barthelemy") ("bm" "Bermuda") ("bn" "Brunei Darussalam") ("bo" "Bolivia" "Republic of %s") @@ -1933,6 +1936,7 @@ place. It affects how `mail-extract-address-components' works." ("er" "Eritrea") ("es" "Spain" "The Kingdom of %s") ("et" "Ethiopia") + ("eu" "European Union") ("fi" "Finland" "The Republic of %s") ("fj" "Fiji") ("fk" "Falkland Islands (Malvinas)") @@ -1944,6 +1948,7 @@ place. It affects how `mail-extract-address-components' works." ("gd" "Grenada") ("ge" "Georgia") ("gf" "French Guiana") + ("gg" "Guernsey") ("gh" "Ghana") ("gi" "Gibraltar") ("gl" "Greenland") @@ -1973,6 +1978,7 @@ place. It affects how `mail-extract-address-components' works." ("ir" "Iran" "Islamic Republic of %s") ("is" "Iceland" "The Republic of %s") ("it" "Italy" "The Italian Republic") + ("je" "Jersey") ("jm" "Jamaica") ("jo" "Jordan") ("jp" "Japan") @@ -2001,6 +2007,8 @@ place. It affects how `mail-extract-address-components' works." ("ma" "Morocco") ("mc" "Monaco") ("md" "Moldova" "The Republic of %s") + ("me" "Montenegro") + ("mf" "Saint Martin (French part)") ("mg" "Madagascar") ("mh" "Marshall Islands") ("mk" "Macedonia" "The Former Yugoslav Republic of %s") @@ -2049,6 +2057,7 @@ place. It affects how `mail-extract-address-components' works." ("qa" "Qatar") ("re" "Reunion (Fr.)") ; In .fr domain ("ro" "Romania") + ("rs" "Serbia") ("ru" "Russia" "Russian Federation") ("rw" "Rwanda") ("sa" "Saudi Arabia") @@ -2112,15 +2121,21 @@ place. It affects how `mail-extract-address-components' works." ("zw" "Zimbabwe" "Republic of %s") ;; Generic Domains: ("aero" t "Air Transport Industry") + ("asia" t "Pan-Asia and Asia Pacific community") ("biz" t "Businesses") + ("cat" t "Catalan language and culture") ("com" t "Commercial") ("coop" t "Cooperative Associations") ("info" t "Info") + ("jobs" t "Employment") + ("mobi" t "Mobile products") ("museum" t "Museums") ("name" t "Individuals") ("net" t "Network") ("org" t "Non-profit Organization") - ;;("pro" t "Credentialed professionals") + ("pro" t "Credentialed professionals") + ("tel" t "Contact data") + ("travel" t "Travel industry") ;;("bitnet" t "Because It's Time NET") ("gov" t "United States Government") ("edu" t "Educational") diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el index 514bf4fe5f3..b248ba7dec1 100644 --- a/lisp/mail/mspools.el +++ b/lisp/mail/mspools.el @@ -246,6 +246,11 @@ Buffer is not displayed if SHOW is non-nil." (mspools-mode) ) +(declare-function rmail-get-new-mail "rmail" (&optional file-name)) + +;; External. +(declare-function vm-visit-folder "ext:vm-startup" (folder &optional read-only)) + (defun mspools-visit-spool () "Visit the folder on the current line of the *spools* buffer." (interactive) diff --git a/lisp/mail/reporter.el b/lisp/mail/reporter.el index 596c7ee9627..24dd9ab0c35 100644 --- a/lisp/mail/reporter.el +++ b/lisp/mail/reporter.el @@ -168,6 +168,9 @@ composed.") (goto-char (1+ (nth 1 state))) (current-column))) +(declare-function mail-position-on-field "sendmail" (field &optional soft)) +(declare-function mail-text "sendmail" ()) + (defun reporter-dump-variable (varsym mailbuf) "Pretty-print the value of the variable in symbol VARSYM. MAILBUF is the mail buffer being composed." diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 4a7bd12ba42..5d276f9c76a 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -184,6 +184,10 @@ please report it with \\[report-emacs-bug].") :group 'rmail-retrieve :type '(repeat (directory))) +(declare-function mail-position-on-field "sendmail" (field &optional soft)) +(declare-function mail-text-start "sendmail" ()) +(declare-function rmail-update-summary "rmailsum" (&rest ignore)) + (defun rmail-probe (prog) "Determine what flavor of movemail PROG is. We do this by executing it with `--version' and analyzing its output." @@ -1515,6 +1519,15 @@ original copy." ;;;; *** Rmail input *** +(declare-function rmail-spam-filter "rmail-spam-filter" (msg)) +(declare-function rmail-summary-goto-msg "rmailsum" (&optional n nowarn skip-rmail)) +(declare-function rmail-summary-mark-undeleted "rmailsum" (n)) +(declare-function rmail-summary-mark-deleted "rmailsum" (&optional n undel)) +(declare-function rfc822-addresses "rfc822" (header-text)) +(declare-function mail-abbrev-make-syntax-table "mailabbrev.el" ()) +(declare-function mail-sendmail-delimit-header "sendmail" ()) +(declare-function mail-header-end "sendmail" ()) + ;; RLK feature not added in this version: ;; argument specifies inbox file or files in various ways. @@ -3282,7 +3295,9 @@ and more whitespace. The returned regular expressions contains (setq subject (regexp-quote subject)) (setq subject (replace-regexp-in-string "[ \t\n]+" "[ \t\n]+" subject t t)) - (concat "^Subject: " + ;; Some mailers insert extra spaces after "Subject:", so allow any + ;; amount of them. + (concat "^Subject:[ \t]+" (if (string= "\\`" (substring rmail-reply-regexp 0 2)) (substring rmail-reply-regexp 2) rmail-reply-regexp) diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el index 04982aec349..02bc23fe0c5 100644 --- a/lisp/mail/rmailedit.el +++ b/lisp/mail/rmailedit.el @@ -49,6 +49,9 @@ ;; Rmail Edit mode is suitable only for specially formatted data. (put 'rmail-edit-mode 'mode-class 'special) +(declare-function rmail-summary-disable "" ()) +(declare-function rmail-summary-enable "rmailsum" ()) + (defun rmail-edit-mode () "Major mode for editing the contents of an RMAIL message. The editing commands are the same as in Text mode, together with two commands diff --git a/lisp/mail/rmailkwd.el b/lisp/mail/rmailkwd.el index c479e35beb7..48e2246520b 100644 --- a/lisp/mail/rmailkwd.el +++ b/lisp/mail/rmailkwd.el @@ -86,6 +86,15 @@ Completion is performed over known labels when reading." rmail-last-label (setq rmail-last-label (rmail-make-label result t)))))) +(declare-function rmail-maybe-set-message-counters "rmail" ()) +(declare-function rmail-display-labels "rmail" ()) +(declare-function rmail-msgbeg "rmail" (n)) +(declare-function rmail-set-message-deleted-p "rmail" (n state)) +(declare-function rmail-message-labels-p "rmail" (msg labels)) +(declare-function rmail-show-message "rmail" (&optional n no-summary)) +(declare-function mail-comma-list-regexp "mail-utils" (labels)) +(declare-function mail-parse-comma-list "mail-utils.el" ()) + (defun rmail-set-label (l state &optional n) (with-current-buffer rmail-buffer (rmail-maybe-set-message-counters) diff --git a/lisp/mail/rmailmsc.el b/lisp/mail/rmailmsc.el index 3b7ccd72d02..67cea297f0e 100644 --- a/lisp/mail/rmailmsc.el +++ b/lisp/mail/rmailmsc.el @@ -30,6 +30,9 @@ (defvar rmail-current-message) (defvar rmail-inbox-list) +(declare-function rmail-parse-file-inboxes "rmail" ()) +(declare-function rmail-show-message "rmail" (&optional n no-summary)) + ;;;###autoload (defun set-rmail-inbox-list (file-name) "Set the inbox list of the current RMAIL file to FILE-NAME. diff --git a/lisp/mail/rmailout.el b/lisp/mail/rmailout.el index d85bfc0bfe8..1e9f8379b7b 100644 --- a/lisp/mail/rmailout.el +++ b/lisp/mail/rmailout.el @@ -109,6 +109,8 @@ Set `rmail-default-file' to this name as well as returning it." (or read-file (file-name-nondirectory default-file)) (file-name-directory default-file))))))) +(declare-function rmail-update-summary "rmailsum" (&rest ignore)) + ;;; There are functions elsewhere in Emacs that use this function; ;;; look at them before you change the calling method. ;;;###autoload diff --git a/lisp/mail/rmailsort.el b/lisp/mail/rmailsort.el index ba496a31228..bed40cd0820 100644 --- a/lisp/mail/rmailsort.el +++ b/lisp/mail/rmailsort.el @@ -152,6 +152,7 @@ KEYWORDS is a comma-separated list of labels." n)))))) ;; Basic functions +(declare-function rmail-update-summary "rmailsum" (&rest ignore)) (defun rmail-sort-messages (reverse keyfun) "Sort messages of current Rmail file. diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index fd5931fdef9..cde289ed719 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -1323,6 +1323,13 @@ argument says to read a file name and use that file as the inbox." (end-of-buffer)) (forward-line -1)) +(declare-function rmail-abort-edit "rmailedit" ()) +(declare-function rmail-cease-edit "rmailedit"()) +(declare-function rmail-set-label "rmailkwd" (l state &optional n)) +(declare-function rmail-output-read-file-name "rmailout" ()) +(declare-function rmail-output-read-rmail-file-name "rmailout" ()) +(declare-function mail-send-and-exit "sendmail" (&optional arg)) + (defvar rmail-summary-edit-map nil) (if rmail-summary-edit-map nil diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index e8d896be246..7d66b5e7ac6 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -1744,6 +1744,9 @@ The seventh argument ACTIONS is a list of actions to take (message "Auto save file for draft message exists; consider M-x mail-recover")) initialized)) +(declare-function dired-view-file "dired" ()) +(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep)) + (defun mail-recover-1 () "Pop up a list of auto-saved draft messages so you can recover one of them." (interactive) @@ -1815,6 +1818,10 @@ The seventh argument ACTIONS is a list of actions to take (setq buffer-file-coding-system default-buffer-file-coding-system)))))))) +(declare-function dired-move-to-filename "dired" (&optional raise-error eol)) +(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep)) +(declare-function dired-view-file "dired" ()) + (defun mail-recover () "Recover interrupted mail composition from auto-save files. diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index 61e7d0a00eb..c0e581c0310 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -6,11 +6,8 @@ ;; Author: 1993 Barry A. Warsaw ;; Maintainer: Glenn Morris ;; Created: February 1993 -;; Last Modified: 1993/09/22 18:58:46 ;; Keywords: mail, news -;; supercite.el revision: 3.54 - ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify @@ -510,10 +507,7 @@ string." ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ;; end user configuration variables -(defconst sc-version "3.1" - "Supercite version number.") -(defconst sc-help-address "bug-supercite@gnu.org" - "Address accepting submissions of bug reports.") +(define-obsolete-variable-alias 'sc-version 'emacs-version "23.1") (defvar sc-mail-info nil "Alist of mail header information gleaned from reply buffer.") @@ -2010,7 +2004,7 @@ cited." If MESSAGE is non-nil (interactively, with no prefix argument), inserts the version string in the current buffer instead." (interactive (not current-prefix-arg)) - (let ((verstr (format "Using Supercite.el %s" sc-version))) + (let ((verstr (format "Using Supercite.el %s" emacs-version))) (if message (message verstr) (insert "`sc-version' says: " verstr)))) @@ -2023,48 +2017,7 @@ more information. Info node `(SC)Top'." (interactive) (describe-function 'sc-describe)) -(defun sc-submit-bug-report () - "Submit a bug report on Supercite via mail." - (interactive) - (require 'reporter) - (and - (y-or-n-p "Do you want to submit a report on Supercite? ") - (reporter-submit-bug-report - sc-help-address - (concat "Supercite version " sc-version) - (list - 'sc-attrib-selection-list - 'sc-auto-fill-region-p - 'sc-blank-lines-after-headers - 'sc-citation-leader - 'sc-citation-delimiter - 'sc-citation-separator - 'sc-citation-leader-regexp - 'sc-citation-root-regexp - 'sc-citation-nonnested-root-regexp - 'sc-citation-delimiter-regexp - 'sc-citation-separator-regexp - 'sc-cite-region-limit - 'sc-confirm-always-p - 'sc-default-attribution - 'sc-default-author-name - 'sc-downcase-p - 'sc-electric-circular-p - 'sc-electric-references-p - 'sc-fixup-whitespace-p - 'sc-mail-warn-if-non-rfc822-p - 'sc-mumble - 'sc-name-filter-alist - 'sc-nested-citation-p - 'sc-nuke-mail-headers - 'sc-nuke-mail-header-list - 'sc-preferred-attribution-list - 'sc-preferred-header-style - 'sc-reference-tag-string - 'sc-rewrite-header-list - 'sc-titlecue-regexp - 'sc-use-only-preference-p - )))) +(define-obsolete-function-alias 'sc-submit-bug-report 'report-emacs-bug "23.1") ;; useful stuff diff --git a/lisp/mail/uce.el b/lisp/mail/uce.el index 61afd248332..5a4e01ae9fc 100644 --- a/lisp/mail/uce.el +++ b/lisp/mail/uce.el @@ -217,6 +217,14 @@ These are mostly meant for headers that prevent delivery errors reporting." :type 'string :group 'uce) +(declare-function mail-strip-quoted-names "mail-utils" (address)) +(declare-function rmail-msg-is-pruned "rmail" ()) +(declare-function rmail-maybe-set-message-counters "rmail" ()) +(declare-function rmail-msgbeg "rmail" (n)) +(declare-function rmail-msgend "rmail" (n)) +(declare-function rmail-toggle-header "rmail" (&optional arg)) + + (defun uce-reply-to-uce (&optional ignored) "Send reply to UCE in Rmail. UCE stands for unsolicited commercial email. Function will set up reply diff --git a/lisp/mail/undigest.el b/lisp/mail/undigest.el index 5d6f266b3b0..9bb2f3eab90 100644 --- a/lisp/mail/undigest.el +++ b/lisp/mail/undigest.el @@ -153,6 +153,8 @@ See rmail-digest-methods." ;; Return the list of marker pairs (nreverse result)))) +(declare-function rmail-update-summary "rmailsum" (&rest ignore)) + ;;;###autoload (defun undigestify-rmail-message () "Break up a digest message into its constituent messages. diff --git a/lisp/mail/unrmail.el b/lisp/mail/unrmail.el index f1cf85a4ffc..7ad1c69b50d 100644 --- a/lisp/mail/unrmail.el +++ b/lisp/mail/unrmail.el @@ -48,6 +48,8 @@ For example, invoke `emacs -batch -f batch-unrmail RMAIL'." (message "Done") (kill-emacs (if error 1 0)))) +(declare-function mail-strip-quoted-names "mail-utils" (address)) + ;;;###autoload (defun unrmail (file to-file) "Convert Rmail file FILE to system inbox format file TO-FILE." diff --git a/lisp/gnus/uudecode.el b/lisp/mail/uudecode.el similarity index 98% rename from lisp/gnus/uudecode.el rename to lisp/mail/uudecode.el index 74abeff6621..9dc430e825d 100644 --- a/lisp/gnus/uudecode.el +++ b/lisp/mail/uudecode.el @@ -35,23 +35,28 @@ 'char-int 'identity))) +(defgroup uudecode nil + "Decoding of uuencoded data." + :group 'mail + :group 'news) + (defcustom uudecode-decoder-program "uudecode" "*Non-nil value should be a string that names a uu decoder. The program should expect to read uu data on its standard input and write the converted data to its standard output." :type 'string - :group 'gnus-extract) + :group 'uudecode) (defcustom uudecode-decoder-switches nil "*List of command line flags passed to `uudecode-decoder-program'." - :group 'gnus-extract + :group 'uudecode :type '(repeat string)) (defcustom uudecode-use-external (executable-find uudecode-decoder-program) "*Use external uudecode program." :version "22.1" - :group 'gnus-extract + :group 'uudecode :type 'boolean) (defconst uudecode-alphabet "\040-\140") diff --git a/lisp/mail/vms-pmail.el b/lisp/mail/vms-pmail.el index 022a8070a2e..9785fed71e6 100644 --- a/lisp/mail/vms-pmail.el +++ b/lisp/mail/vms-pmail.el @@ -1,3 +1,4 @@ +;; -*- no-byte-compile: t -*- ;;; vms-pmail.el --- use Emacs as the editor within VMS mail ;; Copyright (C) 1992, 2001, 2002, 2003, 2004, 2005, diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in index 96d69dc0bb7..1998dc6d590 100644 --- a/lisp/makefile.w32-in +++ b/lisp/makefile.w32-in @@ -84,6 +84,7 @@ WINS_ALMOST=\ mail \ mh-e \ net \ + nxml \ play \ progmodes \ term \ diff --git a/lisp/man.el b/lisp/man.el index fc84f327271..41f1d37bb18 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -264,14 +264,17 @@ the associated section number." "(\\(" Man-section-regexp "\\))\\).*\\1")) "Regular expression describing the heading of a page.") -(defvar Man-heading-regexp "^\\([A-Z][A-Z /-]+\\)$" +(defvar Man-heading-regexp "^\\([A-Z][A-Z0-9 /-]+\\)$" "Regular expression describing a manpage heading entry.") (defvar Man-see-also-regexp "SEE ALSO" "Regular expression for SEE ALSO heading (or your equivalent). This regexp should not start with a `^' character.") -(defvar Man-first-heading-regexp "^[ \t]*NAME$\\|^[ \t]*No manual entry fo.*$" +;; This used to have leading space [ \t]*, but was removed because it +;; causes false page splits on an occasional NAME with leading space +;; inside a manpage. And `Man-heading-regexp' doesn't have [ \t]* anyway. +(defvar Man-first-heading-regexp "^NAME$\\|^[ \t]*No manual entry fo.*$" "Regular expression describing first heading on a manpage. This regular expression should start with a `^' character.") @@ -763,17 +766,16 @@ all sections related to a subject, put something appropriate into the ;; minal (using an ioctl(2) if available, the value of ;; $COLUMNS, or falling back to 80 characters if nei- ;; ther is available). - (if window-system - (unless (or (getenv "MANWIDTH") (getenv "COLUMNS")) - ;; This isn't strictly correct, since we don't know how - ;; the page will actually be displayed, but it seems - ;; reasonable. - (setenv "COLUMNS" (number-to-string - (cond - ((and (integerp Man-width) (> Man-width 0)) - Man-width) - (Man-width (frame-width)) - ((window-width))))))) + (unless (or (getenv "MANWIDTH") (getenv "COLUMNS")) + ;; This isn't strictly correct, since we don't know how + ;; the page will actually be displayed, but it seems + ;; reasonable. + (setenv "COLUMNS" (number-to-string + (cond + ((and (integerp Man-width) (> Man-width 0)) + Man-width) + (Man-width (frame-width)) + ((window-width)))))) (setenv "GROFF_NO_SGR" "1") (if (fboundp 'start-process) (set-process-sentinel diff --git a/lisp/gnus/md4.el b/lisp/md4.el similarity index 95% rename from lisp/gnus/md4.el rename to lisp/md4.el index aa9bc543203..7ccb22a20fe 100644 --- a/lisp/gnus/md4.el +++ b/lisp/md4.el @@ -1,26 +1,26 @@ ;;; md4.el --- MD4 Message Digest Algorithm. -;; Copyright (C) 2004 Free Software Foundation, Inc. -;; Copyright (C) 2001 Taro Kawagishi +;; Copyright (C) 2001, 2004, 2007 Free Software Foundation, Inc. + ;; Author: Taro Kawagishi ;; Keywords: MD4 ;; Version: 1.00 ;; Created: February 2001 -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; This program is free software; you can redistribute it and/or modify +;; GNU Emacs 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 3, or (at your option) ;; any later version. -;; -;; This program is distributed in the hope that it will be useful, + +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index c05a4e66a9a..2f4c95d6484 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -504,11 +504,14 @@ A large number or nil slows down menu responsiveness." ;; These are alternative definitions for the cut, paste and copy ;; menu items. Use them if your system expects these to use the clipboard. -(put 'clipboard-kill-region 'menu-enable 'mark-active) +(put 'clipboard-kill-region 'menu-enable + '(and mark-active (not buffer-read-only))) (put 'clipboard-kill-ring-save 'menu-enable 'mark-active) (put 'clipboard-yank 'menu-enable - '(or (and (fboundp 'x-selection-exists-p) (x-selection-exists-p)) - (x-selection-exists-p 'CLIPBOARD))) + '(and (or (and (fboundp 'x-selection-exists-p) + (x-selection-exists-p)) + (x-selection-exists-p 'CLIPBOARD)) + (not buffer-read-only))) (defun clipboard-yank () "Insert the clipboard contents, or the last stretch of killed text." @@ -1340,10 +1343,10 @@ key, a click, or a menu-item")) '(menu-item "Introduction to Emacs Lisp" menu-bar-read-lispintro :help "Read the Introduction to Emacs Lisp Programming")) -(define-key menu-bar-help-menu [describe-project] +(define-key menu-bar-help-menu [about-gnu-project] '(menu-item "About GNU" describe-project :help "About the GNU System, GNU Project, and GNU/Linux")) -(define-key menu-bar-help-menu [about] +(define-key menu-bar-help-menu [about-emacs] '(menu-item "About Emacs" about-emacs :help "Display version number, copyright info, and basic help")) (define-key menu-bar-help-menu [sep4] @@ -1354,7 +1357,7 @@ key, a click, or a menu-item")) (define-key menu-bar-help-menu [describe-copying] '(menu-item "Copying Conditions" describe-copying :help "Show the Emacs license (GPL)")) -(define-key menu-bar-help-menu [describe-distribution] +(define-key menu-bar-help-menu [getting-new-versions] '(menu-item "Getting New Versions" describe-distribution :help "How to get latest versions of Emacs")) (defun menu-bar-help-extra-packages () @@ -1366,10 +1369,10 @@ key, a click, or a menu-item")) (goto-address))) (define-key menu-bar-help-menu [sep2] '("--")) -(define-key menu-bar-help-menu [more] +(define-key menu-bar-help-menu [external-packages] '(menu-item "External Packages" menu-bar-help-extra-packages :help "Lisp packages distributed separately for use in Emacs")) -(define-key menu-bar-help-menu [finder-by-keyword] +(define-key menu-bar-help-menu [find-emacs-packages] '(menu-item "Find Emacs Packages" finder-by-keyword :help "Find packages and features by keyword")) (define-key menu-bar-help-menu [more-manuals] @@ -1383,10 +1386,10 @@ key, a click, or a menu-item")) (list 'menu-item "Search Documentation" menu-bar-search-documentation-menu)) (define-key menu-bar-help-menu [sep1] '("--")) -(define-key menu-bar-help-menu [eliza] +(define-key menu-bar-help-menu [emacs-psychotherapist] '(menu-item "Emacs Psychotherapist" doctor :help "Our doctor will help you feel better")) -(define-key menu-bar-help-menu [report-emacs-bug] +(define-key menu-bar-help-menu [send-emacs-bug-report] '(menu-item "Send Bug Report..." report-emacs-bug :help "Send e-mail to Emacs maintainers")) (define-key menu-bar-help-menu [emacs-known-problems] @@ -1772,6 +1775,8 @@ See `menu-bar-mode' for more information." (menu-bar-mode (if (> (frame-parameter nil 'menu-bar-lines) 0) 0 1)) (menu-bar-mode arg))) +(declare-function x-menu-bar-open "term/x-win" (&optional frame)) + (defun menu-bar-open (&optional frame) "Start key navigation of the menu bar in FRAME. diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog index 2619e20e6f7..f82859475a3 100644 --- a/lisp/mh-e/ChangeLog +++ b/lisp/mh-e/ChangeLog @@ -1,3 +1,20 @@ +2007-12-02 Glenn Morris + + * mh-mime.el (mail-strip-quoted-names): Autoload it. + +2007-11-17 Dan Nicolaescu + + * mh-e.el (mh-xemacs-flag): Remove. + (mh-min-colors-defined-flag): + * mh-xface.el (mh-show-xface-function): + * mh-utils.el (mh-colors-available-p): + * mh-show.el (mh-show-mode): + * mh-gnus.el (mh-gnus-local-map-property): + * mh-folder.el (mh-folder-mode-map) + (mh-remove-xemacs-horizontal-scrollbar, mh-folder-mode): + * mh-comp.el (mh-insert-x-mailer): Replace uses of mh-xemacs-flag + with (featurep 'xemacs). + 2007-09-11 Bill Wohler * mh-e.el (Version, mh-version): Add +cvs to version. diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el index bb2d1506adf..2dcc3d52825 100644 --- a/lisp/mh-e/mh-comp.el +++ b/lisp/mh-e/mh-comp.el @@ -928,8 +928,8 @@ The versions of MH-E, Emacs, and MH are shown." (setq mh-x-mailer-string (format "MH-E %s; %s; %sEmacs %s" mh-version mh-variant-in-use - (if mh-xemacs-flag "X" "GNU ") - (cond ((not mh-xemacs-flag) + (if (featurep 'xemacs) "X" "GNU ") + (cond ((not (featurep 'xemacs)) (string-match "[0-9]+\\.[0-9]+\\(\\.[0-9]+\\)?" emacs-version) (match-string 0 emacs-version)) diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el index faec4db35b7..69454110701 100644 --- a/lisp/mh-e/mh-e.el +++ b/lisp/mh-e/mh-e.el @@ -99,10 +99,6 @@ (require 'mh-buffers) (require 'mh-compat) -(eval-and-compile - (defvar mh-xemacs-flag (featurep 'xemacs) - "Non-nil means the current Emacs is XEmacs.")) - (mh-do-in-xemacs (require 'mh-xemacs)) @@ -3398,7 +3394,7 @@ consumed by `defface-mh'.") The :inherit keyword is available on all supported versions of GNU Emacs and XEmacs from at least 21.5.23 on.") -(defvar mh-min-colors-defined-flag (and (not mh-xemacs-flag) +(defvar mh-min-colors-defined-flag (and (not (featurep 'xemacs)) (>= emacs-major-version 22)) "Non-nil means `defface' supports min-colors display requirement.") diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el index 75cebfe519d..bc15d3eb118 100644 --- a/lisp/mh-e/mh-folder.el +++ b/lisp/mh-e/mh-folder.el @@ -351,7 +351,7 @@ annotation.") "\M-\t" mh-prev-button) (cond - (mh-xemacs-flag + ((featurep 'xemacs) (define-key mh-folder-mode-map [button2] 'mh-show-mouse)) (t (define-key mh-folder-mode-map [mouse-2] 'mh-show-mouse))) @@ -513,7 +513,7 @@ font-lock is done highlighting.") (defmacro mh-remove-xemacs-horizontal-scrollbar () "Get rid of the horizontal scrollbar that XEmacs insists on putting in." - (when mh-xemacs-flag + (when (featurep 'xemacs) `(if (and (featurep 'scrollbar) (fboundp 'set-specifier)) (set-specifier horizontal-scrollbar-visible-p nil @@ -656,7 +656,7 @@ perform the operation on all messages in that region. (easy-menu-add mh-folder-folder-menu) (mh-inc-spool-make) (mh-set-help mh-folder-mode-help-messages) - (if (and mh-xemacs-flag + (if (and (featurep 'xemacs) font-lock-auto-fontify) (turn-on-font-lock))) ; Force font-lock in XEmacs. diff --git a/lisp/mh-e/mh-gnus.el b/lisp/mh-e/mh-gnus.el index 0624346ca05..e099c2e726b 100644 --- a/lisp/mh-e/mh-gnus.el +++ b/lisp/mh-e/mh-gnus.el @@ -41,7 +41,7 @@ ;; Copy of function from gnus-util.el. (defun-mh mh-gnus-local-map-property gnus-local-map-property (map) "Return a list suitable for a text property list specifying keymap MAP." - (cond (mh-xemacs-flag (list 'keymap map)) + (cond ((featurep 'xemacs) (list 'keymap map)) ((>= emacs-major-version 21) (list 'keymap map)) (t (list 'local-map map)))) diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el index 659ab47d0db..10bfeb9c59a 100644 --- a/lisp/mh-e/mh-mime.el +++ b/lisp/mh-e/mh-mime.el @@ -60,6 +60,7 @@ (autoload 'mail-decode-encoded-word-string "mail-parse") (autoload 'mail-header-parse-content-type "mail-parse") (autoload 'mail-header-strip "mail-parse") +(autoload 'mail-strip-quoted-names "mail-utils") (autoload 'message-options-get "message") (autoload 'message-options-set "message") (autoload 'message-options-set-recipient "message") diff --git a/lisp/mh-e/mh-show.el b/lisp/mh-e/mh-show.el index fd171107ac3..c97715dabf3 100644 --- a/lisp/mh-e/mh-show.el +++ b/lisp/mh-e/mh-show.el @@ -872,7 +872,7 @@ See also `mh-folder-mode'. (mh-gnus-article-highlight-citation)) (t (setq font-lock-defaults '(mh-show-font-lock-keywords t)))) - (if (and mh-xemacs-flag + (if (and (featurep 'xemacs) font-lock-auto-fontify) (turn-on-font-lock)) (when mh-decode-mime-flag diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el index 5b618e35b87..da2ace3fd2c 100644 --- a/lisp/mh-e/mh-utils.el +++ b/lisp/mh-e/mh-utils.el @@ -67,7 +67,7 @@ used in lieu of `search' in the CL package." ;;;###mh-autoload (defun mh-colors-available-p () "Check if colors are available in the Emacs being used." - (or mh-xemacs-flag + (or (featurep 'xemacs) (let ((color-cells (mh-display-color-cells))) (and (numberp color-cells) (>= color-cells 8))))) diff --git a/lisp/mh-e/mh-xface.el b/lisp/mh-e/mh-xface.el index 8445cf32ed1..a6a6efc0fb2 100644 --- a/lisp/mh-e/mh-xface.el +++ b/lisp/mh-e/mh-xface.el @@ -36,7 +36,7 @@ (autoload 'message-fetch-field "message") (defvar mh-show-xface-function - (cond ((and mh-xemacs-flag (locate-library "x-face") (not (featurep 'xface))) + (cond ((and (featurep 'xemacs) (locate-library "x-face") (not (featurep 'xface))) (load "x-face" t t) #'mh-face-display-function) ((>= emacs-major-version 21) diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index 523588ec7c2..d7c5228945c 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -825,6 +825,7 @@ to use." ;; --- Default MS-Windows browser --- (defvar dos-windows-version) +(declare-function w32-shell-execute "w32fns.c") ;; Defined in C. (defun browse-url-default-windows-browser (url &optional new-window) (interactive (browse-url-interactive-arg "URL: ")) @@ -1283,6 +1284,10 @@ used instead of `browse-url-new-window-flag'." ;; --- W3 --- +;; External. +(declare-function w3-fetch-other-window "ext:w3m" (&optional url)) +(declare-function w3-fetch "ext:w3m" (&optional url target)) + ;;;###autoload (defun browse-url-w3 (url &optional new-window) "Ask the w3 WWW browser to load URL. diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el new file mode 100644 index 00000000000..9221c52a082 --- /dev/null +++ b/lisp/net/dbus.el @@ -0,0 +1,291 @@ +;;; -*- no-byte-compile: t; -*- +;;; dbus.el --- Elisp bindings for D-Bus. + +;; Copyright (C) 2007 Free Software Foundation, Inc. + +;; Author: Michael Albinus +;; Keywords: comm, hardware + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, see +;; . + +;;; Commentary: + +;; This package provides language bindings for the D-Bus API. D-Bus +;; is a message bus system, a simple way for applications to talk to +;; one another. See for details. + +;; Low-level language bindings are implemented in src/dbusbind.c. + +;;; Code: + +(require 'xml) + +(defconst dbus-service-dbus "org.freedesktop.DBus" + "The bus name used to talk to the bus itself.") + +(defconst dbus-path-dbus "/org/freedesktop/DBus" + "The object path used to talk to the bus itself.") + +(defconst dbus-interface-dbus "org.freedesktop.DBus" + "The interface exported by the object with `dbus-service-dbus' and `dbus-path-dbus'.") + +(defconst dbus-interface-introspectable "org.freedesktop.DBus.Introspectable" + "The interface supported by introspectable objects.") + + +;;; Hash table of registered functions. + +(defun dbus-hash-table= (x y) + "Compares keys X and Y in the hash table of registered functions for D-Bus. +See `dbus-registered-functions-table' for a description of the hash table." + (and + (listp x) (listp y) + ;; Bus symbol, either :system or :session. + (symbolp (car x)) (symbolp (car y)) (equal (car x) (car y)) + ;; Interface. + (or + (null (cadr x)) (null (cadr y)) ; wildcard + (and + (stringp (cadr x)) (stringp (cadr y)) (string-equal (cadr x) (cadr y)))) + ;; Member. + (or + (null (caddr x)) (null (caddr y)) ; wildcard + (and + (stringp (caddr x)) (stringp (caddr y)) + (string-equal (caddr x) (caddr y)))))) + +(define-hash-table-test 'dbus-hash-table-test 'dbus-hash-table= 'sxhash) + +;; When we assume that interface and and member are always strings in +;; the key, we could use `equal' as test function. But we want to +;; have also `nil' there, being a wildcard. +(setq dbus-registered-functions-table + (make-hash-table :test 'dbus-hash-table-test)) + + +;;; D-Bus events. + +(defun dbus-check-event (event) + "Checks whether EVENT is a well formed D-Bus event. +EVENT is a list which starts with symbol `dbus-event': + + (dbus-event HANDLER BUS SERVICE PATH INTERFACE MEMBER &rest ARGS) + +HANDLER is the function which has been registered for this +signal. BUS identifies the D-Bus the signal is coming from. It +is either the symbol `:system' or the symbol `:session'. SERVICE +and PATH are the name and the object path of the D-Bus object +emitting the signal. INTERFACE and MEMBER denote the signal +which has been sent. ARGS are the arguments passed to HANDLER, +when it is called during event handling in `dbus-handle-event'. + +This function raises a `dbus-error' signal in case the event is +not well formed." + (when dbus-debug (message "DBus-Event %s" event)) + (unless (and (listp event) + (eq (car event) 'dbus-event) + ;; Handler. + (functionp (nth 1 event)) + ;; Bus symbol. + (symbolp (nth 2 event)) + ;; Service. + (stringp (nth 3 event)) + ;; Object path. + (stringp (nth 4 event)) + ;; Interface. + (stringp (nth 5 event)) + ;; Member. + (stringp (nth 6 event))) + (signal 'dbus-error (list "Not a valid D-Bus event" event)))) + +;;;###autoload +(defun dbus-handle-event (event) + "Handle events from the D-Bus. +EVENT is a D-Bus event, see `dbus-check-event'. HANDLER, being +part of the event, is called with arguments ARGS." + (interactive "e") + ;; We don't want to raise an error, because this function is called + ;; in the event handling loop. + (condition-case nil + (progn + (dbus-check-event event) + (apply (cadr event) (nthcdr 7 event))) + (dbus-error))) + +(defun dbus-event-bus-name (event) + "Return the bus name the event is coming from. +The result is either the symbol `:system' or the symbol `:session'. +EVENT is a D-Bus event, see `dbus-check-event'. This function +raises a `dbus-error' signal in case the event is not well +formed." + (dbus-check-event event) + (nth 2 event)) + +(defun dbus-event-service-name (event) + "Return the name of the D-Bus object the event is coming from. +The result is a string. EVENT is a D-Bus event, see `dbus-check-event'. +This function raises a `dbus-error' signal in case the event is +not well formed." + (dbus-check-event event) + (nth 3 event)) + +(defun dbus-event-path-name (event) + "Return the object path of the D-Bus object the event is coming from. +The result is a string. EVENT is a D-Bus event, see `dbus-check-event'. +This function raises a `dbus-error' signal in case the event is +not well formed." + (dbus-check-event event) + (nth 4 event)) + +(defun dbus-event-interface-name (event) + "Return the interface name of the D-Bus object the event is coming from. +The result is a string. EVENT is a D-Bus event, see `dbus-check-event'. +This function raises a `dbus-error' signal in case the event is +not well formed." + (dbus-check-event event) + (nth 5 event)) + +(defun dbus-event-member-name (event) + "Return the member name the event is coming from. +It is either a signal name or a method name. The result is is a +string. EVENT is a D-Bus event, see `dbus-check-event'. This +function raises a `dbus-error' signal in case the event is not +well formed." + (dbus-check-event event) + (nth 6 event)) + + +;;; D-Bus registered names. + +(defun dbus-list-activatable-names () + "Return the D-Bus service names which can be activated as list. +The result is a list of strings, which is nil when there are no +activatable service names at all." + (condition-case nil + (dbus-call-method + :system "ListActivatableNames" dbus-service-dbus + dbus-path-dbus dbus-interface-dbus) + (dbus-error))) + +(defun dbus-list-names (bus) + "Return the service names registered at D-Bus BUS. +The result is a list of strings, which is nil when there are no +registered service names at all. Well known names are strings like +\"org.freedesktop.DBus\". Names starting with \":\" are unique names +for services." + (condition-case nil + (dbus-call-method + bus "ListNames" dbus-service-dbus dbus-path-dbus dbus-interface-dbus) + (dbus-error))) + +(defun dbus-list-known-names (bus) + "Retrieve all services which correspond to a known name in BUS. +A service has a known name if it doesn't start with \":\"." + (let (result) + (dolist (name (dbus-list-names bus) result) + (unless (string-equal ":" (substring name 0 1)) + (add-to-list 'result name 'append))))) + +(defun dbus-list-queued-owners (bus service) +"Return the unique names registered at D-Bus BUS and queued for SERVICE. +The result is a list of strings, or nil when there are no queued name +owners service names at all." + (condition-case nil + (dbus-call-method + bus "ListQueuedOwners" dbus-service-dbus + dbus-path-dbus dbus-interface-dbus service) + (dbus-error))) + +(defun dbus-get-name-owner (bus service) + "Return the name owner of SERVICE registered at D-Bus BUS. +The result is either a string, or nil if there is no name owner." + (condition-case nil + (dbus-call-method + bus "GetNameOwner" dbus-service-dbus + dbus-path-dbus dbus-interface-dbus service) + (dbus-error))) + +(defun dbus-introspect (bus service path) + "Return the introspection data of SERVICE in D-Bus BUS at object path PATH. +The data are in XML format. + +Example: + +\(dbus-introspect + :system \"org.freedesktop.Hal\" + \"/org/freedesktop/Hal/devices/computer\"))" + (condition-case nil + (dbus-call-method + bus "Introspect" service path dbus-interface-introspectable) + (dbus-error))) + +(if nil ;; Must be reworked. Shall we offer D-Bus signatures at all? +(defun dbus-get-signatures (bus interface signal) + "Retrieve SIGNAL's type signatures from D-Bus. +The result is a list of SIGNAL's type signatures. Example: + + \(\"s\" \"b\" \"ai\"\) + +This list represents 3 parameters of SIGNAL. The first parameter +is of type string, the second parameter is of type boolean, and +the third parameter is of type array of integer. + +If INTERFACE or SIGNAL do not exist, or if they do not support +the D-Bus method org.freedesktop.DBus.Introspectable.Introspect, +the function returns nil." + (condition-case nil + (let ((introspect-xml + (with-temp-buffer + (insert (dbus-introspect bus interface)) + (xml-parse-region (point-min) (point-max)))) + node interfaces signals args result) + ;; Get the root node. + (setq node (xml-node-name introspect-xml)) + ;; Get all interfaces. + (setq interfaces (xml-get-children node 'interface)) + (while interfaces + (when (string-equal (xml-get-attribute (car interfaces) 'name) + interface) + ;; That's the requested interface. Check for signals. + (setq signals (xml-get-children (car interfaces) 'signal)) + (while signals + (when (string-equal (xml-get-attribute (car signals) 'name) + signal) + ;; The signal we are looking for. + (setq args (xml-get-children (car signals) 'arg)) + (while args + (unless (xml-get-attribute (car args) 'type) + ;; This shouldn't happen, let's escape. + (signal 'dbus-error "")) + ;; We append the signature. + (setq + result (append result + (list (xml-get-attribute (car args) 'type)))) + (setq args (cdr args))) + (setq signals nil)) + (setq signals (cdr signals))) + (setq interfaces nil)) + (setq interfaces (cdr interfaces))) + result) + ;; We ignore `dbus-error'. There might be no introspectable interface. + (dbus-error nil))) +) ;; (if nil ... + +(provide 'dbus) + +;; arch-tag: a47caf84-9162-4811-90cc-5d388e37b9bd +;;; dbus.el ends here diff --git a/lisp/gnus/dig.el b/lisp/net/dig.el similarity index 97% rename from lisp/gnus/dig.el rename to lisp/net/dig.el index 9d62fdc9919..cee3a5c17cc 100644 --- a/lisp/gnus/dig.el +++ b/lisp/net/dig.el @@ -151,7 +151,10 @@ Buffer should contain output generated by `dig-invoke'." '(dig-font-lock-keywords t))) (when (featurep 'font-lock) (font-lock-set-defaults)) - (gnus-run-mode-hooks 'dig-mode-hook)) + (save-current-buffer + (if (fboundp 'run-mode-hooks) + (run-mode-hooks 'dig-mode-hook) + (run-hooks 'dig-mode-hook)))) (defun dig-exit () "Quit dig output buffer." diff --git a/lisp/gnus/dns.el b/lisp/net/dns.el similarity index 54% rename from lisp/gnus/dns.el rename to lisp/net/dns.el index 7910261125a..9f8776ed709 100644 --- a/lisp/gnus/dns.el +++ b/lisp/net/dns.el @@ -1,6 +1,7 @@ ;;; dns.el --- Domain Name Service lookups -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: network @@ -26,10 +27,6 @@ ;;; Code: -(eval-when-compile (require 'cl)) - -(require 'mm-util) - (defvar dns-timeout 5 "How many seconds to wait when doing DNS queries.") @@ -105,10 +102,11 @@ If nil, /etc/resolv.conf will be consulted.") (dns-write-bytes 0)) (defun dns-read-string-name (string buffer) - (mm-with-unibyte-buffer - (insert string) - (goto-char (point-min)) - (dns-read-name buffer))) + (let (default-enable-multibyte-characters) + (with-temp-buffer + (insert string) + (goto-char (point-min)) + (dns-read-name buffer)))) (defun dns-read-name (&optional buffer) (let ((ended nil) @@ -188,71 +186,72 @@ If TCP-P, the first two bytes of the package with be the length field." (buffer-string))) (defun dns-read (packet) - (mm-with-unibyte-buffer - (let ((spec nil) - queries answers authorities additionals) - (insert packet) - (goto-char (point-min)) - (push (list 'id (dns-read-bytes 2)) spec) - (let ((byte (dns-read-bytes 1))) - (push (list 'response-p (if (zerop (logand byte (lsh 1 7))) nil t)) - spec) - (let ((opcode (logand byte (lsh 7 3)))) - (push (list 'opcode - (cond ((eq opcode 0) 'query) - ((eq opcode 1) 'inverse-query) - ((eq opcode 2) 'status))) - spec)) - (push (list 'authoritative-p (if (zerop (logand byte (lsh 1 2))) - nil t)) spec) - (push (list 'truncated-p (if (zerop (logand byte (lsh 1 2))) nil t)) - spec) - (push (list 'recursion-desired-p - (if (zerop (logand byte (lsh 1 0))) nil t)) spec)) - (let ((rc (logand (dns-read-bytes 1) 15))) - (push (list 'response-code - (cond - ((eq rc 0) 'no-error) - ((eq rc 1) 'format-error) - ((eq rc 2) 'server-failure) - ((eq rc 3) 'name-error) - ((eq rc 4) 'not-implemented) - ((eq rc 5) 'refused))) - spec)) - (setq queries (dns-read-bytes 2)) - (setq answers (dns-read-bytes 2)) - (setq authorities (dns-read-bytes 2)) - (setq additionals (dns-read-bytes 2)) - (let ((qs nil)) - (dotimes (i queries) - (push (list (dns-read-name) - (list 'type (dns-inverse-get (dns-read-bytes 2) - dns-query-types)) - (list 'class (dns-inverse-get (dns-read-bytes 2) - dns-classes))) - qs)) - (push (list 'queries qs) spec)) - (dolist (slot '(answers authorities additionals)) - (let ((qs nil) - type) - (dotimes (i (symbol-value slot)) - (push (list (dns-read-name) - (list 'type - (setq type (dns-inverse-get (dns-read-bytes 2) - dns-query-types))) - (list 'class (dns-inverse-get (dns-read-bytes 2) - dns-classes)) - (list 'ttl (dns-read-bytes 4)) - (let ((length (dns-read-bytes 2))) - (list 'data - (dns-read-type - (buffer-substring - (point) - (progn (forward-char length) (point))) - type)))) - qs)) - (push (list slot qs) spec))) - (nreverse spec)))) + (let (default-enable-multibyte-characters) + (with-temp-buffer + (let ((spec nil) + queries answers authorities additionals) + (insert packet) + (goto-char (point-min)) + (push (list 'id (dns-read-bytes 2)) spec) + (let ((byte (dns-read-bytes 1))) + (push (list 'response-p (if (zerop (logand byte (lsh 1 7))) nil t)) + spec) + (let ((opcode (logand byte (lsh 7 3)))) + (push (list 'opcode + (cond ((eq opcode 0) 'query) + ((eq opcode 1) 'inverse-query) + ((eq opcode 2) 'status))) + spec)) + (push (list 'authoritative-p (if (zerop (logand byte (lsh 1 2))) + nil t)) spec) + (push (list 'truncated-p (if (zerop (logand byte (lsh 1 2))) nil t)) + spec) + (push (list 'recursion-desired-p + (if (zerop (logand byte (lsh 1 0))) nil t)) spec)) + (let ((rc (logand (dns-read-bytes 1) 15))) + (push (list 'response-code + (cond + ((eq rc 0) 'no-error) + ((eq rc 1) 'format-error) + ((eq rc 2) 'server-failure) + ((eq rc 3) 'name-error) + ((eq rc 4) 'not-implemented) + ((eq rc 5) 'refused))) + spec)) + (setq queries (dns-read-bytes 2)) + (setq answers (dns-read-bytes 2)) + (setq authorities (dns-read-bytes 2)) + (setq additionals (dns-read-bytes 2)) + (let ((qs nil)) + (dotimes (i queries) + (push (list (dns-read-name) + (list 'type (dns-inverse-get (dns-read-bytes 2) + dns-query-types)) + (list 'class (dns-inverse-get (dns-read-bytes 2) + dns-classes))) + qs)) + (push (list 'queries qs) spec)) + (dolist (slot '(answers authorities additionals)) + (let ((qs nil) + type) + (dotimes (i (symbol-value slot)) + (push (list (dns-read-name) + (list 'type + (setq type (dns-inverse-get (dns-read-bytes 2) + dns-query-types))) + (list 'class (dns-inverse-get (dns-read-bytes 2) + dns-classes)) + (list 'ttl (dns-read-bytes 4)) + (let ((length (dns-read-bytes 2))) + (list 'data + (dns-read-type + (buffer-substring + (point) + (progn (forward-char length) (point))) + type)))) + qs)) + (push (list slot qs) spec))) + (nreverse spec))))) (defun dns-read-int32 () ;; Full 32 bit Integers can't be handled by Emacs. If we use @@ -264,38 +263,40 @@ If TCP-P, the first two bytes of the package with be the length field." (let ((buffer (current-buffer)) (point (point))) (prog1 - (mm-with-unibyte-buffer - (insert string) - (goto-char (point-min)) - (cond - ((eq type 'A) - (let ((bytes nil)) - (dotimes (i 4) - (push (dns-read-bytes 1) bytes)) - (mapconcat 'number-to-string (nreverse bytes) "."))) - ((eq type 'AAAA) - (let (hextets) - (dotimes (i 8) - (push (dns-read-bytes 2) hextets)) - (mapconcat (lambda (n) (format "%x" n)) (nreverse hextets) ":"))) - ((eq type 'SOA) - (list (list 'mname (dns-read-name buffer)) - (list 'rname (dns-read-name buffer)) - (list 'serial (dns-read-int32)) - (list 'refresh (dns-read-int32)) - (list 'retry (dns-read-int32)) - (list 'expire (dns-read-int32)) - (list 'minimum (dns-read-int32)))) - ((eq type 'SRV) - (list (list 'priority (dns-read-bytes 2)) - (list 'weight (dns-read-bytes 2)) - (list 'port (dns-read-bytes 2)) - (list 'target (dns-read-name buffer)))) - ((eq type 'MX) - (cons (dns-read-bytes 2) (dns-read-name buffer))) - ((or (eq type 'CNAME) (eq type 'NS) (eq type 'PTR)) - (dns-read-string-name string buffer)) - (t string))) + (let (default-enable-multibyte-characters) + (with-temp-buffer + (insert string) + (goto-char (point-min)) + (cond + ((eq type 'A) + (let ((bytes nil)) + (dotimes (i 4) + (push (dns-read-bytes 1) bytes)) + (mapconcat 'number-to-string (nreverse bytes) "."))) + ((eq type 'AAAA) + (let (hextets) + (dotimes (i 8) + (push (dns-read-bytes 2) hextets)) + (mapconcat (lambda (n) (format "%x" n)) + (nreverse hextets) ":"))) + ((eq type 'SOA) + (list (list 'mname (dns-read-name buffer)) + (list 'rname (dns-read-name buffer)) + (list 'serial (dns-read-int32)) + (list 'refresh (dns-read-int32)) + (list 'retry (dns-read-int32)) + (list 'expire (dns-read-int32)) + (list 'minimum (dns-read-int32)))) + ((eq type 'SRV) + (list (list 'priority (dns-read-bytes 2)) + (list 'weight (dns-read-bytes 2)) + (list 'port (dns-read-bytes 2)) + (list 'target (dns-read-name buffer)))) + ((eq type 'MX) + (cons (dns-read-bytes 2) (dns-read-name buffer))) + ((or (eq type 'CNAME) (eq type 'NS) (eq type 'PTR)) + (dns-read-string-name string buffer)) + (t string)))) (goto-char point)))) (defun dns-parse-resolv-conf () @@ -377,48 +378,51 @@ If REVERSEP, look up an IP address." (if (not dns-servers) (message "No DNS server configuration found") - (mm-with-unibyte-buffer - (let ((process (condition-case () - (dns-make-network-process (car dns-servers)) - (error - (message "dns: Got an error while trying to talk to %s" - (car dns-servers)) - nil))) - (tcp-p (and (not (fboundp 'make-network-process)) - (not (featurep 'xemacs)))) - (step 100) - (times (* dns-timeout 1000)) - (id (random 65000))) - (when process - (process-send-string - process - (dns-write `((id ,id) - (opcode query) - (queries ((,name (type ,type)))) - (recursion-desired-p t)) - tcp-p)) - (while (and (zerop (buffer-size)) - (> times 0)) - (sit-for (/ step 1000.0)) - (accept-process-output process 0 step) - (decf times step)) - (ignore-errors - (delete-process process)) - (when (and tcp-p - (>= (buffer-size) 2)) - (goto-char (point-min)) - (delete-region (point) (+ (point) 2))) - (when (and (>= (buffer-size) 2) - ;; We had a time-out. - (> times 0)) - (let ((result (dns-read (buffer-string)))) - (if fullp - result - (let ((answer (car (dns-get 'answers result)))) - (when (eq type (dns-get 'type answer)) - (if (eq type 'TXT) - (dns-get-txt-answer (dns-get 'answers result)) - (dns-get 'data answer)))))))))))) + (let (default-enable-multibyte-characters) + (with-temp-buffer + (let ((process (condition-case () + (dns-make-network-process (car dns-servers)) + (error + (message + "dns: Got an error while trying to talk to %s" + (car dns-servers)) + nil))) + (tcp-p (and (not (fboundp 'make-network-process)) + (not (featurep 'xemacs)))) + (step 100) + (times (* dns-timeout 1000)) + (id (random 65000))) + (when process + (process-send-string + process + (dns-write `((id ,id) + (opcode query) + (queries ((,name (type ,type)))) + (recursion-desired-p t)) + tcp-p)) + (while (and (zerop (buffer-size)) + (> times 0)) + (sit-for (/ step 1000.0)) + (accept-process-output process 0 step) + (setq times (- times step))) + (condition-case nil + (delete-process process) + (error nil)) + (when (and tcp-p + (>= (buffer-size) 2)) + (goto-char (point-min)) + (delete-region (point) (+ (point) 2))) + (when (and (>= (buffer-size) 2) + ;; We had a time-out. + (> times 0)) + (let ((result (dns-read (buffer-string)))) + (if fullp + result + (let ((answer (car (dns-get 'answers result)))) + (when (eq type (dns-get 'type answer)) + (if (eq type 'TXT) + (dns-get-txt-answer (dns-get 'answers result)) + (dns-get 'data answer))))))))))))) (provide 'dns) diff --git a/lisp/net/eudc-export.el b/lisp/net/eudc-export.el index 58168778e3e..60a57711d2a 100644 --- a/lisp/net/eudc-export.el +++ b/lisp/net/eudc-export.el @@ -158,6 +158,11 @@ LOCATION is used as the address location for bbdb." (or state "") zip))) +;; External. +(declare-function bbdb-parse-phone-number "ext:bbdb-com" + (string &optional number-type)) +(declare-function bbdb-string-trim "ext:bbdb" (string)) + (defun eudc-bbdbify-phone (phone location) "Parse PHONE into a vector compatible with BBDB. PHONE is either a string supposedly containing a phone number or diff --git a/lisp/net/eudcb-bbdb.el b/lisp/net/eudcb-bbdb.el index 7e37d9d4123..ef1379eee52 100644 --- a/lisp/net/eudcb-bbdb.el +++ b/lisp/net/eudcb-bbdb.el @@ -103,6 +103,19 @@ eudc-bbdb-current-query) record))) +;; External. +(declare-function bbdb-phone-location "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-phone-string "ext:bbdb" (phone)) +(declare-function bbdb-record-phones "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-address-streets "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-address-city "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-address-state "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-address-zip "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-address-location "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-record-addresses "ext:bbdb" t) ; via bbdb-defstruct +(declare-function bbdb-records "ext:bbdb" + (&optional dont-check-disk already-in-db-buffer)) + (defun eudc-bbdb-extract-phones (record) (mapcar (function (lambda (phone) @@ -116,25 +129,24 @@ (defun eudc-bbdb-extract-addresses (record) (let (s c val) - (mapcar (function - (lambda (address) - (setq val (concat (unless (= 0 (length (setq s (bbdb-address-street1 address)))) - (concat s "\n")) - (unless (= 0 (length (setq s (bbdb-address-street2 address)))) - (concat s "\n")) - (unless (= 0 (length (setq s (bbdb-address-street3 address)))) - (concat s "\n")) - (progn - (setq c (bbdb-address-city address)) - (setq s (bbdb-address-state address)) - (if (and (> (length c) 0) (> (length s) 0)) - (concat c ", " s " ") - (concat c " "))) - (bbdb-address-zip-string address))) - (if eudc-bbdb-use-locations-as-attribute-names - (cons (intern (bbdb-address-location address)) val) - (cons 'addresses (concat (bbdb-address-location address) "\n" val))))) - (bbdb-record-addresses record)))) + (mapcar (lambda (address) + (setq c (bbdb-address-streets address)) + (dotimes (n 3) + (unless (zerop (length (setq s (nth n c)))) + (setq val (concat val s "\n")))) + (setq c (bbdb-address-city address) + s (bbdb-address-state address)) + (setq val (concat val + (if (and (> (length c) 0) (> (length s) 0)) + (concat c ", " s) + c) + " " + (bbdb-address-zip address))) + (if eudc-bbdb-use-locations-as-attribute-names + (cons (intern (bbdb-address-location address)) val) + (cons 'addresses (concat (bbdb-address-location address) + "\n" val)))) + (bbdb-record-addresses record)))) (defun eudc-bbdb-format-record-as-result (record) "Format the BBDB RECORD as a EUDC query result record. diff --git a/lisp/gnus/hmac-def.el b/lisp/net/hmac-def.el similarity index 81% rename from lisp/gnus/hmac-def.el rename to lisp/net/hmac-def.el index 58491ec4f4a..bfff7282adf 100644 --- a/lisp/gnus/hmac-def.el +++ b/lisp/net/hmac-def.el @@ -1,25 +1,25 @@ ;;; hmac-def.el --- A macro for defining HMAC functions. -;; Copyright (C) 1999, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2001, 2007 Free Software Foundation, Inc. ;; Author: Shuhei KOBAYASHI ;; Keywords: HMAC, RFC 2104 -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; 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 3, or -;; (at your option) any later version. +;; GNU Emacs 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 3, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, +;; GNU Emacs 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; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: diff --git a/lisp/gnus/hmac-md5.el b/lisp/net/hmac-md5.el similarity index 80% rename from lisp/gnus/hmac-md5.el rename to lisp/net/hmac-md5.el index 21fc91992ad..186708446f0 100644 --- a/lisp/gnus/hmac-md5.el +++ b/lisp/net/hmac-md5.el @@ -1,25 +1,25 @@ ;;; hmac-md5.el --- Compute HMAC-MD5. -;; Copyright (C) 1999, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2001, 2007 Free Software Foundation, Inc. ;; Author: Shuhei KOBAYASHI ;; Keywords: HMAC, RFC 2104, HMAC-MD5, MD5, KEYED-MD5, CRAM-MD5 -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; 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 3, or -;; (at your option) any later version. +;; GNU Emacs 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 3, or (at your option) +;; any later version. -;; This program is distributed in the hope that it will be useful, +;; GNU Emacs 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; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: diff --git a/lisp/gnus/imap.el b/lisp/net/imap.el similarity index 99% rename from lisp/gnus/imap.el rename to lisp/net/imap.el index 7643ef4a53d..8e41c68720b 100644 --- a/lisp/gnus/imap.el +++ b/lisp/net/imap.el @@ -966,6 +966,13 @@ Returns t if login was successful, nil otherwise." (imap-capability nil buffer)) mecs)) +(declare-function sasl-find-mechanism "sasl" (mechanism)) +(declare-function sasl-mechanism-name "sasl" (mechanism)) +(declare-function sasl-make-client "sasl" (mechanism name service server)) +(declare-function sasl-next-step "sasl" (client step)) +(declare-function sasl-step-data "sasl" (step)) +(declare-function sasl-step-set-data "sasl" (step data)) + (defun imap-sasl-auth-p (buffer) (and (condition-case () (require 'sasl) @@ -1526,10 +1533,11 @@ or 'unseen. The IMAP command tag is returned." (imap-send-command (list "STATUS \"" (imap-utf7-encode mailbox) "\" " - (format "%s" - (if (listp items) - items - (list items))))))) + (upcase + (format "%s" + (if (listp items) + items + (list items)))))))) (defun imap-mailbox-acl-get (&optional mailbox buffer) "Get ACL on mailbox from server in BUFFER." @@ -2517,7 +2525,7 @@ Return nil if no complete line has arrived." (while (and (not (eq (char-after) ?\))) (or (forward-char) t) (looking-at "\\([A-Za-z]+\\) ")) - (let ((token (match-string 1))) + (let ((token (upcase (match-string 1)))) (goto-char (match-end 0)) (cond ((string= token "MESSAGES") (imap-mailbox-put 'messages (read (current-buffer)) mailbox)) diff --git a/lisp/net/netrc.el b/lisp/net/netrc.el index 8c4b0a08f51..da9182e7cdd 100644 --- a/lisp/net/netrc.el +++ b/lisp/net/netrc.el @@ -39,11 +39,6 @@ (if (fboundp 'point-at-eol) 'point-at-eol 'line-end-position)) -;; autoload encrypt - -(eval-and-compile - (autoload 'encrypt-find-model "encrypt") - (autoload 'encrypt-insert-file-contents "encrypt")) (defgroup netrc nil "Netrc configuration." @@ -60,13 +55,8 @@ (let ((tokens '("machine" "default" "login" "password" "account" "macdef" "force" "port")) - (encryption-model (encrypt-find-model file)) alist elem result pair) - - (if encryption-model - (encrypt-insert-file-contents file encryption-model) - (insert-file-contents file)) - + (insert-file-contents file) (goto-char (point-min)) ;; Go through the file, line by line. (while (not (eobp)) @@ -190,8 +180,7 @@ MODE can be \"login\" or \"password\", suitable for passing to (setq type (or type 'tcp)) (while (and (setq service (pop services)) (not (and (= number (cadr service)) - (eq type (caddr service))))) - ) + (eq type (car (cddr service))))))) (car service))) (defun netrc-find-service-number (name &optional type) @@ -200,8 +189,7 @@ MODE can be \"login\" or \"password\", suitable for passing to (setq type (or type 'tcp)) (while (and (setq service (pop services)) (not (and (string= name (car service)) - (eq type (caddr service))))) - ) + (eq type (car (cddr service))))))) (cadr service))) (provide 'netrc) diff --git a/lisp/net/newsticker.el b/lisp/net/newsticker.el index 735d946346d..32d2c43f211 100644 --- a/lisp/net/newsticker.el +++ b/lisp/net/newsticker.el @@ -2600,6 +2600,9 @@ If URL is nil it is searched at point." (add-to-list 'newsticker-url-list (list name url nil nil nil) t) (customize-variable 'newsticker-url-list)) +;; External. +(declare-function w3m-toggle-inline-image "ext:w3m" (&optional force no-cache)) + (defun newsticker-w3m-show-inline-images () "Show inline images in visible text ranges. In-line images in invisible text ranges are hidden. This function @@ -4843,6 +4846,11 @@ The face is chosen according the values of NT-FACE and AGE." ;; ====================================================================== ;;; HTML rendering ;; ====================================================================== + +;; External. +(declare-function htmlr-reset "ext:htmlr" ()) +(declare-function htmlr-step "ext:htmlr" ()) + (defun newsticker-htmlr-render (pos1 pos2) ; "Replacement for `htmlr-render'. Renders the HTML code in the region POS1 to POS2 using htmlr." diff --git a/lisp/gnus/ntlm.el b/lisp/net/ntlm.el similarity index 98% rename from lisp/gnus/ntlm.el rename to lisp/net/ntlm.el index edea2c3048a..126f6688f0d 100644 --- a/lisp/gnus/ntlm.el +++ b/lisp/net/ntlm.el @@ -1,23 +1,26 @@ ;;; ntlm.el --- NTLM (NT LanManager) authentication support -;; Copyright (C) 2001 Taro Kawagishi +;; Copyright (C) 2001, 2007 Free Software Foundation, Inc. + ;; Author: Taro Kawagishi ;; Keywords: NTLM, SASL ;; Version: 1.00 ;; Created: February 2001 -;; This program is free software; you can redistribute it and/or modify +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) ;; any later version. -;; -;; This program is distributed in the hope that it will be useful, + +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. diff --git a/lisp/gnus/sasl-cram.el b/lisp/net/sasl-cram.el similarity index 63% rename from lisp/gnus/sasl-cram.el rename to lisp/net/sasl-cram.el index b8b1ced82ac..32f1e69f81f 100644 --- a/lisp/gnus/sasl-cram.el +++ b/lisp/net/sasl-cram.el @@ -1,25 +1,25 @@ ;;; sasl-cram.el --- CRAM-MD5 module for the SASL client framework -;; Copyright (C) 2000 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Kenichi OKADA ;; Keywords: SASL, CRAM-MD5 -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; 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 3, or (at -;; your option) any later version. +;; GNU Emacs 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 3, 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. +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. diff --git a/lisp/gnus/sasl-digest.el b/lisp/net/sasl-digest.el similarity index 87% rename from lisp/gnus/sasl-digest.el rename to lisp/net/sasl-digest.el index c290c7524c8..6c544518e7f 100644 --- a/lisp/gnus/sasl-digest.el +++ b/lisp/net/sasl-digest.el @@ -1,28 +1,30 @@ ;;; sasl-digest.el --- DIGEST-MD5 module for the SASL client framework -;; Copyright (C) 2000 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Kenichi OKADA ;; Keywords: SASL, DIGEST-MD5 -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; 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 3, or (at -;; your option) any later version. +;; GNU Emacs 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 3, 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. +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; 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 program is implemented from draft-leach-digest-sasl-05.txt. ;; ;; It is caller's responsibility to base64-decode challenges and diff --git a/lisp/gnus/sasl-ntlm.el b/lisp/net/sasl-ntlm.el similarity index 87% rename from lisp/gnus/sasl-ntlm.el rename to lisp/net/sasl-ntlm.el index 784b373c056..cd8304db70a 100644 --- a/lisp/gnus/sasl-ntlm.el +++ b/lisp/net/sasl-ntlm.el @@ -1,24 +1,26 @@ ;;; sasl-ntlm.el --- NTLM (NT Lan Manager) module for the SASL client framework -;; Copyright (C) 2000 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2007 Free Software Foundation, Inc. ;; Author: Taro Kawagishi ;; Keywords: SASL, NTLM ;; Version: 1.00 ;; Created: February 2001 -;; This program is free software; you can redistribute it and/or modify +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) ;; any later version. -;; -;; This program is distributed in the hope that it will be useful, + +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. diff --git a/lisp/gnus/sasl.el b/lisp/net/sasl.el similarity index 92% rename from lisp/gnus/sasl.el rename to lisp/net/sasl.el index d730dddcb20..9118d288da4 100644 --- a/lisp/gnus/sasl.el +++ b/lisp/net/sasl.el @@ -1,24 +1,24 @@ ;;; sasl.el --- SASL client framework -;; Copyright (C) 2000 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2007 Free Software Foundation, Inc. ;; Author: Daiki Ueno ;; Keywords: SASL -;; This file is part of FLIM (Faithful Library about Internet Message). +;; This file is part of GNU Emacs. -;; 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 3, or (at -;; your option) any later version. +;; GNU Emacs 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 3, 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. +;; GNU Emacs 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; see the file COPYING. If not, write to the +;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. diff --git a/lisp/net/socks.el b/lisp/net/socks.el index fd8e7ec59f2..b06c9db0396 100644 --- a/lisp/net/socks.el +++ b/lisp/net/socks.el @@ -335,6 +335,19 @@ If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"." ) ) +(declare-function socks-original-open-network-stream "socks") ; fset + +(defvar socks-override-functions nil + "*Whether to overwrite the open-network-stream function with the SOCKSified +version.") + +(if (fboundp 'socks-original-open-network-stream) + nil ; Do nothing, we've been here already + (defalias 'socks-original-open-network-stream + (symbol-function 'open-network-stream)) + (if socks-override-functions + (defalias 'open-network-stream 'socks-open-network-stream))) + (defun socks-open-connection (server-info) (interactive) (save-excursion @@ -473,17 +486,6 @@ If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"." (setq noproxy (cdr noproxy))) route)) -(defvar socks-override-functions nil - "*Whether to overwrite the open-network-stream function with the SOCKSified -version.") - -(if (fboundp 'socks-original-open-network-stream) - nil ; Do nothing, we've been here already - (defalias 'socks-original-open-network-stream - (symbol-function 'open-network-stream)) - (if socks-override-functions - (defalias 'open-network-stream 'socks-open-network-stream))) - (defvar socks-services-file "/etc/services") (defvar socks-tcp-services (make-hash-table :size 13 :test 'equal)) (defvar socks-udp-services (make-hash-table :size 13 :test 'equal)) diff --git a/lisp/net/tls.el b/lisp/net/tls.el index 104cb991254..594212923c2 100644 --- a/lisp/net/tls.el +++ b/lisp/net/tls.el @@ -85,26 +85,93 @@ and `gnutls-cli' (version 2.0.1) output." Each entry in the list is tried until a connection is successful. %h is replaced with server hostname, %p with port to connect to. The program should read input on stdin and write output to -stdout. Also see `tls-success' for what the program should output -after successful negotiation." - :type '(repeat string) +stdout. + +See `tls-checktrust' on how to check trusted root certs. + +Also see `tls-success' for what the program should output after +successful negotiation." + :type + '(choice + (list :tag "Choose commands" + :value + ("gnutls-cli -p %p %h" + "gnutls-cli -p %p %h --protocols ssl3" + "openssl s_client -connect %h:%p -no_ssl2") + (set :inline t + ;; FIXME: add brief `:tag "..."' descriptions. + ;; (repeat :inline t :tag "Other" (string)) + ;; See `tls-checktrust': + (const "gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p %p %h") + (const "gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p %p %h --protocols ssl3") + (const "openssl s_client -connect %h:%p -CAfile /etc/ssl/certs/ca-certificates.crt -no_ssl2") + ;; No trust check: + (const "gnutls-cli -p %p %h") + (const "gnutls-cli -p %p %h --protocols ssl3") + (const "openssl s_client -connect %h:%p -no_ssl2")) + (repeat :inline t :tag "Other" (string))) + (const :tag "Default list of commands" + ("gnutls-cli -p %p %h" + "gnutls-cli -p %p %h --protocols ssl3" + "openssl s_client -connect %h:%p -no_ssl2")) + (list :tag "List of commands" + (repeat :tag "Command" (string)))) :version "22.1" :group 'tls) (defcustom tls-process-connection-type nil - "*Value for `process-connection-type' to use when starting TLS process." + "Value for `process-connection-type' to use when starting TLS process." :version "22.1" :type 'boolean :group 'tls) (defcustom tls-success "- Handshake was completed\\|SSL handshake has read " - "*Regular expression indicating completed TLS handshakes. + "Regular expression indicating completed TLS handshakes. The default is what GNUTLS's \"gnutls-cli\" or OpenSSL's \"openssl s_client\" outputs." :version "22.1" :type 'regexp :group 'tls) +(defcustom tls-checktrust nil + "Indicate if certificates should be checked against trusted root certs. +If this is `ask', the user can decide whether to accept an +untrusted certificate. You may have to adapt `tls-program' in +order to make this feature work properly, i.e., to ensure that +the external program knows about the root certificates you +consider trustworthy, e.g.: + +\(setq tls-program + '(\"gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p %p %h\" + \"gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p %p %h --protocols ssl3\" + \"openssl s_client -connect %h:%p -CAfile /etc/ssl/certs/ca-certificates.crt -no_ssl2\"))" + :type '(choice (const :tag "Always" t) + (const :tag "Never" nil) + (const :tag "Ask" ask)) + :version "23.0" ;; No Gnus + :group 'tls) + +(defcustom tls-untrusted + "- Peer's certificate is NOT trusted\\|Verify return code: \\([^0] \\|.[^ ]\\)" + "Regular expression indicating failure of TLS certificate verification. +The default is what GNUTLS's \"gnutls-cli\" or OpenSSL's +\"openssl s_client\" return in the event of unsuccessful +verification." + :type 'regexp + :version "23.0" ;; No Gnus + :group 'tls) + +(defcustom tls-hostmismatch + "# The hostname in the certificate does NOT match" + "Regular expression indicating a host name mismatch in certificate. +When the host name specified in the certificate doesn't match the +name of the host you are connecting to, gnutls-cli issues a +warning to this effect. There is no such feature in openssl. Set +this to nil if you want to ignore host name mismatches." + :type 'regexp + :version "23.0" ;; No Gnus + :group 'tls) + (defcustom tls-certtool-program (executable-find "certtool") "Name of GnuTLS certtool. Used by `tls-certificate-information'." @@ -141,7 +208,7 @@ Returns a subprocess-object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST PORT. NAME is name for process. It is modified if necessary to make it unique. -BUFFER is the buffer (or buffer-name) to associate with the process. +BUFFER is the buffer (or buffer name) to associate with the process. Process output goes at end of that buffer, unless you specify an output stream or filter function to handle the output. BUFFER may be also nil, meaning that this process is not associated @@ -177,25 +244,31 @@ Fourth arg PORT is an integer specifying a port to connect to." (sit-for 1))) (message "Opening TLS connection with `%s'...%s" cmd (if done "done" "failed")) - (if (not done) - (delete-process process) - ;; advance point to after all informational messages that - ;; `openssl s_client' and `gnutls' print - (let ((start-of-data nil)) - (while - (not (setq start-of-data - ;; the string matching `tls-end-of-info' - ;; might come in separate chunks from - ;; `accept-process-output', so start the - ;; search where `tls-success' ended - (save-excursion - (if (re-search-forward tls-end-of-info nil t) - (match-end 0))))) - (accept-process-output process 1)) - (if start-of-data - ;; move point to start of client data - (goto-char start-of-data))) - (setq done process)))) + (if done + (setq done process) + (delete-process process)))) + (when done + (save-excursion + (set-buffer buffer) + (when + (or + (and tls-checktrust + (progn + (goto-char (point-min)) + (re-search-forward tls-untrusted nil t)) + (or + (and (not (eq tls-checktrust 'ask)) + (message "The certificate presented by `%s' is NOT trusted." host)) + (not (yes-or-no-p + (format "The certificate presented by `%s' is NOT trusted. Accept anyway? " host))))) + (and tls-hostmismatch + (progn + (goto-char (point-min)) + (re-search-forward tls-hostmismatch nil t)) + (not (yes-or-no-p + (format "Host name in certificate doesn't match `%s'. Connect anyway? " host))))) + (setq done nil) + (delete-process process)))) (message "Opening TLS connection to `%s'...%s" host (if done "done" "failed"))) (when use-temp-buffer diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el index a8b6bca44f2..c4edd2f3fa4 100644 --- a/lisp/net/tramp-ftp.el +++ b/lisp/net/tramp-ftp.el @@ -152,6 +152,7 @@ pass to the OPERATION." (aset v 0 tramp-ftp-method) (tramp-set-connection-property v "started" t)) nil)) + ;; If the second argument of `copy-file' or `rename-file' is a ;; remote file name but via FTP, ange-ftp doesn't check this. ;; We must copy it locally first, because there is no place in @@ -163,8 +164,16 @@ pass to the OPERATION." (newname (cadr args)) (tmpfile (tramp-compat-make-temp-file filename)) (args (cddr args))) - (apply operation filename tmpfile args) - (rename-file tmpfile newname (car args)))) + ;; We must set `ok-if-already-exists' to t in the first + ;; step, because the temp file has been created already. + (if (eq operation 'copy-file) + (apply operation filename tmpfile t (cdr args)) + (apply operation filename tmpfile t)) + (unwind-protect + (rename-file tmpfile newname (car args)) + ;; Cleanup. + (ignore-errors (delete-file tmpfile))))) + ;; Normally, the handlers must be discarded. (t (let* ((inhibit-file-name-handlers (list 'tramp-file-name-handler diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 93fdea9ab27..95959b15a7c 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -83,7 +83,8 @@ ;; be mandatory (if (featurep 'xemacs) (load "password" 'noerror) - (require 'password nil 'noerror)) ;from No Gnus, also in tar ball + (or (require 'password-cache nil 'noerror) + (require 'password nil 'noerror))) ; from No Gnus, also in tar ball (require 'shell) (require 'advice) @@ -912,14 +913,6 @@ directories for POSIX compatible commands." (const :tag "Default Directories" tramp-default-remote-path) (string :tag "Directory")))) -(defcustom tramp-terminal-type "dumb" - "*Value of TERM environment variable for logging in to remote host. -Because Tramp wants to parse the output of the remote shell, it is easily -confused by ANSI color escape sequences and suchlike. Often, shell init -files conditionalize this setup based on the TERM environment variable." - :group 'tramp - :type 'string) - (defcustom tramp-remote-process-environment `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_TIME=C" ,(concat "TERM=" tramp-terminal-type) @@ -1425,6 +1418,18 @@ opening a connection to a remote host." :group 'tramp :type '(choice (const nil) (const t) (const pty))) +(defcustom tramp-completion-reread-directory-timeout 10 + "Defines seconds since last remote command before rereading a directory. +A remote directory might have changed its contents. In order to +make it visible during file name completion in the minibuffer, +Tramp flushes its cache and rereads the directory contents when +more than `tramp-completion-reread-directory-timeout' seconds +have been gone since last remote command execution. A value of 0 +would require an immediate reread during filename completion, nil +means to use always cached values for the directory contents." + :group 'tramp + :type '(choice (const nil) integer)) + ;;; Internal Variables: (defvar tramp-end-of-output @@ -2807,6 +2812,16 @@ and gid of the corresponding user is taken. Both parameters must be integers." "Like `file-name-all-completions' for Tramp files." (unless (save-match-data (string-match "/" filename)) (with-parsed-tramp-file-name (expand-file-name directory) nil + ;; Flush the directory cache. There could be changed directory + ;; contents. + (when (and (integerp tramp-completion-reread-directory-timeout) + (> (tramp-time-diff + (current-time) + (tramp-get-file-property + v localname "last-completion" '(0 0 0))) + tramp-completion-reread-directory-timeout)) + (tramp-flush-file-property v localname)) + (all-completions filename (mapcar @@ -2838,6 +2853,8 @@ and gid of the corresponding user is taken. Both parameters must be integers." (point) (tramp-compat-line-end-position)) result))) + (tramp-set-file-property + v localname "last-completion" (current-time)) result))))))) ;; The following isn't needed for Emacs 20 but for 19.34? @@ -4323,7 +4340,7 @@ ARGS are the arguments OPERATION has been called with." ; BUF ((member operation (list 'set-visited-file-modtime 'verify-visited-file-modtime - ; Emacs 22 only + ; since Emacs 22 only 'make-auto-save-file-name ; XEmacs only 'backup-buffer)) @@ -5603,30 +5620,49 @@ seconds. If not, it produces an error message with the given ERROR-ARGS." "Set up an interactive shell. Mainly sets the prompt and the echo correctly. PROC is the shell process to set up. VEC specifies the connection." - ;; It is useful to set the prompt in the following command because - ;; some people have a setting for $PS1 which /bin/sh doesn't know - ;; about and thus /bin/sh will display a strange prompt. For - ;; example, if $PS1 has "${CWD}" in the value, then ksh will display - ;; the current working directory but /bin/sh will display a dollar - ;; sign. The following command line sets $PS1 to a sane value, and - ;; works under Bourne-ish shells as well as csh-like shells. Daniel - ;; Pittman reports that the unusual positioning of the single quotes - ;; makes it work under `rc', too. We also unset the variable $ENV - ;; because that is read by some sh implementations (eg, bash when - ;; called as sh) on startup; this way, we avoid the startup file - ;; clobbering $PS1. $PROMP_COMMAND is another way to set the prompt - ;; in /bin/bash, it must be discarded as well. (let ((tramp-end-of-output "$ ")) + ;; It is useful to set the prompt in the following command because + ;; some people have a setting for $PS1 which /bin/sh doesn't know + ;; about and thus /bin/sh will display a strange prompt. For + ;; example, if $PS1 has "${CWD}" in the value, then ksh will + ;; display the current working directory but /bin/sh will display + ;; a dollar sign. The following command line sets $PS1 to a sane + ;; value, and works under Bourne-ish shells as well as csh-like + ;; shells. Daniel Pittman reports that the unusual positioning of + ;; the single quotes makes it work under `rc', too. We also unset + ;; the variable $ENV because that is read by some sh + ;; implementations (eg, bash when called as sh) on startup; this + ;; way, we avoid the startup file clobbering $PS1. $PROMP_COMMAND + ;; is another way to set the prompt in /bin/bash, it must be + ;; discarded as well. (tramp-send-command vec (format "exec env 'ENV=' 'PROMPT_COMMAND=' 'PS1=$ ' PS2='' PS3='' %s" (tramp-get-method-parameter (tramp-file-name-method vec) 'tramp-remote-sh)) - t)) + t) + + ;; Disable echo. + (tramp-message vec 5 "Setting up remote shell environment") + (tramp-send-command vec "stty -inlcr -echo kill '^U' erase '^H'" t) + ;; Check whether the echo has really been disabled. Some + ;; implementations, like busybox of embedded GNU/Linux, don't + ;; support disabling. + (tramp-send-command vec "echo foo" t) + (with-current-buffer (process-buffer proc) + (goto-char (point-min)) + (when (looking-at "echo foo") + (tramp-set-connection-property proc "remote-echo" t) + (tramp-message vec 5 "Remote echo still on. Ok.") + ;; Make sure backspaces and their echo are enabled and no line + ;; width magic interferes with them. + (tramp-send-command vec "stty icanon erase ^H cols 32767" t)))) + (tramp-message vec 5 "Setting shell prompt") - ;; Douglas Gray Stephens says that we must - ;; use "\n" here, not tramp-rsh-end-of-line. + ;; We can set $PS1 to `tramp-end-of-output' only when the echo has + ;; been disabled. Otherwise, the echo of the command would be + ;; regarded as prompt already. (tramp-send-command vec (format "PROMPT_COMMAND=''; PS1='%s%s%s'; PS2=''; PS3=''" @@ -5634,26 +5670,7 @@ process to set up. VEC specifies the connection." tramp-end-of-output tramp-rsh-end-of-line) t) - ;; If the connection buffer is not empty, the remote shell is - ;; echoing, and the prompt has been detected through the echoed - ;; command. We must reread for the real prompt. - (with-current-buffer (process-buffer proc) - (when (> (point-max) (point-min)) (tramp-wait-for-output proc))) - ;; Disable echo. - (tramp-message vec 5 "Setting up remote shell environment") - (tramp-send-command vec "stty -inlcr -echo kill '^U' erase '^H'" t) - ;; Check whether the echo has really been disabled. Some - ;; implementations, like busybox of embedded GNU/Linux, don't - ;; support disabling. - (tramp-send-command vec "echo foo" t) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - (when (looking-at "echo foo") - (tramp-set-connection-property vec "remote-echo" t) - (tramp-message vec 5 "Remote echo still on. Ok.") - ;; Make sure backspaces and their echo are enabled and no line - ;; width magic interferes with them. - (tramp-send-command vec "stty icanon erase ^H cols 32767" t))) + ;; Try to set up the coding system correctly. ;; CCC this can't be the right way to do it. Hm. (tramp-message vec 5 "Determining coding system") @@ -5685,11 +5702,30 @@ process to set up. VEC specifies the connection." ;; stty, instead. (tramp-send-command vec "stty -onlcr" t)))) (tramp-send-command vec "set +o vi +o emacs" t) - ;; Check whether the remote host suffers from buggy `send-process-string'. - ;; This is known for FreeBSD (see comment in `send_process', file process.c). - ;; I've tested sending 624 bytes successfully, sending 625 bytes failed. - ;; Emacs makes a hack when this host type is detected locally. It cannot - ;; handle remote hosts, though. + + ;; Check whether the output of "uname -sr" has been changed. If + ;; yes, this is a strong indication that we must expire all + ;; connection properties. + (tramp-message vec 5 "Checking system information") + (let ((old-uname (tramp-get-connection-property vec "uname" nil)) + (new-uname + (tramp-set-connection-property + vec "uname" + (tramp-send-command-and-read vec "echo \\\"`uname -sr`\\\"")))) + (when (and (stringp old-uname) (not (string-equal old-uname new-uname))) + (funcall (symbol-function 'tramp-cleanup-connection) vec) + (signal + 'quit + (list (format + "Connection reset, because remote host changed from `%s' to `%s'" + old-uname new-uname))))) + + ;; Check whether the remote host suffers from buggy + ;; `send-process-string'. This is known for FreeBSD (see comment in + ;; `send_process', file process.c). I've tested sending 624 bytes + ;; successfully, sending 625 bytes failed. Emacs makes a hack when + ;; this host type is detected locally. It cannot handle remote + ;; hosts, though. (with-connection-property proc "chunksize" (cond ((and (integerp tramp-chunksize) (> tramp-chunksize 0)) @@ -5698,12 +5734,12 @@ process to set up. VEC specifies the connection." (tramp-message vec 5 "Checking remote host type for `send-process-string' bug") (if (string-match - "^FreeBSD" - (with-connection-property vec "uname" - (tramp-send-command-and-read vec "echo \\\"`uname -sr`\\\""))) + "^FreeBSD" (tramp-get-connection-property vec "uname" "")) 500 0)))) + ;; Set remote PATH variable. (tramp-set-remote-path vec) + ;; Search for a good shell before searching for a command which ;; checks if a file exists. This is done because Tramp wants to use ;; "test foo; echo $?" to check if various conditions hold, and @@ -5713,8 +5749,10 @@ process to set up. VEC specifies the connection." ;; with buggy /bin/sh implementations will have a working bash or ;; ksh. Whee... (tramp-find-shell vec) + ;; Disable unexpected output. (tramp-send-command vec "mesg n; biff n" t) + ;; Set the environment. (tramp-message vec 5 "Setting default environment") (let ((env (copy-sequence tramp-remote-process-environment)) @@ -6190,7 +6228,7 @@ is meant to be used from `tramp-maybe-open-connection' only. The function waits for output unless NOOUTPUT is set." (unless neveropen (tramp-maybe-open-connection vec)) (let ((p (tramp-get-connection-process vec))) - (when (tramp-get-connection-property vec "remote-echo" nil) + (when (tramp-get-connection-property p "remote-echo" nil) ;; We mark the command string that it can be erased in the output buffer. (tramp-set-connection-property p "check-remote-echo" t) (setq command (format "%s%s%s" tramp-echo-mark command tramp-echo-mark))) @@ -6958,6 +6996,7 @@ If the `tramp-methods' entry does not exist, return NIL." (let ((bfn (buffer-file-name))) (when (and (stringp bfn) (tramp-tramp-file-p bfn) + (buffer-modified-p) (stringp buffer-auto-save-file-name) (not (equal bfn buffer-auto-save-file-name))) (unless (file-exists-p buffer-auto-save-file-name) diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 2de4fa025fd..1841b51e305 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -969,9 +969,11 @@ INDENT indicates to put CS and CCS at the current indentation of the region rather than at left margin." ;;(assert (< beg end)) (let ((no-empty (not (or (eq comment-empty-lines t) - (and comment-empty-lines (zerop (length ce))))))) + (and comment-empty-lines (zerop (length ce)))))) + ce-sanitized) ;; Sanitize CE and CCE. (if (and (stringp ce) (string= "" ce)) (setq ce nil)) + (setq ce-sanitized ce) (if (and (stringp cce) (string= "" cce)) (setq cce nil)) ;; If CE is empty, multiline cannot be used. (unless ce (setq ccs nil cce nil)) @@ -988,7 +990,7 @@ the region rather than at left margin." (goto-char end) ;; If the end is not at the end of a line and the comment-end ;; is implicit (i.e. a newline), explicitly insert a newline. - (unless (or ce (eolp)) (insert "\n") (indent-according-to-mode)) + (unless (or ce-sanitized (eolp)) (insert "\n") (indent-according-to-mode)) (comment-with-narrowing beg end (let ((min-indent (point-max)) (max-indent 0)) diff --git a/lisp/nxml/.gitignore b/lisp/nxml/.gitignore new file mode 100644 index 00000000000..f18ed02a937 --- /dev/null +++ b/lisp/nxml/.gitignore @@ -0,0 +1,2 @@ +*.elc +subdirs.el diff --git a/lisp/nxml/TODO b/lisp/nxml/TODO new file mode 100644 index 00000000000..3e7d5012b66 --- /dev/null +++ b/lisp/nxml/TODO @@ -0,0 +1,468 @@ +* High priority + +** Command to insert an element template, including all required +attributes and child elements. When there's a choice of elements +possible, we could insert a comment, and put an overlay on that +comment that makes it behave like a button with a pop-up menu to +select the appropriate choice. + +** Command to tag a region. With a schema should complete using legal +tags, but should work without a schema as well. + +** Provide a way to conveniently rename an element. With a schema should +complete using legal tags, but should work without a schema as well. + +* Outlining + +** Implement C-c C-o C-q. + +** Install pre/post command hook for moving out of invisible section. + +** Put a modify hook on invisible sections that expands them. + +** Integrate dumb folding somehow. + +** An element should be able to be its own heading. + +** Optimize to avoid complete buffer scan on each command. + +** Make it work with HTML-style headings (i.e. level indicated by +name of heading element rather than depth of section nesting). + +** Recognize root element as a section provided it has a title, even +if it doesn't match section-element-name-regex. + +** Support for incremental search automatically making hidden text +visible. + +** Allow title to be an attribute. + +** Command that says to recognize the tag at point as a section/heading. + +** Explore better ways to determine when an element is a section +or a heading. + +** rng-next-error needs to either ignore invisible portion or reveal it +(maybe use isearch oriented text properties). + +** Errors within hidden section should be highlighted by underlining the +ellipsis. + +** Make indirect buffers work. + +** How should nxml-refresh outline recover from non well-formed tags? + +** Hide tags in title elements? + +** Use overlays instead of text properties for holding outline state? +Necessary for indirect buffers to work? + +** Allow an outline to go in the speedbar. + +** Split up outlining manual section into subsections. + +** More detail in the manual about each outlining command. + +** More menu entries for hiding/showing? + +** Indication of many lines have been hidden? + +* Locating schemas + +** Should rng-validate-mode give the user an opportunity to specify a +schema if there is currently none? Or should it at least give a hint +to the user how to specify a non-vacuous schema? + +** Support for adding new schemas to schema-locating files. Add +documentElement and namespace elements. + +** C-c C-w should be able to report current type id. + +** Implement doctypePublicId. + +** Implement typeIdBase. + +** Implement typeIdProcessingInstruction. + +** Support xml:base. + +** Implement group. + +** Find preferred prefix from schema-locating files. Get rid of +rng-preferred-prefix-alist. + +** Inserting document element with vacuous schema should complete using +document elements declared in schema locating files, and set schema +appropriately. + +** Add a ruleType attribute to the element? + +** Allow processing instruction in prolog to contain the compact syntax +schema directly. + +** Use RDDL to locate a schema based on the namespace URI. + +** Should not prompt to add redundant association to schema locating +file. + +** Command to reload current schema. + +* Schema-sensitive features + +** Should filter dynamic markup possibilities using schema validity, by +adding hook to nxml-mode. + +** Dynamic markup word should (at least optionally) be able to look in +other buffers that are using nxml-mode. + +** Should clicking on Invalid move to next error if already on an error? + +** Take advantage of a:documentation. Needs change to schema format. + +** Provide feasible validation (as in Jing) toggle. + +** Save the validation state as a property on the error overlay to enable +more detailed diagnosis. + +** Provide an Error Summary buffer showing all the validation errors. + +** Pop-up menu. What is useful? Tag a region (should be greyed out if +the region is not balanced). Suggestions based on error messages. + +** Have configurable list of namespace URIs so that we can provide +namespace URI completion on extension elements or with schema-less +documents. + +** Allow validation to handle XInclude. + +** ID/IDREF support. + +* Completion + +** Make it work with icomplete. Only use a function to complete when +some of the possible names have undeclared namespaces. + +** How should C-return in mixed text work? + +** When there's a vacuous schema, C-return after < will insert the +end-tag. Is this a bug or a feature? + +** After completing start-tag, ensure we don't get unhelpful message +from validation + +** Syntax table for completion. + +** Should complete start-tag name with a space if namespace attributes +are required. + +** When completing start-tag name with no prefix and it doesn't match +should try to infer namespace from local name. + +** Should completion pay attention to characters after point? If so, +how? + +** When completing start-tag name, add required atts if only one required +attribute. + +** When completing attribute name, add attribute value if only one value +is possible. + +** After attribute-value completion, insert space after close delimiter +if more attributes are required. + +** Complete on enumerated data values in elements. + +** When in context that allows only elements, should get tag +completion without having to type < first. + +** When immediately after start-tag name, and name is valid and not +prefix of any other name, should C-return complete on attribute names? + +** When completing attributes, more consistent to ignore all attributes +after point. + +** Inserting attribute value completions needs to be sensitive to what +delimiter is used so that it quotes the correct character. + +** Complete on encoding-names in XML decl. + +** Complete namespace declarations by searching for all namespaces +mentioned in the schema. + +* Well-formed XML support + +** Deal better with Mule-UCS + +** Deal with UTF-8 BOM when reading. + +** Complete entity names. + +** Provide some support for entity names for MathML. + +** Command to repeat the last tag. + +** Support for changing between character references and characters. +Need to check that context is one in which character references are +allowed. xmltok prolog parsing will need to distinguish parameter +literals from other kinds of literal. + +** Provide a comment command to bind to M-; that works better than the +normal one. + +** Make indenting in a multi-line comment work. + +** Structure view. Separate buffer displaying element tree. Be able to +navigate from structure view to document and vice-versa. + +** Flash matching >. + +** Smart selection command that selects increasingly large syntactically +coherent chunks of XML. If point is in an attribute value, first +select complete value; then if command is repeated, select value plus +delimiters, then select attribute name as well, then complete +start-tag, then complete element, then enclosing element, etc. + +** ispell integration. + +** Block-level items in mixed content should be indented, e.g: + This is list: +
    +
  • item
  • + +** Provide option to indent like this: + +** This is a paragraph + occupying multiple lines. + +** Option to add make a / that closes a start-tag electrically insert a +space for the XHTML guys. + +** C-M-q should work. + +* Datatypes + +** Figure out workaround for CJK characters with regexps. + +** Does category C contain Cn? + +** Do ENTITY datatype properly. + +* XML Parsing Library + +** Parameter entity parsing option, nil (never), t (always), +unless-standalone (unless standalone="yes" in XML declaration). + +** When a file is currently being edited, there should be an option to +use its buffer instead of the on-disk copy. + +* Handling all XML features + +** Provide better support for editing external general parsed entities. +Perhaps provide a way to force ignoring undefined entities; maybe turn +this on automatically with (with no version +pseudo-att). + +** Handle internal general entity declarations containing elements. + +** Handle external general entity declarations. + +** Handle default attribute declarations in internal subset. + +** Handle parameter entities (including DTD). + +* RELAX NG + +** Do complete schema checking, at least optionally. + +** Detect include/external loops during schema parse. + +** Coding system detection for schemas. Should use utf-8/utf-16 per the +spec. But also need to allow encodings other than UTF-8/16 to support +CJK charsets that Emacs cannot represent in Unicode. + +* Catching XML errors + +** Check public identifiers. + +** Check default attribute values. + +* Performance + +** Explore whether overlay-recenter can cure overlays performance +problems. + +** Cache schemas. Need to have list of files and mtimes. + +** Make it possible to reduce rng-validate-chunk-size significantly, +perhaps to 500 bytes, without bad performance impact: don't do +redisplay on every chunk; pass continue functions on other uses of +rng-do-some-validation. + +** Cache after first tag. + +** Introduce a new name class that is a choice between names (so that +we can use member) + +** intern-choice should simplify after patterns with same 1st/2nd args + +** Large numbers of overlays slow things down dramatically. Represent +errors using text properties. This implies we cannot incrementally +keep track of the number of errors, in order to determine validity. +Instead, when validation completes, scan for any characters with an +error text property; this seems to be fast enough even with large +buffers. Problem with error at end of buffer, where there's no +character; need special variable for this. Need to merge face from +font-lock with the error face: use :inherit attribute with list of two +faces. How do we avoid making rng-valid depend on nxml-mode? + +* Error recovery + +** Don't stop at newline in looking for close of start-tag. + +** Use indentation to guide recovery from mismatched end-tags + +** Don't keep parsing when currently not well-formed but previously +well-formed + +** Try to recover from a bad start-tag by popping an open element if +there was a mismatched end-tag unaccounted for. + +** Try to recover from a bad start-tag open on the hypothesis that there +was an error in the namespace URI. + +** Better recovery from ill-formed XML declarations. + +* Useability improvements + +** Should print a "Parsing..." message during long movements. + +** Provide better position for reference to undefined pattern error. + +** Put Well-formed in the mode-line when validating against any-content. + +** Trim marking of illegal data for leading and trailing whitespace. + +** Show Invalid status as soon as we are sure it's invalid, rather than +waiting for everything to be completely up to date. + +** When narrowed, Valid or Invalid status should probably consider only +validity of narrowed region. + +* Bug fixes + +** Need to give an error for a document like: + +** Make nxml-forward-balanced-item work better for the prolog. + +** Make filling and indenting comments work in the prolog. + +** Should delete RNC Input buffers. + +** Figure out what regex use for NCName and use it consistently, + +** Should have not-well-formed tokens in ref. + +** Require version in XML declaration? Probably not because prevents +use for external parsed entities. At least forbid standalone +without version. + +** Reject schema that compiles to rng-not-allowed-ipattern. + +** Move point backwards on schema parse error so that it's on the right token. + +* Internal + +** Use rng-quote-string consistently. + +** Use parsing library for XML to texinfo conversion. + +** Rename xmltok.el to nxml-token.el. Use nxml-t- prefix instead of +xmltok-. Change nxml-t-type to nxml-t-token-type, nxml-t-start to +nxml-t-token-start. + +** Can we set fill-prefix to nil and rely on indenting? + +** xmltok should make available replacement text of entities containing +elements + +** In rng-valid, instead of using modification-hooks and +insert-behind-hooks on dependent overlays, use same technique as +nxml-mode. + +** Port to XEmacs. Issues include: Unicode (XEmacs seems to be based on +Mule-UCS); overlays/text properties vs extents; absence of +fontification-functions hook. + +* Fontification + +** Allow face to depend on element qname, attribute qname, attribute +value. Use list with pairs of (R . F), where R specifies regexps and +F specifies faces. How can this list be made to depend on the +document type? + +* Other + +** Support RELAX NG XML syntax (use XML parsing library). + +** Support W3C XML Schema (use XML parsing library). + +** Command to infer schema from current document (like trang). + +* Schemas + +** XSLT schema should take advantage of RELAX NG to express cooccurrence +constraints on attributes (e.g. xsl:template). + +* Documentation + +** Move material from README to manual. + +** Document encodings. + +* Notes + +** How can we allow an error to be displayed on a different token from +where it is detected? In particular, for a missing closing ">" we +will need to display it at the beginning of the following token. At +the moment, when we parse the following token the error overlay will +get cleared. + +** How should rng-goto-next-error deal with narrowing? + +** Perhaps should merge errors having same start position even if they +have different ends. + +** How to handle surrogates? One possibility is to be compatible with +utf8.e: represent as sequence of 4 chars. But utf-16 is incompatible +with this. + +** Should we distinguish well-formedness errors from invalidity errors? +(I think not: we may want to recover from a bad start-tag by implying +an end-tag.) + +** Seems to be a bug with Emacs, where a mouse movement that causes +help-echo text to appear counts as pending input but does not cause +idle timer to be restarted. + +** Use XML to represent this file. + +** I had a TODO which said simply "split-string". What did I mean? + +** Investigate performance on large files all on one line. + +* CVS emacs issues + +** Take advantage of UTF-8 CJK support. + +** Supply a next-error-function. + +** Investigate this NEWS item "Emacs now tries to set up buffer coding +systems for HTML/XML files automatically." + +** Take advantage of the pointer text property. + +** Leverage char-displayable-p. + +Local variables: +mode: outline +end: diff --git a/lisp/nxml/nxml-enc.el b/lisp/nxml/nxml-enc.el new file mode 100644 index 00000000000..115db17ad70 --- /dev/null +++ b/lisp/nxml/nxml-enc.el @@ -0,0 +1,173 @@ +;;; nxml-enc.el --- XML encoding auto-detection + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; User entry points are nxml-start-auto-coding and +;; nxml-stop-auto-coding. This is separate from nxml-mode, because +;; this cannot be autoloaded. It may use +;; `xmltok-get-declared-encoding-position' which can be autoloaded. +;; It's separate from rng-auto.el so it can be byte-compiled, and +;; because it provides independent, useful functionality. + +;;; Code: + +(defvar nxml-file-name-ignore-case + (memq system-type '(vax-vms windows-nt))) + +(defvar nxml-cached-file-name-auto-coding-regexp nil) +(defvar nxml-cached-auto-mode-alist nil) + +(defun nxml-file-name-auto-coding-regexp () + "Return regexp for filenames for which XML auto-coding should be done." + (if (eq auto-mode-alist nxml-cached-auto-mode-alist) + nxml-cached-file-name-auto-coding-regexp + (let ((alist auto-mode-alist) + (case-fold-search nxml-file-name-ignore-case) + regexps) + (setq nxml-cached-auto-mode-alist alist) + (while alist + (when (eq (cdar alist) 'nxml-mode) + (setq regexps (cons (caar alist) regexps))) + (setq alist (cdr alist))) + (setq nxml-cached-file-name-auto-coding-regexp + (if (null (cdr regexps)) + (car regexps) + (mapconcat (lambda (r) + (concat "\\(?:" r "\\)")) + regexps + "\\|")))))) + +(defvar nxml-non-xml-set-auto-coding-function nil + "The function that `set-auto-coding-function' should call for non-XML files.") +(defun nxml-set-auto-coding (file-name size) + (if (let ((case-fold-search nxml-file-name-ignore-case) + (regexp (nxml-file-name-auto-coding-regexp))) + (and regexp + (string-match regexp file-name))) + (nxml-set-xml-coding file-name size) + (and nxml-non-xml-set-auto-coding-function + (funcall nxml-non-xml-set-auto-coding-function file-name size)))) + +(defun nxml-set-xml-coding (file-name size) + "Function to use as `set-auto-coding-function' when file is known to be XML." + (nxml-detect-coding-system (+ (point) (min size 1024)))) + +(declare-function xmltok-get-declared-encoding-position "xmltok" + (&optional limit)) ; autoloaded + +(defun nxml-detect-coding-system (limit) + (if (< limit (+ (point) 2)) + (if (eq (char-after) 0) 'no-conversion 'utf-8) + (let ((first-two-chars (list (char-after) + (char-after (1+ (point)))))) + (cond ((equal first-two-chars '(#xFE #xFF)) + (and (coding-system-p 'utf-16-be) 'utf-16-be)) + ((equal first-two-chars '(#xFF #xFE)) + (and (coding-system-p 'utf-16-le) 'utf-16-le)) + ((memq 0 first-two-chars) + ;; Certainly not well-formed XML; + ;; perhaps UTF-16 without BOM. + ;; In any case, we can't handle it. + ;; no-conversion gives the user a chance to fix it. + 'no-conversion) + ;; There are other things we might try here in the future + ;; eg UTF-8 BOM, UTF-16 with no BOM + ;; translate to EBCDIC + (t + (let ((enc-pos (xmltok-get-declared-encoding-position limit))) + (cond ((consp enc-pos) + (or (nxml-mime-charset-coding-system + (buffer-substring-no-properties (car enc-pos) + (cdr enc-pos))) + ;; We have an encoding whose name we don't recognize. + ;; What to do? + ;; raw-text seems the best bet: since we got + ;; the XML decl it must be a superset of ASCII, + ;; so we don't need to go to no-conversion + 'raw-text)) + (enc-pos 'utf-8) + ;; invalid XML declaration + (t nil)))))))) + +(defun nxml-mime-charset-coding-system (charset) + (let ((charset-sym (intern (downcase charset))) + (coding-systems (coding-system-list t)) + coding-system ret) + (while (and coding-systems (not ret)) + (setq coding-system (car coding-systems)) + (if (eq (coding-system-get coding-system 'mime-charset) + charset-sym) + (setq ret coding-system) + (setq coding-systems (cdr coding-systems)))) + ret)) + +(defun nxml-start-auto-coding () + "Do encoding auto-detection as specified in the XML standard. +Applied to any files that `auto-mode-alist' says should be handled by +`nxml-mode'." + (interactive) + (unless (eq set-auto-coding-function 'nxml-set-auto-coding) + (let ((inhibit-quit t)) + (setq nxml-non-xml-set-auto-coding-function set-auto-coding-function) + (setq set-auto-coding-function 'nxml-set-auto-coding)))) + +(defun nxml-stop-auto-coding () + "Stop doing encoding auto-detection as specified in the XML standard." + (interactive) + (when (eq set-auto-coding-function 'nxml-set-auto-coding) + (let ((inhibit-quit t)) + (setq set-auto-coding-function nxml-non-xml-set-auto-coding-function) + (setq nxml-non-xml-set-auto-coding-function nil)))) + +(unless (coding-system-p 'us-ascii) + (make-coding-system + ;; Unicode Emacs uses ?- last time I looked + 'us-ascii 2 ?- + "ISO 2022 based 7-bit encoding for ASCII (MIME:US-ASCII)" + '(ascii) + '((safe-charsets ascii) + (mime-charset . us-ascii)))) + +;; Emacs 21.3.50 makes us-ascii an alias for iso-safe without +;; giving it a mime-charset property. +(unless (coding-system-get 'us-ascii 'mime-charset) + (coding-system-put 'us-ascii 'mime-charset 'us-ascii)) + +;; Work around bug in Emacs 21.3 + +(when (and (coding-system-p 'utf-16-le) + (eq (coding-system-get 'utf-16-le 'pre-write-conversion) + 'utf-16-le-pre-write-conversion)) + (coding-system-put 'utf-16-le 'pre-write-conversion nil)) + +(when (and (coding-system-p 'utf-16-le) + (eq (coding-system-get 'utf-16-be 'pre-write-conversion) + 'utf-16-be-pre-write-conversion)) + (coding-system-put 'utf-16-be 'pre-write-conversion nil)) + +(provide 'nxml-enc) + +;; arch-tag: c2436247-78f3-418c-8069-85dc5335d083 +;;; nxml-enc.el ends here diff --git a/lisp/nxml/nxml-glyph.el b/lisp/nxml/nxml-glyph.el new file mode 100644 index 00000000000..47d7086f246 --- /dev/null +++ b/lisp/nxml/nxml-glyph.el @@ -0,0 +1,421 @@ +;;; nxml-glyph.el --- glyph-handling for nxml-mode + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; The entry point to this file is `nxml-glyph-display-string'. +;; The current implementation is heuristic due to a lack of +;; Emacs primitives necessary to implement it properly. The user +;; can tweak the heuristics using `nxml-glyph-set-hook'. + +;;; Code: + +(defconst nxml-ascii-glyph-set + [(#x0020 . #x007E)]) + +(defconst nxml-latin1-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF)]) + +;; These were generated by using nxml-insert-target-repertoire-glyph-set +;; on the TARGET[123] files in +;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz + +(defconst nxml-misc-fixed-1-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF) + (#x0100 . #x017F) + #x018F #x0192 + (#x0218 . #x021B) + #x0259 + (#x02C6 . #x02C7) + (#x02D8 . #x02DD) + (#x0374 . #x0375) + #x037A #x037E + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + (#x0401 . #x040C) + (#x040E . #x044F) + (#x0451 . #x045C) + (#x045E . #x045F) + (#x0490 . #x0491) + (#x05D0 . #x05EA) + (#x1E02 . #x1E03) + (#x1E0A . #x1E0B) + (#x1E1E . #x1E1F) + (#x1E40 . #x1E41) + (#x1E56 . #x1E57) + (#x1E60 . #x1E61) + (#x1E6A . #x1E6B) + (#x1E80 . #x1E85) + (#x1EF2 . #x1EF3) + (#x2010 . #x2022) + #x2026 #x2030 + (#x2039 . #x203A) + #x20AC #x2116 #x2122 #x2126 + (#x215B . #x215E) + (#x2190 . #x2193) + #x2260 + (#x2264 . #x2265) + (#x23BA . #x23BD) + (#x2409 . #x240D) + #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C #x2592 #x25C6 #x266A #xFFFD] + "Glyph set for TARGET1 glyph repertoire of misc-fixed-* font. +This repertoire is supported for the bold and oblique fonts.") + +(defconst nxml-misc-fixed-2-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF) + (#x0100 . #x017F) + #x018F #x0192 + (#x01FA . #x01FF) + (#x0218 . #x021B) + #x0259 + (#x02C6 . #x02C7) + #x02C9 + (#x02D8 . #x02DD) + (#x0300 . #x0311) + (#x0374 . #x0375) + #x037A #x037E + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + #x03D1 + (#x03D5 . #x03D6) + #x03F1 + (#x0401 . #x040C) + (#x040E . #x044F) + (#x0451 . #x045C) + (#x045E . #x045F) + (#x0490 . #x0491) + (#x05D0 . #x05EA) + (#x1E02 . #x1E03) + (#x1E0A . #x1E0B) + (#x1E1E . #x1E1F) + (#x1E40 . #x1E41) + (#x1E56 . #x1E57) + (#x1E60 . #x1E61) + (#x1E6A . #x1E6B) + (#x1E80 . #x1E85) + (#x1EF2 . #x1EF3) + (#x2010 . #x2022) + #x2026 #x2030 + (#x2032 . #x2034) + (#x2039 . #x203A) + #x203C #x203E #x2044 + (#x2070 . #x2071) + (#x2074 . #x208E) + (#x20A3 . #x20A4) + #x20A7 #x20AC + (#x20D0 . #x20D7) + #x2102 #x2105 #x2113 + (#x2115 . #x2116) + #x211A #x211D #x2122 #x2124 #x2126 #x212E + (#x215B . #x215E) + (#x2190 . #x2195) + (#x21A4 . #x21A8) + (#x21D0 . #x21D5) + (#x2200 . #x2209) + (#x220B . #x220C) + #x220F + (#x2211 . #x2213) + #x2215 + (#x2218 . #x221A) + (#x221D . #x221F) + #x2221 + (#x2224 . #x222B) + #x222E #x223C #x2243 #x2245 + (#x2248 . #x2249) + #x2259 + (#x225F . #x2262) + (#x2264 . #x2265) + (#x226A . #x226B) + (#x2282 . #x228B) + #x2295 #x2297 + (#x22A4 . #x22A7) + (#x22C2 . #x22C3) + #x22C5 #x2300 #x2302 + (#x2308 . #x230B) + #x2310 + (#x2320 . #x2321) + (#x2329 . #x232A) + (#x23BA . #x23BD) + (#x2409 . #x240D) + #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C + (#x254C . #x2573) + (#x2580 . #x25A1) + (#x25AA . #x25AC) + (#x25B2 . #x25B3) + #x25BA #x25BC #x25C4 #x25C6 + (#x25CA . #x25CB) + #x25CF + (#x25D8 . #x25D9) + #x25E6 + (#x263A . #x263C) + #x2640 #x2642 #x2660 #x2663 + (#x2665 . #x2666) + (#x266A . #x266B) + (#xFB01 . #xFB02) + #xFFFD] + "Glyph set for TARGET2 glyph repertoire of the misc-fixed-* fonts. +This repertoire is supported for the following fonts: +5x7.bdf 5x8.bdf 6x9.bdf 6x10.bdf 6x12.bdf 7x13.bdf 7x14.bdf clR6x12.bdf") + +(defconst nxml-misc-fixed-3-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF) + (#x0100 . #x01FF) + (#x0200 . #x0220) + (#x0222 . #x0233) + (#x0250 . #x02AD) + (#x02B0 . #x02EE) + (#x0300 . #x034F) + (#x0360 . #x036F) + (#x0374 . #x0375) + #x037A #x037E + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + (#x03D0 . #x03F6) + (#x0400 . #x0486) + (#x0488 . #x04CE) + (#x04D0 . #x04F5) + (#x04F8 . #x04F9) + (#x0500 . #x050F) + (#x0531 . #x0556) + (#x0559 . #x055F) + (#x0561 . #x0587) + (#x0589 . #x058A) + (#x05B0 . #x05B9) + (#x05BB . #x05C4) + (#x05D0 . #x05EA) + (#x05F0 . #x05F4) + (#x10D0 . #x10F8) + #x10FB + (#x1E00 . #x1E9B) + (#x1EA0 . #x1EF9) + (#x1F00 . #x1F15) + (#x1F18 . #x1F1D) + (#x1F20 . #x1F45) + (#x1F48 . #x1F4D) + (#x1F50 . #x1F57) + #x1F59 #x1F5B #x1F5D + (#x1F5F . #x1F7D) + (#x1F80 . #x1FB4) + (#x1FB6 . #x1FC4) + (#x1FC6 . #x1FD3) + (#x1FD6 . #x1FDB) + (#x1FDD . #x1FEF) + (#x1FF2 . #x1FF4) + (#x1FF6 . #x1FFE) + (#x2000 . #x200A) + (#x2010 . #x2027) + (#x202F . #x2052) + #x2057 + (#x205F . #x2063) + (#x2070 . #x2071) + (#x2074 . #x208E) + (#x20A0 . #x20B1) + (#x20D0 . #x20EA) + (#x2100 . #x213A) + (#x213D . #x214B) + (#x2153 . #x2183) + (#x2190 . #x21FF) + (#x2200 . #x22FF) + (#x2300 . #x23CE) + (#x2400 . #x2426) + (#x2440 . #x244A) + (#x2500 . #x25FF) + (#x2600 . #x2613) + (#x2616 . #x2617) + (#x2619 . #x267D) + (#x2680 . #x2689) + (#x27E6 . #x27EB) + (#x27F5 . #x27FF) + (#x2A00 . #x2A06) + #x2A1D #x2A3F #x303F + (#xFB00 . #xFB06) + (#xFB13 . #xFB17) + (#xFB1D . #xFB36) + (#xFB38 . #xFB3C) + #xFB3E + (#xFB40 . #xFB41) + (#xFB43 . #xFB44) + (#xFB46 . #xFB4F) + (#xFE20 . #xFE23) + (#xFF61 . #xFF9F) + #xFFFD] + "Glyph set for TARGET3 glyph repertoire of the misc-fixed-* fonts. +This repertoire is supported for the following fonts: +6x13.bdf 8x13.bdf 9x15.bdf 9x18.bdf 10x20.bdf") + +(defconst nxml-wgl4-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x017F) + #x0192 + (#x01FA . #x01FF) + (#x02C6 . #x02C7) + #x02C9 + (#x02D8 . #x02DB) + #x02DD + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + (#x0401 . #x040C) + (#x040E . #x044F) + (#x0451 . #x045C) + (#x045E . #x045F) + (#x0490 . #x0491) + (#x1E80 . #x1E85) + (#x1EF2 . #x1EF3) + (#x2013 . #x2015) + (#x2017 . #x201E) + (#x2020 . #x2022) + #x2026 #x2030 + (#x2032 . #x2033) + (#x2039 . #x203A) + #x203C #x203E #x2044 #x207F + (#x20A3 . #x20A4) + #x20A7 #x20AC #x2105 #x2113 #x2116 #x2122 #x2126 #x212E + (#x215B . #x215E) + (#x2190 . #x2195) + #x21A8 #x2202 #x2206 #x220F + (#x2211 . #x2212) + #x2215 + (#x2219 . #x221A) + (#x221E . #x221F) + #x2229 #x222B #x2248 + (#x2260 . #x2261) + (#x2264 . #x2265) + #x2302 #x2310 + (#x2320 . #x2321) + #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 + #x252C #x2534 #x253C + (#x2550 . #x256C) + #x2580 #x2584 #x2588 #x258C + (#x2590 . #x2593) + (#x25A0 . #x25A1) + (#x25AA . #x25AC) + #x25B2 #x25BA #x25BC #x25C4 + (#x25CA . #x25CB) + #x25CF + (#x25D8 . #x25D9) + #x25E6 + (#x263A . #x263C) + #x2640 #x2642 #x2660 #x2663 + (#x2665 . #x2666) + (#x266A . #x266B) + (#xFB01 . #xFB02)] + "Glyph set corresponding to Windows Glyph List 4.") + +(defvar nxml-glyph-set-hook nil + "*Hook for determining the set of glyphs in a face. +The hook will receive a single argument FACE. If it can determine the +set of glyphs representable by FACE, it must set the variable +`nxml-glyph-set' and return non-nil. Otherwise, it must return +nil. The hook will be run until success. The constants +`nxml-ascii-glyph-set', `nxml-latin1-glyph-set', +`nxml-misc-fixed-1-glyph-set', `nxml-misc-fixed-2-glyph-set', +`nxml-misc-fixed-3-glyph-set' and `nxml-wgl4-glyph-set' are predefined +for use by `nxml-glyph-set-hook'.") + +(defvar nxml-glyph-set nil + "Used by `nxml-glyph-set-hook' to return set of glyphs in a FACE. +This should dynamically bound by any function that runs +`nxml-glyph-set-hook'. The value must be either nil representing an +empty set or a vector. Each member of the vector is either a single +integer or a cons (FIRST . LAST) representing the range of integers +from FIRST to LAST. An integer represents a glyph with that Unicode +code-point. The vector must be ordered.") + +(defun nxml-x-set-glyph-set (face) + (setq nxml-glyph-set + (if (equal (face-attribute face :family) "misc-fixed") + nxml-misc-fixed-3-glyph-set + nxml-wgl4-glyph-set))) + +(defun nxml-w32-set-glyph-set (face) + (setq nxml-glyph-set nxml-wgl4-glyph-set)) + +(defun nxml-window-system-set-glyph-set (face) + (setq nxml-glyph-set nxml-latin1-glyph-set)) + +(defun nxml-terminal-set-glyph-set (face) + (setq nxml-glyph-set nxml-ascii-glyph-set)) + +(add-hook 'nxml-glyph-set-hook + (or (cdr (assq window-system + '((x . nxml-x-set-glyph-set) + (w32 . nxml-w32-set-glyph-set) + (nil . nxml-terminal-set-glyph-set)))) + 'nxml-window-system-set-glyph-set) + t) + +;;;###autoload +(defun nxml-glyph-display-string (n face) + "Return a string that can display a glyph for Unicode code-point N. +FACE gives the face that will be used for displaying the string. +Return nil if the face cannot display a glyph for N." + (let ((nxml-glyph-set nil)) + (run-hook-with-args-until-success 'nxml-glyph-set-hook face) + (and nxml-glyph-set + (nxml-glyph-set-contains-p n nxml-glyph-set) + (let ((ch (decode-char 'ucs n))) + (and ch (string ch)))))) + +(defun nxml-glyph-set-contains-p (n v) + (let ((start 0) + (end (length v)) + found mid mid-val mid-start-val mid-end-val) + (while (> end start) + (setq mid (+ start + (/ (- end start) 2))) + (setq mid-val (aref v mid)) + (if (consp mid-val) + (setq mid-start-val (car mid-val) + mid-end-val (cdr mid-val)) + (setq mid-start-val mid-val + mid-end-val mid-val)) + (cond ((and (<= mid-start-val n) + (<= n mid-end-val)) + (setq found t) + (setq start end)) + ((< n mid-start-val) + (setq end mid)) + (t + (setq start + (if (eq start mid) + end + mid))))) + found)) + +(provide 'nxml-glyph) + +;; arch-tag: 50985104-27c6-4241-8625-b11aa5685633 +;;; nxml-glyph.el ends here diff --git a/lisp/nxml/nxml-maint.el b/lisp/nxml/nxml-maint.el new file mode 100644 index 00000000000..7df2bc99f35 --- /dev/null +++ b/lisp/nxml/nxml-maint.el @@ -0,0 +1,109 @@ +;;; nxml-maint.el --- commands for maintainers of nxml-*.el + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +;;; Generating files with Unicode char names. + +(require 'nxml-uchnm) + +(defun nxml-create-unicode-char-name-sets (file) + "Generate files containing char names from Unicode standard." + (interactive "fUnicodeData file: ") + (mapc (lambda (block) + (let ((nameset (nxml-unicode-block-char-name-set (nth 0 block)))) + (save-excursion + (find-file (concat (get nameset 'nxml-char-name-set-file) + ".el")) + (erase-buffer) + (insert "(nxml-define-char-name-set '") + (prin1 nameset (current-buffer)) + (insert "\n '())\n") + (goto-char (- (point) 3))))) + nxml-unicode-blocks) + (save-excursion + (find-file file) + (goto-char (point-min)) + (let ((blocks nxml-unicode-blocks) + code name) + (while (re-search-forward "^\\([0-9A-F]+\\);\\([^<;][^;]*\\);" + nil + t) + (setq code (string-to-number (match-string 1) 16)) + (setq name (match-string 2)) + (while (and blocks + (> code (nth 2 (car blocks)))) + (setq blocks (cdr blocks))) + (when (and (<= (nth 1 (car blocks)) code) + (<= code (nth 2 (car blocks)))) + (save-excursion + (find-file (concat (get (nxml-unicode-block-char-name-set + (nth 0 (car blocks))) + 'nxml-char-name-set-file) + ".el")) + (insert "(") + (prin1 name (current-buffer)) + (insert (format " #x%04X)\n " code)))))))) + +;;; Parsing target repertoire files from ucs-fonts. +;; This is for converting the TARGET? files in +;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz +;; into a glyph set. + +(defun nxml-insert-target-repertoire-glyph-set (file var) + (interactive "fTarget file: \nSVariable name: ") + (let (lst head) + (save-excursion + (set-buffer (find-file-noselect file)) + (goto-char (point-min)) + (while (re-search-forward "^ *\\([a-FA-F0-9]\\{2\\}\\)[ \t]+" nil t) + (let ((row (match-string 1)) + (eol (save-excursion (end-of-line) (point)))) + (while (re-search-forward "\\([a-FA-F0-9]\\{2\\}\\)-\\([a-FA-F0-9]\\{2\\}\\)\\|\\([a-FA-F0-9]\\{2\\}\\)" eol t) + (setq lst + (cons (if (match-beginning 3) + (concat "#x" row (match-string 3)) + (concat "(#x" row (match-string 1) + " . #x" row (match-string 2) ")")) + lst)))))) + (setq lst (nreverse lst)) + (insert (format "(defconst %s\n [" var)) + (while lst + (setq head (car lst)) + (setq lst (cdr lst)) + (insert head) + (when (= (length head) 6) + (while (and lst (= (length (car lst)) 6)) + (insert " ") + (insert (car lst)) + (setq lst (cdr lst)))) + (when lst (insert "\n "))) + (insert "])\n"))) + +(provide 'nxml-maint) + +;; arch-tag: 2cff6b55-12af-47db-90da-a91f782f435a +;;; nxml-maint.el ends here diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el new file mode 100644 index 00000000000..42d16359fbc --- /dev/null +++ b/lisp/nxml/nxml-mode.el @@ -0,0 +1,2668 @@ +;;; nxml-mode.el --- a new XML mode + +;; Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; To use this include rng-auto.el in your .emacs. + +;; See nxml-rap.el for description of parsing strategy. + +;; The font locking here is independent of font-lock.el. We want to +;; do more sophisticated handling of changes and we want to use the +;; same xmltok rather than regexps for parsing so that we parse +;; consistently and correctly. + +;;; Code: + +(when (featurep 'mucs) + (error "nxml-mode is not compatible with Mule-UCS")) + +(require 'xmltok) +(require 'nxml-enc) +(require 'nxml-glyph) +(require 'nxml-util) +(require 'nxml-rap) +(require 'nxml-outln) + +;;; Customization + +(defgroup nxml nil + "New XML editing mode" + :group 'languages + :group 'wp) + +(defgroup nxml-highlighting-faces nil + "Faces for XML syntax highlighting." + :group 'nxml + :group 'font-lock-highlighting-faces) + +(defcustom nxml-syntax-highlight-flag t + "*Non-nil means nxml-mode should perform syntax highlighting." + :group 'nxml + :type 'boolean) + +(defcustom nxml-char-ref-display-glyph-flag t + "*Non-nil means display glyph following character reference. +The glyph is displayed in `nxml-glyph-face'. The hook +`nxml-glyph-set-hook' can be used to customize for which characters +glyphs are displayed." + :group 'nxml + :type 'boolean) + +(defcustom nxml-mode-hook nil + "Hook run by command `nxml-mode'." + :group 'nxml + :type 'hook) + +(defcustom nxml-sexp-element-flag nil + "*Non-nil means sexp commands treat an element as a single expression." + :group 'nxml + :type 'boolean) + +(defcustom nxml-slash-auto-complete-flag nil + "*Non-nil means typing a slash automatically completes the end-tag. +This is used by `nxml-electric-slash'." + :group 'nxml + :type 'boolean) + +(defcustom nxml-child-indent 2 + "*Indentation for the children of an element relative to the start-tag. +This only applies when the line or lines containing the start-tag contains +nothing else other than that start-tag." + :group 'nxml + :type 'integer) + +(defcustom nxml-attribute-indent 4 + "*Indentation for the attributes of an element relative to the start-tag. +This only applies when the first attribute of a tag starts a line. In other +cases, the first attribute on one line is indented the same as the first +attribute on the previous line." + :group 'nxml + :type 'integer) + +(defvar nxml-fontify-chunk-size 500) + +(defcustom nxml-bind-meta-tab-to-complete-flag (not window-system) + "*Non-nil means bind M-TAB in `nxml-mode-map' to `nxml-complete'. +C-return will be bound to `nxml-complete' in any case. +M-TAB gets swallowed by many window systems/managers, and +`documentation' will show M-TAB rather than C-return as the +binding `rng-complete' when both are bound. So it's better +to bind M-TAB only when it will work." + :group 'nxml + :set (lambda (sym flag) + (set-default sym flag) + (when (and (boundp 'nxml-mode-map) nxml-mode-map) + (define-key nxml-mode-map "\M-\t" (and flag 'nxml-complete)))) + :type 'boolean) + +(defcustom nxml-prefer-utf-16-to-utf-8-flag nil + "*Non-nil means prefer UTF-16 to UTF-8 when saving a buffer. +This is used only when a buffer does not contain an encoding declaration +and when its current `buffer-file-coding-system' specifies neither UTF-16 +nor UTF-8." + :group 'nxml + :type 'boolean) + +(defcustom nxml-prefer-utf-16-little-to-big-endian-flag (eq system-type + 'windows-nt) + "*Non-nil means prefer little-endian to big-endian byte-order for UTF-16. +This is used only for saving a buffer; when reading the byte-order is +auto-detected. It may be relevant both when there is no encoding declaration +and when the encoding declaration specifies `UTF-16'." + :group 'nxml + :type 'boolean) + +(defcustom nxml-default-buffer-file-coding-system nil + "*Default value for `buffer-file-coding-system' for a buffer for a new file. +Nil means use the default value of `buffer-file-coding-system' as normal. +A buffer's `buffer-file-coding-system' affects what \\[nxml-insert-xml-declaration] inserts." + :group 'nxml + :type 'coding-system) + +(defcustom nxml-auto-insert-xml-declaration-flag nil + "*Non-nil means automatically insert an XML declaration in a new file. +The XML declaration is inserted using `nxml-insert-xml-declaration'." + :group 'nxml + :type 'boolean) + +;; The following are the colors we use with a light background. +;; The two blues have the same hue but contrasting saturation/value. +;; The hue of the green is 120 degrees different from that of the +;; blue. The red used for highlighting errors is 120 degrees +;; different again. We use the light blue only for refs and +;; delimiters, since these are short (long stretches in a light color +;; would be too hard to read). The dark blue is closest to black +;; (which we use by default for text), so we use it for attribute +;; values, which are similar to text. + +(defconst nxml-light-blue-color "#9292C9") ; hue 240 +(defconst nxml-dark-blue-color "#3A3A7B") ; hue 240 +(defconst nxml-green-color "#257A25") ; hue 120 + +;; Similar principles apply with a dark background. However, +;; we switch green and blue, because darker blues are very hard to +;; read (for me anyway) on a dark background. + +(defconst nxml-sky-blue-color "#ACACFC") ; hue 240 +(defconst nxml-dark-green-color "#00AD00") ; hue 120 +(defconst nxml-light-green-color "#70F170") ; hue 120 + +(defface nxml-delimited-data-face + `((((class color) (background light)) (:foreground ,nxml-dark-blue-color)) + (((class color) (background dark)) (:foreground ,nxml-light-green-color))) + "Face used to highlight data enclosed between delimiters. +By default, this is inherited by `nxml-attribute-value-face' +and `nxml-processing-instruction-content-face'." + :group 'nxml-highlighting-faces) + +(defface nxml-name-face + `((((class color) (background light)) (:foreground ,nxml-green-color)) + (((class color) (background dark)) (:foreground ,nxml-sky-blue-color))) + "Face used to highlight various names. +This includes element and attribute names, processing +instruction targets and the CDATA keyword in a CDATA section. +This is not used directly, but only via inheritance by other faces." + :group 'nxml-highlighting-faces) + +(defface nxml-ref-face + `((((class color) (background light)) (:foreground ,nxml-light-blue-color)) + (((class color) (background dark)) (:foreground ,nxml-dark-green-color))) + "Face used to highlight character and entity references. +This is not used directly, but only via inheritance by other faces." + :group 'nxml-highlighting-faces) + +(defface nxml-delimiter-face + `((((class color) (background light)) (:foreground ,nxml-light-blue-color)) + (((class color) (background dark)) (:foreground ,nxml-dark-green-color)) + (t (:bold t))) + "Face used to highlight delimiters. +This is not used directly, but only via inheritance by other faces." + :group 'nxml-highlighting-faces) + +(defface nxml-text-face + nil + "Face used to highlight text." + :group 'nxml-highlighting-faces) + +(defface nxml-comment-content-face + '((t (:italic t))) + "Face used to highlight the content of comments." + :group 'nxml-highlighting-faces) + +(defface nxml-comment-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of comments, i.e ." + :group 'nxml-highlighting-faces) + +(defface nxml-processing-instruction-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of processing instructions, i.e ." + :group 'nxml-highlighting-faces) + +(defface nxml-processing-instruction-target-face + '((t (:inherit nxml-name-face))) + "Face used for the target of processing instructions." + :group 'nxml-highlighting-faces) + +(defface nxml-processing-instruction-content-face + '((t (:inherit nxml-delimited-data-face))) + "Face used for the content of processing instructions." + :group 'nxml-highlighting-faces) + +(defface nxml-cdata-section-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of CDATA sections, i.e ." + :group 'nxml-highlighting-faces) + +(defface nxml-cdata-section-CDATA-face + '((t (:inherit nxml-name-face))) + "Face used for the CDATA keyword in CDATA sections." + :group 'nxml-highlighting-faces) + +(defface nxml-cdata-section-content-face + '((t (:inherit nxml-text-face))) + "Face used for the content of CDATA sections." + :group 'nxml-highlighting-faces) + +(defface nxml-char-ref-number-face + '((t (:inherit nxml-ref-face))) + "Face used for the number in character references. +This includes ths `x' in hex references." + :group 'nxml-highlighting-faces) + +(defface nxml-char-ref-delimiter-face + '((t (:inherit nxml-ref-face))) + "Face used for the delimiters of character references, i.e &# and ;." + :group 'nxml-highlighting-faces) + +(defface nxml-entity-ref-name-face + '((t (:inherit nxml-ref-face))) + "Face used for the entity name in general entity references." + :group 'nxml-highlighting-faces) + +(defface nxml-entity-ref-delimiter-face + '((t (:inherit nxml-ref-face))) + "Face used for the delimiters of entity references, i.e & and ;." + :group 'nxml-highlighting-faces) + +(defface nxml-tag-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the angle brackets delimiting tags. +`nxml-tag-slash-face' is used for slashes." + :group 'nxml-highlighting-faces) + +(defface nxml-tag-slash-face + '((t (:inherit nxml-name-face))) + "Face used for slashes in tags, both in end-tags and empty-elements." + :group 'nxml-highlighting-faces) + +(defface nxml-element-prefix-face + '((t (:inherit nxml-name-face))) + "Face used for the prefix of elements." + :group 'nxml-highlighting-faces) + +(defface nxml-element-colon-face + '((t (:inherit nxml-name-face))) + "Face used for the colon in element names." + :group 'nxml-highlighting-faces) + +(defface nxml-element-local-name-face + '((t (:inherit nxml-name-face))) + "Face used for the local name of elements." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-prefix-face + '((t (:inherit nxml-name-face))) + "Face used for the prefix of attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-colon-face + '((t (:inherit nxml-name-face))) + "Face used for the colon in attribute names." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-local-name-face + '((t (:inherit nxml-name-face))) + "Face used for the local name of attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-xmlns-face + '((t (:inherit nxml-name-face))) + "Face used for `xmlns' in namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-colon-face + '((t (:inherit nxml-name-face))) + "Face used for the colon in namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-prefix-face + '((t (:inherit nxml-name-face))) + "Face used for the prefix declared in namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-value-face + '((t (:inherit nxml-delimited-data-face))) + "Face used for the value of attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-value-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of attribute values." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-value-face + '((t (:inherit nxml-attribute-value-face))) + "Face used for the value of namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-value-delimiter-face + '((t (:inherit nxml-attribute-value-delimiter-face))) + "Face used for the delimiters of namespace attribute values." + :group 'nxml-highlighting-faces) + +(defface nxml-prolog-literal-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of literals in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-prolog-literal-content-face + '((t (:inherit nxml-delimited-data-face))) + "Face used for the content of literals in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-prolog-keyword-face + '((t (:inherit nxml-name-face))) + "Face used for keywords in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-markup-declaration-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of markup declarations in the prolog. +The delimiters are ." + :group 'nxml-highlighting-faces) + +(defface nxml-hash-face + '((t (:inherit nxml-name-face))) + "Face used for # before a name in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-glyph-face + '((((type x)) + (:family + "misc-fixed" + :background + "light grey" + :foreground + "black" + :weight + normal + :slant + normal)) + (t + (:background + "light grey" + :foreground + "black" + :weight + normal + :slant + normal))) + "Face used for glyph for char references." + :group 'nxml-highlighting-faces) + +;;; Global variables + +;; This is initialized in rng-auto.el. +(defvar nxml-version nil + "*The version of nxml-mode that is being used.") + +(defvar nxml-prolog-regions nil + "List of regions in the prolog to be fontified. +See the function `xmltok-forward-prolog' for more information.") +(make-variable-buffer-local 'nxml-prolog-regions) + +(defvar nxml-last-fontify-end nil + "Position where fontification last ended. +Nil if the buffer changed since the last fontification.") +(make-variable-buffer-local 'nxml-last-fontify-end) + +(defvar nxml-degraded nil + "Non-nil if currently operating in degraded mode. +Degraded mode is enabled when an internal error is encountered in the +fontification or after-change functions.") +(make-variable-buffer-local 'nxml-degraded) + +(defvar nxml-completion-hook nil + "Hook run by `nxml-complete'. +This hook is run until success.") + +(defvar nxml-in-mixed-content-hook nil + "Hook to determine whether point is in mixed content. +The hook is called without arguments. It should return nil if it is +definitely not mixed; non-nil otherwise. The hook will be run until +one of the functions returns nil.") + +(defvar nxml-mixed-scan-distance 4000 + "Maximum distance from point to scan when checking for mixed content.") + +(defvar nxml-end-tag-indent-scan-distance 4000 + "Maximum distance from point to scan backwards when indenting end-tag.") + +(defvar nxml-char-ref-extra-display t + "Non-nil means display extra information for character references. +The extra information consists of a tooltip with the character name +and, if `nxml-char-ref-display-glyph-flag' is non-nil, a glyph +corresponding to the referenced character following the character +reference.") +(make-variable-buffer-local 'nxml-char-ref-extra-display) + +(defvar nxml-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\M-\C-u" 'nxml-backward-up-element) + (define-key map "\M-\C-d" 'nxml-down-element) + (define-key map "\M-\C-n" 'nxml-forward-element) + (define-key map "\M-\C-p" 'nxml-backward-element) + (define-key map "\M-{" 'nxml-backward-paragraph) + (define-key map "\M-}" 'nxml-forward-paragraph) + (define-key map "\M-h" 'nxml-mark-paragraph) + (define-key map "\C-c\C-f" 'nxml-finish-element) + (define-key map "\C-c\C-m" 'nxml-split-element) + (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block) + (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline) + (define-key map "\C-c\C-x" 'nxml-insert-xml-declaration) + (define-key map "\C-c\C-d" 'nxml-dynamic-markup-word) + ;; u is for Unicode + (define-key map "\C-c\C-u" 'nxml-insert-named-char) + (define-key map "\C-c\C-o" nxml-outline-prefix-map) + (define-key map [S-mouse-2] 'nxml-mouse-hide-direct-text-content) + (define-key map "/" 'nxml-electric-slash) + (define-key map [C-return] 'nxml-complete) + (when nxml-bind-meta-tab-to-complete-flag + (define-key map "\M-\t" 'nxml-complete)) + map) + "Keymap for nxml-mode.") + +(defsubst nxml-set-face (start end face) + (when (and face (< start end)) + (put-text-property start end 'face face))) + +(defun nxml-clear-face (start end) + (remove-text-properties start end '(face nil)) + (nxml-clear-char-ref-extra-display start end)) + +(defsubst nxml-set-fontified (start end) + (put-text-property start end 'fontified t)) + +(defsubst nxml-clear-fontified (start end) + (remove-text-properties start end '(fontified nil))) + +;;;###autoload +(defun nxml-mode () + ;; We use C-c C-i instead of \\[nxml-balanced-close-start-tag-inline] + ;; because Emacs turns C-c C-i into C-c TAB which is hard to type and + ;; not mnemonic. + "Major mode for editing XML. + +Syntax highlighting is performed unless the variable +`nxml-syntax-highlight-flag' is nil. + +\\[nxml-finish-element] finishes the current element by inserting an end-tag. +C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag +leaving point between the start-tag and end-tag. +\\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements: +the start-tag, point, and end-tag are all left on separate lines. +If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `") + (make-local-variable 'comment-end-skip) + (setq comment-end-skip "[ \t\r\n]*-->") + (make-local-variable 'comment-line-break-function) + (setq comment-line-break-function 'nxml-newline-and-indent) + (use-local-map nxml-mode-map) + (save-excursion + (save-restriction + (widen) + (nxml-clear-dependent-regions (point-min) (point-max)) + (setq nxml-scan-end (copy-marker (point-min) nil)) + (nxml-with-unmodifying-text-property-changes + (when nxml-syntax-highlight-flag + (nxml-clear-fontified (point-min) (point-max))) + (nxml-clear-inside (point-min) (point-max)) + (nxml-with-invisible-motion + (nxml-scan-prolog))))) + (when nxml-syntax-highlight-flag + (add-hook 'fontification-functions 'nxml-fontify nil t)) + (add-hook 'after-change-functions 'nxml-after-change nil t) + (add-hook 'write-contents-hooks 'nxml-prepare-to-save) + (when (not (and (buffer-file-name) (file-exists-p (buffer-file-name)))) + (when (and nxml-default-buffer-file-coding-system + (not (local-variable-p 'buffer-file-coding-system))) + (setq buffer-file-coding-system nxml-default-buffer-file-coding-system)) + (when nxml-auto-insert-xml-declaration-flag + (nxml-insert-xml-declaration))) + (run-hooks 'nxml-mode-hook)) + +(defun nxml-degrade (context err) + (message "Internal nXML mode error in %s (%s), degrading" + context + (error-message-string err)) + (ding) + (setq nxml-degraded t) + (setq nxml-prolog-end 1) + (save-excursion + (save-restriction + (widen) + (nxml-with-unmodifying-text-property-changes + (nxml-clear-face (point-min) (point-max)) + (nxml-set-fontified (point-min) (point-max)) + (nxml-clear-inside (point-min) (point-max))) + (setq mode-name "nXML/degraded")))) + +;;; Change management + +(defun nxml-after-change (start end pre-change-length) + ;; Work around bug in insert-file-contents. + (when (> end (1+ (buffer-size))) + (setq start 1) + (setq end (1+ (buffer-size)))) + (unless nxml-degraded + (condition-case err + (save-excursion + (save-restriction + (widen) + (save-match-data + (nxml-with-invisible-motion + (nxml-with-unmodifying-text-property-changes + (nxml-after-change1 start end pre-change-length)))))) + (error + (nxml-degrade 'nxml-after-change err))))) + +(defun nxml-after-change1 (start end pre-change-length) + (setq nxml-last-fontify-end nil) + (let ((pre-change-end (+ start pre-change-length))) + (setq start + (nxml-adjust-start-for-dependent-regions start + end + pre-change-length)) + (when (<= start + ;; Add 2 so as to include the < and following char + ;; that start the instance, since changing these + ;; can change where the prolog ends. + (+ nxml-prolog-end 2)) + ;; end must be extended to at least the end of the old prolog + (when (< pre-change-end nxml-prolog-end) + (setq end + ;; don't let end get out of range even if pre-change-length + ;; is bogus + (min (point-max) + (+ end (- nxml-prolog-end pre-change-end))))) + (nxml-scan-prolog))) + (cond ((<= end nxml-prolog-end) + (setq end nxml-prolog-end) + (goto-char start) + ;; This is so that Emacs redisplay works + (setq start (line-beginning-position))) + ((and (<= start nxml-scan-end) + (> start (point-min)) + (nxml-get-inside (1- start))) + ;; The closing delimiter might have been removed. + ;; So we may need to redisplay from the beginning + ;; of the token. + (goto-char (1- start)) + (nxml-move-outside-backwards) + ;; This is so that Emacs redisplay works + (setq start (line-beginning-position)) + (setq end (max (nxml-scan-after-change (point) end) + end))) + (t + (goto-char start) + ;; This is both for redisplay and to move back + ;; past any incomplete opening delimiters + (setq start (line-beginning-position)) + (setq end (max (nxml-scan-after-change start end) + end)))) + (when nxml-syntax-highlight-flag + (when (>= start end) + ;; Must clear at least one char so as to trigger redisplay. + (cond ((< start (point-max)) + (setq end (1+ start))) + (t + (setq end (point-max)) + (goto-char end) + (setq start (line-beginning-position))))) + (nxml-clear-fontified start end))) + +;;; Encodings + +(defun nxml-insert-xml-declaration () + "Insert an XML declaration at the beginning of buffer. +The XML declaration will declare an encoding depending on the buffer's +`buffer-file-coding-system'." + (interactive "*") + (let ((coding-system + (if (and buffer-file-coding-system + (coding-system-p buffer-file-coding-system) + (coding-system-get buffer-file-coding-system + 'mime-charset)) + buffer-file-coding-system + (nxml-choose-utf-coding-system)))) + (goto-char (point-min)) + (insert (format "\n" + (nxml-coding-system-name coding-system))))) + +(defun nxml-prepare-to-save () + (unless (and (not enable-multibyte-characters) + (local-variable-p 'buffer-file-coding-system) + buffer-file-coding-system + (or (eq (coding-system-type buffer-file-coding-system) 5) + (eq buffer-file-coding-system 'no-conversion))) + (save-excursion + (setq buffer-file-coding-system (nxml-select-coding-system)))) + ;; nil from a function in `write-contents-hooks' means + ;; to continue and write the file as normal + nil) + +(defun nxml-select-coding-system () + (let* ((suitable-coding-systems + (find-coding-systems-region (point-min) (point-max))) + (enc-pos (progn + (goto-char (point-min)) + (xmltok-get-declared-encoding-position))) + (enc-name + (and (consp enc-pos) + (buffer-substring-no-properties (car enc-pos) + (cdr enc-pos)))) + (coding-system + (cond (enc-name + (if (string= (downcase enc-name) "utf-16") + (nxml-choose-utf-16-coding-system) + (nxml-mime-charset-coding-system enc-name))) + (enc-pos (nxml-choose-utf-coding-system))))) + ;; Make sure we have a coding-system + (unless coding-system + (setq coding-system + (and (not buffer-read-only) + (nxml-choose-suitable-coding-system + suitable-coding-systems))) + (let ((message + (if enc-name + (format "Unknown encoding %s" enc-name) + "XML declaration is not well-formed"))) + (cond ((not coding-system) + (error "%s" message)) + ((y-or-n-p + (concat message + ". " + (format (if enc-name + "Save with %s" + "Modify and save with encoding %s") + (nxml-coding-system-name coding-system)) + " ")) + (nxml-fix-encoding-declaration enc-pos coding-system)) + (t (signal 'quit nil))))) + ;; Make sure it can encode all the characters in the buffer + (unless (or (memq (coding-system-base coding-system) + suitable-coding-systems) + (equal suitable-coding-systems '(undecided))) + (let ((message + (nxml-unsuitable-coding-system-message coding-system + enc-name))) + (setq coding-system + (and (not buffer-read-only) + (nxml-choose-suitable-coding-system + suitable-coding-systems))) + (cond ((not coding-system) (error "%s" message)) + ((y-or-n-p (concat message + (format ". Save with %s " + (nxml-coding-system-name + coding-system)))) + (nxml-fix-encoding-declaration enc-pos coding-system)) + (t (signal 'quit nil))))) + ;; Merge the newline type of our existing encoding + (let ((current-eol-type + (coding-system-eol-type buffer-file-coding-system))) + (when (and current-eol-type (integerp current-eol-type)) + (setq coding-system + (coding-system-change-eol-conversion coding-system + current-eol-type)))) + coding-system)) + +(defun nxml-unsuitable-coding-system-message (coding-system &optional enc-name) + (if (nxml-coding-system-unicode-p coding-system) + "Cannot translate some characters to Unicode" + (format "Cannot encode some characters with %s" + (or enc-name + (nxml-coding-system-name coding-system))))) + +(defconst nxml-utf-16-coding-systems (and (coding-system-p 'utf-16-be) + (coding-system-p 'utf-16-le) + '(utf-16-be utf-16-le))) + +(defconst nxml-utf-coding-systems (cons 'utf-8 nxml-utf-16-coding-systems)) + +(defun nxml-coding-system-unicode-p (coding-system) + (nxml-coding-system-member (coding-system-base coding-system) + nxml-utf-coding-systems)) + +(defun nxml-coding-system-name (coding-system) + (setq coding-system (coding-system-base coding-system)) + (symbol-name + (if (nxml-coding-system-member coding-system nxml-utf-16-coding-systems) + 'utf-16 + (or (coding-system-get coding-system 'mime-charset) + coding-system)))) + +(defun nxml-fix-encoding-declaration (enc-pos coding-system) + (let ((charset (nxml-coding-system-name coding-system))) + (cond ((consp enc-pos) + (delete-region (car enc-pos) (cdr enc-pos)) + (goto-char (car enc-pos)) + (insert charset)) + ((integerp enc-pos) + (goto-char enc-pos) + (insert " encoding=\"" charset ?\")) + (t + (goto-char (point-min)) + (insert "\n") + (when (and (not enc-pos) + (let ((case-fold-search t)) + (looking-at xmltok-bad-xml-decl-regexp))) + (delete-region (point) (match-end 0))))))) + +(defun nxml-choose-suitable-coding-system (suitable-coding-systems) + (let (ret coding-system) + (if (and buffer-file-coding-system + (memq (coding-system-base buffer-file-coding-system) + suitable-coding-systems)) + buffer-file-coding-system + (while (and suitable-coding-systems (not ret)) + (setq coding-system (car suitable-coding-systems)) + (if (coding-system-get coding-system 'mime-charset) + (setq ret coding-system) + (setq suitable-coding-systems (cdr suitable-coding-systems)))) + ret))) + +(defun nxml-choose-utf-coding-system () + (let ((cur (and (local-variable-p 'buffer-file-coding-system) + buffer-file-coding-system + (coding-system-base buffer-file-coding-system)))) + (cond ((car (nxml-coding-system-member cur nxml-utf-coding-systems))) + ((and nxml-prefer-utf-16-to-utf-8-flag + (coding-system-p 'utf-16-le) + (coding-system-p 'utf-16-be)) + (if nxml-prefer-utf-16-little-to-big-endian-flag + 'utf-16-le + 'utf-16-be)) + (t 'utf-8)))) + +(defun nxml-choose-utf-16-coding-system () + (let ((cur (and (local-variable-p 'buffer-file-coding-system) + buffer-file-coding-system + (coding-system-base buffer-file-coding-system)))) + (cond ((car (nxml-coding-system-member cur nxml-utf-16-coding-systems))) + (nxml-prefer-utf-16-little-to-big-endian-flag + (and (coding-system-p 'utf-16-le) 'utf-16-le)) + (t (and (coding-system-p 'utf-16-be) 'utf-16-be))))) + +(defun nxml-coding-system-member (coding-system coding-systems) + (let (ret) + (while (and coding-systems (not ret)) + (if (coding-system-equal coding-system + (car coding-systems)) + (setq ret coding-systems) + (setq coding-systems (cdr coding-systems)))) + ret)) + +;;; Fontification + +(defun nxml-fontify (start) + (condition-case err + (save-excursion + (save-restriction + (widen) + (save-match-data + (nxml-with-invisible-motion + (nxml-with-unmodifying-text-property-changes + (if (or nxml-degraded + ;; just in case we get called in the wrong buffer + (not nxml-prolog-end)) + (nxml-set-fontified start (point-max)) + (nxml-fontify1 start))))))) + (error + (nxml-degrade 'nxml-fontify err)))) + +(defun nxml-fontify1 (start) + (cond ((< start nxml-prolog-end) + (nxml-fontify-prolog) + (nxml-set-fontified (point-min) + nxml-prolog-end)) + (t + (goto-char start) + (when (not (eq nxml-last-fontify-end start)) + (when (not (equal (char-after) ?\<)) + (search-backward "<" nxml-prolog-end t)) + (nxml-ensure-scan-up-to-date) + (nxml-move-outside-backwards)) + (let ((start (point))) + (nxml-do-fontify (min (point-max) + (+ start nxml-fontify-chunk-size))) + (setq nxml-last-fontify-end (point)) + (nxml-set-fontified start nxml-last-fontify-end))))) + +(defun nxml-fontify-buffer () + (interactive) + (save-excursion + (save-restriction + (widen) + (nxml-with-invisible-motion + (goto-char (point-min)) + (nxml-with-unmodifying-text-property-changes + (nxml-fontify-prolog) + (goto-char nxml-prolog-end) + (nxml-do-fontify)))))) + +(defun nxml-fontify-prolog () + "Fontify the prolog. +The buffer is assumed to be prepared for fontification. +This does not set the fontified property, but it does clear +faces appropriately." + (let ((regions nxml-prolog-regions)) + (nxml-clear-face (point-min) nxml-prolog-end) + (while regions + (let ((region (car regions))) + (nxml-apply-fontify-rule (aref region 0) + (aref region 1) + (aref region 2))) + (setq regions (cdr regions))))) + +(defun nxml-do-fontify (&optional bound) + "Fontify at least as far as bound. +Leave point after last fontified position." + (unless bound (setq bound (point-max))) + (let (xmltok-dependent-regions + xmltok-errors) + (while (and (< (point) bound) + (nxml-tokenize-forward)) + (nxml-clear-face xmltok-start (point)) + (nxml-apply-fontify-rule)))) + +;; Vectors identify a substring of the token to be highlighted in some face. + +;; Token types returned by xmltok-forward. + +(put 'start-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [-1 nil nxml-tag-delimiter-face] + (element-qname . 1) + attributes)) + +(put 'partial-start-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + (element-qname . 1) + attributes)) + +(put 'end-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [1 2 nxml-tag-slash-face] + [-1 nil nxml-tag-delimiter-face] + (element-qname . 2))) + +(put 'partial-end-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [1 2 nxml-tag-slash-face] + (element-qname . 2))) + +(put 'empty-element + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [-2 -1 nxml-tag-slash-face] + [-1 nil nxml-tag-delimiter-face] + (element-qname . 1) + attributes)) + +(put 'partial-empty-element + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [-1 nil nxml-tag-slash-face] + (element-qname . 1) + attributes)) + +(put 'char-ref + 'nxml-fontify-rule + '([nil 2 nxml-char-ref-delimiter-face] + [2 -1 nxml-char-ref-number-face] + [-1 nil nxml-char-ref-delimiter-face] + char-ref)) + +(put 'entity-ref + 'nxml-fontify-rule + '([nil 1 nxml-entity-ref-delimiter-face] + [1 -1 nxml-entity-ref-name-face] + [-1 nil nxml-entity-ref-delimiter-face])) + +(put 'comment + 'nxml-fontify-rule + '([nil 4 nxml-comment-delimiter-face] + [4 -3 nxml-comment-content-face] + [-3 nil nxml-comment-delimiter-face])) + +(put 'processing-instruction + 'nxml-fontify-rule + '([nil 2 nxml-processing-instruction-delimiter-face] + [-2 nil nxml-processing-instruction-delimiter-face] + processing-instruction-content)) + +(put 'cdata-section + 'nxml-fontify-rule + '([nil 3 nxml-cdata-section-delimiter-face] ; + [-3 nil nxml-cdata-section-delimiter-face])) + +(put 'data + 'nxml-fontify-rule + '([nil nil nxml-text-face])) + +;; Prolog region types in list returned by xmltok-forward-prolog. + +(put 'xml-declaration + 'nxml-fontify-rule + '([nil 2 nxml-processing-instruction-delimiter-face] + [2 5 nxml-processing-instruction-target-face] + [-2 nil nxml-processing-instruction-delimiter-face])) + +(put 'xml-declaration-attribute-name + 'nxml-fontify-rule + '([nil nil nxml-attribute-local-name-face])) + +(put 'xml-declaration-attribute-value + 'nxml-fontify-rule + '([nil 1 nxml-attribute-value-delimiter-face] + [1 -1 nxml-attribute-value-face] + [-1 nil nxml-attribute-value-delimiter-face])) + +(put 'processing-instruction-left + 'nxml-fontify-rule + '([nil 2 nxml-processing-instruction-delimiter-face] + [2 nil nxml-processing-instruction-target-face])) + +(put 'processing-instruction-right + 'nxml-fontify-rule + '([nil -2 nxml-processing-instruction-content-face] + [-2 nil nxml-processing-instruction-delimiter-face])) + +(put 'literal + 'nxml-fontify-rule + '([nil 1 nxml-prolog-literal-delimiter-face] + [1 -1 nxml-prolog-literal-content-face] + [-1 nil nxml-prolog-literal-delimiter-face])) + +(put 'keyword + 'nxml-fontify-rule + '([nil nil nxml-prolog-keyword-face])) + +(put 'markup-declaration-open + 'nxml-fontify-rule + '([0 2 nxml-markup-declaration-delimiter-face] + [2 nil nxml-prolog-keyword-face])) + +(put 'markup-declaration-close + 'nxml-fontify-rule + '([nil nil nxml-markup-declaration-delimiter-face])) + +(put 'internal-subset-open + 'nxml-fontify-rule + '([nil nil nxml-markup-declaration-delimiter-face])) + +(put 'internal-subset-close + 'nxml-fontify-rule + '([nil 1 nxml-markup-declaration-delimiter-face] + [-1 nil nxml-markup-declaration-delimiter-face])) + +(put 'hash-name + 'nxml-fontify-rule + '([nil 1 nxml-hash-face] + [1 nil nxml-prolog-keyword-face])) + +(defun nxml-apply-fontify-rule (&optional type start end) + (let ((rule (get (or type xmltok-type) 'nxml-fontify-rule))) + (unless start (setq start xmltok-start)) + (unless end (setq end (point))) + (while rule + (let* ((action (car rule))) + (setq rule (cdr rule)) + (cond ((vectorp action) + (nxml-set-face (let ((offset (aref action 0))) + (cond ((not offset) start) + ((< offset 0) (+ end offset)) + (t (+ start offset)))) + (let ((offset (aref action 1))) + (cond ((not offset) end) + ((< offset 0) (+ end offset)) + (t (+ start offset)))) + (aref action 2))) + ((and (consp action) + (eq (car action) 'element-qname)) + (when xmltok-name-end ; maybe nil in partial-end-tag case + (nxml-fontify-qname (+ start (cdr action)) + xmltok-name-colon + xmltok-name-end + 'nxml-element-prefix-face + 'nxml-element-colon-face + 'nxml-element-local-name-face))) + ((eq action 'attributes) + (nxml-fontify-attributes)) + ((eq action 'processing-instruction-content) + (nxml-set-face (+ start 2) + xmltok-name-end + 'nxml-processing-instruction-target-face) + (nxml-set-face (save-excursion + (goto-char xmltok-name-end) + (skip-chars-forward " \t\r\n") + (point)) + (- end 2) + 'nxml-processing-instruction-content-face)) + ((eq action 'char-ref) + (nxml-char-ref-display-extra start + end + (xmltok-char-number start end))) + (t (error "Invalid nxml-fontify-rule action %s" action))))))) + +(defun nxml-fontify-attributes () + (while xmltok-namespace-attributes + (nxml-fontify-attribute (car xmltok-namespace-attributes) + 'namespace) + (setq xmltok-namespace-attributes + (cdr xmltok-namespace-attributes))) + (while xmltok-attributes + (nxml-fontify-attribute (car xmltok-attributes)) + (setq xmltok-attributes + (cdr xmltok-attributes)))) + +(defun nxml-fontify-attribute (att &optional namespace-declaration) + (if namespace-declaration + (nxml-fontify-qname (xmltok-attribute-name-start att) + (xmltok-attribute-name-colon att) + (xmltok-attribute-name-end att) + 'nxml-namespace-attribute-xmlns-face + 'nxml-namespace-attribute-colon-face + 'nxml-namespace-attribute-prefix-face + 'nxml-namespace-attribute-xmlns-face) + (nxml-fontify-qname (xmltok-attribute-name-start att) + (xmltok-attribute-name-colon att) + (xmltok-attribute-name-end att) + 'nxml-attribute-prefix-face + 'nxml-attribute-colon-face + 'nxml-attribute-local-name-face)) + (let ((start (xmltok-attribute-value-start att)) + (end (xmltok-attribute-value-end att)) + (refs (xmltok-attribute-refs att)) + (delimiter-face (if namespace-declaration + 'nxml-namespace-attribute-value-delimiter-face + 'nxml-attribute-value-delimiter-face)) + (value-face (if namespace-declaration + 'nxml-namespace-attribute-value-face + 'nxml-attribute-value-face))) + (when start + (nxml-set-face (1- start) start delimiter-face) + (nxml-set-face end (1+ end) delimiter-face) + (while refs + (let* ((ref (car refs)) + (ref-type (aref ref 0)) + (ref-start (aref ref 1)) + (ref-end (aref ref 2))) + (nxml-set-face start ref-start value-face) + (nxml-apply-fontify-rule ref-type ref-start ref-end) + (setq start ref-end)) + (setq refs (cdr refs))) + (nxml-set-face start end value-face)))) + +(defun nxml-fontify-qname (start + colon + end + prefix-face + colon-face + local-name-face + &optional + unprefixed-face) + (cond (colon (nxml-set-face start colon prefix-face) + (nxml-set-face colon (1+ colon) colon-face) + (nxml-set-face (1+ colon) end local-name-face)) + (t (nxml-set-face start end (or unprefixed-face + local-name-face))))) + +;;; Editing + +(defun nxml-electric-slash (arg) + "Insert a slash. + +With a prefix ARG, do nothing other than insert the slash. + +Otherwise, if `nxml-slash-auto-complete-flag' is non-nil, insert the +rest of the end-tag or empty-element if the slash is potentially part +of an end-tag or the close of an empty-element. + +If the slash is part of an end-tag that is the first non-whitespace +on the line, reindent the line." + (interactive "*P") + (nxml-ensure-scan-up-to-date) + (let* ((slash-pos (point)) + (end-tag-p (and (eq (char-before slash-pos) ?<) + (not (nxml-get-inside slash-pos)))) + (at-indentation (save-excursion + (back-to-indentation) + (eq (point) (1- slash-pos))))) + (self-insert-command (prefix-numeric-value arg)) + (unless arg + (if nxml-slash-auto-complete-flag + (if end-tag-p + (condition-case err + (let ((start-tag-end + (nxml-scan-element-backward (1- slash-pos) t))) + (when start-tag-end + (insert (xmltok-start-tag-qname) ">") + ;; copy the indentation of the start-tag + (when (and at-indentation + (save-excursion + (goto-char xmltok-start) + (back-to-indentation) + (eq (point) xmltok-start))) + (save-excursion + (indent-line-to (save-excursion + (goto-char xmltok-start) + (current-column))))))) + (nxml-scan-error nil)) + (when (and (eq (nxml-token-before) (point)) + (eq xmltok-type 'partial-empty-element)) + (insert ">"))) + (when (and end-tag-p at-indentation) + (nxml-indent-line)))))) + +(defun nxml-balanced-close-start-tag-block () + "Close the start-tag before point with `>' and insert a balancing end-tag. +Point is left between the start-tag and the end-tag. +If there is nothing but whitespace before the `<' that opens the +start-tag, then put point on a blank line, and put the end-tag on +another line aligned with the start-tag." + (interactive "*") + (nxml-balanced-close-start-tag 'block)) + +(defun nxml-balanced-close-start-tag-inline () + "Close the start-tag before point with `>' and insert a balancing end-tag. +Point is left between the start-tag and the end-tag. +No extra whitespace is inserted." + (interactive "*") + (nxml-balanced-close-start-tag 'inline)) + +(defun nxml-balanced-close-start-tag (block-or-inline) + (let ((token-end (nxml-token-before)) + (pos (1+ (point)))) + (unless (or (eq xmltok-type 'partial-start-tag) + (and (memq xmltok-type '(start-tag + empty-element + partial-empty-element)) + (>= token-end pos))) + (error "Not in a start-tag")) + (insert ">") + (if (eq block-or-inline 'inline) + (goto-char pos) + (goto-char xmltok-start) + (back-to-indentation) + (if (= (point) xmltok-start) + (let ((indent (current-column))) + (goto-char pos) + (insert "\n") + (indent-line-to indent) + (goto-char pos) + (insert "\n") + (indent-line-to (+ nxml-child-indent indent))) + (goto-char pos))))) + +(defun nxml-finish-element () + "Finish the current element by inserting an end-tag." + (interactive "*") + (nxml-finish-element-1 nil)) + +(defvar nxml-last-split-position nil + "Position where `nxml-split-element' split the current element.") + +(defun nxml-split-element () + "Split the current element by inserting an end-tag and a start-tag. +Point is left after the newly inserted start-tag. When repeated, +split immediately before the previously inserted start-tag and leave +point unchanged." + (interactive "*") + (setq nxml-last-split-position + (if (and (eq last-command this-command) + nxml-last-split-position) + (save-excursion + (goto-char nxml-last-split-position) + (nxml-finish-element-1 t)) + (nxml-finish-element-1 t)))) + +(defun nxml-finish-element-1 (startp) + "Insert an end-tag for the current element and optionally a start-tag. +The start-tag is inserted if STARTP is non-nil. Return the position +of the inserted start-tag or nil if none was inserted." + (interactive "*") + (let* ((token-end (nxml-token-before)) + (start-tag-end + (save-excursion + (when (and (< (point) token-end) + (memq xmltok-type + '(cdata-section + processing-instruction + comment + start-tag + end-tag + empty-element))) + (error "Point is inside a %s" + (nxml-token-type-friendly-name xmltok-type))) + (nxml-scan-element-backward token-end t))) + (starts-line + (save-excursion + (unless (eq xmltok-type 'start-tag) + (error "No matching start-tag")) + (goto-char xmltok-start) + (back-to-indentation) + (eq (point) xmltok-start))) + (ends-line + (save-excursion + (goto-char start-tag-end) + (looking-at "[ \t\r\n]*$"))) + (start-tag-indent (save-excursion + (goto-char xmltok-start) + (current-column))) + (qname (xmltok-start-tag-qname)) + inserted-start-tag-pos) + (when (and starts-line ends-line) + ;; start-tag is on a line by itself + ;; => put the end-tag on a line by itself + (unless (<= (point) + (save-excursion + (back-to-indentation) + (point))) + (insert "\n")) + (indent-line-to start-tag-indent)) + (insert "") + (when startp + (when starts-line + (insert "\n") + (indent-line-to start-tag-indent)) + (setq inserted-start-tag-pos (point)) + (insert "<" qname ">") + (when (and starts-line ends-line) + (insert "\n") + (indent-line-to (save-excursion + (goto-char xmltok-start) + (forward-line 1) + (back-to-indentation) + (if (= (current-column) + (+ start-tag-indent nxml-child-indent)) + (+ start-tag-indent nxml-child-indent) + start-tag-indent))))) + inserted-start-tag-pos)) + +;;; Indentation + +(defun nxml-indent-line () + "Indent current line as XML." + (let ((indent (nxml-compute-indent)) + (from-end (- (point-max) (point)))) + (when indent + (beginning-of-line) + (let ((bol (point))) + (skip-chars-forward " \t") + (delete-region bol (point))) + (indent-to indent) + (when (> (- (point-max) from-end) (point)) + (goto-char (- (point-max) from-end)))))) + +(defun nxml-compute-indent () + "Return the indent for the line containing point." + (or (nxml-compute-indent-from-matching-start-tag) + (nxml-compute-indent-from-previous-line))) + +(defun nxml-compute-indent-from-matching-start-tag () + "Compute the indent for a line with an end-tag using the matching start-tag. +When the line containing point ends with an end-tag and does not start +in the middle of a token, return the indent of the line containing the +matching start-tag, if there is one and it occurs at the beginning of +its line. Otherwise return nil." + (save-excursion + (back-to-indentation) + (let ((bol (point))) + (let ((inhibit-field-text-motion t)) + (end-of-line)) + (skip-chars-backward " \t") + (and (= (nxml-token-before) (point)) + (memq xmltok-type '(end-tag partial-end-tag)) + ;; start of line must not be inside a token + (or (= xmltok-start bol) + (save-excursion + (goto-char bol) + (nxml-token-after) + (= xmltok-start bol)) + (eq xmltok-type 'data)) + (condition-case err + (nxml-scan-element-backward + (point) + nil + (- (point) + nxml-end-tag-indent-scan-distance)) + (nxml-scan-error nil)) + (< xmltok-start bol) + (progn + (goto-char xmltok-start) + (skip-chars-backward " \t") + (bolp)) + (current-indentation))))) + +(defun nxml-compute-indent-from-previous-line () + "Compute the indent for a line using the indentation of a previous line." + (save-excursion + (end-of-line) + (let ((eol (point)) + bol prev-bol ref + before-context after-context) + (back-to-indentation) + (setq bol (point)) + (catch 'indent + ;; Move backwards until the start of a non-blank line that is + ;; not inside a token. + (while (progn + (when (= (forward-line -1) -1) + (throw 'indent 0)) + (back-to-indentation) + (if (looking-at "[ \t]*$") + t + (or prev-bol + (setq prev-bol (point))) + (nxml-token-after) + (not (or (= xmltok-start (point)) + (eq xmltok-type 'data)))))) + (setq ref (point)) + ;; Now scan over tokens until the end of the line to be indented. + ;; Determine the context before and after the beginning of the + ;; line. + (while (< (point) eol) + (nxml-tokenize-forward) + (cond ((<= bol xmltok-start) + (setq after-context + (nxml-merge-indent-context-type after-context))) + ((and (<= (point) bol) + (not (and (eq xmltok-type 'partial-start-tag) + (= (point) bol)))) + (setq before-context + (nxml-merge-indent-context-type before-context))) + ((eq xmltok-type 'data) + (setq before-context + (nxml-merge-indent-context-type before-context)) + (setq after-context + (nxml-merge-indent-context-type after-context))) + ;; If in the middle of a token that looks inline, + ;; then indent relative to the previous non-blank line + ((eq (nxml-merge-indent-context-type before-context) + 'mixed) + (goto-char prev-bol) + (throw 'indent (current-column))) + (t + (throw 'indent + (nxml-compute-indent-in-token bol)))) + (skip-chars-forward " \t\r\n")) + (goto-char ref) + (+ (current-column) + (* nxml-child-indent + (+ (if (eq before-context 'start-tag) 1 0) + (if (eq after-context 'end-tag) -1 0)))))))) + +(defun nxml-merge-indent-context-type (context) + "Merge the indent context type CONTEXT with the token in `xmltok-type'. +Return the merged indent context type. An indent context type is +either nil or one of the symbols start-tag, end-tag, markup, comment, +mixed." + (cond ((memq xmltok-type '(start-tag partial-start-tag)) + (if (memq context '(nil start-tag comment)) + 'start-tag + 'mixed)) + ((memq xmltok-type '(end-tag partial-end-tag)) + (if (memq context '(nil end-tag comment)) + 'end-tag + 'mixed)) + ((eq xmltok-type 'comment) + (cond ((memq context '(start-tag end-tag comment)) + context) + (context 'mixed) + (t 'comment))) + (context 'mixed) + (t 'markup))) + +(defun nxml-compute-indent-in-token (pos) + "Return the indent for a line that starts inside a token. +POS is the position of the first non-whitespace character of the line. +This expects the xmltok-* variables to be set up as by `xmltok-forward'." + (cond ((memq xmltok-type '(start-tag + partial-start-tag + empty-element + partial-empty-element)) + (nxml-compute-indent-in-start-tag pos)) + ((eq xmltok-type 'comment) + (nxml-compute-indent-in-delimited-token pos "")) + ((eq xmltok-type 'cdata-section) + (nxml-compute-indent-in-delimited-token pos "")) + ((eq xmltok-type 'processing-instruction) + (nxml-compute-indent-in-delimited-token pos "")) + (t + (goto-char pos) + (if (and (= (forward-line -1) 0) + (< xmltok-start (point))) + (back-to-indentation) + (goto-char xmltok-start)) + (current-column)))) + +(defun nxml-compute-indent-in-start-tag (pos) + "Return the indent for a line that starts inside a start-tag. +Also for a line that starts inside an empty element. +POS is the position of the first non-whitespace character of the line. +This expects the xmltok-* variables to be set up as by `xmltok-forward'." + (let ((value-boundary (nxml-attribute-value-boundary pos)) + (off 0)) + (if value-boundary + ;; inside an attribute value + (let ((value-start (car value-boundary)) + (value-end (cdr value-boundary))) + (goto-char pos) + (forward-line -1) + (if (< (point) value-start) + (goto-char value-start) + (back-to-indentation))) + ;; outside an attribute value + (goto-char pos) + (while (and (= (forward-line -1) 0) + (nxml-attribute-value-boundary (point)))) + (cond ((<= (point) xmltok-start) + (goto-char xmltok-start) + (setq off nxml-attribute-indent) + (let ((atts (xmltok-merge-attributes))) + (when atts + (let* ((att (car atts)) + (start (xmltok-attribute-name-start att))) + (when (< start pos) + (goto-char start) + (setq off 0)))))) + (t + (back-to-indentation)))) + (+ (current-column) off))) + +(defun nxml-attribute-value-boundary (pos) + "Return a pair (START . END) if POS is inside an attribute value. +Otherwise return nil. START and END are the positions of the start +and end of the attribute value containing POS. This expects the +xmltok-* variables to be set up as by `xmltok-forward'." + (let ((atts (xmltok-merge-attributes)) + att value-start value-end value-boundary) + (while atts + (setq att (car atts)) + (setq value-start (xmltok-attribute-value-start att)) + (setq value-end (xmltok-attribute-value-end att)) + (cond ((and value-start (< pos value-start)) + (setq atts nil)) + ((and value-start value-end (<= pos value-end)) + (setq value-boundary (cons value-start value-end)) + (setq atts nil)) + (t (setq atts (cdr atts))))) + value-boundary)) + +(defun nxml-compute-indent-in-delimited-token (pos open-delim close-delim) + "Return the indent for a line that starts inside a token with delimiters. +OPEN-DELIM and CLOSE-DELIM are strings giving the opening and closing +delimiters. POS is the position of the first non-whitespace character +of the line. This expects the xmltok-* variables to be set up as by +`xmltok-forward'." + (cond ((let ((end (+ pos (length close-delim)))) + (and (<= end (point-max)) + (string= (buffer-substring-no-properties pos end) + close-delim))) + (goto-char xmltok-start)) + ((progn + (goto-char pos) + (forward-line -1) + (<= (point) xmltok-start)) + (goto-char (+ xmltok-start (length open-delim))) + (when (and (string= open-delim ". This is not an unexpected situation if the user is +;; creating a comment. It is not helpful to treat the whole of the +;; file starting from the gets added to the buffer after the unclosed + ;; and suppose we deleted " end nxml-scan-end) + (set-marker nxml-scan-end end)) + end)) + +;; n-s-p only called from nxml-mode.el, where this variable is defined. +(defvar nxml-prolog-regions) + +(defun nxml-scan-prolog () + (goto-char (point-min)) + (let (xmltok-dtd + xmltok-errors + xmltok-dependent-regions) + (setq nxml-prolog-regions (xmltok-forward-prolog)) + (setq nxml-prolog-end (point)) + (nxml-clear-inside (point-min) nxml-prolog-end) + (nxml-clear-dependent-regions (point-min) nxml-prolog-end) + (nxml-mark-parse-dependent-regions)) + (when (< nxml-scan-end nxml-prolog-end) + (set-marker nxml-scan-end nxml-prolog-end))) + + +;;; Dependent regions + +(defun nxml-adjust-start-for-dependent-regions (start end pre-change-length) + (let ((overlays (overlays-in (1- start) start)) + (adjusted-start start)) + (while overlays + (let* ((overlay (car overlays)) + (ostart (overlay-start overlay))) + (when (and (eq (overlay-get overlay 'category) 'nxml-dependent) + (< ostart adjusted-start)) + (let ((funargs (overlay-get overlay 'nxml-funargs))) + (when (apply (car funargs) + (append (list start + end + pre-change-length + ostart + (overlay-end overlay)) + (cdr funargs))) + (setq adjusted-start ostart))))) + (setq overlays (cdr overlays))) + adjusted-start)) + +(defun nxml-mark-parse-dependent-regions () + (while xmltok-dependent-regions + (apply 'nxml-mark-parse-dependent-region + (car xmltok-dependent-regions)) + (setq xmltok-dependent-regions + (cdr xmltok-dependent-regions)))) + +(defun nxml-mark-parse-dependent-region (fun start end &rest args) + (let ((overlay (make-overlay start end nil t t))) + (overlay-put overlay 'category 'nxml-dependent) + (overlay-put overlay 'nxml-funargs (cons fun args)))) + +(put 'nxml-dependent 'evaporate t) + +(defun nxml-clear-dependent-regions (start end) + (let ((overlays (overlays-in start end))) + (while overlays + (let* ((overlay (car overlays)) + (category (overlay-get overlay 'category))) + (when (and (eq category 'nxml-dependent) + (<= start (overlay-start overlay))) + (delete-overlay overlay))) + (setq overlays (cdr overlays))))) + +;;; Random access parsing + +(defun nxml-token-after () + "Return the position after the token containing the char after point. +Sets up the variables `xmltok-type', `xmltok-start', +`xmltok-name-end', `xmltok-name-colon', `xmltok-attributes', +`xmltok-namespace-attributes' in the same was as does +`xmltok-forward'. The prolog will be treated as a single token with +type `prolog'." + (let ((pos (point))) + (if (< pos nxml-prolog-end) + (progn + (setq xmltok-type 'prolog + xmltok-start (point-min)) + (min nxml-prolog-end (point-max))) + (nxml-ensure-scan-up-to-date) + (if (nxml-get-inside pos) + (save-excursion + (nxml-move-outside-backwards) + (xmltok-forward) + (point)) + (save-excursion + (if (or (eq (char-after) ?<) + (search-backward "<" + (max (point-min) nxml-prolog-end) + t)) + (nxml-move-outside-backwards) + (goto-char (if (<= (point-min) nxml-prolog-end) + nxml-prolog-end + (or (nxml-inside-end (point-min)) + (point-min))))) + (while (and (nxml-tokenize-forward) + (<= (point) pos))) + (point)))))) + +(defun nxml-token-before () + "Return the position after the token containing the char before point. +Sets variables like `nxml-token-after'." + (if (/= (point-min) (point)) + (save-excursion + (goto-char (1- (point))) + (nxml-token-after)) + (setq xmltok-start (point)) + (setq xmltok-type nil) + (point))) + +(defun nxml-tokenize-forward () + (let (xmltok-dependent-regions + xmltok-errors) + (when (and (xmltok-forward) + (> (point) nxml-scan-end)) + (cond ((memq xmltok-type '(comment + cdata-section + processing-instruction)) + (nxml-with-unmodifying-text-property-changes + (nxml-set-inside (1+ xmltok-start) (point) xmltok-type))) + (xmltok-dependent-regions + (nxml-mark-parse-dependent-regions))) + (set-marker nxml-scan-end (point))) + xmltok-type)) + +(defun nxml-move-outside-backwards () + "Move point to first character of the containing special thing. +Leave point unmoved if it is not inside anything special." + (let ((start (nxml-inside-start (point)))) + (when start + (goto-char (1- start)) + (when (nxml-get-inside (point)) + (error "Char before inside-start at %s had nxml-inside property %s" + (point) + (nxml-get-inside (point))))))) + +(defun nxml-ensure-scan-up-to-date () + (let ((pos (point))) + (when (< nxml-scan-end pos) + (save-excursion + (goto-char nxml-scan-end) + (let (xmltok-errors + xmltok-dependent-regions) + (while (when (xmltok-forward-special pos) + (when (memq xmltok-type + '(comment + processing-instruction + cdata-section)) + (nxml-with-unmodifying-text-property-changes + (nxml-set-inside (1+ xmltok-start) + (point) + xmltok-type))) + (if (< (point) pos) + t + (setq pos (point)) + nil))) + (nxml-clear-dependent-regions nxml-scan-end pos) + (nxml-mark-parse-dependent-regions) + (set-marker nxml-scan-end pos)))))) + +;;; Element scanning + +(defun nxml-scan-element-forward (from &optional up) + "Scan forward from FROM over a single balanced element. +Point must between tokens. Return the position of the end of the tag +that ends the element. `xmltok-start' will contain the position of the +start of the tag. If UP is non-nil, then scan past end-tag of element +containing point. If no element is found, return nil. If a +well-formedness error prevents scanning, signal an nxml-scan-error. +Point is not moved." + (let ((open-tags (and up t)) + found) + (save-excursion + (goto-char from) + (while (cond ((not (nxml-tokenize-forward)) + (when (consp open-tags) + (nxml-scan-error (cadr open-tags) + "Start-tag has no end-tag")) + nil) + ((eq xmltok-type 'start-tag) + (setq open-tags + (cons (xmltok-start-tag-qname) + (cons xmltok-start + open-tags))) + t) + ((eq xmltok-type 'end-tag) + (cond ((not open-tags) nil) + ((not (consp open-tags)) (setq found (point)) nil) + ((not (string= (car open-tags) + (xmltok-end-tag-qname))) + (nxml-scan-error (+ 2 xmltok-start) + "Mismatched end-tag; \ +expected `%s'" + (car open-tags))) + ((setq open-tags (cddr open-tags)) t) + (t (setq found (point)) nil))) + ((memq xmltok-type '(empty-element + partial-empty-element)) + (if open-tags + t + (setq found (point)) + nil)) + ((eq xmltok-type 'partial-end-tag) + (cond ((not open-tags) nil) + ((not (consp open-tags)) (setq found (point)) nil) + ((setq open-tags (cddr open-tags)) t) + (t (setq found (point)) nil))) + ((eq xmltok-type 'partial-start-tag) + (nxml-scan-error xmltok-start + "Missing `>'")) + (t t)))) + found)) + +(defun nxml-scan-element-backward (from &optional up bound) + "Scan backward from FROM over a single balanced element. +Point must between tokens. Return the position of the end of the tag +that starts the element. `xmltok-start' will contain the position of +the start of the tag. If UP is non-nil, then scan past start-tag of +element containing point. If BOUND is non-nil, then don't scan back +past BOUND. If no element is found, return nil. If a well-formedness +error prevents scanning, signal an nxml-scan-error. Point is not +moved." + (let ((open-tags (and up t)) + token-end found) + (save-excursion + (goto-char from) + (while (cond ((or (< (point) nxml-prolog-end) + (not (search-backward "<" + (max (or bound 0) + nxml-prolog-end) + t))) + (when (and (consp open-tags) (not bound)) + (nxml-scan-error (cadr open-tags) + "End-tag has no start-tag")) + nil) + ((progn + (nxml-move-outside-backwards) + (save-excursion + (nxml-tokenize-forward) + (setq token-end (point))) + (eq xmltok-type 'end-tag)) + (setq open-tags + (cons (xmltok-end-tag-qname) + (cons xmltok-start open-tags))) + t) + ((eq xmltok-type 'start-tag) + (cond ((not open-tags) nil) + ((not (consp open-tags)) + (setq found token-end) + nil) + ((and (car open-tags) + (not (string= (car open-tags) + (xmltok-start-tag-qname)))) + (nxml-scan-error (1+ xmltok-start) + "Mismatched start-tag; \ +expected `%s'" + (car open-tags))) + ((setq open-tags (cddr open-tags)) t) + (t (setq found token-end) nil))) + ((memq xmltok-type '(empty-element + partial-empty-element)) + (if open-tags + t + (setq found token-end) + nil)) + ((eq xmltok-type 'partial-end-tag) + (setq open-tags + (cons nil (cons xmltok-start open-tags))) + t) + ((eq xmltok-type 'partial-start-tag) + ;; if we have only a partial-start-tag + ;; then it's unlikely that there's a matching + ;; end-tag, so it's probably not helpful + ;; to treat it as a complete start-tag + (nxml-scan-error xmltok-start + "Missing `>'")) + (t t)))) + found)) + +(defun nxml-scan-error (&rest args) + (signal 'nxml-scan-error args)) + +(put 'nxml-scan-error + 'error-conditions + '(error nxml-error nxml-scan-error)) + +(put 'nxml-scan-error + 'error-message + "Scan over element that is not well-formed") + +(provide 'nxml-rap) + +;; arch-tag: cba241ec-4c59-4ef3-aa51-2cf92b3dd24f +;;; nxml-rap.el ends here diff --git a/lisp/nxml/nxml-uchnm.el b/lisp/nxml/nxml-uchnm.el new file mode 100644 index 00000000000..9514a7de476 --- /dev/null +++ b/lisp/nxml/nxml-uchnm.el @@ -0,0 +1,259 @@ +;;; nxml-uchnm.el --- support for Unicode standard cha names in nxml-mode + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; 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 enables the use of the character names defined in the Unicode +;; Standard. The use of the names can be controlled on a per-block +;; basis, so as both to reduce memory usage and loading time, +;; and to make completion work better. +;; The main entry point is `nxml-enable-unicode-char-name-sets'. Typically, +;; this is added to `nxml-mode-hook' (rng-auto.el does this already). +;; To customize the blocks for which names are used + +;;; Code: + +(require 'nxml-mode) + +(defconst nxml-unicode-blocks + '(("Basic Latin" #x0000 #x007F) + ("Latin-1 Supplement" #x0080 #x00FF) + ("Latin Extended-A" #x0100 #x017F) + ("Latin Extended-B" #x0180 #x024F) + ("IPA Extensions" #x0250 #x02AF) + ("Spacing Modifier Letters" #x02B0 #x02FF) + ("Combining Diacritical Marks" #x0300 #x036F) + ("Greek and Coptic" #x0370 #x03FF) + ("Cyrillic" #x0400 #x04FF) + ("Cyrillic Supplementary" #x0500 #x052F) + ("Armenian" #x0530 #x058F) + ("Hebrew" #x0590 #x05FF) + ("Arabic" #x0600 #x06FF) + ("Syriac" #x0700 #x074F) + ("Thaana" #x0780 #x07BF) + ("Devanagari" #x0900 #x097F) + ("Bengali" #x0980 #x09FF) + ("Gurmukhi" #x0A00 #x0A7F) + ("Gujarati" #x0A80 #x0AFF) + ("Oriya" #x0B00 #x0B7F) + ("Tamil" #x0B80 #x0BFF) + ("Telugu" #x0C00 #x0C7F) + ("Kannada" #x0C80 #x0CFF) + ("Malayalam" #x0D00 #x0D7F) + ("Sinhala" #x0D80 #x0DFF) + ("Thai" #x0E00 #x0E7F) + ("Lao" #x0E80 #x0EFF) + ("Tibetan" #x0F00 #x0FFF) + ("Myanmar" #x1000 #x109F) + ("Georgian" #x10A0 #x10FF) + ("Hangul Jamo" #x1100 #x11FF) + ("Ethiopic" #x1200 #x137F) + ("Cherokee" #x13A0 #x13FF) + ("Unified Canadian Aboriginal Syllabics" #x1400 #x167F) + ("Ogham" #x1680 #x169F) + ("Runic" #x16A0 #x16FF) + ("Tagalog" #x1700 #x171F) + ("Hanunoo" #x1720 #x173F) + ("Buhid" #x1740 #x175F) + ("Tagbanwa" #x1760 #x177F) + ("Khmer" #x1780 #x17FF) + ("Mongolian" #x1800 #x18AF) + ("Latin Extended Additional" #x1E00 #x1EFF) + ("Greek Extended" #x1F00 #x1FFF) + ("General Punctuation" #x2000 #x206F) + ("Superscripts and Subscripts" #x2070 #x209F) + ("Currency Symbols" #x20A0 #x20CF) + ("Combining Diacritical Marks for Symbols" #x20D0 #x20FF) + ("Letterlike Symbols" #x2100 #x214F) + ("Number Forms" #x2150 #x218F) + ("Arrows" #x2190 #x21FF) + ("Mathematical Operators" #x2200 #x22FF) + ("Miscellaneous Technical" #x2300 #x23FF) + ("Control Pictures" #x2400 #x243F) + ("Optical Character Recognition" #x2440 #x245F) + ("Enclosed Alphanumerics" #x2460 #x24FF) + ("Box Drawing" #x2500 #x257F) + ("Block Elements" #x2580 #x259F) + ("Geometric Shapes" #x25A0 #x25FF) + ("Miscellaneous Symbols" #x2600 #x26FF) + ("Dingbats" #x2700 #x27BF) + ("Miscellaneous Mathematical Symbols-A" #x27C0 #x27EF) + ("Supplemental Arrows-A" #x27F0 #x27FF) + ("Braille Patterns" #x2800 #x28FF) + ("Supplemental Arrows-B" #x2900 #x297F) + ("Miscellaneous Mathematical Symbols-B" #x2980 #x29FF) + ("Supplemental Mathematical Operators" #x2A00 #x2AFF) + ("CJK Radicals Supplement" #x2E80 #x2EFF) + ("Kangxi Radicals" #x2F00 #x2FDF) + ("Ideographic Description Characters" #x2FF0 #x2FFF) + ("CJK Symbols and Punctuation" #x3000 #x303F) + ("Hiragana" #x3040 #x309F) + ("Katakana" #x30A0 #x30FF) + ("Bopomofo" #x3100 #x312F) + ("Hangul Compatibility Jamo" #x3130 #x318F) + ("Kanbun" #x3190 #x319F) + ("Bopomofo Extended" #x31A0 #x31BF) + ("Katakana Phonetic Extensions" #x31F0 #x31FF) + ("Enclosed CJK Letters and Months" #x3200 #x32FF) + ("CJK Compatibility" #x3300 #x33FF) + ("CJK Unified Ideographs Extension A" #x3400 #x4DBF) + ;;("CJK Unified Ideographs" #x4E00 #x9FFF) + ("Yi Syllables" #xA000 #xA48F) + ("Yi Radicals" #xA490 #xA4CF) + ;;("Hangul Syllables" #xAC00 #xD7AF) + ;;("High Surrogates" #xD800 #xDB7F) + ;;("High Private Use Surrogates" #xDB80 #xDBFF) + ;;("Low Surrogates" #xDC00 #xDFFF) + ;;("Private Use Area" #xE000 #xF8FF) + ;;("CJK Compatibility Ideographs" #xF900 #xFAFF) + ("Alphabetic Presentation Forms" #xFB00 #xFB4F) + ("Arabic Presentation Forms-A" #xFB50 #xFDFF) + ("Variation Selectors" #xFE00 #xFE0F) + ("Combining Half Marks" #xFE20 #xFE2F) + ("CJK Compatibility Forms" #xFE30 #xFE4F) + ("Small Form Variants" #xFE50 #xFE6F) + ("Arabic Presentation Forms-B" #xFE70 #xFEFF) + ("Halfwidth and Fullwidth Forms" #xFF00 #xFFEF) + ("Specials" #xFFF0 #xFFFF) + ("Old Italic" #x10300 #x1032F) + ("Gothic" #x10330 #x1034F) + ("Deseret" #x10400 #x1044F) + ("Byzantine Musical Symbols" #x1D000 #x1D0FF) + ("Musical Symbols" #x1D100 #x1D1FF) + ("Mathematical Alphanumeric Symbols" #x1D400 #x1D7FF) + ;;("CJK Unified Ideographs Extension B" #x20000 #x2A6DF) + ;;("CJK Compatibility Ideographs Supplement" #x2F800 #x2FA1F) + ("Tags" #xE0000 #xE007F) + ;;("Supplementary Private Use Area-A" #xF0000 #xFFFFF) + ;;("Supplementary Private Use Area-B" #x100000 #x10FFFF) + ) + "List of Unicode blocks. +For each block there is a list (NAME FIRST LAST), where +NAME is a string giving the offical name of the block, +FIRST is the first code-point and LAST is the last code-point. +Blocks containing only characters with algorithmic names or no names +are omitted.") + +(defun nxml-unicode-block-char-name-set (name) + "Return a symbol for a block whose offical Unicode name is NAME. +The symbol is generated by downcasing and replacing each space +by a hyphen." + (intern (replace-regexp-in-string " " "-" (downcase name)))) + +;; This is intended to be a superset of the coverage +;; of existing standard entity sets. +(defvar nxml-enabled-unicode-blocks-default + '(basic-latin + latin-1-supplement + latin-extended-a + latin-extended-b + ipa-extensions + spacing-modifier-letters + combining-diacritical-marks + greek-and-coptic + cyrillic + general-punctuation + superscripts-and-subscripts + currency-symbols + combining-diacritical-marks-for-symbols + letterlike-symbols + number-forms + arrows + mathematical-operators + miscellaneous-technical + control-pictures + optical-character-recognition + enclosed-alphanumerics + box-drawing + block-elements + geometric-shapes + miscellaneous-symbols + dingbats + miscellaneous-mathematical-symbols-a + supplemental-arrows-a + supplemental-arrows-b + miscellaneous-mathematical-symbols-b + supplemental-mathematical-operators + cjk-symbols-and-punctuation + alphabetic-presentation-forms + variation-selectors + small-form-variants + specials + mathematical-alphanumeric-symbols) + "Default value for `nxml-enabled-unicode-blocks'.") + +(mapc (lambda (block) + (nxml-autoload-char-name-set + (nxml-unicode-block-char-name-set (car block)) + (expand-file-name + (format "nxml/%05X-%05X" + (nth 1 block) + (nth 2 block)) + data-directory))) + nxml-unicode-blocks) + +(defvar nxml-enable-unicode-char-name-sets-flag nil) + +(defcustom nxml-enabled-unicode-blocks nxml-enabled-unicode-blocks-default + "List of Unicode blocks for which Unicode character names are enabled. +Each block is identified by a symbol derived from the name +of the block by downcasing and replacing each space by a hyphen." + :group 'nxml + :set (lambda (sym value) + (set-default 'nxml-enabled-unicode-blocks value) + (when nxml-enable-unicode-char-name-sets-flag + (nxml-enable-unicode-char-name-sets-1))) + :type (cons 'set + (mapcar (lambda (block) + `(const :tag ,(format "%s (%04X-%04X)" + (nth 0 block) + (nth 1 block) + (nth 2 block)) + ,(nxml-unicode-block-char-name-set + (nth 0 block)))) + nxml-unicode-blocks))) + +;;;###autoload +(defun nxml-enable-unicode-char-name-sets () + "Enable the use of Unicode standard names for characters. +The Unicode blocks for which names are enabled is controlled by +the variable `nxml-enabled-unicode-blocks'." + (interactive) + (setq nxml-char-name-ignore-case t) + (setq nxml-enable-unicode-char-name-sets-flag t) + (nxml-enable-unicode-char-name-sets-1)) + +(defun nxml-enable-unicode-char-name-sets-1 () + (mapc (lambda (block) + (nxml-disable-char-name-set + (nxml-unicode-block-char-name-set (car block)))) + nxml-unicode-blocks) + (mapc (lambda (nameset) + (nxml-enable-char-name-set nameset)) + nxml-enabled-unicode-blocks)) + +(provide 'nxml-uchnm) + +;; arch-tag: 440248c3-b604-467c-8b50-e83662c659a3 +;;; nxml-uchnm.el ends here diff --git a/lisp/nxml/nxml-util.el b/lisp/nxml/nxml-util.el new file mode 100644 index 00000000000..73b8354ddf6 --- /dev/null +++ b/lisp/nxml/nxml-util.el @@ -0,0 +1,103 @@ +;;; nxml-util.el --- utility functions for nxml-*.el + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(defun nxml-make-namespace (str) + "Return a symbol for the namespace URI STR. +STR must be a string. If STR is the empty string, return nil. +Otherwise, return the symbol whose name is STR prefixed with a colon." + (if (string-equal str "") + nil + (intern (concat ":" str)))) + +(defun nxml-namespace-name (ns) + "Return the namespace URI corresponding to the symbol NS. +This is the inverse of `nxml-make-namespace'." + (and ns (substring (symbol-name ns) 1))) + +(defconst nxml-xml-namespace-uri + (nxml-make-namespace "http://www.w3.org/XML/1998/namespace")) + +(defconst nxml-xmlns-namespace-uri + (nxml-make-namespace "http://www.w3.org/2000/xmlns/")) + +(defmacro nxml-with-unmodifying-text-property-changes (&rest body) + "Evaluate BODY without any text property changes modifying the buffer. +Any text properties changes happen as usual but the changes are not treated as +modifications to the buffer." + (let ((modified (make-symbol "modified"))) + `(let ((,modified (buffer-modified-p)) + (inhibit-read-only t) + (inhibit-modification-hooks t) + (buffer-undo-list t) + (deactivate-mark nil) + ;; Apparently these avoid file locking problems. + (buffer-file-name nil) + (buffer-file-truename nil)) + (unwind-protect + (progn ,@body) + (unless ,modified + (restore-buffer-modified-p nil)))))) + +(put 'nxml-with-unmodifying-text-property-changes 'lisp-indent-function 0) +(def-edebug-spec nxml-with-unmodifying-text-property-changes t) + +(defmacro nxml-with-invisible-motion (&rest body) + "Evaluate body without calling any point motion hooks." + `(let ((inhibit-point-motion-hooks t)) + ,@body)) + +(put 'nxml-with-invisible-motion 'lisp-indent-function 0) +(def-edebug-spec nxml-with-invisible-motion t) + +(defun nxml-display-file-parse-error (err) + (let* ((filename (nth 1 err)) + (buffer (find-file-noselect filename)) + (pos (nth 2 err)) + (message (nth 3 err))) + (pop-to-buffer buffer) + ;; What's the right thing to do if the buffer's modified? + ;; The position in the saved file could be completely different. + (goto-char (if (buffer-modified-p) 1 pos)) + (error "%s" message))) + +(defun nxml-signal-file-parse-error (file pos message &optional error-symbol) + (signal (or error-symbol 'nxml-file-parse-error) + (list file pos message))) + +(put 'nxml-file-parse-error + 'error-conditions + '(error nxml-file-parse-error)) + +(put 'nxml-parse-file-error + 'error-message + "Error parsing file") + +(provide 'nxml-util) + +;; arch-tag: 7d3b3af4-de2b-4410-bf67-94d64824324b +;;; nxml-util.el ends here diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el new file mode 100644 index 00000000000..a83af6ad077 --- /dev/null +++ b/lisp/nxml/rng-cmpct.el @@ -0,0 +1,941 @@ +;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; 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 parses a RELAX NG Compact Syntax schema into the form +;; specified in rng-pttrn.el. +;; +;; RELAX NG Compact Syntax is specified by +;; http://relaxng.org/compact.html +;; +;; This file uses the prefix "rng-c-". + +;;; Code: + +(require 'nxml-util) +(require 'rng-util) +(require 'rng-uri) +(require 'rng-pttrn) + +;;;###autoload +(defun rng-c-load-schema (filename) + "Load a schema in RELAX NG compact syntax from FILENAME. +Return a pattern." + (rng-c-parse-file filename)) + +;;; Error handling + +(put 'rng-c-incorrect-schema + 'error-conditions + '(error rng-error nxml-file-parse-error rng-c-incorrect-schema)) + +(put 'rng-c-incorrect-schema + 'error-message + "Incorrect schema") + +(defun rng-c-signal-incorrect-schema (filename pos message) + (nxml-signal-file-parse-error filename + pos + message + 'rng-c-incorrect-schema)) + +;;; Lexing + +(defconst rng-c-keywords + '("attribute" + "default" + "datatypes" + "div" + "element" + "empty" + "external" + "grammar" + "include" + "inherit" + "list" + "mixed" + "namespace" + "notAllowed" + "parent" + "start" + "string" + "text" + "token") + "List of strings that are keywords in the compact syntax.") + +(defconst rng-c-anchored-keyword-re + (concat "\\`\\(" (regexp-opt rng-c-keywords) "\\)\\'") + "Regular expression to match a keyword in the compact syntax.") + +(defvar rng-c-syntax-table nil + "Syntax table for parsing the compact syntax.") + +(if rng-c-syntax-table + () + (setq rng-c-syntax-table (make-syntax-table)) + (modify-syntax-entry ?# "<" rng-c-syntax-table) + (modify-syntax-entry ?\n ">" rng-c-syntax-table) + (modify-syntax-entry ?- "w" rng-c-syntax-table) + (modify-syntax-entry ?. "w" rng-c-syntax-table) + (modify-syntax-entry ?_ "w" rng-c-syntax-table) + (modify-syntax-entry ?: "_" rng-c-syntax-table)) + +(defconst rng-c-literal-1-re + "'\\(''\\([^']\\|'[^']\\|''[^']\\)*''\\|[^'\n]*\\)'" + "Regular expression to match a single-quoted literal.") + +(defconst rng-c-literal-2-re + (replace-regexp-in-string "'" "\"" rng-c-literal-1-re) + "Regular expression to match a double-quoted literal.") + +(defconst rng-c-ncname-re "\\w+") + +(defconst rng-c-anchored-ncname-re + (concat "\\`" rng-c-ncname-re "\\'")) + +(defconst rng-c-token-re + (concat "[&|]=" "\\|" + "[][()|&,*+?{}~=-]" "\\|" + rng-c-literal-1-re "\\|" + rng-c-literal-2-re "\\|" + rng-c-ncname-re "\\(:\\(\\*\\|" rng-c-ncname-re "\\)\\)?" "\\|" + "\\\\" rng-c-ncname-re "\\|" + ">>") + "Regular expression to match a token in the compact syntax.") + +(defun rng-c-init-buffer () + (setq case-fold-search nil) ; automatically becomes buffer-local when set + (set-buffer-multibyte t) + (set-syntax-table rng-c-syntax-table)) + +(defvar rng-c-current-token nil) +(make-variable-buffer-local 'rng-c-current-token) + +(defun rng-c-advance () + (cond ((looking-at rng-c-token-re) + (setq rng-c-current-token (match-string 0)) + (goto-char (match-end 0)) + (forward-comment (point-max))) + ((= (point) (point-max)) + (setq rng-c-current-token "")) + (t (rng-c-error "Invalid token")))) + +(defconst rng-c-anchored-datatype-name-re + (concat "\\`" rng-c-ncname-re ":" rng-c-ncname-re "\\'")) + +(defsubst rng-c-current-token-keyword-p () + (string-match rng-c-anchored-keyword-re rng-c-current-token)) + +(defsubst rng-c-current-token-prefixed-name-p () + (string-match rng-c-anchored-datatype-name-re rng-c-current-token)) + +(defsubst rng-c-current-token-literal-p () + (string-match "\\`['\"]" rng-c-current-token)) + +(defsubst rng-c-current-token-quoted-identifier-p () + (string-match "\\`\\\\" rng-c-current-token)) + +(defsubst rng-c-current-token-ncname-p () + (string-match rng-c-anchored-ncname-re rng-c-current-token)) + +(defsubst rng-c-current-token-ns-name-p () + (let ((len (length rng-c-current-token))) + (and (> len 0) + (= (aref rng-c-current-token (- len 1)) ?*)))) + +;;; Namespaces + +(defvar rng-c-inherit-namespace nil) + +(defvar rng-c-default-namespace nil) + +(defvar rng-c-default-namespace-declared nil) + +(defvar rng-c-namespace-decls nil + "Alist of namespace declarations.") + +(defconst rng-c-no-namespace nil) + +(defun rng-c-declare-standard-namespaces () + (setq rng-c-namespace-decls + (cons (cons "xml" nxml-xml-namespace-uri) + rng-c-namespace-decls)) + (when (and (not rng-c-default-namespace-declared) + rng-c-inherit-namespace) + (setq rng-c-default-namespace rng-c-inherit-namespace))) + +(defun rng-c-expand-name (prefixed-name) + (let ((i (string-match ":" prefixed-name))) + (rng-make-name (rng-c-lookup-prefix (substring prefixed-name + 0 + i)) + (substring prefixed-name (+ i 1))))) + +(defun rng-c-lookup-prefix (prefix) + (let ((binding (assoc prefix rng-c-namespace-decls))) + (or binding (rng-c-error "Undefined prefix %s" prefix)) + (cdr binding))) + +(defun rng-c-unqualified-namespace (attribute) + (if attribute + rng-c-no-namespace + rng-c-default-namespace)) + +(defun rng-c-make-context () + (cons rng-c-default-namespace rng-c-namespace-decls)) + +;;; Datatypes + +(defconst rng-string-datatype + (rng-make-datatype rng-builtin-datatypes-uri "string")) + +(defconst rng-token-datatype + (rng-make-datatype rng-builtin-datatypes-uri "token")) + +(defvar rng-c-datatype-decls nil + "Alist of datatype declarations. +Contains a list of pairs (PREFIX . URI) where PREFIX is a string +and URI is a symbol.") + +(defun rng-c-declare-standard-datatypes () + (setq rng-c-datatype-decls + (cons (cons "xsd" rng-xsd-datatypes-uri) + rng-c-datatype-decls))) + +(defun rng-c-lookup-datatype-prefix (prefix) + (let ((binding (assoc prefix rng-c-datatype-decls))) + (or binding (rng-c-error "Undefined prefix %s" prefix)) + (cdr binding))) + +(defun rng-c-expand-datatype (prefixed-name) + (let ((i (string-match ":" prefixed-name))) + (rng-make-datatype + (rng-c-lookup-datatype-prefix (substring prefixed-name 0 i)) + (substring prefixed-name (+ i 1))))) + +;;; Grammars + +(defvar rng-c-current-grammar nil) +(defvar rng-c-parent-grammar nil) + +(defun rng-c-make-grammar () + (make-hash-table :test 'equal)) + +(defconst rng-c-about-override-slot 0) +(defconst rng-c-about-combine-slot 1) + +(defun rng-c-lookup-create (name grammar) + "Return a def object for NAME. A def object is a pair +\(ABOUT . REF) where REF is returned by `rng-make-ref'. ABOUT is a +two-element vector [OVERRIDE COMBINE]. COMBINE is either nil, choice +or interleave. OVERRIDE is either nil, require or t." + (let ((def (gethash name grammar))) + (if def + def + (progn + (setq def (cons (vector nil nil) (rng-make-ref name))) + (puthash name def grammar) + def)))) + +(defun rng-c-make-ref (name) + (or rng-c-current-grammar + (rng-c-error "Reference not in a grammar")) + (cdr (rng-c-lookup-create name rng-c-current-grammar))) + +(defun rng-c-make-parent-ref (name) + (or rng-c-parent-grammar + (rng-c-error "Reference to non-existent parent grammar")) + (cdr (rng-c-lookup-create name rng-c-parent-grammar))) + +(defvar rng-c-overrides nil + "Contains a list of (NAME . DEF) pairs.") + +(defun rng-c-merge-combine (def combine name) + (let* ((about (car def)) + (current-combine (aref about rng-c-about-combine-slot))) + (if combine + (if current-combine + (or (eq combine current-combine) + (rng-c-error "Inconsistent combine for %s" name)) + (aset about rng-c-about-combine-slot combine)) + current-combine))) + +(defun rng-c-prepare-define (name combine in-include) + (let* ((def (rng-c-lookup-create name rng-c-current-grammar)) + (about (car def)) + (overridden (aref about rng-c-about-override-slot))) + (and in-include + (setq rng-c-overrides (cons (cons name def) rng-c-overrides))) + (cond (overridden (and (eq overridden 'require) + (aset about rng-c-about-override-slot t)) + nil) + (t (setq combine (rng-c-merge-combine def combine name)) + (and (rng-ref-get (cdr def)) + (not combine) + (rng-c-error "Duplicate definition of %s" name)) + def)))) + +(defun rng-c-start-include (overrides) + (mapcar (lambda (name-def) + (let* ((def (cdr name-def)) + (about (car def)) + (save (aref about rng-c-about-override-slot))) + (aset about rng-c-about-override-slot 'require) + (cons save name-def))) + overrides)) + +(defun rng-c-end-include (overrides) + (mapcar (lambda (o) + (let* ((saved (car o)) + (name-def (cdr o)) + (name (car name-def)) + (def (cdr name-def)) + (about (car def))) + (and (eq (aref about rng-c-about-override-slot) 'require) + (rng-c-error "Definition of %s in include did not override definition in included file" name)) + (aset about rng-c-about-override-slot saved))) + overrides)) + +(defun rng-c-define (def value) + (and def + (let ((current-value (rng-ref-get (cdr def)))) + (rng-ref-set (cdr def) + (if current-value + (if (eq (aref (car def) rng-c-about-combine-slot) + 'choice) + (rng-make-choice (list current-value value)) + (rng-make-interleave (list current-value value))) + value))))) + +(defun rng-c-finish-grammar () + (maphash (lambda (key def) + (or (rng-ref-get (cdr def)) + (rng-c-error "Reference to undefined pattern %s" key))) + rng-c-current-grammar) + (rng-ref-get (cdr (or (gethash 'start rng-c-current-grammar) + (rng-c-error "No definition of start"))))) + +;;; Parsing + +(defvar rng-c-escape-positions nil) +(make-variable-buffer-local 'rng-c-escape-positions) + +(defvar rng-c-file-name nil) +(make-variable-buffer-local 'rng-c-file-name) + +(defvar rng-c-file-index nil) + +(defun rng-c-parse-file (filename &optional context) + (save-excursion + (set-buffer (get-buffer-create (rng-c-buffer-name context))) + (erase-buffer) + (rng-c-init-buffer) + (setq rng-c-file-name + (car (insert-file-contents filename))) + (setq rng-c-escape-positions nil) + (rng-c-process-escapes) + (rng-c-parse-top-level context))) + +(defun rng-c-buffer-name (context) + (concat " *RNC Input" + (if context + (concat "<" + (number-to-string (setq rng-c-file-index + (1+ rng-c-file-index))) + ">*") + (setq rng-c-file-index 1) + "*"))) + +(defun rng-c-process-escapes () + ;; Check for any nuls, since we will use nul chars + ;; for internal purposes. + (let ((pos (search-forward "\C-@" nil t))) + (and pos + (rng-c-error "Nul character found (binary file?)"))) + (let ((offset 0)) + (while (re-search-forward "\\\\x+{\\([0-9a-fA-F]+\\)}" + (point-max) + t) + (let* ((ch (decode-char 'ucs (string-to-number (match-string 1) 16)))) + (if (and ch (> ch 0)) + (let ((begin (match-beginning 0)) + (end (match-end 0))) + (delete-region begin end) + ;; Represent an escaped newline by nul, so + ;; that we can distinguish it from a literal newline. + ;; We will translate it back into a real newline later. + (insert (if (eq ch ?\n) 0 ch)) + (setq offset (+ offset (- end begin 1))) + (setq rng-c-escape-positions + (cons (cons (point) offset) + rng-c-escape-positions))) + (rng-c-error "Invalid character escape"))))) + (goto-char 1)) + +(defun rng-c-translate-position (pos) + (let ((tem rng-c-escape-positions)) + (while (and tem + (> (caar tem) pos)) + (setq tem (cdr tem))) + (if tem + (+ pos (cdar tem)) + pos))) + +(defun rng-c-error (&rest args) + (rng-c-signal-incorrect-schema rng-c-file-name + (rng-c-translate-position (point)) + (apply 'format args))) + +(defun rng-c-parse-top-level (context) + (let ((rng-c-namespace-decls nil) + (rng-c-default-namespace nil) + (rng-c-datatype-decls nil)) + (goto-char (point-min)) + (forward-comment (point-max)) + (rng-c-advance) + (rng-c-parse-decls) + (let ((p (if (eq context 'include) + (if (rng-c-implicit-grammar-p) + (rng-c-parse-grammar-body "") + (rng-c-parse-included-grammar)) + (if (rng-c-implicit-grammar-p) + (rng-c-parse-implicit-grammar) + (rng-c-parse-pattern))))) + (or (string-equal rng-c-current-token "") + (rng-c-error "Unexpected characters after pattern")) + p))) + +(defun rng-c-parse-included-grammar () + (or (string-equal rng-c-current-token "grammar") + (rng-c-error "Included schema is not a grammar")) + (rng-c-advance) + (rng-c-expect "{") + (rng-c-parse-grammar-body "}")) + +(defun rng-c-implicit-grammar-p () + (or (and (or (rng-c-current-token-prefixed-name-p) + (rng-c-current-token-quoted-identifier-p) + (and (rng-c-current-token-ncname-p) + (not (rng-c-current-token-keyword-p)))) + (looking-at "\\[")) + (and (string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + nil) + (member rng-c-current-token '("div" "include" "")) + (looking-at "[|&]?="))) + +(defun rng-c-parse-decls () + (setq rng-c-default-namespace-declared nil) + (while (progn + (let ((binding + (assoc rng-c-current-token + '(("namespace" . rng-c-parse-namespace) + ("datatypes" . rng-c-parse-datatypes) + ("default" . rng-c-parse-default))))) + (if binding + (progn + (rng-c-advance) + (funcall (cdr binding)) + t) + nil)))) + (rng-c-declare-standard-datatypes) + (rng-c-declare-standard-namespaces)) + +(defun rng-c-parse-datatypes () + (let ((prefix (rng-c-parse-identifier-or-keyword))) + (or (not (assoc prefix rng-c-datatype-decls)) + (rng-c-error "Duplicate datatypes declaration for prefix %s" prefix)) + (rng-c-expect "=") + (setq rng-c-datatype-decls + (cons (cons prefix + (rng-make-datatypes-uri (rng-c-parse-literal))) + rng-c-datatype-decls)))) + +(defun rng-c-parse-namespace () + (rng-c-declare-namespace nil + (rng-c-parse-identifier-or-keyword))) + +(defun rng-c-parse-default () + (rng-c-expect "namespace") + (rng-c-declare-namespace t + (if (string-equal rng-c-current-token "=") + nil + (rng-c-parse-identifier-or-keyword)))) + +(defun rng-c-declare-namespace (declare-default prefix) + (rng-c-expect "=") + (let ((ns (cond ((string-equal rng-c-current-token "inherit") + (rng-c-advance) + rng-c-inherit-namespace) + (t + (nxml-make-namespace (rng-c-parse-literal)))))) + (and prefix + (or (not (assoc prefix rng-c-namespace-decls)) + (rng-c-error "Duplicate namespace declaration for prefix %s" + prefix)) + (setq rng-c-namespace-decls + (cons (cons prefix ns) rng-c-namespace-decls))) + (and declare-default + (or (not rng-c-default-namespace-declared) + (rng-c-error "Duplicate default namespace declaration")) + (setq rng-c-default-namespace-declared t) + (setq rng-c-default-namespace ns)))) + +(defun rng-c-parse-implicit-grammar () + (let* ((rng-c-parent-grammar rng-c-current-grammar) + (rng-c-current-grammar (rng-c-make-grammar))) + (rng-c-parse-grammar-body "") + (rng-c-finish-grammar))) + +(defun rng-c-parse-grammar-body (close-token &optional in-include) + (while (not (string-equal rng-c-current-token close-token)) + (cond ((rng-c-current-token-keyword-p) + (let ((kw (intern rng-c-current-token))) + (cond ((eq kw 'start) + (rng-c-parse-define 'start in-include)) + ((eq kw 'div) + (rng-c-advance) + (rng-c-parse-div in-include)) + ((eq kw 'include) + (and in-include + (rng-c-error "Nested include")) + (rng-c-advance) + (rng-c-parse-include)) + (t (rng-c-error "Invalid grammar keyword"))))) + ((rng-c-current-token-ncname-p) + (if (looking-at "\\[") + (rng-c-parse-annotation-element) + (rng-c-parse-define rng-c-current-token + in-include))) + ((rng-c-current-token-quoted-identifier-p) + (if (looking-at "\\[") + (rng-c-parse-annotation-element) + (rng-c-parse-define (substring rng-c-current-token 1) + in-include))) + ((rng-c-current-token-prefixed-name-p) + (rng-c-parse-annotation-element)) + ((string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + (and (string-equal rng-c-current-token close-token) + (rng-c-error "Missing annotation subject")) + (and (looking-at "\\[") + (rng-c-error "Leading annotation applied to annotation"))) + (t (rng-c-error "Invalid grammar content")))) + (or (string-equal rng-c-current-token "") + (rng-c-advance))) + +(defun rng-c-parse-div (in-include) + (rng-c-expect "{") + (rng-c-parse-grammar-body "}" in-include)) + +(defun rng-c-parse-include () + (let* ((filename (rng-c-expand-file (rng-c-parse-literal))) + (rng-c-inherit-namespace (rng-c-parse-opt-inherit)) + overrides) + (cond ((string-equal rng-c-current-token "{") + (rng-c-advance) + (let ((rng-c-overrides nil)) + (rng-c-parse-grammar-body "}" t) + (setq overrides rng-c-overrides)) + (setq overrides (rng-c-start-include overrides)) + (rng-c-parse-file filename 'include) + (rng-c-end-include overrides)) + (t (rng-c-parse-file filename 'include))))) + +(defun rng-c-parse-define (name in-include) + (rng-c-advance) + (let ((assign (assoc rng-c-current-token + '(("=" . nil) + ("|=" . choice) + ("&=" . interleave))))) + (or assign + (rng-c-error "Expected assignment operator")) + (rng-c-advance) + (let ((ref (rng-c-prepare-define name (cdr assign) in-include))) + (rng-c-define ref (rng-c-parse-pattern))))) + +(defvar rng-c-had-except nil) + +(defun rng-c-parse-pattern () + (let* ((rng-c-had-except nil) + (p (rng-c-parse-repeated)) + (op (assoc rng-c-current-token + '(("|" . rng-make-choice) + ("," . rng-make-group) + ("&" . rng-make-interleave))))) + (if op + (if rng-c-had-except + (rng-c-error "Parentheses required around pattern using -") + (let* ((patterns (cons p nil)) + (tail patterns) + (connector rng-c-current-token)) + (while (progn + (rng-c-advance) + (let ((newcdr (cons (rng-c-parse-repeated) nil))) + (setcdr tail newcdr) + (setq tail newcdr)) + (string-equal rng-c-current-token connector))) + (funcall (cdr op) patterns))) + p))) + +(defun rng-c-parse-repeated () + (let ((p (rng-c-parse-follow-annotations + (rng-c-parse-primary))) + (op (assoc rng-c-current-token + '(("*" . rng-make-zero-or-more) + ("+" . rng-make-one-or-more) + ("?" . rng-make-optional))))) + (if op + (if rng-c-had-except + (rng-c-error "Parentheses required around pattern using -") + (rng-c-parse-follow-annotations + (progn + (rng-c-advance) + (funcall (cdr op) p)))) + p))) + +(defun rng-c-parse-primary () + "Parse a primary expression. The current token must be the first +token of the expression. After parsing the current token should be +token following the primary expression." + (cond ((rng-c-current-token-keyword-p) + (let ((parse-function (get (intern rng-c-current-token) + 'rng-c-pattern))) + (or parse-function + (rng-c-error "Keyword %s does not introduce a pattern" + rng-c-current-token)) + (rng-c-advance) + (funcall parse-function))) + ((rng-c-current-token-ncname-p) + (rng-c-advance-with (rng-c-make-ref rng-c-current-token))) + ((string-equal rng-c-current-token "(") + (rng-c-advance) + (let ((p (rng-c-parse-pattern))) + (rng-c-expect ")") + p)) + ((rng-c-current-token-prefixed-name-p) + (let ((name (rng-c-expand-datatype rng-c-current-token))) + (rng-c-advance) + (rng-c-parse-data name))) + ((rng-c-current-token-literal-p) + (rng-make-value rng-token-datatype (rng-c-parse-literal) nil)) + ((rng-c-current-token-quoted-identifier-p) + (rng-c-advance-with + (rng-c-make-ref (substring rng-c-current-token 1)))) + ((string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + (rng-c-parse-primary)) + (t (rng-c-error "Invalid pattern")))) + +(defun rng-c-parse-parent () + (and (rng-c-current-token-keyword-p) + (rng-c-error "Keyword following parent was not quoted" + rng-c-current-token)) + (rng-c-make-parent-ref (rng-c-parse-identifier-or-keyword))) + +(defun rng-c-parse-literal () + (rng-c-fix-escaped-newlines + (apply 'concat (rng-c-parse-literal-segments)))) + +(defun rng-c-parse-literal-segments () + (let ((str (rng-c-parse-literal-segment))) + (cons str + (cond ((string-equal rng-c-current-token "~") + (rng-c-advance) + (rng-c-parse-literal-segments)) + (t nil))))) + +(defun rng-c-parse-literal-segment () + (or (rng-c-current-token-literal-p) + (rng-c-error "Expected a literal")) + (rng-c-advance-with + (let ((n (if (and (>= (length rng-c-current-token) 6) + (eq (aref rng-c-current-token 0) + (aref rng-c-current-token 1))) + 3 + 1))) + (substring rng-c-current-token n (- n))))) + +(defun rng-c-fix-escaped-newlines (str) + (let ((pos 0)) + (while (progn + (let ((n (string-match "\C-@" str pos))) + (and n + (aset str n ?\n) + (setq pos (1+ n))))))) + str) + +(defun rng-c-parse-identifier-or-keyword () + (cond ((rng-c-current-token-ncname-p) + (rng-c-advance-with rng-c-current-token)) + ((rng-c-current-token-quoted-identifier-p) + (rng-c-advance-with (substring rng-c-current-token 1))) + (t (rng-c-error "Expected identifier or keyword")))) + +(put 'string 'rng-c-pattern 'rng-c-parse-string) +(put 'token 'rng-c-pattern 'rng-c-parse-token) +(put 'element 'rng-c-pattern 'rng-c-parse-element) +(put 'attribute 'rng-c-pattern 'rng-c-parse-attribute) +(put 'list 'rng-c-pattern 'rng-c-parse-list) +(put 'mixed 'rng-c-pattern 'rng-c-parse-mixed) +(put 'text 'rng-c-pattern 'rng-c-parse-text) +(put 'empty 'rng-c-pattern 'rng-c-parse-empty) +(put 'notAllowed 'rng-c-pattern 'rng-c-parse-not-allowed) +(put 'grammar 'rng-c-pattern 'rng-c-parse-grammar) +(put 'parent 'rng-c-pattern 'rng-c-parse-parent) +(put 'external 'rng-c-pattern 'rng-c-parse-external) + +(defun rng-c-parse-element () + (let ((name-class (rng-c-parse-name-class nil))) + (rng-c-expect "{") + (let ((pattern (rng-c-parse-pattern))) + (rng-c-expect "}") + (rng-make-element name-class pattern)))) + +(defun rng-c-parse-attribute () + (let ((name-class (rng-c-parse-name-class 'attribute))) + (rng-c-expect "{") + (let ((pattern (rng-c-parse-pattern))) + (rng-c-expect "}") + (rng-make-attribute name-class pattern)))) + +(defun rng-c-parse-name-class (attribute) + (let* ((rng-c-had-except nil) + (name-class + (rng-c-parse-follow-annotations + (rng-c-parse-primary-name-class attribute)))) + (if (string-equal rng-c-current-token "|") + (let* ((name-classes (cons name-class nil)) + (tail name-classes)) + (or (not rng-c-had-except) + (rng-c-error "Parentheses required around name-class using - operator")) + (while (progn + (rng-c-advance) + (let ((newcdr + (cons (rng-c-parse-follow-annotations + (rng-c-parse-primary-name-class attribute)) + nil))) + (setcdr tail newcdr) + (setq tail newcdr)) + (string-equal rng-c-current-token "|"))) + (rng-make-choice-name-class name-classes)) + name-class))) + +(defun rng-c-parse-primary-name-class (attribute) + (cond ((rng-c-current-token-ncname-p) + (rng-c-advance-with + (rng-make-name-name-class + (rng-make-name (rng-c-unqualified-namespace attribute) + rng-c-current-token)))) + ((rng-c-current-token-prefixed-name-p) + (rng-c-advance-with + (rng-make-name-name-class + (rng-c-expand-name rng-c-current-token)))) + ((string-equal rng-c-current-token "*") + (let ((except (rng-c-parse-opt-except-name-class attribute))) + (if except + (rng-make-any-name-except-name-class except) + (rng-make-any-name-name-class)))) + ((rng-c-current-token-ns-name-p) + (let* ((ns + (rng-c-lookup-prefix (substring rng-c-current-token + 0 + -2))) + (except (rng-c-parse-opt-except-name-class attribute))) + (if except + (rng-make-ns-name-except-name-class ns except) + (rng-make-ns-name-name-class ns)))) + ((string-equal rng-c-current-token "(") + (rng-c-advance) + (let ((name-class (rng-c-parse-name-class attribute))) + (rng-c-expect ")") + name-class)) + ((rng-c-current-token-quoted-identifier-p) + (rng-c-advance-with + (rng-make-name-name-class + (rng-make-name (rng-c-unqualified-namespace attribute) + (substring rng-c-current-token 1))))) + ((string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + (rng-c-parse-primary-name-class attribute)) + (t (rng-c-error "Bad name class")))) + +(defun rng-c-parse-opt-except-name-class (attribute) + (rng-c-advance) + (and (string-equal rng-c-current-token "-") + (or (not rng-c-had-except) + (rng-c-error "Parentheses required around name-class using - operator")) + (setq rng-c-had-except t) + (progn + (rng-c-advance) + (rng-c-parse-primary-name-class attribute)))) + +(defun rng-c-parse-mixed () + (rng-c-expect "{") + (let ((pattern (rng-make-mixed (rng-c-parse-pattern)))) + (rng-c-expect "}") + pattern)) + +(defun rng-c-parse-list () + (rng-c-expect "{") + (let ((pattern (rng-make-list (rng-c-parse-pattern)))) + (rng-c-expect "}") + pattern)) + +(defun rng-c-parse-text () + (rng-make-text)) + +(defun rng-c-parse-empty () + (rng-make-empty)) + +(defun rng-c-parse-not-allowed () + (rng-make-not-allowed)) + +(defun rng-c-parse-string () + (rng-c-parse-data rng-string-datatype)) + +(defun rng-c-parse-token () + (rng-c-parse-data rng-token-datatype)) + +(defun rng-c-parse-data (name) + (if (rng-c-current-token-literal-p) + (rng-make-value name + (rng-c-parse-literal) + (and (car name) + (rng-c-make-context))) + (let ((params (rng-c-parse-optional-params))) + (if (string-equal rng-c-current-token "-") + (progn + (if rng-c-had-except + (rng-c-error "Parentheses required around pattern using -") + (setq rng-c-had-except t)) + (rng-c-advance) + (rng-make-data-except name + params + (rng-c-parse-primary))) + (rng-make-data name params))))) + +(defun rng-c-parse-optional-params () + (and (string-equal rng-c-current-token "{") + (let* ((head (cons nil nil)) + (tail head)) + (rng-c-advance) + (while (not (string-equal rng-c-current-token "}")) + (and (string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation)) + (let ((name (rng-c-parse-identifier-or-keyword))) + (rng-c-expect "=") + (let ((newcdr (cons (cons (intern name) + (rng-c-parse-literal)) + nil))) + (setcdr tail newcdr) + (setq tail newcdr)))) + (rng-c-advance) + (cdr head)))) + +(defun rng-c-parse-external () + (let* ((filename (rng-c-expand-file (rng-c-parse-literal))) + (rng-c-inherit-namespace (rng-c-parse-opt-inherit))) + (rng-c-parse-file filename 'external))) + +(defun rng-c-expand-file (uri) + (condition-case err + (rng-uri-file-name (rng-uri-resolve uri + (rng-file-name-uri rng-c-file-name))) + (rng-uri-error + (rng-c-error (cadr err))))) + +(defun rng-c-parse-opt-inherit () + (cond ((string-equal rng-c-current-token "inherit") + (rng-c-advance) + (rng-c-expect "=") + (rng-c-lookup-prefix (rng-c-parse-identifier-or-keyword))) + (t rng-c-default-namespace))) + +(defun rng-c-parse-grammar () + (rng-c-expect "{") + (let* ((rng-c-parent-grammar rng-c-current-grammar) + (rng-c-current-grammar (rng-c-make-grammar))) + (rng-c-parse-grammar-body "}") + (rng-c-finish-grammar))) + +(defun rng-c-parse-lead-annotation () + (rng-c-parse-annotation-body) + (and (string-equal rng-c-current-token "[") + (rng-c-error "Multiple leading annotations"))) + +(defun rng-c-parse-follow-annotations (obj) + (while (string-equal rng-c-current-token ">>") + (rng-c-advance) + (if (rng-c-current-token-prefixed-name-p) + (rng-c-advance) + (rng-c-parse-identifier-or-keyword)) + (rng-c-parse-annotation-body t)) + obj) + +(defun rng-c-parse-annotation-element () + (rng-c-advance) + (rng-c-parse-annotation-body t)) + +;; XXX need stricter checking of attribute names +;; XXX don't allow attributes after text + +(defun rng-c-parse-annotation-body (&optional allow-text) + "Current token is [. Parse up to matching ]. Current token after +parse is token following ]." + (or (string-equal rng-c-current-token "[") + (rng-c-error "Expected [")) + (rng-c-advance) + (while (not (string-equal rng-c-current-token "]")) + (cond ((rng-c-current-token-literal-p) + (or allow-text + (rng-c-error "Out of place text within annotation")) + (rng-c-parse-literal)) + (t + (if (rng-c-current-token-prefixed-name-p) + (rng-c-advance) + (rng-c-parse-identifier-or-keyword)) + (cond ((string-equal rng-c-current-token "[") + (rng-c-parse-annotation-body t)) + ((string-equal rng-c-current-token "=") + (rng-c-advance) + (rng-c-parse-literal)) + (t (rng-c-error "Expected = or [")))))) + (rng-c-advance)) + +(defun rng-c-advance-with (pattern) + (rng-c-advance) + pattern) + +(defun rng-c-expect (str) + (or (string-equal rng-c-current-token str) + (rng-c-error "Expected `%s' but got `%s'" str rng-c-current-token)) + (rng-c-advance)) + +(provide 'rng-cmpct) + +;;; rng-cmpct.el + +;; arch-tag: 90395eb1-283b-4146-bbc1-6d6ef1704e57 diff --git a/lisp/nxml/rng-dt.el b/lisp/nxml/rng-dt.el new file mode 100644 index 00000000000..2ed8e19c7d9 --- /dev/null +++ b/lisp/nxml/rng-dt.el @@ -0,0 +1,67 @@ +;;; rng-dt.el --- datatype library interface for RELAX NG + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(require 'rng-util) + +(defvar rng-dt-error-reporter nil) + +(defun rng-dt-error (string &rest objs) + (if rng-dt-error-reporter + (apply rng-dt-error-reporter (cons string objs)) + nil)) + +(defvar rng-dt-namespace-context-getter nil + "A list used by datatype libraries to expand names. The car of the +list is a symbol which is the name of a function. This function is +applied to the cdr of the list. The function must return a list whose +car is the default namespace and whose cdr is an alist of (PREFIX +. NAMESPACE) pairs, where PREFIX is a string and NAMESPACE is a +symbol. This must be dynamically bound before calling a datatype +library.") + +(defsubst rng-dt-make-value (dt str) + (apply (car dt) (cons str (cdr dt)))) + +(defun rng-dt-builtin-compile (name params) + (cond ((eq name 'string) + (if (null params) + '(t identity) + (rng-dt-error "The string datatype does not take any parameters"))) + ((eq name 'token) + (if (null params) + '(t rng-collapse-space) + (rng-dt-error "The token datatype does not take any parameters"))) + (t + (rng-dt-error "There is no built-in datatype %s" name)))) + +(put (rng-make-datatypes-uri "") 'rng-dt-compile 'rng-dt-builtin-compile) + +(provide 'rng-dt) + +;; arch-tag: 1dca90f1-8dae-4dd4-b61f-fade4452c014 +;;; rng-dt.el ends here diff --git a/lisp/nxml/rng-loc.el b/lisp/nxml/rng-loc.el new file mode 100644 index 00000000000..fd56c4bb903 --- /dev/null +++ b/lisp/nxml/rng-loc.el @@ -0,0 +1,551 @@ +;;; rng-loc.el --- locate the schema to use for validation + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(require 'nxml-util) +(require 'nxml-parse) +(require 'rng-parse) +(require 'rng-uri) +(require 'rng-util) +(require 'xmltok) + +(defvar rng-current-schema-file-name nil + "Filename of schema being used for current buffer. +Nil if using a vacuous schema.") +(make-variable-buffer-local 'rng-current-schema-file-name) + +(defvar rng-schema-locating-files-default nil + "Default value for variable `rng-schema-locating-files'.") + +(defvar rng-schema-locating-file-schema-file nil + "File containing schema for schema locating files.") + +(defvar rng-schema-locating-file-schema nil + "Schema for schema locating files or nil if not yet loaded.") + +(defcustom rng-schema-locating-files rng-schema-locating-files-default + "*List of schema locating files." + :type '(repeat file) + :group 'relax-ng) + +(defvar rng-schema-loader-alist nil + "Alist of schema extensions vs schema loader functions.") + +(defvar rng-cached-document-element nil) + +(defvar rng-document-type-history nil) + +(defun rng-set-document-type (type-id) + (interactive (list (rng-read-type-id))) + (condition-case err + (when (not (string= type-id "")) + (let ((schema-file (rng-locate-schema-file type-id))) + (unless schema-file + (error "Could not locate schema for type id `%s'" type-id)) + (rng-set-schema-file-1 schema-file)) + (rng-save-schema-location-1 t type-id) + (rng-what-schema)) + (nxml-file-parse-error + (nxml-display-file-parse-error err)))) + +(defun rng-read-type-id () + (condition-case err + (let ((type-ids (rng-possible-type-ids)) + (completion-ignore-case nil)) + (completing-read "Document type id: " + (mapcar (lambda (x) (cons x nil)) + type-ids) + nil + t + nil + 'rng-document-type-history)) + (nxml-file-parse-error + (nxml-display-file-parse-error err)))) + +(defun rng-set-schema-file (filename) + "Set the schema for the current buffer to the schema in FILENAME. +FILENAME must be the name of a file containing a schema. +The extension of FILENAME is used to determine what kind of schema it +is. The variable `rng-schema-loader-alist' maps from schema +extensions to schema loader functions. The function +`rng-c-load-schema' is the loader for RELAX NG compact syntax. The +association is between the buffer and the schema: the association is +lost when the buffer is killed." + (interactive "fSchema file: ") + (condition-case err + (progn + (rng-set-schema-file-1 filename) + (rng-save-schema-location-1 t)) + (nxml-file-parse-error + (nxml-display-file-parse-error err)))) + +(defun rng-set-vacuous-schema () + "Set the schema for the current buffer to allow any well-formed XML." + (interactive) + (rng-set-schema-file-1 nil) + (rng-what-schema)) + +(defun rng-set-schema-file-1 (filename) + (setq filename (and filename (expand-file-name filename))) + (setq rng-current-schema + (if filename + (rng-load-schema filename) + rng-any-element)) + (setq rng-current-schema-file-name filename) + (run-hooks 'rng-schema-change-hook)) + +(defun rng-load-schema (filename) + (let* ((extension (file-name-extension filename)) + (loader (cdr (assoc extension rng-schema-loader-alist)))) + (or loader + (if extension + (error "No schema loader available for file extension `%s'" + extension) + (error "No schema loader available for null file extension"))) + (funcall loader filename))) + +(defun rng-what-schema () + "Display a message saying what schema `rng-validate-mode' is using." + (interactive) + (if rng-current-schema-file-name + (message "Using schema %s" + (abbreviate-file-name rng-current-schema-file-name)) + (message "Using vacuous schema"))) + +(defun rng-auto-set-schema (&optional no-display-error) + "Set the schema for this buffer based on the buffer's contents and file-name." + (interactive) + (condition-case err + (progn + (rng-set-schema-file-1 (rng-locate-schema-file)) + (rng-what-schema)) + (nxml-file-parse-error + (if no-display-error + (error "%s at position %s in %s" + (nth 3 err) + (nth 2 err) + (abbreviate-file-name (nth 1 err))) + (nxml-display-file-parse-error err))))) + +(defun rng-locate-schema-file (&optional type-id) + "Return the file-name of the schema to use for the current buffer. +Return nil if no schema could be located. +If TYPE-ID is non-nil, then locate the schema for this TYPE-ID." + (let* ((rng-cached-document-element nil) + (schema + (if type-id + (cons type-id nil) + (rng-locate-schema-file-using rng-schema-locating-files))) + files type-ids) + (while (consp schema) + (setq files rng-schema-locating-files) + (setq type-id (car schema)) + (setq schema nil) + (when (member type-id type-ids) + (error "Type-id loop for type-id `%s'" type-id)) + (setq type-ids (cons type-id type-ids)) + (while (and files (not schema)) + (setq schema + (rng-locate-schema-file-from-type-id type-id + (car files))) + (setq files (cdr files)))) + (and schema + (rng-uri-file-name schema)))) + +(defun rng-possible-type-ids () + "Return a list of the known type IDs." + (let ((files rng-schema-locating-files) + type-ids) + (while files + (setq type-ids (rng-possible-type-ids-using (car files) type-ids)) + (setq files (cdr files))) + (rng-uniquify-equal (sort type-ids 'string<)))) + +(defun rng-locate-schema-file-using (files) + "Locate a schema using the schema locating files FILES. +FILES is a list of file-names. +Return either a URI, a list (TYPE-ID) where TYPE-ID is a string +or nil." + (let (rules + ;; List of types that override normal order-based + ;; priority, most important first + preferred-types + ;; Best result found so far; same form as return value. + best-so-far) + (while (and (progn + (while (and (not rules) files) + (setq rules (rng-get-parsed-schema-locating-file + (car files))) + (setq files (cdr files))) + rules) + (or (not best-so-far) preferred-types)) + (let* ((rule (car rules)) + (rule-type (car rule)) + (rule-matcher (get rule-type 'rng-rule-matcher))) + (setq rules (cdr rules)) + (cond (rule-matcher + (when (and (or (not best-so-far) + (memq rule-type preferred-types))) + (setq best-so-far + (funcall rule-matcher (cdr rule))) + preferred-types) + (setq preferred-types + (nbutlast preferred-types + (length (memq rule-type preferred-types))))) + ((eq rule-type 'applyFollowingRules) + (when (not best-so-far) + (let ((prefer (cdr (assq 'ruleType (cdr rule))))) + (when (and prefer + (not (memq (setq prefer (intern prefer)) + preferred-types))) + (setq preferred-types + (nconc preferred-types (list prefer))))))) + ((eq rule-type 'include) + (let ((uri (cdr (assq 'rules (cdr rule))))) + (when uri + (setq rules + (append (rng-get-parsed-schema-locating-file + (rng-uri-file-name uri)) + rules)))))))) + best-so-far)) + +(put 'documentElement 'rng-rule-matcher 'rng-match-document-element-rule) +(put 'namespace 'rng-rule-matcher 'rng-match-namespace-rule) +(put 'uri 'rng-rule-matcher 'rng-match-uri-rule) +(put 'transformURI 'rng-rule-matcher 'rng-match-transform-uri-rule) +(put 'default 'rng-rule-matcher 'rng-match-default-rule) + +(defun rng-match-document-element-rule (props) + (let ((document-element (rng-document-element)) + (prefix (cdr (assq 'prefix props))) + (local-name (cdr (assq 'localName props)))) + (and (or (not prefix) + (if (= (length prefix) 0) + (not (nth 1 document-element)) + (string= prefix (nth 1 document-element)))) + (or (not local-name) + (string= local-name + (nth 2 document-element))) + (rng-match-default-rule props)))) + +(defun rng-match-namespace-rule (props) + (let ((document-element (rng-document-element)) + (ns (cdr (assq 'ns props)))) + (and document-element + ns + (eq (nth 0 document-element) + (if (string= ns "") + nil + (nxml-make-namespace ns))) + (rng-match-default-rule props)))) + +(defun rng-document-element () + "Return a list (NS PREFIX LOCAL-NAME). +NS is t if the document has a non-nil, but not otherwise known namespace." + (or rng-cached-document-element + (setq rng-cached-document-element + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (let (xmltok-dtd) + (xmltok-save + (xmltok-forward-prolog) + (xmltok-forward) + (when (memq xmltok-type '(start-tag + partial-start-tag + empty-element + partial-empty-element)) + (list (rng-get-start-tag-namespace) + (xmltok-start-tag-prefix) + (xmltok-start-tag-local-name)))))))))) + +(defun rng-get-start-tag-namespace () + (let ((prefix (xmltok-start-tag-prefix)) + namespace att value) + (while xmltok-namespace-attributes + (setq att (car xmltok-namespace-attributes)) + (setq xmltok-namespace-attributes (cdr xmltok-namespace-attributes)) + (when (if prefix + (and (xmltok-attribute-prefix att) + (string= (xmltok-attribute-local-name att) + prefix)) + (not (xmltok-attribute-prefix att))) + (setq value (xmltok-attribute-value att)) + (setq namespace (if value (nxml-make-namespace value) t)))) + (if (and prefix (not namespace)) + t + namespace))) + +(defun rng-match-transform-uri-rule (props) + (let ((from-pattern (cdr (assq 'fromPattern props))) + (to-pattern (cdr (assq 'toPattern props))) + (file-name (buffer-file-name))) + (and file-name + (setq file-name (expand-file-name file-name)) + (rng-file-name-matches-uri-pattern-p file-name from-pattern) + (condition-case () + (let ((new-file-name + (replace-match + (save-match-data + (rng-uri-pattern-file-name-replace-match to-pattern)) + t + nil + file-name))) + (and (file-name-absolute-p new-file-name) + (file-exists-p new-file-name) + (rng-file-name-uri new-file-name))) + (rng-uri-error nil))))) + +(defun rng-match-uri-rule (props) + (let ((resource (cdr (assq 'resource props))) + (pattern (cdr (assq 'pattern props))) + (file-name (buffer-file-name))) + (and file-name + (setq file-name (expand-file-name file-name)) + (cond (resource + (condition-case () + (eq (compare-strings (rng-uri-file-name resource) + 0 + nil + (expand-file-name file-name) + 0 + nil + nxml-file-name-ignore-case) + t) + (rng-uri-error nil))) + (pattern + (rng-file-name-matches-uri-pattern-p file-name + pattern))) + (rng-match-default-rule props)))) + +(defun rng-file-name-matches-uri-pattern-p (file-name pattern) + (condition-case () + (and (let ((case-fold-search nxml-file-name-ignore-case)) + (string-match (rng-uri-pattern-file-name-regexp pattern) + file-name)) + t) + (rng-uri-error nil))) + +(defun rng-match-default-rule (props) + (or (cdr (assq 'uri props)) + (let ((type-id (cdr (assq 'typeId props)))) + (and type-id + (cons (rng-collapse-space type-id) nil))))) + +(defun rng-possible-type-ids-using (file type-ids) + (let ((rules (rng-get-parsed-schema-locating-file file)) + rule) + (while rules + (setq rule (car rules)) + (setq rules (cdr rules)) + (cond ((eq (car rule) 'typeId) + (let ((id (cdr (assq 'id (cdr rule))))) + (when id + (setq type-ids + (cons (rng-collapse-space id) + type-ids))))) + ((eq (car rule) 'include) + (let ((uri (cdr (assq 'rules (cdr rule))))) + (when uri + (setq type-ids + (rng-possible-type-ids-using + (rng-get-parsed-schema-locating-file + (rng-uri-file-name uri)) + type-ids))))))) + type-ids)) + +(defun rng-locate-schema-file-from-type-id (type-id file) + "Locate the schema for type id TYPE-ID using schema locating file FILE. +Return either a URI, a list (TYPE-ID) where TYPE-ID is a string +or nil." + (let ((rules (rng-get-parsed-schema-locating-file file)) + schema rule) + (while (and rules (not schema)) + (setq rule (car rules)) + (setq rules (cdr rules)) + (cond ((and (eq (car rule) 'typeId) + (let ((id (assq 'id (cdr rule)))) + (and id + (string= (rng-collapse-space (cdr id)) type-id)))) + (setq schema (rng-match-default-rule (cdr rule)))) + ((eq (car rule) 'include) + (let ((uri (cdr (assq 'rules (cdr rule))))) + (when uri + (setq schema + (rng-locate-schema-file-from-type-id + type-id + (rng-uri-file-name uri)))))))) + schema)) + +(defvar rng-schema-locating-file-alist nil) + +(defun rng-get-parsed-schema-locating-file (file) + "Return a list of rules for the schema locating file FILE." + (setq file (expand-file-name file)) + (let ((cached (assoc file rng-schema-locating-file-alist)) + (mtime (nth 5 (file-attributes file))) + parsed) + (cond ((not mtime) + (when cached + (setq rng-schema-locating-file-alist + (delq cached rng-schema-locating-file-alist))) + nil) + ((and cached (equal (nth 1 cached) mtime)) + (nth 2 cached)) + (t + (setq parsed (rng-parse-schema-locating-file file)) + (if cached + (setcdr cached (list mtime parsed)) + (setq rng-schema-locating-file-alist + (cons (list file mtime parsed) + rng-schema-locating-file-alist))) + parsed)))) + +(defconst rng-locate-namespace-uri + (nxml-make-namespace "http://thaiopensource.com/ns/locating-rules/1.0")) + +(defun rng-parse-schema-locating-file (file) + "Return list of rules. +Each rule has the form (TYPE (ATTR . VAL) ...), where +TYPE is a symbol for the element name, ATTR is a symbol for the attribute +and VAL is a string for the value. +Attribute values representing URIs are made absolute and xml:base +attributes are removed." + (when (and (not rng-schema-locating-file-schema) + rng-schema-locating-file-schema-file) + (setq rng-schema-locating-file-schema + (rng-load-schema rng-schema-locating-file-schema-file))) + (let* ((element + (if rng-schema-locating-file-schema + (rng-parse-validate-file rng-schema-locating-file-schema + file) + (nxml-parse-file file))) + (children (cddr element)) + (base-uri (rng-file-name-uri file)) + child name rules atts att props prop-name prop-value) + (when (equal (car element) + (cons rng-locate-namespace-uri "locatingRules")) + (while children + (setq child (car children)) + (setq children (cdr children)) + (when (consp child) + (setq name (car child)) + (when (eq (car name) rng-locate-namespace-uri) + (setq atts (cadr child)) + (setq props nil) + (while atts + (setq att (car atts)) + (when (stringp (car att)) + (setq prop-name (intern (car att))) + (setq prop-value (cdr att)) + (when (memq prop-name '(uri rules resource)) + (setq prop-value + (rng-uri-resolve prop-value base-uri))) + (setq props (cons (cons prop-name prop-value) + props))) + (setq atts (cdr atts))) + (setq rules + (cons (cons (intern (cdr name)) (nreverse props)) + rules)))))) + (nreverse rules))) + +(defun rng-save-schema-location () + "Save the association between the buffer's file and the current schema. +This ensures that the schema that is currently being used will be used +if the file is edited in a future session. The association will be +saved to the first writable file in `rng-schema-locating-files'." + (interactive) + (rng-save-schema-location-1 nil)) + +(defun rng-save-schema-location-1 (prompt &optional type-id) + (unless (or rng-current-schema-file-name type-id) + (error "Buffer is using a vacuous schema")) + (let ((files rng-schema-locating-files) + (document-file-name (buffer-file-name)) + (schema-file-name rng-current-schema-file-name) + file) + (while (and files (not file)) + (if (file-writable-p (car files)) + (setq file (expand-file-name (car files))) + (setq files (cdr files)))) + (cond ((not file) + (if prompt + nil + (error "No writable schema locating file configured"))) + ((not document-file-name) + (if prompt + nil + (error "Buffer does not have a filename"))) + ((and prompt + (not (y-or-n-p (format "Save %s to %s " + (if type-id + "type identifier" + "schema location") + file))))) + (t + (save-excursion + (set-buffer (find-file-noselect file)) + (let ((modified (buffer-modified-p))) + (if (> (buffer-size) 0) + (let (xmltok-dtd) + (goto-char (point-min)) + (xmltok-save + (xmltok-forward-prolog) + (xmltok-forward) + (unless (eq xmltok-type 'start-tag) + (error "Locating file `%s' invalid" file)))) + (insert "\n" + "") + (let ((pos (point))) + (insert "\n\n") + (goto-char pos))) + (insert "\n") + (insert (let ((locating-file-uri (rng-file-name-uri file))) + (format "" + (rng-escape-string + (rng-relative-uri + (rng-file-name-uri document-file-name) + locating-file-uri)) + (if type-id "typeId" "uri") + (rng-escape-string + (or type-id + (rng-relative-uri + (rng-file-name-uri schema-file-name) + locating-file-uri)))))) + (indent-according-to-mode) + (when (or (not modified) + (y-or-n-p (format "Save file %s " + (buffer-file-name)))) + (save-buffer)))))))) + +(provide 'rng-loc) + +;; arch-tag: 725cf968-37a2-418b-b47b-d5209871a9ab +;;; rng-loc.el ends here diff --git a/lisp/nxml/rng-maint.el b/lisp/nxml/rng-maint.el new file mode 100644 index 00000000000..c4cf0fdfa45 --- /dev/null +++ b/lisp/nxml/rng-maint.el @@ -0,0 +1,354 @@ +;;; rng-maint.el --- commands for RELAX NG maintainers + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(require 'xmltok) +(require 'nxml-mode) +(require 'texnfo-upd) + +(defvar rng-dir (file-name-directory load-file-name)) + +(defconst rng-autoload-modules + '(xmltok + nxml-mode + nxml-uchnm + nxml-glyph + rng-cmpct + rng-maint + rng-valid + rng-xsd + rng-nxml)) + +;;;###autoload +(defun rng-update-autoloads () + "Update the autoloads in rng-auto.el." + (interactive) + (let* ((generated-autoload-file (expand-file-name "rng-auto.el" + rng-dir))) + (mapcar (lambda (x) + (update-file-autoloads + (expand-file-name (concat (symbol-name x) ".el") rng-dir))) + rng-autoload-modules))) + + +(defconst rng-compile-modules + '(xmltok + nxml-util + nxml-enc + nxml-glyph + nxml-rap + nxml-outln + nxml-mode + nxml-uchnm + nxml-ns + nxml-parse + nxml-maint + xsd-regexp + rng-util + rng-dt + rng-xsd + rng-uri + rng-pttrn + rng-cmpct + rng-match + rng-parse + rng-loc + rng-valid + rng-nxml + rng-maint)) + +;;;###autoload +(defun rng-byte-compile-load () + "Byte-compile and load all of the RELAX NG library in an appropriate order." + (interactive) + (mapcar (lambda (x) + (byte-compile-file (expand-file-name (concat (symbol-name x) ".el") + rng-dir) + t)) + rng-compile-modules)) + + +;;; Conversion from XML to texinfo. +;; This is all a hack and is just enough to make the conversion work. +;; It's not intended for public use. + +(defvar rng-manual-base "nxml-mode") +(defvar rng-manual-xml (concat rng-manual-base ".xml")) +(defvar rng-manual-texi (concat rng-manual-base ".texi")) +(defvar rng-manual-info (concat rng-manual-base ".info")) + +;;;###autoload +(defun rng-format-manual () + "Create manual.texi from manual.xml." + (interactive) + (let ((xml-buf (find-file-noselect (expand-file-name rng-manual-xml + rng-dir))) + (texi-buf (find-file-noselect (expand-file-name rng-manual-texi + rng-dir)))) + (save-excursion + (set-buffer texi-buf) + (erase-buffer) + (let ((standard-output texi-buf)) + (princ (format "\\input texinfo @c -*- texinfo -*-\n\ +@c %%**start of header\n\ +@setfilename %s\n\ +@settitle \n\ +@c %%**end of header\n" rng-manual-info)) + (set-buffer xml-buf) + (goto-char (point-min)) + (xmltok-save + (xmltok-forward-prolog) + (rng-process-tokens)) + (princ "\n@bye\n")) + (set-buffer texi-buf) + (rng-manual-fixup) + (texinfo-insert-node-lines (point-min) (point-max) t) + (texinfo-all-menus-update) + (save-buffer)))) + +(defun rng-manual-fixup () + (goto-char (point-min)) + (search-forward "@top ") + (let ((pos (point))) + (search-forward "\n") + (let ((title (buffer-substring-no-properties pos (1- (point))))) + (goto-char (point-min)) + (search-forward "@settitle ") + (insert title) + (search-forward "@node") + (goto-char (match-beginning 0)) + (insert "@dircategory Emacs\n" + "@direntry\n* " + title + ": (" + rng-manual-info + ").\n@end direntry\n\n")))) + +(defvar rng-manual-inline-elements '(kbd key samp code var emph uref point)) + +(defun rng-process-tokens () + (let ((section-depth 0) + ;; stack of per-element space treatment + ;; t means keep, nil means discard, fill means no blank lines + (keep-space-stack (list nil)) + (ignore-following-newline nil) + (want-blank-line nil) + name startp endp data keep-space-for-children) + (while (xmltok-forward) + (cond ((memq xmltok-type '(start-tag empty-element end-tag)) + (setq startp (memq xmltok-type '(start-tag empty-element))) + (setq endp (memq xmltok-type '(end-tag empty-element))) + (setq name (intern (if startp + (xmltok-start-tag-qname) + (xmltok-end-tag-qname)))) + (setq keep-space-for-children nil) + (setq ignore-following-newline nil) + (cond ((memq name rng-manual-inline-elements) + (when startp + (when want-blank-line + (rng-manual-output-force-blank-line) + (when (eq want-blank-line 'noindent) + (princ "@noindent\n")) + (setq want-blank-line nil)) + (setq keep-space-for-children t) + (princ (format "@%s{" name))) + (when endp (princ "}"))) + ((eq name 'ulist) + (when startp + (rng-manual-output-force-blank-line) + (setq want-blank-line nil) + (princ "@itemize @bullet\n")) + (when endp + (rng-manual-output-force-new-line) + (setq want-blank-line 'noindent) + (princ "@end itemize\n"))) + ((eq name 'item) + (rng-manual-output-force-new-line) + (setq want-blank-line endp) + (when startp (princ "@item\n"))) + ((memq name '(example display)) + (when startp + (setq ignore-following-newline t) + (rng-manual-output-force-blank-line) + (setq want-blank-line nil) + (setq keep-space-for-children t) + (princ (format "@%s\n" name))) + (when endp + (rng-manual-output-force-new-line) + (setq want-blank-line 'noindent) + (princ (format "@end %s\n" name)))) + ((eq name 'para) + (rng-manual-output-force-new-line) + (when startp + (when want-blank-line + (setq want-blank-line t)) + (setq keep-space-for-children 'fill)) + (when endp (setq want-blank-line t))) + ((eq name 'section) + (when startp + (rng-manual-output-force-blank-line) + (when (eq section-depth 0) + (princ "@node Top\n")) + (princ "@") + (princ (nth section-depth '(top + chapter + section + subsection + subsubsection))) + (princ " ") + (setq want-blank-line nil) + (setq section-depth (1+ section-depth))) + (when endp + (rng-manual-output-force-new-line) + (setq want-blank-line nil) + (setq section-depth (1- section-depth)))) + ((eq name 'title) + (when startp + (setq keep-space-for-children 'fill)) + (when endp + (setq want-blank-line t) + (princ "\n")))) + (when startp + (setq keep-space-stack (cons keep-space-for-children + keep-space-stack))) + (when endp + (setq keep-space-stack (cdr keep-space-stack)))) + ((memq xmltok-type '(data + space + char-ref + entity-ref + cdata-section)) + (setq data nil) + (cond ((memq xmltok-type '(data space)) + (setq data (buffer-substring-no-properties xmltok-start + (point)))) + ((and (memq xmltok-type '(char-ref entity-ref)) + xmltok-replacement) + (setq data xmltok-replacement)) + ((eq xmltok-type 'cdata-section) + (setq data + (buffer-substring-no-properties (+ xmltok-start 9) + (- (point) 3))))) + (when (and data (car keep-space-stack)) + (setq data (replace-regexp-in-string "[@{}]" + "@\\&" + data + t)) + (when ignore-following-newline + (setq data (replace-regexp-in-string "\\`\n" "" data t))) + (setq ignore-following-newline nil) +;; (when (eq (car keep-space-stack) 'fill) +;; (setq data (replace-regexp-in-string "\n" " " data t))) + (when (eq want-blank-line 'noindent) + (setq data (replace-regexp-in-string "\\`\n*" "" data t))) + (when (> (length data) 0) + (when want-blank-line + (rng-manual-output-force-blank-line) + (when (eq want-blank-line 'noindent) + (princ "@noindent\n")) + (setq want-blank-line nil)) + (princ data)))) + )))) + +(defun rng-manual-output-force-new-line () + (save-excursion + (set-buffer standard-output) + (unless (eq (char-before) ?\n) + (insert ?\n)))) + +(defun rng-manual-output-force-blank-line () + (save-excursion + (set-buffer standard-output) + (if (eq (char-before) ?\n) + (unless (eq (char-before (1- (point))) ?\n) + (insert ?\n)) + (insert "\n\n")))) + +;;; Versioning + +;;;###autoload +(defun rng-write-version () + (find-file "VERSION") + (erase-buffer) + (insert nxml-version "\n") + (save-buffer)) + +;;; Timing + +(defun rng-time-to-float (time) + (+ (* (nth 0 time) 65536.0) + (nth 1 time) + (/ (nth 2 time) 1000000.0))) + +(defun rng-time-function (function &rest args) + (let* ((start (current-time)) + (val (apply function args)) + (end (current-time))) + (message "%s ran in %g seconds" + function + (- (rng-time-to-float end) + (rng-time-to-float start))) + val)) + +(defun rng-time-tokenize-buffer () + (interactive) + (rng-time-function 'rng-tokenize-buffer)) + +(defun rng-tokenize-buffer () + (save-excursion + (goto-char (point-min)) + (xmltok-save + (xmltok-forward-prolog) + (while (xmltok-forward))))) + +(defun rng-time-validate-buffer () + (interactive) + (rng-time-function 'rng-validate-buffer)) + +(defvar rng-error-count) +(defvar rng-validate-up-to-date-end) +(declare-function rng-clear-cached-state "rng-valid" (start end)) +(declare-function rng-clear-overlays "rng-valid" (beg end)) +(declare-function rng-clear-conditional-region "rng-valid" ()) +(declare-function rng-do-some-validation "rng-valid" + (&optional continue-p-function)) + +(defun rng-validate-buffer () + (save-restriction + (widen) + (nxml-with-unmodifying-text-property-changes + (rng-clear-cached-state (point-min) (point-max))) + ;; 1+ to clear empty overlays at (point-max) + (rng-clear-overlays (point-min) (1+ (point-max)))) + (setq rng-validate-up-to-date-end 1) + (rng-clear-conditional-region) + (setq rng-error-count 0) + (while (rng-do-some-validation + (lambda () t)))) + +;; arch-tag: 4b8c6143-daac-4888-9c61-9bea6f935f17 +;;; rng-maint.el ends here diff --git a/lisp/nxml/rng-match.el b/lisp/nxml/rng-match.el new file mode 100644 index 00000000000..eb79d999634 --- /dev/null +++ b/lisp/nxml/rng-match.el @@ -0,0 +1,1742 @@ +;;; rng-match.el --- matching of RELAX NG patterns against XML events + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; 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 uses the algorithm described in +;; http://www.thaiopensource.com/relaxng/derivative.html +;; +;; The schema to be used is contained in the variable +;; rng-current-schema. It has the form described in the file +;; rng-pttrn.el. +;; +;;; Code: + +(require 'rng-pttrn) +(require 'rng-util) +(require 'rng-dt) + +(defvar rng-not-allowed-ipattern nil) +(defvar rng-empty-ipattern nil) +(defvar rng-text-ipattern nil) + +(defvar rng-compile-table nil) + +(defvar rng-being-compiled nil + "Contains a list of ref patterns currently being compiled. +Used to detect illegal recursive references.") + +(defvar rng-ipattern-table nil) + +(defvar rng-last-ipattern-index nil) + +(defvar rng-match-state nil + "An ipattern representing the current state of validation.") + +;;; Inline functions + +(defsubst rng-update-match-state (new-state) + (if (and (eq new-state rng-not-allowed-ipattern) + (not (eq rng-match-state rng-not-allowed-ipattern))) + nil + (setq rng-match-state new-state) + t)) + +;;; Interned patterns + +(eval-when-compile + (defun rng-ipattern-slot-accessor-name (slot-name) + (intern (concat "rng-ipattern-get-" + (symbol-name slot-name)))) + + (defun rng-ipattern-slot-setter-name (slot-name) + (intern (concat "rng-ipattern-set-" + (symbol-name slot-name))))) + +(defmacro rng-ipattern-defslot (slot-name index) + `(progn + (defsubst ,(rng-ipattern-slot-accessor-name slot-name) (ipattern) + (aref ipattern ,index)) + (defsubst ,(rng-ipattern-slot-setter-name slot-name) (ipattern value) + (aset ipattern ,index value)))) + +(rng-ipattern-defslot type 0) +(rng-ipattern-defslot index 1) +(rng-ipattern-defslot name-class 2) +(rng-ipattern-defslot datatype 2) +(rng-ipattern-defslot after 2) +(rng-ipattern-defslot child 3) +(rng-ipattern-defslot value-object 3) +(rng-ipattern-defslot nullable 4) +(rng-ipattern-defslot memo-text-typed 5) +(rng-ipattern-defslot memo-map-start-tag-open-deriv 6) +(rng-ipattern-defslot memo-map-start-attribute-deriv 7) +(rng-ipattern-defslot memo-start-tag-close-deriv 8) +(rng-ipattern-defslot memo-text-only-deriv 9) +(rng-ipattern-defslot memo-mixed-text-deriv 10) +(rng-ipattern-defslot memo-map-data-deriv 11) +(rng-ipattern-defslot memo-end-tag-deriv 12) + +(defconst rng-memo-map-alist-max 10) + +(defsubst rng-memo-map-get (key mm) + "Return the value associated with KEY in memo-map MM." + (let ((found (assoc key mm))) + (if found + (cdr found) + (and mm + (let ((head (car mm))) + (and (hash-table-p head) + (gethash key head))))))) + +(defun rng-memo-map-add (key value mm &optional weakness) + "Associate KEY with VALUE in memo-map MM and return the new memo-map. +The new memo-map may or may not be a different object from MM. + +Alists are better for small maps. Hash tables are better for large +maps. A memo-map therefore starts off as an alist and switches to a +hash table for large memo-maps. A memo-map is always a list. An empty +memo-map is represented by nil. A large memo-map is represented by a +list containing just a hash-table. A small memo map is represented by +a list whose cdr is an alist and whose car is the number of entries in +the alist. The complete memo-map can be passed to assoc without +problems: assoc ignores any members that are not cons cells. There is +therefore minimal overhead in successful lookups on small lists +\(which is the most common case)." + (if (null mm) + (list 1 (cons key value)) + (let ((head (car mm))) + (cond ((hash-table-p head) + (puthash key value head) + mm) + ((>= head rng-memo-map-alist-max) + (let ((ht (make-hash-table :test 'equal + :weakness weakness + :size (* 2 rng-memo-map-alist-max)))) + (setq mm (cdr mm)) + (while mm + (setq head (car mm)) + (puthash (car head) (cdr head) ht) + (setq mm (cdr mm))) + (cons ht nil))) + (t (cons (1+ head) + (cons (cons key value) + (cdr mm)))))))) + +(defsubst rng-make-ipattern (type index name-class child nullable) + (vector type index name-class child nullable + ;; 5 memo-text-typed + 'unknown + ;; 6 memo-map-start-tag-open-deriv + nil + ;; 7 memo-map-start-attribute-deriv + nil + ;; 8 memo-start-tag-close-deriv + nil + ;; 9 memo-text-only-deriv + nil + ;; 10 memo-mixed-text-deriv + nil + ;; 11 memo-map-data-deriv + nil + ;; 12 memo-end-tag-deriv + nil)) + +(defun rng-ipattern-maybe-init () + (unless rng-ipattern-table + (setq rng-ipattern-table (make-hash-table :test 'equal)) + (setq rng-last-ipattern-index -1))) + +(defun rng-ipattern-clear () + (when rng-ipattern-table + (clrhash rng-ipattern-table)) + (setq rng-last-ipattern-index -1)) + +(defsubst rng-gen-ipattern-index () + (setq rng-last-ipattern-index (1+ rng-last-ipattern-index))) + +(defun rng-put-ipattern (key type name-class child nullable) + (let ((ipattern + (rng-make-ipattern type + (rng-gen-ipattern-index) + name-class + child + nullable))) + (puthash key ipattern rng-ipattern-table) + ipattern)) + +(defun rng-get-ipattern (key) + (gethash key rng-ipattern-table)) + +(or rng-not-allowed-ipattern + (setq rng-not-allowed-ipattern + (rng-make-ipattern 'not-allowed -3 nil nil nil))) + +(or rng-empty-ipattern + (setq rng-empty-ipattern + (rng-make-ipattern 'empty -2 nil nil t))) + +(or rng-text-ipattern + (setq rng-text-ipattern + (rng-make-ipattern 'text -1 nil nil t))) + +(defconst rng-const-ipatterns + (list rng-not-allowed-ipattern + rng-empty-ipattern + rng-text-ipattern)) + +(defun rng-intern-after (child after) + (if (eq child rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (let ((key (list 'after + (rng-ipattern-get-index child) + (rng-ipattern-get-index after)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'after + after + child + nil))))) + +(defun rng-intern-attribute (name-class ipattern) + (if (eq ipattern rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (let ((key (list 'attribute + name-class + (rng-ipattern-get-index ipattern)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'attribute + name-class + ipattern + nil))))) + +(defun rng-intern-data (dt matches-anything) + (let ((key (list 'data dt))) + (or (rng-get-ipattern key) + (let ((ipattern (rng-put-ipattern key + 'data + dt + nil + matches-anything))) + (rng-ipattern-set-memo-text-typed ipattern + (not matches-anything)) + ipattern)))) + +(defun rng-intern-data-except (dt ipattern) + (let ((key (list 'data-except dt ipattern))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'data-except + dt + ipattern + nil)))) + +(defun rng-intern-value (dt obj) + (let ((key (list 'value dt obj))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'value + dt + obj + nil)))) + +(defun rng-intern-one-or-more (ipattern) + (or (rng-intern-one-or-more-shortcut ipattern) + (let ((key (cons 'one-or-more + (list (rng-ipattern-get-index ipattern))))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'one-or-more + nil + ipattern + (rng-ipattern-get-nullable ipattern)))))) + +(defun rng-intern-one-or-more-shortcut (ipattern) + (cond ((eq ipattern rng-not-allowed-ipattern) + rng-not-allowed-ipattern) + ((eq ipattern rng-empty-ipattern) + rng-empty-ipattern) + ((eq (rng-ipattern-get-type ipattern) 'one-or-more) + ipattern) + (t nil))) + +(defun rng-intern-list (ipattern) + (if (eq ipattern rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (let ((key (cons 'list + (list (rng-ipattern-get-index ipattern))))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'list + nil + ipattern + nil))))) + +(defun rng-intern-group (ipatterns) + "Return a ipattern for the list of group members in IPATTERNS." + (or (rng-intern-group-shortcut ipatterns) + (let* ((tem (rng-normalize-group-list ipatterns)) + (normalized (cdr tem))) + (or (rng-intern-group-shortcut normalized) + (let ((key (cons 'group + (mapcar 'rng-ipattern-get-index normalized)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'group + nil + normalized + (car tem)))))))) + +(defun rng-intern-group-shortcut (ipatterns) + "Try to shortcut interning a group list. If successful, return the +interned pattern. Otherwise return nil." + (while (and ipatterns + (eq (car ipatterns) rng-empty-ipattern)) + (setq ipatterns (cdr ipatterns))) + (if ipatterns + (let ((ret (car ipatterns))) + (if (eq ret rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (setq ipatterns (cdr ipatterns)) + (while (and ipatterns ret) + (let ((tem (car ipatterns))) + (cond ((eq tem rng-not-allowed-ipattern) + (setq ret tem) + (setq ipatterns nil)) + ((eq tem rng-empty-ipattern) + (setq ipatterns (cdr ipatterns))) + (t + ;; Stop here rather than continuing + ;; looking for not-allowed patterns. + ;; We do a complete scan elsewhere. + (setq ret nil))))) + ret)) + rng-empty-ipattern)) + +(defun rng-normalize-group-list (ipatterns) + "Normalize a list containing members of a group. +Expands nested groups, removes empty members, handles notAllowed. +Returns a pair whose car says whether the list is nullable and whose +cdr is the normalized list." + (let ((nullable t) + (result nil) + member) + (while ipatterns + (setq member (car ipatterns)) + (setq ipatterns (cdr ipatterns)) + (when nullable + (setq nullable (rng-ipattern-get-nullable member))) + (cond ((eq (rng-ipattern-get-type member) 'group) + (setq result + (nconc (reverse (rng-ipattern-get-child member)) + result))) + ((eq member rng-not-allowed-ipattern) + (setq result (list rng-not-allowed-ipattern)) + (setq ipatterns nil)) + ((not (eq member rng-empty-ipattern)) + (setq result (cons member result))))) + (cons nullable (nreverse result)))) + +(defun rng-intern-interleave (ipatterns) + (or (rng-intern-group-shortcut ipatterns) + (let* ((tem (rng-normalize-interleave-list ipatterns)) + (normalized (cdr tem))) + (or (rng-intern-group-shortcut normalized) + (let ((key (cons 'interleave + (mapcar 'rng-ipattern-get-index normalized)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'interleave + nil + normalized + (car tem)))))))) + +(defun rng-normalize-interleave-list (ipatterns) + "Normalize a list containing members of an interleave. +Expands nested groups, removes empty members, handles notAllowed. +Returns a pair whose car says whether the list is nullable and whose +cdr is the normalized list." + (let ((nullable t) + (result nil) + member) + (while ipatterns + (setq member (car ipatterns)) + (setq ipatterns (cdr ipatterns)) + (when nullable + (setq nullable (rng-ipattern-get-nullable member))) + (cond ((eq (rng-ipattern-get-type member) 'interleave) + (setq result + (append (rng-ipattern-get-child member) + result))) + ((eq member rng-not-allowed-ipattern) + (setq result (list rng-not-allowed-ipattern)) + (setq ipatterns nil)) + ((not (eq member rng-empty-ipattern)) + (setq result (cons member result))))) + (cons nullable (sort result 'rng-compare-ipattern)))) + +;; Would be cleaner if this didn't modify IPATTERNS. + +(defun rng-intern-choice (ipatterns) + "Return a choice ipattern for the list of choices in IPATTERNS. +May alter IPATTERNS." + (or (rng-intern-choice-shortcut ipatterns) + (let* ((tem (rng-normalize-choice-list ipatterns)) + (normalized (cdr tem))) + (or (rng-intern-choice-shortcut normalized) + (rng-intern-choice1 normalized (car tem)))))) + +(defun rng-intern-optional (ipattern) + (cond ((rng-ipattern-get-nullable ipattern) ipattern) + ((eq ipattern rng-not-allowed-ipattern) rng-empty-ipattern) + (t (rng-intern-choice1 + ;; This is sorted since the empty pattern + ;; is before everything except not allowed. + ;; It cannot have a duplicate empty pattern, + ;; since it is not nullable. + (cons rng-empty-ipattern + (if (eq (rng-ipattern-get-type ipattern) 'choice) + (rng-ipattern-get-child ipattern) + (list ipattern))) + t)))) + + +(defun rng-intern-choice1 (normalized nullable) + (let ((key (cons 'choice + (mapcar 'rng-ipattern-get-index normalized)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'choice + nil + normalized + nullable)))) + +(defun rng-intern-choice-shortcut (ipatterns) + "Try to shortcut interning a choice list. If successful, return the +interned pattern. Otherwise return nil." + (while (and ipatterns + (eq (car ipatterns) + rng-not-allowed-ipattern)) + (setq ipatterns (cdr ipatterns))) + (if ipatterns + (let ((ret (car ipatterns))) + (setq ipatterns (cdr ipatterns)) + (while (and ipatterns ret) + (or (eq (car ipatterns) rng-not-allowed-ipattern) + (eq (car ipatterns) ret) + (setq ret nil)) + (setq ipatterns (cdr ipatterns))) + ret) + rng-not-allowed-ipattern)) + +(defun rng-normalize-choice-list (ipatterns) + "Normalize a list of choices, expanding nested choices, removing +not-allowed members, sorting by index and removing duplicates. Return +a pair whose car says whether the list is nullable and whose cdr is +the normalized list." + (let ((sorted t) + (nullable nil) + (head (cons nil ipatterns))) + (let ((tail head) + (final-tail nil) + (prev-index -100) + (cur ipatterns) + member) + ;; the cdr of tail is always cur + (while cur + (setq member (car cur)) + (or nullable + (setq nullable (rng-ipattern-get-nullable member))) + (cond ((eq (rng-ipattern-get-type member) 'choice) + (setq final-tail + (append (rng-ipattern-get-child member) + final-tail)) + (setq cur (cdr cur)) + (setq sorted nil) + (setcdr tail cur)) + ((eq member rng-not-allowed-ipattern) + (setq cur (cdr cur)) + (setcdr tail cur)) + (t + (if (and sorted + (let ((cur-index (rng-ipattern-get-index member))) + (if (>= prev-index cur-index) + (or (= prev-index cur-index) ; will remove it + (setq sorted nil)) ; won't remove it + (setq prev-index cur-index) + ;; won't remove it + nil))) + (progn + ;; remove it + (setq cur (cdr cur)) + (setcdr tail cur)) + ;; don't remove it + (setq tail cur) + (setq cur (cdr cur)))))) + (setcdr tail final-tail)) + (setq head (cdr head)) + (cons nullable + (if sorted + head + (rng-uniquify-eq (sort head 'rng-compare-ipattern)))))) + +(defun rng-compare-ipattern (p1 p2) + (< (rng-ipattern-get-index p1) + (rng-ipattern-get-index p2))) + +;;; Name classes + +(defsubst rng-name-class-contains (nc nm) + (if (consp nc) + (equal nm nc) + (rng-name-class-contains1 nc nm))) + +(defun rng-name-class-contains1 (nc nm) + (let ((type (aref nc 0))) + (cond ((eq type 'any-name) t) + ((eq type 'any-name-except) + (not (rng-name-class-contains (aref nc 1) nm))) + ((eq type 'ns-name) + (eq (car nm) (aref nc 1))) + ((eq type 'ns-name-except) + (and (eq (car nm) (aref nc 1)) + (not (rng-name-class-contains (aref nc 2) nm)))) + ((eq type 'choice) + (let ((choices (aref nc 1)) + (ret nil)) + (while choices + (if (rng-name-class-contains (car choices) nm) + (progn + (setq choices nil) + (setq ret t)) + (setq choices (cdr choices)))) + ret))))) + +(defun rng-name-class-possible-names (nc accum) + "Return a list of possible names that nameclass NC can match. + +Each possible name should be returned as a (NAMESPACE . LOCAL-NAME) +pair, where NAMESPACE is a symbol or nil and LOCAL-NAME is a string. +nil for NAMESPACE matches the absent namespace. ACCUM is a list of +names which should be appended to the returned list. The returned list +may contain duplicates." + (if (consp nc) + (cons nc accum) + (when (eq (aref nc 0) 'choice) + (let ((members (aref nc 1)) member) + (while members + (setq member (car members)) + (setq accum + (if (consp member) + (cons member accum) + (rng-name-class-possible-names member + accum))) + (setq members (cdr members))))) + accum)) + +;;; Debugging utilities + +(defun rng-ipattern-to-string (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (concat (rng-ipattern-to-string + (rng-ipattern-get-child ipattern)) + " " + (rng-ipattern-to-string + (rng-ipattern-get-after ipattern)))) + ((eq type 'element) + (concat "element " + (rng-name-class-to-string + (rng-ipattern-get-name-class ipattern)) + ;; we can get cycles with elements so don't print it out + " {...}")) + ((eq type 'attribute) + (concat "attribute " + (rng-name-class-to-string + (rng-ipattern-get-name-class ipattern)) + " { " + (rng-ipattern-to-string + (rng-ipattern-get-child ipattern)) + " } ")) + ((eq type 'empty) "empty") + ((eq type 'text) "text") + ((eq type 'not-allowed) "notAllowed") + ((eq type 'one-or-more) + (concat (rng-ipattern-to-string + (rng-ipattern-get-child ipattern)) + "+")) + ((eq type 'choice) + (concat "(" + (mapconcat 'rng-ipattern-to-string + (rng-ipattern-get-child ipattern) + " | ") + ")")) + ((eq type 'group) + (concat "(" + (mapconcat 'rng-ipattern-to-string + (rng-ipattern-get-child ipattern) + ", ") + ")")) + ((eq type 'interleave) + (concat "(" + (mapconcat 'rng-ipattern-to-string + (rng-ipattern-get-child ipattern) + " & ") + ")")) + (t (symbol-name type))))) + +(defun rng-name-class-to-string (nc) + (if (consp nc) + (cdr nc) + (let ((type (aref nc 0))) + (cond ((eq type 'choice) + (mapconcat 'rng-name-class-to-string + (aref nc 1) + "|")) + (t (concat (symbol-name type) "*")))))) + + +;;; Compiling + +(defun rng-compile-maybe-init () + (unless rng-compile-table + (setq rng-compile-table (make-hash-table :test 'eq)))) + +(defun rng-compile-clear () + (when rng-compile-table + (clrhash rng-compile-table))) + +(defun rng-compile (pattern) + (or (gethash pattern rng-compile-table) + (let ((ipattern (apply (get (car pattern) 'rng-compile) + (cdr pattern)))) + (puthash pattern ipattern rng-compile-table) + ipattern))) + +(put 'empty 'rng-compile 'rng-compile-empty) +(put 'text 'rng-compile 'rng-compile-text) +(put 'not-allowed 'rng-compile 'rng-compile-not-allowed) +(put 'element 'rng-compile 'rng-compile-element) +(put 'attribute 'rng-compile 'rng-compile-attribute) +(put 'choice 'rng-compile 'rng-compile-choice) +(put 'optional 'rng-compile 'rng-compile-optional) +(put 'group 'rng-compile 'rng-compile-group) +(put 'interleave 'rng-compile 'rng-compile-interleave) +(put 'ref 'rng-compile 'rng-compile-ref) +(put 'one-or-more 'rng-compile 'rng-compile-one-or-more) +(put 'zero-or-more 'rng-compile 'rng-compile-zero-or-more) +(put 'mixed 'rng-compile 'rng-compile-mixed) +(put 'data 'rng-compile 'rng-compile-data) +(put 'data-except 'rng-compile 'rng-compile-data-except) +(put 'value 'rng-compile 'rng-compile-value) +(put 'list 'rng-compile 'rng-compile-list) + +(defun rng-compile-not-allowed () rng-not-allowed-ipattern) +(defun rng-compile-empty () rng-empty-ipattern) +(defun rng-compile-text () rng-text-ipattern) + +(defun rng-compile-element (name-class pattern) + ;; don't intern + (rng-make-ipattern 'element + (rng-gen-ipattern-index) + (rng-compile-name-class name-class) + pattern ; compile lazily + nil)) + +(defun rng-element-get-child (element) + (let ((tem (rng-ipattern-get-child element))) + (if (vectorp tem) + tem + (rng-ipattern-set-child element (rng-compile tem))))) + +(defun rng-compile-attribute (name-class pattern) + (rng-intern-attribute (rng-compile-name-class name-class) + (rng-compile pattern))) + +(defun rng-compile-ref (pattern name) + (and (memq pattern rng-being-compiled) + (rng-compile-error "Reference loop on symbol %s" name)) + (setq rng-being-compiled + (cons pattern rng-being-compiled)) + (unwind-protect + (rng-compile pattern) + (setq rng-being-compiled + (cdr rng-being-compiled)))) + +(defun rng-compile-one-or-more (pattern) + (rng-intern-one-or-more (rng-compile pattern))) + +(defun rng-compile-zero-or-more (pattern) + (rng-intern-optional + (rng-intern-one-or-more (rng-compile pattern)))) + +(defun rng-compile-optional (pattern) + (rng-intern-optional (rng-compile pattern))) + +(defun rng-compile-mixed (pattern) + (rng-intern-interleave (cons rng-text-ipattern + (list (rng-compile pattern))))) + +(defun rng-compile-list (pattern) + (rng-intern-list (rng-compile pattern))) + +(defun rng-compile-choice (&rest patterns) + (rng-intern-choice (mapcar 'rng-compile patterns))) + +(defun rng-compile-group (&rest patterns) + (rng-intern-group (mapcar 'rng-compile patterns))) + +(defun rng-compile-interleave (&rest patterns) + (rng-intern-interleave (mapcar 'rng-compile patterns))) + +(defun rng-compile-dt (name params) + (let ((rng-dt-error-reporter 'rng-compile-error)) + (funcall (let ((uri (car name))) + (or (get uri 'rng-dt-compile) + (rng-compile-error "Unknown datatype library %s" uri))) + (cdr name) + params))) + +(defun rng-compile-data (name params) + (let ((dt (rng-compile-dt name params))) + (rng-intern-data (cdr dt) (car dt)))) + +(defun rng-compile-data-except (name params pattern) + (rng-intern-data-except (cdr (rng-compile-dt name params)) + (rng-compile pattern))) + +(defun rng-compile-value (name str context) + (let* ((dt (cdr (rng-compile-dt name '()))) + (rng-dt-namespace-context-getter (list 'identity context)) + (obj (rng-dt-make-value dt str))) + (if obj + (rng-intern-value dt obj) + (rng-compile-error "Value %s is not a valid instance of the datatype %s" + str + name)))) + +(defun rng-compile-name-class (nc) + (let ((type (car nc))) + (cond ((eq type 'name) (nth 1 nc)) + ((eq type 'any-name) [any-name]) + ((eq type 'any-name-except) + (vector 'any-name-except + (rng-compile-name-class (nth 1 nc)))) + ((eq type 'ns-name) + (vector 'ns-name (nth 1 nc))) + ((eq type 'ns-name-except) + (vector 'ns-name-except + (nth 1 nc) + (rng-compile-name-class (nth 2 nc)))) + ((eq type 'choice) + (vector 'choice + (mapcar 'rng-compile-name-class (cdr nc)))) + (t (error "Bad name-class type %s" type))))) + +;;; Searching patterns + +;; We write this non-recursively to avoid hitting max-lisp-eval-depth +;; on large schemas. + +(defun rng-map-element-attribute (function pattern accum &rest args) + (let ((searched (make-hash-table :test 'eq)) + type todo patterns) + (while (progn + (setq type (car pattern)) + (cond ((memq type '(element attribute)) + (setq accum + (apply function + (cons pattern + (cons accum args)))) + (setq pattern (nth 2 pattern))) + ((eq type 'ref) + (setq pattern (nth 1 pattern)) + (if (gethash pattern searched) + (setq pattern nil) + (puthash pattern t searched))) + ((memq type '(choice group interleave)) + (setq todo (cons (cdr pattern) todo)) + (setq pattern nil)) + ((memq type '(one-or-more + zero-or-more + optional + mixed)) + (setq pattern (nth 1 pattern))) + (t (setq pattern nil))) + (cond (pattern) + (patterns + (setq pattern (car patterns)) + (setq patterns (cdr patterns)) + t) + (todo + (setq patterns (car todo)) + (setq todo (cdr todo)) + (setq pattern (car patterns)) + (setq patterns (cdr patterns)) + t)))) + accum)) + +(defun rng-find-element-content-pattern (pattern accum name) + (if (and (eq (car pattern) 'element) + (rng-search-name name (nth 1 pattern))) + (cons (rng-compile (nth 2 pattern)) accum) + accum)) + +(defun rng-search-name (name nc) + (let ((type (car nc))) + (cond ((eq type 'name) + (equal (cadr nc) name)) + ((eq type 'choice) + (let ((choices (cdr nc)) + (found nil)) + (while (and choices (not found)) + (if (rng-search-name name (car choices)) + (setq found t) + (setq choices (cdr choices)))) + found)) + (t nil)))) + +(defun rng-find-name-class-uris (nc accum) + (let ((type (car nc))) + (cond ((eq type 'name) + (rng-accum-namespace-uri (car (nth 1 nc)) accum)) + ((memq type '(ns-name ns-name-except)) + (rng-accum-namespace-uri (nth 1 nc) accum)) + ((eq type 'choice) + (let ((choices (cdr nc))) + (while choices + (setq accum + (rng-find-name-class-uris (car choices) accum)) + (setq choices (cdr choices)))) + accum) + (t accum)))) + +(defun rng-accum-namespace-uri (ns accum) + (if (and ns (not (memq ns accum))) + (cons ns accum) + accum)) + +;;; Derivatives + +(defun rng-ipattern-text-typed-p (ipattern) + (let ((memo (rng-ipattern-get-memo-text-typed ipattern))) + (if (eq memo 'unknown) + (rng-ipattern-set-memo-text-typed + ipattern + (rng-ipattern-compute-text-typed-p ipattern)) + memo))) + +(defun rng-ipattern-compute-text-typed-p (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (let ((cur (rng-ipattern-get-child ipattern)) + (ret nil)) + (while (and cur (not ret)) + (if (rng-ipattern-text-typed-p (car cur)) + (setq ret t) + (setq cur (cdr cur)))) + ret)) + ((eq type 'group) + (let ((cur (rng-ipattern-get-child ipattern)) + (ret nil) + member) + (while (and cur (not ret)) + (setq member (car cur)) + (if (rng-ipattern-text-typed-p member) + (setq ret t)) + (setq cur + (and (rng-ipattern-get-nullable member) + (cdr cur)))) + ret)) + ((eq type 'after) + (rng-ipattern-text-typed-p (rng-ipattern-get-child ipattern))) + (t (and (memq type '(value list data data-except)) t))))) + +(defun rng-start-tag-open-deriv (ipattern nm) + (or (rng-memo-map-get + nm + (rng-ipattern-get-memo-map-start-tag-open-deriv ipattern)) + (rng-ipattern-memo-start-tag-open-deriv + ipattern + nm + (rng-compute-start-tag-open-deriv ipattern nm)))) + +(defun rng-ipattern-memo-start-tag-open-deriv (ipattern nm deriv) + (or (memq ipattern rng-const-ipatterns) + (rng-ipattern-set-memo-map-start-tag-open-deriv + ipattern + (rng-memo-map-add nm + deriv + (rng-ipattern-get-memo-map-start-tag-open-deriv + ipattern)))) + deriv) + +(defun rng-compute-start-tag-open-deriv (ipattern nm) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-transform-choice `(lambda (p) + (rng-start-tag-open-deriv p ',nm)) + ipattern)) + ((eq type 'element) + (if (rng-name-class-contains + (rng-ipattern-get-name-class ipattern) + nm) + (rng-intern-after (rng-element-get-child ipattern) + rng-empty-ipattern) + rng-not-allowed-ipattern)) + ((eq type 'group) + (rng-transform-group-nullable + `(lambda (p) (rng-start-tag-open-deriv p ',nm)) + 'rng-cons-group-after + ipattern)) + ((eq type 'interleave) + (rng-transform-interleave-single + `(lambda (p) (rng-start-tag-open-deriv p ',nm)) + 'rng-subst-interleave-after + ipattern)) + ((eq type 'one-or-more) + (rng-apply-after + `(lambda (p) + (rng-intern-group (list p ,(rng-intern-optional ipattern)))) + (rng-start-tag-open-deriv (rng-ipattern-get-child ipattern) + nm))) + ((eq type 'after) + (rng-apply-after + `(lambda (p) + (rng-intern-after p + ,(rng-ipattern-get-after ipattern))) + (rng-start-tag-open-deriv (rng-ipattern-get-child ipattern) + nm))) + (t rng-not-allowed-ipattern)))) + +(defun rng-start-attribute-deriv (ipattern nm) + (or (rng-memo-map-get + nm + (rng-ipattern-get-memo-map-start-attribute-deriv ipattern)) + (rng-ipattern-memo-start-attribute-deriv + ipattern + nm + (rng-compute-start-attribute-deriv ipattern nm)))) + +(defun rng-ipattern-memo-start-attribute-deriv (ipattern nm deriv) + (or (memq ipattern rng-const-ipatterns) + (rng-ipattern-set-memo-map-start-attribute-deriv + ipattern + (rng-memo-map-add + nm + deriv + (rng-ipattern-get-memo-map-start-attribute-deriv ipattern)))) + deriv) + +(defun rng-compute-start-attribute-deriv (ipattern nm) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-transform-choice `(lambda (p) + (rng-start-attribute-deriv p ',nm)) + ipattern)) + ((eq type 'attribute) + (if (rng-name-class-contains + (rng-ipattern-get-name-class ipattern) + nm) + (rng-intern-after (rng-ipattern-get-child ipattern) + rng-empty-ipattern) + rng-not-allowed-ipattern)) + ((eq type 'group) + (rng-transform-interleave-single + `(lambda (p) (rng-start-attribute-deriv p ',nm)) + 'rng-subst-group-after + ipattern)) + ((eq type 'interleave) + (rng-transform-interleave-single + `(lambda (p) (rng-start-attribute-deriv p ',nm)) + 'rng-subst-interleave-after + ipattern)) + ((eq type 'one-or-more) + (rng-apply-after + `(lambda (p) + (rng-intern-group (list p ,(rng-intern-optional ipattern)))) + (rng-start-attribute-deriv (rng-ipattern-get-child ipattern) + nm))) + ((eq type 'after) + (rng-apply-after + `(lambda (p) + (rng-intern-after p ,(rng-ipattern-get-after ipattern))) + (rng-start-attribute-deriv (rng-ipattern-get-child ipattern) + nm))) + (t rng-not-allowed-ipattern)))) + +(defun rng-cons-group-after (x y) + (rng-apply-after `(lambda (p) (rng-intern-group (cons p ',y))) + x)) + +(defun rng-subst-group-after (new old list) + (rng-apply-after `(lambda (p) + (rng-intern-group (rng-substq p ,old ',list))) + new)) + +(defun rng-subst-interleave-after (new old list) + (rng-apply-after `(lambda (p) + (rng-intern-interleave (rng-substq p ,old ',list))) + new)) + +(defun rng-apply-after (f ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-intern-after + (rng-ipattern-get-child ipattern) + (funcall f + (rng-ipattern-get-after ipattern)))) + ((eq type 'choice) + (rng-transform-choice `(lambda (x) (rng-apply-after ,f x)) + ipattern)) + (t rng-not-allowed-ipattern)))) + +(defun rng-start-tag-close-deriv (ipattern) + (or (rng-ipattern-get-memo-start-tag-close-deriv ipattern) + (rng-ipattern-set-memo-start-tag-close-deriv + ipattern + (rng-compute-start-tag-close-deriv ipattern)))) + +(defconst rng-transform-map + '((choice . rng-transform-choice) + (group . rng-transform-group) + (interleave . rng-transform-interleave) + (one-or-more . rng-transform-one-or-more) + (after . rng-transform-after-child))) + +(defun rng-compute-start-tag-close-deriv (ipattern) + (let* ((type (rng-ipattern-get-type ipattern))) + (if (eq type 'attribute) + rng-not-allowed-ipattern + (let ((transform (assq type rng-transform-map))) + (if transform + (funcall (cdr transform) + 'rng-start-tag-close-deriv + ipattern) + ipattern))))) + +(defun rng-ignore-attributes-deriv (ipattern) + (let* ((type (rng-ipattern-get-type ipattern))) + (if (eq type 'attribute) + rng-empty-ipattern + (let ((transform (assq type rng-transform-map))) + (if transform + (funcall (cdr transform) + 'rng-ignore-attributes-deriv + ipattern) + ipattern))))) + +(defun rng-text-only-deriv (ipattern) + (or (rng-ipattern-get-memo-text-only-deriv ipattern) + (rng-ipattern-set-memo-text-only-deriv + ipattern + (rng-compute-text-only-deriv ipattern)))) + +(defun rng-compute-text-only-deriv (ipattern) + (let* ((type (rng-ipattern-get-type ipattern))) + (if (eq type 'element) + rng-not-allowed-ipattern + (let ((transform (assq type + '((choice . rng-transform-choice) + (group . rng-transform-group) + (interleave . rng-transform-interleave) + (one-or-more . rng-transform-one-or-more) + (after . rng-transform-after-child))))) + (if transform + (funcall (cdr transform) + 'rng-text-only-deriv + ipattern) + ipattern))))) + +(defun rng-mixed-text-deriv (ipattern) + (or (rng-ipattern-get-memo-mixed-text-deriv ipattern) + (rng-ipattern-set-memo-mixed-text-deriv + ipattern + (rng-compute-mixed-text-deriv ipattern)))) + +(defun rng-compute-mixed-text-deriv (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'text) ipattern) + ((eq type 'after) + (rng-transform-after-child 'rng-mixed-text-deriv + ipattern)) + ((eq type 'choice) + (rng-transform-choice 'rng-mixed-text-deriv + ipattern)) + ((eq type 'one-or-more) + (rng-intern-group + (list (rng-mixed-text-deriv + (rng-ipattern-get-child ipattern)) + (rng-intern-optional ipattern)))) + ((eq type 'group) + (rng-transform-group-nullable + 'rng-mixed-text-deriv + (lambda (x y) (rng-intern-group (cons x y))) + ipattern)) + ((eq type 'interleave) + (rng-transform-interleave-single + 'rng-mixed-text-deriv + (lambda (new old list) (rng-intern-interleave + (rng-substq new old list))) + ipattern)) + ((and (eq type 'data) + (not (rng-ipattern-get-memo-text-typed ipattern))) + ipattern) + (t rng-not-allowed-ipattern)))) + +(defun rng-end-tag-deriv (ipattern) + (or (rng-ipattern-get-memo-end-tag-deriv ipattern) + (rng-ipattern-set-memo-end-tag-deriv + ipattern + (rng-compute-end-tag-deriv ipattern)))) + +(defun rng-compute-end-tag-deriv (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-intern-choice + (mapcar 'rng-end-tag-deriv + (rng-ipattern-get-child ipattern)))) + ((eq type 'after) + (if (rng-ipattern-get-nullable + (rng-ipattern-get-child ipattern)) + (rng-ipattern-get-after ipattern) + rng-not-allowed-ipattern)) + (t rng-not-allowed-ipattern)))) + +(defun rng-data-deriv (ipattern value) + (or (rng-memo-map-get value + (rng-ipattern-get-memo-map-data-deriv ipattern)) + (and (rng-memo-map-get + (cons value (rng-namespace-context-get-no-trace)) + (rng-ipattern-get-memo-map-data-deriv ipattern)) + (rng-memo-map-get + (cons value (apply (car rng-dt-namespace-context-getter) + (cdr rng-dt-namespace-context-getter))) + (rng-ipattern-get-memo-map-data-deriv ipattern))) + (let* ((used-context (vector nil)) + (rng-dt-namespace-context-getter + (cons 'rng-namespace-context-tracer + (cons used-context + rng-dt-namespace-context-getter))) + (deriv (rng-compute-data-deriv ipattern value))) + (rng-ipattern-memo-data-deriv ipattern + value + (aref used-context 0) + deriv)))) + +(defun rng-namespace-context-tracer (used getter &rest args) + (let ((context (apply getter args))) + (aset used 0 context) + context)) + +(defun rng-namespace-context-get-no-trace () + (let ((tem rng-dt-namespace-context-getter)) + (while (and tem (eq (car tem) 'rng-namespace-context-tracer)) + (setq tem (cddr tem))) + (apply (car tem) (cdr tem)))) + +(defconst rng-memo-data-deriv-max-length 80 + "Don't memoize data-derivs for values longer than this.") + +(defun rng-ipattern-memo-data-deriv (ipattern value context deriv) + (or (memq ipattern rng-const-ipatterns) + (> (length value) rng-memo-data-deriv-max-length) + (rng-ipattern-set-memo-map-data-deriv + ipattern + (rng-memo-map-add (if context (cons value context) value) + deriv + (rng-ipattern-get-memo-map-data-deriv ipattern) + t))) + deriv) + +(defun rng-compute-data-deriv (ipattern value) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'text) ipattern) + ((eq type 'choice) + (rng-transform-choice `(lambda (p) (rng-data-deriv p ,value)) + ipattern)) + ((eq type 'group) + (rng-transform-group-nullable + `(lambda (p) (rng-data-deriv p ,value)) + (lambda (x y) (rng-intern-group (cons x y))) + ipattern)) + ((eq type 'one-or-more) + (rng-intern-group (list (rng-data-deriv + (rng-ipattern-get-child ipattern) + value) + (rng-intern-optional ipattern)))) + ((eq type 'after) + (let ((child (rng-ipattern-get-child ipattern))) + (if (or (rng-ipattern-get-nullable + (rng-data-deriv child value)) + (and (rng-ipattern-get-nullable child) + (rng-blank-p value))) + (rng-ipattern-get-after ipattern) + rng-not-allowed-ipattern))) + ((eq type 'data) + (if (rng-dt-make-value (rng-ipattern-get-datatype ipattern) + value) + rng-empty-ipattern + rng-not-allowed-ipattern)) + ((eq type 'data-except) + (if (and (rng-dt-make-value (rng-ipattern-get-datatype ipattern) + value) + (not (rng-ipattern-get-nullable + (rng-data-deriv + (rng-ipattern-get-child ipattern) + value)))) + rng-empty-ipattern + rng-not-allowed-ipattern)) + ((eq type 'value) + (if (equal (rng-dt-make-value (rng-ipattern-get-datatype ipattern) + value) + (rng-ipattern-get-value-object ipattern)) + rng-empty-ipattern + rng-not-allowed-ipattern)) + ((eq type 'list) + (let ((tokens (split-string value)) + (state (rng-ipattern-get-child ipattern))) + (while (and tokens + (not (eq state rng-not-allowed-ipattern))) + (setq state (rng-data-deriv state (car tokens))) + (setq tokens (cdr tokens))) + (if (rng-ipattern-get-nullable state) + rng-empty-ipattern + rng-not-allowed-ipattern))) + ;; don't think interleave can occur + ;; since we do text-only-deriv first + (t rng-not-allowed-ipattern)))) + +(defun rng-transform-multi (f ipattern interner) + (let* ((members (rng-ipattern-get-child ipattern)) + (transformed (mapcar f members))) + (if (rng-members-eq members transformed) + ipattern + (funcall interner transformed)))) + +(defun rng-transform-choice (f ipattern) + (rng-transform-multi f ipattern 'rng-intern-choice)) + +(defun rng-transform-group (f ipattern) + (rng-transform-multi f ipattern 'rng-intern-group)) + +(defun rng-transform-interleave (f ipattern) + (rng-transform-multi f ipattern 'rng-intern-interleave)) + +(defun rng-transform-one-or-more (f ipattern) + (let* ((child (rng-ipattern-get-child ipattern)) + (transformed (funcall f child))) + (if (eq child transformed) + ipattern + (rng-intern-one-or-more transformed)))) + +(defun rng-transform-after-child (f ipattern) + (let* ((child (rng-ipattern-get-child ipattern)) + (transformed (funcall f child))) + (if (eq child transformed) + ipattern + (rng-intern-after transformed + (rng-ipattern-get-after ipattern))))) + +(defun rng-transform-interleave-single (f subster ipattern) + (let ((children (rng-ipattern-get-child ipattern)) + found) + (while (and children (not found)) + (let* ((child (car children)) + (transformed (funcall f child))) + (if (eq transformed rng-not-allowed-ipattern) + (setq children (cdr children)) + (setq found + (funcall subster + transformed + child + (rng-ipattern-get-child ipattern)))))) + (or found + rng-not-allowed-ipattern))) + +(defun rng-transform-group-nullable (f conser ipattern) + "Given a group x1,...,xn,y1,...,yn where the xs are all +nullable and y1 isn't, return a choice + (conser f(x1) x2,...,xm,y1,...,yn) + |(conser f(x2) x3,...,xm,y1,...,yn) + |... + |(conser f(xm) y1,...,yn) + |(conser f(y1) y2,...,yn)" + (rng-intern-choice + (rng-transform-group-nullable-gen-choices + f + conser + (rng-ipattern-get-child ipattern)))) + +(defun rng-transform-group-nullable-gen-choices (f conser members) + (let ((head (car members)) + (tail (cdr members))) + (if tail + (cons (funcall conser (funcall f head) tail) + (if (rng-ipattern-get-nullable head) + (rng-transform-group-nullable-gen-choices f conser tail) + nil)) + (list (funcall f head))))) + +(defun rng-members-eq (list1 list2) + (while (and list1 + list2 + (eq (car list1) (car list2))) + (setq list1 (cdr list1)) + (setq list2 (cdr list2))) + (and (null list1) (null list2))) + + +(defun rng-ipattern-after (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-transform-choice 'rng-ipattern-after ipattern)) + ((eq type 'after) + (rng-ipattern-get-after ipattern)) + ((eq type 'not-allowed) + ipattern) + (t (error "Internal error in rng-ipattern-after: unexpected type %s" type))))) + +(defun rng-unknown-start-tag-open-deriv (ipattern) + (rng-intern-after (rng-compile rng-any-content) ipattern)) + +(defun rng-ipattern-optionalize-elements (ipattern) + (let* ((type (rng-ipattern-get-type ipattern)) + (transform (assq type rng-transform-map))) + (cond (transform + (funcall (cdr transform) + 'rng-ipattern-optionalize-elements + ipattern)) + ((eq type 'element) + (rng-intern-optional ipattern)) + (t ipattern)))) + +(defun rng-ipattern-empty-before-p (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (eq (rng-ipattern-get-child ipattern) rng-empty-ipattern)) + ((eq type 'choice) + (let ((members (rng-ipattern-get-child ipattern)) + (ret t)) + (while (and members ret) + (or (rng-ipattern-empty-before-p (car members)) + (setq ret nil)) + (setq members (cdr members))) + ret)) + (t nil)))) + +(defun rng-ipattern-possible-start-tags (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-possible-start-tags + (rng-ipattern-get-child ipattern) + accum)) + ((memq type '(choice interleave)) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-start-tags (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'group) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-start-tags (car members) + accum)) + (setq members + (and (rng-ipattern-get-nullable (car members)) + (cdr members))))) + accum) + ((eq type 'element) + (if (eq (rng-element-get-child ipattern) rng-not-allowed-ipattern) + accum + (rng-name-class-possible-names + (rng-ipattern-get-name-class ipattern) + accum))) + ((eq type 'one-or-more) + (rng-ipattern-possible-start-tags + (rng-ipattern-get-child ipattern) + accum)) + (t accum)))) + +(defun rng-ipattern-start-tag-possible-p (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((memq type '(after one-or-more)) + (rng-ipattern-start-tag-possible-p + (rng-ipattern-get-child ipattern))) + ((memq type '(choice interleave)) + (let ((members (rng-ipattern-get-child ipattern)) + (possible nil)) + (while (and members (not possible)) + (setq possible + (rng-ipattern-start-tag-possible-p (car members))) + (setq members (cdr members))) + possible)) + ((eq type 'group) + (let ((members (rng-ipattern-get-child ipattern)) + (possible nil)) + (while (and members (not possible)) + (setq possible + (rng-ipattern-start-tag-possible-p (car members))) + (setq members + (and (rng-ipattern-get-nullable (car members)) + (cdr members)))) + possible)) + ((eq type 'element) + (not (eq (rng-element-get-child ipattern) + rng-not-allowed-ipattern))) + (t nil)))) + +(defun rng-ipattern-possible-attributes (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-possible-attributes (rng-ipattern-get-child ipattern) + accum)) + ((memq type '(choice interleave group)) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-attributes (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'attribute) + (rng-name-class-possible-names + (rng-ipattern-get-name-class ipattern) + accum)) + ((eq type 'one-or-more) + (rng-ipattern-possible-attributes + (rng-ipattern-get-child ipattern) + accum)) + (t accum)))) + +(defun rng-ipattern-possible-values (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-possible-values (rng-ipattern-get-child ipattern) + accum)) + ((eq type 'choice) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-values (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'value) + (let ((value-object (rng-ipattern-get-value-object ipattern))) + (if (stringp value-object) + (cons value-object accum) + accum))) + (t accum)))) + +(defun rng-ipattern-required-element (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((memq type '(after one-or-more)) + (rng-ipattern-required-element (rng-ipattern-get-child ipattern))) + ((eq type 'choice) + (let* ((members (rng-ipattern-get-child ipattern)) + (required (rng-ipattern-required-element (car members)))) + (while (and required + (setq members (cdr members))) + (unless (equal required + (rng-ipattern-required-element (car members))) + (setq required nil))) + required)) + ((eq type 'group) + (let ((members (rng-ipattern-get-child ipattern)) + required) + (while (and (not (setq required + (rng-ipattern-required-element + (car members)))) + (rng-ipattern-get-nullable (car members)) + (setq members (cdr members)))) + required)) + ((eq type 'interleave) + (let ((members (rng-ipattern-get-child ipattern)) + required) + (while members + (let ((tem (rng-ipattern-required-element (car members)))) + (cond ((not tem) + (setq members (cdr members))) + ((not required) + (setq required tem) + (setq members (cdr members))) + ((equal required tem) + (setq members (cdr members))) + (t + (setq required nil) + (setq members nil))))) + required)) + ((eq type 'element) + (let ((nc (rng-ipattern-get-name-class ipattern))) + (and (consp nc) + (not (eq (rng-element-get-child ipattern) + rng-not-allowed-ipattern)) + nc)))))) + +(defun rng-ipattern-required-attributes (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-required-attributes (rng-ipattern-get-child ipattern) + accum)) + ((memq type '(interleave group)) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-required-attributes (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'choice) + (let ((members (rng-ipattern-get-child ipattern)) + in-all in-this new-in-all) + (setq in-all + (rng-ipattern-required-attributes (car members) + nil)) + (while (and in-all (setq members (cdr members))) + (setq in-this + (rng-ipattern-required-attributes (car members) nil)) + (setq new-in-all nil) + (while in-this + (when (member (car in-this) in-all) + (setq new-in-all + (cons (car in-this) new-in-all))) + (setq in-this (cdr in-this))) + (setq in-all new-in-all)) + (append in-all accum))) + ((eq type 'attribute) + (let ((nc (rng-ipattern-get-name-class ipattern))) + (if (consp nc) + (cons nc accum) + accum))) + ((eq type 'one-or-more) + (rng-ipattern-required-attributes (rng-ipattern-get-child ipattern) + accum)) + (t accum)))) + +(defun rng-compile-error (&rest args) + (signal 'rng-compile-error + (list (apply 'format args)))) + +(put 'rng-compile-error + 'error-conditions + '(error rng-error rng-compile-error)) + +(put 'rng-compile-error + 'error-message + "Incorrect schema") + + +;;; External API + +(defsubst rng-match-state () rng-match-state) + +(defsubst rng-set-match-state (state) + (setq rng-match-state state)) + +(defsubst rng-match-state-equal (state) + (eq state rng-match-state)) + +(defun rng-schema-changed () + (rng-ipattern-clear) + (rng-compile-clear)) + +(defun rng-match-init-buffer () + (make-local-variable 'rng-compile-table) + (make-local-variable 'rng-ipattern-table) + (make-local-variable 'rng-last-ipattern-index)) + +(defun rng-match-start-document () + (rng-ipattern-maybe-init) + (rng-compile-maybe-init) + (add-hook 'rng-schema-change-hook 'rng-schema-changed nil t) + (setq rng-match-state (rng-compile rng-current-schema))) + +(defun rng-match-start-tag-open (name) + (rng-update-match-state (rng-start-tag-open-deriv rng-match-state + name))) + +(defun rng-match-attribute-name (name) + (rng-update-match-state (rng-start-attribute-deriv rng-match-state + name))) + +(defun rng-match-attribute-value (value) + (rng-update-match-state (rng-data-deriv rng-match-state + value))) + +(defun rng-match-element-value (value) + (and (rng-update-match-state (rng-text-only-deriv rng-match-state)) + (rng-update-match-state (rng-data-deriv rng-match-state + value)))) + +(defun rng-match-start-tag-close () + (rng-update-match-state (rng-start-tag-close-deriv rng-match-state))) + +(defun rng-match-mixed-text () + (rng-update-match-state (rng-mixed-text-deriv rng-match-state))) + +(defun rng-match-end-tag () + (rng-update-match-state (rng-end-tag-deriv rng-match-state))) + +(defun rng-match-after () + (rng-update-match-state + (rng-ipattern-after rng-match-state))) + +(defun rng-match-out-of-context-start-tag-open (name) + (let* ((found (rng-map-element-attribute 'rng-find-element-content-pattern + rng-current-schema + nil + name)) + (content-pattern (if found + (rng-intern-choice found) + rng-not-allowed-ipattern))) + (rng-update-match-state + (rng-intern-after content-pattern rng-match-state)))) + +(defun rng-match-possible-namespace-uris () + "Return a list of all the namespace URIs used in the current schema. +The absent URI is not included, so the result is always list of symbols." + (rng-map-element-attribute (lambda (pattern accum) + (rng-find-name-class-uris (nth 1 pattern) + accum)) + rng-current-schema + nil)) + +(defun rng-match-unknown-start-tag-open () + (rng-update-match-state + (rng-unknown-start-tag-open-deriv rng-match-state))) + +(defun rng-match-optionalize-elements () + (rng-update-match-state + (rng-ipattern-optionalize-elements rng-match-state))) + +(defun rng-match-ignore-attributes () + (rng-update-match-state + (rng-ignore-attributes-deriv rng-match-state))) + +(defun rng-match-text-typed-p () + (rng-ipattern-text-typed-p rng-match-state)) + +(defun rng-match-empty-content () + (if (rng-match-text-typed-p) + (rng-match-element-value "") + (rng-match-end-tag))) + +(defun rng-match-empty-before-p () + "Return non-nil if what can be matched before an end-tag is empty. +In other words, return non-nil if the pattern for what can be matched +for an end-tag is equivalent to empty." + (rng-ipattern-empty-before-p rng-match-state)) + +(defun rng-match-infer-start-tag-namespace (local-name) + (let ((ncs (rng-ipattern-possible-start-tags rng-match-state nil)) + (nc nil) + (ns nil)) + (while ncs + (setq nc (car ncs)) + (if (and (equal (cdr nc) local-name) + (symbolp (car nc))) + (cond ((not ns) + ;; first possible namespace + (setq ns (car nc)) + (setq ncs (cdr ncs))) + ((equal ns (car nc)) + ;; same as first namespace + (setq ncs (cdr ncs))) + (t + ;; more than one possible namespace + (setq ns nil) + (setq ncs nil))) + (setq ncs (cdr ncs)))) + ns)) + +(defun rng-match-nullable-p () + (rng-ipattern-get-nullable rng-match-state)) + +(defun rng-match-possible-start-tag-names () + "Return a list of possible names that would be valid for start-tags. + +Each possible name is returned as a (NAMESPACE . LOCAL-NAME) pair, +where NAMESPACE is a symbol or nil (meaning the absent namespace) and +LOCAL-NAME is a string. The returned list may contain duplicates." + (rng-ipattern-possible-start-tags rng-match-state nil)) + +;; This is no longer used. It might be useful so leave it in for now. +(defun rng-match-start-tag-possible-p () + "Return non-nil if a start-tag is possible." + (rng-ipattern-start-tag-possible-p rng-match-state)) + +(defun rng-match-possible-attribute-names () + "Return a list of possible names that would be valid for attributes. + +See the function `rng-match-possible-start-tag-names' for +more information." + (rng-ipattern-possible-attributes rng-match-state nil)) + +(defun rng-match-possible-value-strings () + "Return a list of strings that would be valid as content. +The list may contain duplicates. Typically, the list will not +be exhaustive." + (rng-ipattern-possible-values rng-match-state nil)) + +(defun rng-match-required-element-name () + "Return the name of an element which must occur, or nil if none." + (rng-ipattern-required-element rng-match-state)) + +(defun rng-match-required-attribute-names () + "Return a list of names of attributes which must all occur." + (rng-ipattern-required-attributes rng-match-state nil)) + +(defmacro rng-match-save (&rest body) + (let ((state (make-symbol "state"))) + `(let ((,state rng-match-state)) + (unwind-protect + (progn ,@body) + (setq rng-match-state ,state))))) + +(put 'rng-match-save 'lisp-indent-function 0) +(def-edebug-spec rng-match-save t) + +(defmacro rng-match-with-schema (schema &rest body) + `(let ((rng-current-schema ,schema) + rng-match-state + rng-compile-table + rng-ipattern-table + rng-last-ipattern-index) + (rng-ipattern-maybe-init) + (rng-compile-maybe-init) + (setq rng-match-state (rng-compile rng-current-schema)) + ,@body)) + +(put 'rng-match-with-schema 'lisp-indent-function 1) +(def-edebug-spec rng-match-with-schema t) + +(provide 'rng-match) + +;; arch-tag: c8c50733-edcf-49fb-85e2-0aac8749b7f8 +;;; rng-match.el ends here diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el new file mode 100644 index 00000000000..0e65dc09b4d --- /dev/null +++ b/lisp/nxml/rng-nxml.el @@ -0,0 +1,594 @@ +;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(require 'easymenu) +(require 'xmltok) +(require 'nxml-util) +(require 'nxml-ns) +(require 'rng-match) +(require 'rng-util) +(require 'rng-valid) +(require 'nxml-mode) +(require 'rng-loc) + +(defcustom rng-nxml-auto-validate-flag t + "*Non-nil means automatically turn on validation with nxml-mode." + :type 'boolean + :group 'relax-ng) + +(defvar rng-preferred-prefix-alist-default nil + "Default value for variable `rng-preferred-prefix-alist'.") + +(defcustom rng-preferred-prefix-alist rng-preferred-prefix-alist-default + "*Alist of namespaces vs preferred prefixes." + :type '(repeat (cons :tag "With" + (string :tag "this namespace URI") + (string :tag "use this prefix"))) + :group 'relax-ng) + +(defvar rng-complete-end-tags-after-< t + "*Non-nil means immediately after < complete on end-tag names. +Complete on start-tag names regardless.") + +(defvar rng-nxml-easy-menu + '("XML" + ["Show Outline Only" nxml-hide-all-text-content] + ["Show Everything" nxml-show-all] + "---" + ["Validation" rng-validate-mode + :style toggle + :selected rng-validate-mode] + "---" + ("Set Schema" + ["Automatically" rng-auto-set-schema] + ("For Document Type" + :filter (lambda (menu) + (mapcar (lambda (type-id) + (vector type-id + (list 'rng-set-document-type + type-id))) + (rng-possible-type-ids)))) + ["Any Well-Formed XML" rng-set-vacuous-schema] + ["File..." rng-set-schema-file]) + ["Show Schema Location" rng-what-schema] + ["Save Schema Location" rng-save-schema-location :help + "Save the location of the schema currently being used for this buffer"] + "---" + ["First Error" rng-first-error :active rng-validate-mode] + ["Next Error" rng-next-error :active rng-validate-mode] + "---" + ["Customize nXML" (customize-group 'nxml)] + "---" + ["Show nXML Version" nxml-version])) + +;;;###autoload +(defun rng-nxml-mode-init () + "Initialize `nxml-mode' to take advantage of `rng-validate-mode'. +This is typically called from `nxml-mode-hook'. +Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." + (interactive) + (define-key nxml-mode-map "\C-c\C-v" 'rng-validate-mode) + (define-key nxml-mode-map "\C-c\C-s\C-w" 'rng-what-schema) + (define-key nxml-mode-map "\C-c\C-s\C-a" 'rng-auto-set-schema-and-validate) + (define-key nxml-mode-map "\C-c\C-s\C-f" 'rng-set-schema-file-and-validate) + (define-key nxml-mode-map "\C-c\C-s\C-l" 'rng-save-schema-location) + (define-key nxml-mode-map "\C-c\C-s\C-t" 'rng-set-document-type-and-validate) + (define-key nxml-mode-map "\C-c\C-n" 'rng-next-error) + (easy-menu-define rng-nxml-menu nxml-mode-map + "Menu for nxml-mode used with rng-validate-mode." + rng-nxml-easy-menu) + (setq mode-line-process + '(rng-validate-mode (:eval (rng-compute-mode-line-string)))) + (cond (rng-nxml-auto-validate-flag + (rng-validate-mode 1) + (add-hook 'nxml-completion-hook 'rng-complete nil t) + (add-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p nil t)) + (t + (rng-validate-mode 0) + (remove-hook 'nxml-completion-hook 'rng-complete t) + (remove-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p t)))) + +(defvar rng-tag-history nil) +(defvar rng-attribute-name-history nil) +(defvar rng-attribute-value-history nil) + +(defvar rng-complete-target-names nil) +(defvar rng-complete-name-attribute-flag nil) +(defvar rng-complete-extra-strings nil) + +(defun rng-complete () + "Complete the string before point using the current schema. +Return non-nil if in a context it understands." + (interactive) + (and rng-validate-mode + (let ((lt-pos (save-excursion (search-backward "<" nil t))) + xmltok-dtd) + (and lt-pos + (= (rng-set-state-after lt-pos) lt-pos) + (or (rng-complete-tag lt-pos) + (rng-complete-end-tag lt-pos) + (rng-complete-attribute-name lt-pos) + (rng-complete-attribute-value lt-pos)))))) + +(defconst rng-in-start-tag-name-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + "<\\(?:w\\(?::w?\\)?\\)?\\=" + t + t)) + +(defun rng-complete-tag (lt-pos) + (let (rng-complete-extra-strings) + (when (and (= lt-pos (1- (point))) + rng-complete-end-tags-after-< + rng-open-elements + (not (eq (car rng-open-elements) t)) + (or rng-collecting-text + (rng-match-save + (rng-match-end-tag)))) + (setq rng-complete-extra-strings + (cons (concat "/" + (if (caar rng-open-elements) + (concat (caar rng-open-elements) + ":" + (cdar rng-open-elements)) + (cdar rng-open-elements))) + rng-complete-extra-strings))) + (when (save-excursion + (re-search-backward rng-in-start-tag-name-regex + lt-pos + t)) + (and rng-collecting-text (rng-flush-text)) + (let ((completion + (let ((rng-complete-target-names + (rng-match-possible-start-tag-names)) + (rng-complete-name-attribute-flag nil)) + (rng-complete-before-point (1+ lt-pos) + 'rng-complete-qname-function + "Tag: " + nil + 'rng-tag-history))) + name) + (when completion + (cond ((rng-qname-p completion) + (setq name (rng-expand-qname completion + t + 'rng-start-tag-expand-recover)) + (when (and name + (rng-match-start-tag-open name) + (or (not (rng-match-start-tag-close)) + ;; need a namespace decl on the root element + (and (car name) + (not rng-open-elements)))) + ;; attributes are required + (insert " "))) + ((member completion rng-complete-extra-strings) + (insert ">"))))) + t))) + +(defconst rng-in-end-tag-name-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + " (length end-tag-name) + (length start-tag-name)) + (not (string= (substring start-tag-name + 0 + (length end-tag-name)) + end-tag-name))) + (message "Expected end-tag %s" + (rng-quote-string + (concat ""))) + (ding)) + (t + (delete-region (- (point) (length end-tag-name)) + (point)) + (insert start-tag-name ">") + (when (not (or rng-collecting-text + (rng-match-end-tag))) + (message "Element %s is incomplete" + (rng-quote-string start-tag-name)))))))) + t)) + +(defconst rng-in-attribute-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + "= POS. +This does not change the xmltok state or point. However, it does +set `xmltok-dtd'. Returns the position of the end of the token." + (unless pos (setq pos (point))) + (when (< rng-validate-up-to-date-end pos) + (message "Parsing...") + (while (and (rng-do-some-validation) + (< rng-validate-up-to-date-end pos)) + ;; Display percentage validated. + (force-mode-line-update) + ;; Force redisplay but don't allow idle timers to run. + (let ((timer-idle-list nil)) + (sit-for 0))) + (message "Parsing...done")) + (save-excursion + (save-restriction + (widen) + (nxml-with-invisible-motion + (if (= pos 1) + (rng-set-initial-state) + (let ((state (get-text-property (1- pos) 'rng-state))) + (cond (state + (rng-restore-state state) + (goto-char pos)) + (t + (let ((start (previous-single-property-change pos + 'rng-state))) + (cond (start + (rng-restore-state (get-text-property (1- start) + 'rng-state)) + (goto-char start)) + (t (rng-set-initial-state)))))))) + (xmltok-save + (if (= (point) 1) + (xmltok-forward-prolog) + (setq xmltok-dtd rng-dtd)) + (cond ((and (< pos (point)) + ;; This handles the case where the prolog ends + ;; with a < without any following name-start + ;; character. This will be treated by the parser + ;; as part of the prolog, but we want to treat + ;; it as the start of the instance. + (eq (char-after pos) ?<) + (<= (point) + (save-excursion + (goto-char (1+ pos)) + (skip-chars-forward " \t\r\n") + (point)))) + pos) + ((< (point) pos) + (let ((rng-dt-namespace-context-getter + '(nxml-ns-get-context)) + (rng-parsing-for-state t)) + (rng-forward pos)) + (point)) + (t pos))))))) + +(defun rng-adjust-state-for-attribute (lt-pos start) + (xmltok-save + (save-excursion + (goto-char lt-pos) + (when (memq (xmltok-forward) + '(start-tag + partial-start-tag + empty-element + partial-empty-element)) + (when (< start (point)) + (setq xmltok-namespace-attributes + (rng-prune-attribute-at start + xmltok-namespace-attributes)) + (setq xmltok-attributes + (rng-prune-attribute-at start + xmltok-attributes))) + (let ((rng-parsing-for-state t) + (rng-dt-namespace-context-getter '(nxml-ns-get-context))) + (rng-process-start-tag 'stop) + (rng-find-undeclared-prefixes) + t))))) + +(defun rng-find-undeclared-prefixes () + ;; Start with the newly effective namespace declarations. + ;; (Includes declarations added during recovery.) + (setq rng-undeclared-prefixes (nxml-ns-changed-prefixes)) + (let ((iter xmltok-attributes) + (ns-state (nxml-ns-state)) + att) + ;; Add namespace prefixes used in this tag, + ;; but not declared in the parent. + (nxml-ns-pop-state) + (while iter + (setq att (car iter)) + (let ((prefix (xmltok-attribute-prefix att))) + (when (and prefix + (not (member prefix rng-undeclared-prefixes)) + (not (nxml-ns-get-prefix prefix))) + (setq rng-undeclared-prefixes + (cons prefix rng-undeclared-prefixes)))) + (setq iter (cdr iter))) + (nxml-ns-set-state ns-state) + ;; Remove namespace prefixes explicitly declared. + (setq iter xmltok-namespace-attributes) + (while iter + (setq att (car iter)) + (setq rng-undeclared-prefixes + (delete (and (xmltok-attribute-prefix att) + (xmltok-attribute-local-name att)) + rng-undeclared-prefixes)) + (setq iter (cdr iter))))) + +(defun rng-prune-attribute-at (start atts) + (when atts + (let ((cur atts)) + (while (if (eq (xmltok-attribute-name-start (car cur)) start) + (progn + (setq atts (delq (car cur) atts)) + nil) + (setq cur (cdr cur))))) + atts)) + +(defun rng-adjust-state-for-attribute-value (name-start + colon + name-end) + (let* ((prefix (if colon + (buffer-substring-no-properties name-start colon) + nil)) + (local-name (buffer-substring-no-properties (if colon + (1+ colon) + name-start) + name-end)) + (ns (and prefix (nxml-ns-get-prefix prefix)))) + (and (or (not prefix) ns) + (rng-match-attribute-name (cons ns local-name))))) + +(defun rng-complete-qname-function (string predicate flag) + (let ((alist (mapcar (lambda (name) (cons name nil)) + (rng-generate-qname-list string)))) + (cond ((not flag) + (try-completion string alist predicate)) + ((eq flag t) + (all-completions string alist predicate)) + ((eq flag 'lambda) + (and (assoc string alist) t))))) + +(defun rng-generate-qname-list (&optional string) + (let ((forced-prefix (and string + (string-match ":" string) + (> (match-beginning 0) 0) + (substring string + 0 + (match-beginning 0)))) + (namespaces (mapcar 'car rng-complete-target-names)) + ns-prefixes-alist ns-prefixes iter ns prefer) + (while namespaces + (setq ns (car namespaces)) + (when ns + (setq ns-prefixes-alist + (cons (cons ns (nxml-ns-prefixes-for + ns + rng-complete-name-attribute-flag)) + ns-prefixes-alist))) + (setq namespaces (delq ns (cdr namespaces)))) + (setq iter ns-prefixes-alist) + (while iter + (setq ns-prefixes (car iter)) + (setq ns (car ns-prefixes)) + (when (null (cdr ns-prefixes)) + ;; No declared prefix for the namespace + (if forced-prefix + ;; If namespace non-nil and prefix undeclared, + ;; use forced prefix. + (when (and ns + (not (nxml-ns-get-prefix forced-prefix))) + (setcdr ns-prefixes (list forced-prefix))) + (setq prefer (rng-get-preferred-unused-prefix ns)) + (when prefer + (setcdr ns-prefixes (list prefer))) + ;; Unless it's an attribute with a non-nil namespace, + ;; allow no prefix for this namespace. + (unless rng-complete-name-attribute-flag + (setcdr ns-prefixes (cons nil (cdr ns-prefixes)))))) + (setq iter (cdr iter))) + (rng-uniquify-equal + (sort (apply 'append + (cons rng-complete-extra-strings + (mapcar (lambda (name) + (if (car name) + (mapcar (lambda (prefix) + (if prefix + (concat prefix + ":" + (cdr name)) + (cdr name))) + (cdr (assoc (car name) + ns-prefixes-alist))) + (list (cdr name)))) + rng-complete-target-names))) + 'string<)))) + +(defun rng-get-preferred-unused-prefix (ns) + (let ((ns-prefix (assoc (symbol-name ns) rng-preferred-prefix-alist)) + iter prefix) + (when ns-prefix + (setq prefix (cdr ns-prefix)) + (when (nxml-ns-get-prefix prefix) + ;; try to find an unused prefix + (setq iter (memq ns-prefix rng-preferred-prefix-alist)) + (while (and iter + (setq ns-prefix (assoc ns iter))) + (if (nxml-ns-get-prefix (cdr ns-prefix)) + (setq iter (memq ns-prefix iter)) + (setq prefix (cdr ns-prefix)) + nil)))) + prefix)) + +(defun rng-strings-to-completion-alist (strings) + (mapcar (lambda (s) (cons s s)) + (rng-uniquify-equal (sort (mapcar 'rng-escape-string strings) + 'string<)))) + +(provide 'rng-nxml) + +;; arch-tag: bec0d6ed-6be1-4540-9c2c-6f56e8e55d8b +;;; rng-nxml.el ends here diff --git a/lisp/nxml/rng-parse.el b/lisp/nxml/rng-parse.el new file mode 100644 index 00000000000..e9d10e03f21 --- /dev/null +++ b/lisp/nxml/rng-parse.el @@ -0,0 +1,107 @@ +;;; rng-parse.el --- parse an XML file and validate it against a schema + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; 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 combines the validation machinery in rng-match.el with the +;; parser in nxml-parse.el by using the `nxml-validate-function' hook. + +;;; Code: + +(require 'nxml-parse) +(require 'rng-match) +(require 'rng-dt) + +(defvar rng-parse-prev-was-start-tag nil) + +(defun rng-parse-validate-file (schema file) + "Parse and validate the XML document in FILE and return it as a list. +The returned list has the same form as that returned by +`nxml-parse-file'. SCHEMA is a list representing the schema to use +for validation, such as returned by the function `rng-c-load-schema'. +If the XML document is invalid with respect to schema, an error will +be signaled in the same way as when it is not well-formed." + (save-excursion + (set-buffer (nxml-parse-find-file file)) + (unwind-protect + (let ((nxml-parse-file-name file) + (nxml-validate-function 'rng-parse-do-validate) + (rng-dt-namespace-context-getter '(nxml-ns-get-context)) + rng-parse-prev-was-start-tag) + ;; We don't simply call nxml-parse-file, because + ;; we want to do rng-match-with-schema in the same + ;; buffer in which we will call the other rng-match-* functions. + (rng-match-with-schema schema + (nxml-parse-instance))) + (kill-buffer nil)))) + +(defun rng-parse-do-validate (text start-tag) + (cond ((and (let ((tem rng-parse-prev-was-start-tag)) + (setq rng-parse-prev-was-start-tag (and start-tag t)) + tem) + (not start-tag) + (rng-match-text-typed-p)) + (unless (rng-match-element-value (or text "")) + (cons "Invalid data" (and text 'text)))) + ((and text + (not (rng-blank-p text)) + (not (rng-match-mixed-text))) + (cons "Text not allowed" 'text)) + ((not start-tag) + (unless (rng-match-end-tag) + (cons "Missing elements" nil))) + ((not (rng-match-start-tag-open + (rng-parse-to-match-name (car start-tag)))) + (cons "Element not allowed" nil)) + (t + (let ((atts (cadr start-tag)) + (i 0) + att err) + (while (and atts (not err)) + (setq att (car atts)) + (when (not (and (consp (car att)) + (eq (caar att) nxml-xmlns-namespace-uri))) + (setq err + (cond ((not (rng-match-attribute-name + (rng-parse-to-match-name (car att)))) + (cons "Attribute not allowed" + (cons 'attribute-name i))) + ((not (rng-match-attribute-value (cdr att))) + (cons "Invalid attribute value" + (cons 'attribute-value i)))))) + (setq atts (cdr atts)) + (setq i (1+ i))) + (or err + (unless (rng-match-start-tag-close) + (cons "Missing attributes" 'tag-close))))))) + +(defun rng-parse-to-match-name (name) + (if (consp name) + name + (cons nil name))) + +(provide 'rng-parse) + +;; arch-tag: 8f14f533-b687-4dc0-9cd7-617ead856981 +;;; rng-parse.el ends here diff --git a/lisp/nxml/rng-pttrn.el b/lisp/nxml/rng-pttrn.el new file mode 100644 index 00000000000..2ed87943160 --- /dev/null +++ b/lisp/nxml/rng-pttrn.el @@ -0,0 +1,192 @@ +;;; rng-pttrn.el --- RELAX NG patterns + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; pattern ::= +;; (ref ) +;; | (choice ...) +;; | (group ...) +;; | (interleave ...) +;; | (zero-or-more ) +;; | (one-or-more ) +;; | (optional ) +;; | (mixed ) +;; | (value ) +;; | (data ) +;; | (data-except ) +;; | (list ) +;; | (element ) +;; | (attribute ) +;; | (text) +;; | (empty) +;; | (not-allowed) +;; +;; params ::= +;; (( . ) ...) +;; param-name ::= +;; param-value ::= +;; +;; name-class ::= +;; (name ) +;; | (any-name) +;; | (any-name-except ) +;; | (ns-name ) +;; | (ns-name-except ) +;; | (choice ...) +;; +;; name ::= ( . ) +;; ns ::= nil | +;; local-name ::= +;; datatype ::= ( . ) +;; datatype-uri ::= nil | +;; datatype-local-name ::= + +;;; Code: + +(defvar rng-schema-change-hook nil + "Hook to be run after `rng-current-schema' changes.") + +(defvar rng-current-schema nil + "Pattern to be used as schema for the current buffer.") +(make-variable-buffer-local 'rng-current-schema) + +(defun rng-make-ref (name) + (list 'ref nil name)) + +(defun rng-ref-set (ref pattern) + (setcar (cdr ref) pattern)) + +(defun rng-ref-get (ref) (cadr ref)) + +(defun rng-make-choice (patterns) + (cons 'choice patterns)) + +(defun rng-make-group (patterns) + (cons 'group patterns)) + +(defun rng-make-interleave (patterns) + (cons 'interleave patterns)) + +(defun rng-make-zero-or-more (pattern) + (list 'zero-or-more pattern)) + +(defun rng-make-one-or-more (pattern) + (list 'one-or-more pattern)) + +(defun rng-make-optional (pattern) + (list 'optional pattern)) + +(defun rng-make-mixed (pattern) + (list 'mixed pattern)) + +(defun rng-make-value (datatype str context) + (list 'value datatype str context)) + +(defun rng-make-data (name params) + (list 'data name params)) + +(defun rng-make-data-except (name params pattern) + (list 'data-except name params pattern)) + +(defun rng-make-list (pattern) + (list 'list pattern)) + +(defun rng-make-element (name-class pattern) + (list 'element name-class pattern)) + +(defun rng-make-attribute (name-class pattern) + (list 'attribute name-class pattern)) + +(defun rng-make-text () + '(text)) + +(defun rng-make-empty () + '(empty)) + +(defun rng-make-not-allowed () + '(not-allowed)) + +(defun rng-make-any-name-name-class () + '(any-name)) + +(defun rng-make-any-name-except-name-class (name-class) + (list 'any-name-except name-class)) + +(defun rng-make-ns-name-name-class (ns) + (list 'ns-name ns)) + +(defun rng-make-ns-name-except-name-class (ns name-class) + (list 'ns-name-except ns name-class)) + +(defun rng-make-name-name-class (name) + (list 'name name)) + +(defun rng-make-choice-name-class (name-classes) + (cons 'choice name-classes)) + +(defconst rng-any-content + (let* ((ref (rng-make-ref "any-content")) + (pattern (rng-make-zero-or-more + (rng-make-choice + (list + (rng-make-text) + (rng-make-attribute (rng-make-any-name-name-class) + (rng-make-text)) + (rng-make-element (rng-make-any-name-name-class) + ref)))))) + (rng-ref-set ref pattern) + pattern) + "A pattern that matches the attributes and content of any element.") + +(defconst rng-any-element + (let* ((ref (rng-make-ref "any-element")) + (pattern + (rng-make-element + (rng-make-any-name-name-class) + (rng-make-zero-or-more + (rng-make-choice + (list + (rng-make-text) + (rng-make-attribute (rng-make-any-name-name-class) + (rng-make-text)) + ref)))))) + (rng-ref-set ref pattern) + pattern) + "A pattern that matches any element.") + +;;; Names + +(defun rng-make-name (ns local-name) + (cons ns local-name)) + +;;; Datatypes + +(defun rng-make-datatype (uri local-name) + (cons uri (intern local-name))) + +(provide 'rng-pttrn) + +;; arch-tag: 9418e269-ddd4-4037-861f-ff903f48f008 +;;; rng-pttrn.el ends here diff --git a/lisp/nxml/rng-uri.el b/lisp/nxml/rng-uri.el new file mode 100644 index 00000000000..f18012abcfe --- /dev/null +++ b/lisp/nxml/rng-uri.el @@ -0,0 +1,358 @@ +;;; rng-uri.el --- URI parsing and manipulation + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(defun rng-file-name-uri (f) + "Return a URI for the filename F. +Multibyte characters are left as is. Use `rng-uri-escape-multibyte' to +escape them using %HH." + (setq f (expand-file-name f)) + (let ((url + (replace-regexp-in-string "[\000-\032\177<>#%\"{}|\\^[]`%?;]" + 'rng-percent-encode + f))) + (concat "file:" + (if (and (> (length url) 0) + (= (aref url 0) ?/)) + "//" + "///") + url))) + +(defun rng-uri-escape-multibyte (uri) + "Escape multibyte characters in URI." + (replace-regexp-in-string "[:nonascii:]" + 'rng-percent-encode + (encode-coding-string uri 'utf-8))) + +(defun rng-percent-encode (str) + (apply 'concat + (mapcar (lambda (ch) + (format "%%%x%x" (/ ch 16) (% ch 16))) + (string-to-list str)))) + + +(defun rng-uri-file-name (uri) + "Return the filename represented by a URI. +Signal an error if URI is not a valid file URL." + (rng-uri-file-name-1 uri nil)) + +(defun rng-uri-pattern-file-name-regexp (pattern) + "Return a regexp for filenames represented by URIs that match PATTERN." + (rng-uri-file-name-1 pattern 'match)) + +(defun rng-uri-pattern-file-name-replace-match (pattern) + (rng-uri-file-name-1 pattern 'replace)) + +;; pattern is either nil or match or replace +(defun rng-uri-file-name-1 (uri pattern) + (unless (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F]{2}\\)*\\'" uri) + (rng-uri-error "Bad escapes in URI `%s'" uri)) + (setq uri (rng-uri-unescape-multibyte uri)) + (let* ((components + (or (rng-uri-split uri) + (rng-uri-error "Cannot split URI `%s' into its components" uri))) + (scheme (nth 0 components)) + (authority (nth 1 components)) + (path (nth 2 components)) + (absolutep (string-match "\\`/" path)) + (query (nth 3 components)) + (fragment-id (nth 4 components))) + (cond ((not scheme) + (unless pattern + (rng-uri-error "URI `%s' does not have a scheme" uri))) + ((not (string= (downcase scheme) "file")) + (rng-uri-error "URI `%s' does not use the `file:' scheme" uri))) + (when (not (member authority + (cons system-name '(nil "" "localhost")))) + (rng-uri-error "URI `%s' does not start with `file:///' or `file://localhost/'" + uri)) + (when query + (rng-uri-error "`?' not escaped in file URI `%s'" uri)) + (when fragment-id + (rng-uri-error "URI `%s' has a fragment identifier" uri)) + (when (string-match ";" path) + (rng-uri-error "`;' not escaped in URI `%s'" uri)) + (when (string-match "%2[fF]" path) ;; 2f is hex code of slash + (rng-uri-error "Escaped slash in URI `%s'" uri)) + (when (and (eq system-type 'windows-nt) + absolutep + (file-name-absolute-p (substring path 1))) + (setq path (substring path 1))) + (when (and pattern (string-match "\\`\\./" path)) + (setq path (substring path 2))) + (setq path + (cond ((eq pattern 'match) + (rng-uri-unescape-unibyte-match path)) + ((eq pattern 'replace) + (rng-uri-unescape-unibyte-replace path 2)) + (t + (rng-uri-unescape-unibyte path)))) + (when (string-match "\000" path) + (rng-uri-error "URI `%s' has NUL character in path" uri)) + (when (eq pattern 'match) + (setq path + (concat (if absolutep + "\\(\\)" + "\\(\\(?:[^/]*/\\)*\\)") + path))) + (cond ((eq pattern 'match) + (concat "\\`" path "\\'")) + ((and (eq pattern 'replace) + (not absolutep)) + (concat "\\1" path)) + (t path)))) + +(defun rng-uri-error (&rest args) + (signal 'rng-uri-error (list (apply 'format args)))) + +(put 'rng-uri-error 'error-conditions '(error rng-uri-error)) +(put 'rng-uri-error 'error-message "Invalid URI") + +(defun rng-uri-split (str) + (and (string-match "\\`\\(?:\\([^:/?#]+\\):\\)?\ +\\(?://\\([^/?#]*\\)\\)?\ +\\([^?#]*\\)\ +\\(?:\\?\\([^#]*\\)\\)?\ +\\(?:#\\(\\(?:.\\|\n\\)*\\)\\)?\\'" + str) + (list (match-string 1 str) + (match-string 2 str) + (match-string 3 str) + (match-string 4 str) + (match-string 5 str)))) + +(defun rng-uri-join (scheme authority path &optional query fragment-id) + (when path + (let (parts) + (when fragment-id + (setq parts (list "#" fragment-id))) + (when query + (setq parts + (cons "?" + (cons query parts)))) + (setq parts (cons path parts)) + (when authority + (setq parts + (cons "//" + (cons authority parts)))) + (when scheme + (setq parts + (cons scheme + (cons ":" parts)))) + (apply 'concat parts)))) + +(defun rng-uri-resolve (uri-ref base-uri) + "Resolve a possibly relative URI reference into absolute form. +URI-REF is the URI reference to be resolved. +BASE-URI is the base URI to use for resolving it. +The algorithm is specified by RFC 2396. +If there is some problem with URI-REF or BASE-URI, then +URI-REF will be returned." + (let* ((components (rng-uri-split uri-ref)) + (scheme (nth 0 components)) + (authority (nth 1 components)) + (path (nth 2 components)) + (query (nth 3 components)) + (fragment-id (nth 4 components)) + (base-components (rng-uri-split base-uri))) + (if (or (not components) + scheme + (not base-components) + (not (nth 0 base-components))) + uri-ref + (setq scheme (nth 0 base-components)) + (when (not authority) + (setq authority (nth 1 base-components)) + (if (and (equal path "") (not query)) + ;; Handle same document reference by returning + ;; same URI (RFC 2396bis does this too). + (setq path (nth 2 base-components) + query (nth 3 base-components)) + (setq path (rng-resolve-path path (nth 2 base-components))))) + (rng-uri-join scheme + authority + path + query + fragment-id)))) + +;; See RFC 2396 5.2, steps 5 and 6 +(defun rng-resolve-path (path base-path) + ;; Step 5 + (if (or (string-match "\\`/" path) + (not (string-match "\\`/" base-path))) + path + ;; Step 6 + ;; (a), (b) + (let ((segments (rng-split-path path)) + (base-segments (rng-split-path base-path))) + (if (> (length base-segments) 1) + (setq segments (nconc (nbutlast base-segments) + segments)) + (setcar segments + (concat (car base-segments) (car segments)))) + ;; (d) + (let ((last-segment (last segments))) + (when (equal (car last-segment) ".") + (setcar last-segment ""))) + ;; (c) + (setq segments (delete "." segments)) + ;; (e) + (let (iter matched) + (while (progn + (setq matched nil) + (setq iter (cdr segments)) + (while (and iter (not matched)) + (if (or (not (equal (cadr iter) "..")) + (equal (car iter) "..")) + (setq iter (cdr iter)) + (setcar iter nil) + (setcar (cdr iter) + ;; (f) + (if (cddr iter) nil "")) + (setq matched t) + (setq segments (delq nil segments)))) + matched))) + (rng-join-path segments)))) + +(defun rng-relative-uri (full base) + "Return a URI that relative to BASE is equivalent to FULL. +The returned URI will be relative if possible. +Both FULL and BASE must be absolute URIs." + (let* ((components (rng-uri-split full)) + (scheme (nth 0 components)) + (authority (nth 1 components)) + (path (nth 2 components)) + (query (nth 3 components)) + (fragment-id (nth 4 components)) + (base-components (rng-uri-split base))) + (if (and components + base-components + scheme + (equal scheme + (nth 0 base-components))) + (progn + (setq scheme nil) + (when (and authority + (equal authority + (nth 1 base-components))) + (setq authority nil) + (setq path (rng-relative-path path (nth 2 base-components)))) + (rng-uri-join scheme authority path query fragment-id)) + full))) + +(defun rng-relative-path (path base-path) + (let ((segments (rng-split-path path)) + (base-segments (rng-split-path base-path))) + (when (> (length base-segments) 1) + (setq base-segments (nbutlast base-segments))) + (if (or (member "." segments) + (member ".." segments) + (member "." base-segments) + (member ".." base-segments)) + path + (while (and segments + base-segments + (string= (car segments) + (car base-segments))) + (setq segments (cdr segments)) + (setq base-segments (cdr base-segments))) + (while base-segments + (setq base-segments (cdr base-segments)) + (setq segments (cons ".." segments))) + (when (equal (car segments) "") + (setq segments (cons "." segments))) + (rng-join-path segments)))) + +(defun rng-split-path (path) + (let ((start 0) + segments) + (while (string-match "/" path start) + (setq segments (cons (substring path start (match-beginning 0)) + segments)) + (setq start (match-end 0))) + (nreverse (cons (substring path start) segments)))) + +(defun rng-join-path (segments) + (and segments + (mapconcat 'identity segments "/"))) + +(defun rng-uri-unescape-multibyte (str) + (replace-regexp-in-string "\\(?:%[89a-fA-F][0-9a-fA-F]\\)+" + 'rng-multibyte-percent-decode + str)) + +(defun rng-multibyte-percent-decode (str) + (decode-coding-string (apply 'string + (mapcar (lambda (h) (string-to-number h 16)) + (split-string str "%"))) + 'utf-8)) + +(defun rng-uri-unescape-unibyte (str) + (replace-regexp-in-string "%[0-7][0-9a-fA-F]" + (lambda (h) + (string-to-number (substring h 1) 16)) + str + t + t)) + +(defun rng-uri-unescape-unibyte-match (str) + (replace-regexp-in-string "%[0-7][0-9a-fA-F]\\|[^%]" + (lambda (match) + (if (string= match "*") + "\\([^/]*\\)" + (regexp-quote + (if (= (length match) 1) + match + (string-to-number (substring match 1) + 16))))) + str + t + t)) + +(defun rng-uri-unescape-unibyte-replace (str next-match-index) + (replace-regexp-in-string + "%[0-7][0-9a-fA-F]\\|[^%]" + (lambda (match) + (if (string= match "*") + (let ((n next-match-index)) + (setq next-match-index (1+ n)) + (format "\\%s" n)) + (let ((ch (if (= (length match) 1) + (aref match 0) + (string-to-number (substring match 1) + 16)))) + (if (eq ch ?\\) + (string ?\\ ?\\) + (string ch))))) + str + t + t)) + +(provide 'rng-uri) + +;; arch-tag: c7b7b8b8-61d1-48ec-82bc-7001c70b2e9d +;;; rng-uri.el ends here diff --git a/lisp/nxml/rng-util.el b/lisp/nxml/rng-util.el new file mode 100644 index 00000000000..7ae75f8a607 --- /dev/null +++ b/lisp/nxml/rng-util.el @@ -0,0 +1,175 @@ +;;; rng-util.el --- utility functions for RELAX NG library + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; Code: + +(defun rng-make-datatypes-uri (uri) + (if (string-equal uri "") + ;; The spec doesn't say to do this, but it's perfectly conformant + ;; and better than using nil, I think. + 'http://relaxng.org/ns/structure/1.0 + (intern uri))) + +(defconst rng-xsd-datatypes-uri + (rng-make-datatypes-uri "http://www.w3.org/2001/XMLSchema-datatypes")) + +(defconst rng-builtin-datatypes-uri (rng-make-datatypes-uri "")) + +(defun rng-uniquify-eq (list) + "Destructively remove any element from LIST that is eq to +its predecessor." + (and list + (let ((head list)) + (while (cdr head) + (if (eq (car head) (cadr head)) + (setcdr head (cddr head))) + (setq head (cdr head))) + list))) + +(defun rng-uniquify-equal (list) + "Destructively remove any element from LIST that is equal to +its predecessor." + (and list + (let ((head list)) + (while (cdr head) + (if (equal (car head) (cadr head)) + (setcdr head (cddr head))) + (setq head (cdr head))) + list))) + +(defun rng-blank-p (str) (string-match "\\`[ \t\n\r]*\\'" str)) + +(defun rng-substq (new old list) + "Replace first member of LIST (if any) that is eq to OLD by NEW. +LIST is not modified." + (cond ((null list) nil) + ((eq (car list) old) + (cons new (cdr list))) + (t + (let ((tail (cons (car list) + nil)) + (rest (cdr list))) + (setq list tail) + (while rest + (let ((item (car rest))) + (setq rest (cdr rest)) + (cond ((eq item old) + (setcdr tail + (cons new rest)) + (setq rest nil)) + (t + (setq tail + (setcdr tail + (cons item nil)))))))) + list))) + +(defun rng-complete-before-point (start table prompt &optional predicate hist) + "Complete text between START and point. +Replaces the text between START and point with a string chosen using a +completion table and, when needed, input read from the user with the +minibuffer. +Returns the new string if either a complete and unique completion was +determined automatically or input was read from the user. Otherwise, +returns nil. +TABLE is an alist, a symbol bound to a function or an obarray as with +the function `completing-read'. +PROMPT is the string to prompt with if user input is needed. +PREDICATE is nil or a function as with `completing-read'. +HIST, if non-nil, specifies a history list as with `completing-read'." + (let* ((orig (buffer-substring-no-properties start (point))) + (completion (try-completion orig table predicate))) + (cond ((not completion) + (if (string= orig "") + (message "No completions available") + (message "No completion for %s" (rng-quote-string orig))) + (ding) + nil) + ((eq completion t) orig) + ((not (string= completion orig)) + (delete-region start (point)) + (insert completion) + (cond ((not (rng-completion-exact-p completion table predicate)) + (message "Incomplete") + nil) + ((eq (try-completion completion table predicate) t) + completion) + (t + (message "Complete but not unique") + nil))) + (t + (setq completion + (let ((saved-minibuffer-setup-hook + (default-value 'minibuffer-setup-hook))) + (add-hook 'minibuffer-setup-hook + 'minibuffer-completion-help + t) + (unwind-protect + (completing-read prompt + table + predicate + nil + orig + hist) + (setq-default minibuffer-setup-hook + saved-minibuffer-setup-hook)))) + (delete-region start (point)) + (insert completion) + completion)))) + +(defun rng-completion-exact-p (string table predicate) + (cond ((symbolp table) + (funcall table string predicate 'lambda)) + ((vectorp table) + (intern-soft string table)) + (t (assoc string table)))) + +(defun rng-quote-string (s) + (concat "\"" s "\"")) + +(defun rng-escape-string (s) + (replace-regexp-in-string "[&\"<>]" + (lambda (match) + (cdr (assoc match + '(("&" . "&") + ("\"" . """) + (">" . ">") + ("<" . "<"))))) + s + t)) + +(defun rng-collapse-space (string) + (setq string + (replace-regexp-in-string "[ \t\r\n]+" " " string t t)) + (when (string-match "\\` " string) + (setq string (substring string 1))) + (when (string-match " \\'" string) + (setq string (substring string 0 -1))) + string) + +(provide 'rng-util) + +;; arch-tag: 2dc233e0-5e7a-488f-bfc4-5909512dbaf0 +;;; rng-util.el ends here diff --git a/lisp/nxml/rng-valid.el b/lisp/nxml/rng-valid.el new file mode 100644 index 00000000000..183fb2561c1 --- /dev/null +++ b/lisp/nxml/rng-valid.el @@ -0,0 +1,1470 @@ +;;; rng-valid.el --- real-time validation of XML using RELAX NG + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; For usage information, see the documentation for rng-validate-mode. +;; +;; This file provides a minor mode that continually validates a buffer +;; against a RELAX NG schema. The validation state is used to support +;; schema-sensitive editing as well as validation. Validation is +;; performed while Emacs is idle. XML parsing is done using +;; xmltok.el. This file is responsible for checking that end-tags +;; match their start-tags. Namespace processing is handled by +;; nxml-ns.el. The RELAX NG Compact Syntax schema is parsed into +;; internal form by rng-cmpct.el. This internal form is described by +;; rng-pttrn.el. Validation of the document by matching against this +;; internal form is done by rng-match.el. Handling of W3C XML Schema +;; datatypes is delegated by rng-match.el to rng-xsd.el. The minor +;; mode is intended to be used in conjunction with the nxml major +;; mode, but does not have to be. +;; +;; The major responsibility of this file is to allow validation to +;; happen incrementally. If a buffer has been validated and is then +;; changed, we can often revalidate it without having to completely +;; parse and validate it from start to end. As we parse and validate +;; the buffer, we periodically cache the state. The state has three +;; components: the stack of open elements, the namespace processing +;; state and the RELAX NG validation state. The state is cached as the +;; value of the rng-state text property on the closing greater-than of +;; tags (but at intervals, not on every tag). We keep track of the +;; position up to which cached state is known to be correct by adding +;; a function to the buffer's after-change-functions. This is stored +;; in the rng-validate-up-to-date-end variable. The first way in +;; which we make validation incremental is obvious: we start +;; validation from the first cached state before +;; rng-validate-up-to-date-end. +;; +;; To make this work efficiently, we have to be able to copy the +;; current parsing and validation state efficiently. We do this by +;; minimizing destructive changes to the objects storing the state. +;; When state is changed, we use the old state to create new objects +;; representing the new state rather than destructively modifying the +;; objects representing the old state. Copying the state is just a +;; matter of making a list of three objects, one for each component of +;; the state; the three objects themselves can be shared and do not +;; need to be copied. +;; +;; There's one other idea that is used to make validation incremental. +;; Suppose we have a buffer that's 4000 bytes long and suppose we +;; validated it, caching state at positions 1000, 2000 and 3000. Now +;; suppose we make a change at position 1500 inserting 100 characters. +;; rng-validate-up-to-date-end will be changed to 1500. When Emacs +;; becomes idle and we revalidate, validation will restart using the +;; cached state at position 1000. However, we take advantage of the +;; cached state beyond rng-validate-up-to-date-end as follows. When +;; our validation reaches position 2100 (the current position of the +;; character that was at 2000), we compare our current state with the +;; cached state. If they are the same, then we can stop parsing +;; immediately and set rng-validate-up-to-date-end to the end of the +;; buffer: we already know that the state cached at position 3100 is +;; correct. If they are not the same, then we have to continue +;; parsing. After the change, but before revalidation, we call the +;; region from 1600 to the end of the buffer "conditionally +;; up-to-date". +;; +;; As well as the cached parsing and validation state, we also keep +;; track of the errors in the file. Errors are stored as overlays +;; with a category of rng-error. The number of such overlays in the +;; buffer must always be equal to rng-error-count. + +;;; Code: + +(require 'xmltok) +(require 'nxml-enc) +(require 'nxml-util) +(require 'nxml-ns) +(require 'rng-match) +(require 'rng-util) +(require 'rng-loc) + +;;; Customizable variables + +(defgroup relax-ng nil + "Validation of XML using RELAX NG." + :group 'wp + :group 'nxml + :group 'languages) + +(defface rng-error-face '((t (:underline "red"))) + "Face for highlighting XML errors." + :group 'relax-ng) + +(defcustom rng-state-cache-distance 2000 + "*Distance in characters between each parsing and validation state cache." + :type 'integer + :group 'relax-ng) + +(defcustom rng-validate-chunk-size 8000 + "*Number of characters in a RELAX NG validation chunk. +A validation chunk will be the smallest chunk that is at least this +size and ends with a tag. After validating a chunk, validation will +continue only if Emacs is still idle." + :type 'integer + :group 'relax-ng) + +(defcustom rng-validate-delay 1.5 + "*Time in seconds that Emacs must be idle before starting a full validation. +A full validation continues until either validation is up to date +or Emacs is no longer idle." + :type 'number + :group 'relax-ng) + +(defcustom rng-validate-quick-delay 0.3 + "*Time in seconds that Emacs must be idle before starting a quick validation. +A quick validation validates at most one chunk." + :type 'number + :group 'relax-ng) + +;; Global variables + +(defvar rng-validate-timer nil) +(make-variable-buffer-local 'rng-validate-timer) +;; ensure that we can cancel the timer even after a kill-all-local-variables +(put 'rng-validate-timer 'permanent-local t) + +(defvar rng-validate-quick-timer nil) +(make-variable-buffer-local 'rng-validate-quick-timer) +;; ensure that we can cancel the timer even after a kill-all-local-variables +(put 'rng-validate-quick-timer 'permanent-local t) + +(defvar rng-error-count nil + "Number of errors in the current buffer. Always equal to number of +overlays with category rng-error.") +(make-variable-buffer-local 'rng-error-count) + +(defvar rng-message-overlay nil + "Overlay in this buffer whose help-echo property was last printed. +Nil if none.") +(make-variable-buffer-local 'rng-message-overlay) + +(defvar rng-message-overlay-inhibit-point nil + "Position at which message from overlay should be inhibited. +If point is equal to this and the error overlay around +point is `rng-message-overlay', then the `help-echo' property +of the error overlay should not be printed with `message'.") +(make-variable-buffer-local 'rng-message-overlay-inhibit-point) + +(defvar rng-message-overlay-current nil + "Non-nil if `rng-message-overlay' is still the current message.") +(make-variable-buffer-local 'rng-message-overlay-current) + +(defvar rng-open-elements nil + "Stack of names of open elements represented as a list. +Each member of the list is either t or a (PREFIX . LOCAL-NAME) pair. +\(PREFIX . LOCAL-NAME) is pushed for a start-tag; t is pushed +for a mismatched end-tag.") + +(defvar rng-pending-contents nil + "Text content of current element that has yet to be processed. +Value is a list of segments (VALUE START END) positions in reverse +order. VALUE is a string or nil. If VALUE is nil, then the value is +the string between START and END. A segment can also be nil +indicating an unresolvable entity or character reference.") + +(defvar rng-collecting-text nil) + +(defvar rng-validate-up-to-date-end nil + "Last position where validation is known to be up to date.") +(make-variable-buffer-local 'rng-validate-up-to-date-end) + +(defvar rng-conditional-up-to-date-start nil + "Marker for the start of the conditionally up-to-date region. +Nil if there is no conditionally up-to-date region. The conditionally +up-to-date region must be such that for any cached state S with +position P in the conditionally up-to-date region, if at some point it +is determined that S becomes correct for P, then all states with +position >= P in the conditionally up to date region must also then be +correct and all errors between P and the end of the region must then +be correctly marked.") +(make-variable-buffer-local 'rng-conditional-up-to-date-start) + +(defvar rng-conditional-up-to-date-end nil + "Marker for the end of the conditionally up-to-date region. +Nil if there is no conditionally up-to-date region. See the variable +`rng-conditional-up-to-date-start'.") +(make-variable-buffer-local 'rng-conditional-up-to-date-end) + +(defvar rng-parsing-for-state nil + "Non-nil means we are currently parsing just to compute the state. +Should be dynamically bound.") + +(defvar rng-validate-mode nil) +(make-variable-buffer-local 'rng-validate-mode) + +(defvar rng-dtd nil) +(make-variable-buffer-local 'rng-dtd) + +;;;###autoload +(defun rng-validate-mode (&optional arg no-change-schema) + "Minor mode performing continual validation against a RELAX NG schema. + +Checks whether the buffer is a well-formed XML 1.0 document, +conforming to the XML Namespaces Recommendation and valid against a +RELAX NG schema. The mode-line indicates whether it is or not. Any +parts of the buffer that cause it not to be are considered errors and +are highlighted with `rng-error-face'. A description of each error is +available as a tooltip. \\[rng-next-error] goes to the next error +after point. Clicking mouse-1 on the word `Invalid' in the mode-line +goes to the first error in the buffer. If the buffer changes, then it +will be automatically rechecked when Emacs becomes idle; the +rechecking will be paused whenever there is input pending.. + +By default, uses a vacuous schema that allows any well-formed XML +document. A schema can be specified explictly using +\\[rng-set-schema-file-and-validate], or implicitly based on the buffer's +file name or on the root element name. In each case the schema must +be a RELAX NG schema using the compact schema \(such schemas +conventionally have a suffix of `.rnc'). The variable +`rng-schema-locating-files' specifies files containing rules +to use for finding the schema." + (interactive "P") + (setq rng-validate-mode + (if (null arg) + (not rng-validate-mode) + (> (prefix-numeric-value arg) 0))) + (save-restriction + (widen) + (nxml-with-unmodifying-text-property-changes + (rng-clear-cached-state (point-min) (point-max))) + ;; 1+ to clear empty overlays at (point-max) + (rng-clear-overlays (point-min) (1+ (point-max)))) + (setq rng-validate-up-to-date-end 1) + (rng-clear-conditional-region) + (setq rng-error-count 0) + ;; do this here to avoid infinite loop if we set the schema + (remove-hook 'rng-schema-change-hook 'rng-validate-clear t) + (cond (rng-validate-mode + (unwind-protect + (save-excursion + ;; An error can change the current buffer + (when (or (not rng-current-schema) + (and (eq rng-current-schema rng-any-element) + (not no-change-schema))) + (rng-auto-set-schema t))) + (unless rng-current-schema (rng-set-schema-file-1 nil)) + (add-hook 'rng-schema-change-hook 'rng-validate-clear nil t) + (add-hook 'after-change-functions 'rng-after-change-function nil t) + (add-hook 'kill-buffer-hook 'rng-kill-timers nil t) + (add-hook 'echo-area-clear-hook 'rng-echo-area-clear-function nil t) + (add-hook 'post-command-hook 'rng-maybe-echo-error-at-point nil t) + (rng-match-init-buffer) + (rng-activate-timers) + ;; Start validating right away if the buffer is visible. + ;; If it's not visible, don't do this, because the user + ;; won't get any progress indication. When the user finds + ;; a new file, then the buffer won't be visible + ;; when this is invoked. + (when (get-buffer-window (current-buffer) 'visible) + (rng-validate-while-idle (current-buffer))))) + (t + (rng-cancel-timers) + (force-mode-line-update) + (remove-hook 'kill-buffer-hook 'rng-cancel-timers t) + (remove-hook 'post-command-hook 'rng-maybe-echo-error-at-point t) + (remove-hook 'echo-area-clear-hook 'rng-echo-area-clear-function t) + (remove-hook 'after-change-functions 'rng-after-change-function t)))) + +(defun rng-set-schema-file-and-validate (filename) + "Sets the schema and turns on `rng-validate-mode' if not already on. +The schema is set like `rng-set-schema'." + (interactive "fSchema file: ") + (rng-set-schema-file filename) + (or rng-validate-mode (rng-validate-mode))) + +(defun rng-set-document-type-and-validate (type-id) + (interactive (list (rng-read-type-id))) + (and (rng-set-document-type type-id) + (or rng-validate-mode (rng-validate-mode)))) + +(defun rng-auto-set-schema-and-validate () + "Set the schema for this buffer automatically and turn on `rng-validate-mode'. +The schema is set like `rng-auto-set-schema'." + (interactive) + (rng-auto-set-schema) + (or rng-validate-mode (rng-validate-mode))) + +(defun rng-after-change-function (start end pre-change-len) + ;; Work around bug in insert-file-contents. + (when (> end (1+ (buffer-size))) + (setq start 1) + (setq end (1+ (buffer-size)))) + (setq rng-message-overlay-inhibit-point nil) + (nxml-with-unmodifying-text-property-changes + (rng-clear-cached-state start end)) + ;; rng-validate-up-to-date-end holds the position before the change + ;; Adjust it to reflect the change. + (if (< start rng-validate-up-to-date-end) + (setq rng-validate-up-to-date-end + (if (<= (+ start pre-change-len) rng-validate-up-to-date-end) + (+ rng-validate-up-to-date-end + (- end start pre-change-len)) + start))) + ;; Adjust the conditional zone + (cond (rng-conditional-up-to-date-start + (when (< rng-conditional-up-to-date-start end) + (if (< end rng-conditional-up-to-date-end) + (set-marker rng-conditional-up-to-date-start end) + (rng-clear-conditional-region)))) + ((< end rng-validate-up-to-date-end) + (setq rng-conditional-up-to-date-end + (copy-marker rng-validate-up-to-date-end nil)) + (setq rng-conditional-up-to-date-start + (copy-marker end t)))) + ;; Adjust rng-validate-up-to-date-end + (if (< start rng-validate-up-to-date-end) + (setq rng-validate-up-to-date-end start)) + ;; Must make rng-validate-up-to-date-end < point-max + ;; (unless the buffer is empty). + ;; otherwise validate-prepare will say there's nothing to do. + ;; Don't use (point-max) because we may be narrowed. + (if (> rng-validate-up-to-date-end (buffer-size)) + (setq rng-validate-up-to-date-end + (max 1 (1- rng-validate-up-to-date-end)))) + ;; Arrange to revalidate + (rng-activate-timers) + ;; Need to do this after activating the timer + (force-mode-line-update)) + +(defun rng-compute-mode-line-string () + (cond (rng-validate-timer + (concat " Validated:" + (number-to-string + ;; Use floor rather than round because we want + ;; to show 99% rather than 100% for changes near + ;; the end. + (floor (if (eq (buffer-size) 0) + 0.0 + (/ (* (- rng-validate-up-to-date-end 1) 100.0) + (buffer-size))))) + "%%")) + ((> rng-error-count 0) + (concat " " + (propertize "Invalid" + 'help-echo "mouse-1: go to first error" + 'local-map (make-mode-line-mouse-map + 'mouse-1 + 'rng-mouse-first-error)))) + (t " Valid"))) + +(defun rng-cancel-timers () + (let ((inhibit-quit t)) + (when rng-validate-timer + (cancel-timer rng-validate-timer) + (setq rng-validate-timer nil)) + (when rng-validate-quick-timer + (cancel-timer rng-validate-quick-timer) + (setq rng-validate-quick-timer nil)))) + +(defun rng-kill-timers () + ;; rng-validate-timer and rng-validate-quick-timer have the + ;; permanent-local property, so that the timers can be + ;; cancelled even after changing mode. + ;; This function takes care of cancelling the timers and + ;; then killing the local variables. + (when (local-variable-p 'rng-validate-timer) + (when rng-validate-timer + (cancel-timer rng-validate-timer)) + (kill-local-variable 'rng-validate-timer)) + (when (local-variable-p 'rng-validate-quick-timer) + (when rng-validate-quick-timer + (cancel-timer rng-validate-quick-timer)) + (kill-local-variable 'rng-validate-quick-timer))) + +(defun rng-activate-timers () + (unless rng-validate-timer + (let ((inhibit-quit t)) + (setq rng-validate-timer + (run-with-idle-timer rng-validate-delay + t + 'rng-validate-while-idle + (current-buffer))) + (setq rng-validate-quick-timer + (run-with-idle-timer rng-validate-quick-delay + t + 'rng-validate-quick-while-idle + (current-buffer)))))) + +(defun rng-validate-clear () + (rng-validate-mode 1 t)) + +;; These two variables are dynamically bound and used +;; to pass information between rng-validate-while-idle +;; and rng-validate-while-idle-continue-p. + +(defvar rng-validate-display-point nil) +(defvar rng-validate-display-modified-p nil) + +(defun rng-validate-while-idle-continue-p () + ;; input-pending-p and sit-for run timers that are + ;; ripe. Binding timer-idle-list to nil prevents + ;; this. If we don't do this, then any ripe timers + ;; will get run, and we won't get any chance to + ;; validate until Emacs becomes idle again or until + ;; the other lower priority timers finish (which + ;; can take a very long time in the case of + ;; jit-lock). + (let ((timer-idle-list nil)) + (and (not (input-pending-p)) + ;; Fake rng-validate-up-to-date-end so that the mode line + ;; shows progress. Also use this to save point. + (let ((rng-validate-up-to-date-end (point))) + (goto-char rng-validate-display-point) + (when (not rng-validate-display-modified-p) + (restore-buffer-modified-p nil)) + (force-mode-line-update) + (let ((continue (sit-for 0))) + (goto-char rng-validate-up-to-date-end) + continue))))) + +;; Calling rng-do-some-validation once with a continue-p function, as +;; opposed to calling it repeatedly, helps on initial validation of a +;; large buffer with lots of errors. The overlays for errors will all +;; get added when rng-do-some-validation returns and won't slow the +;; validation process down. + +(defun rng-validate-while-idle (buffer) + (with-current-buffer buffer + (if rng-validate-mode + (if (let ((rng-validate-display-point (point)) + (rng-validate-display-modified-p (buffer-modified-p))) + (rng-do-some-validation 'rng-validate-while-idle-continue-p)) + (force-mode-line-update) + (rng-validate-done)) + ;; must have done kill-all-local-variables + (rng-kill-timers)))) + +(defun rng-validate-quick-while-idle (buffer) + (with-current-buffer buffer + (if rng-validate-mode + (if (rng-do-some-validation) + (force-mode-line-update) + (rng-validate-done)) + ;; must have done kill-all-local-variables + (rng-kill-timers)))) + +(defun rng-validate-done () + (when (or (not (current-message)) + (rng-current-message-from-error-overlay-p)) + (rng-error-overlay-message (or (rng-error-overlay-after (point)) + (rng-error-overlay-after (1- (point)))))) + (rng-cancel-timers) + (force-mode-line-update)) + +(defun rng-do-some-validation (&optional continue-p-function) + "Do some validation work. Return t if more to do, nil otherwise." + (save-excursion + (save-restriction + (widen) + (nxml-with-invisible-motion + (condition-case err + (and (rng-validate-prepare) + (let ((rng-dt-namespace-context-getter '(nxml-ns-get-context))) + (nxml-with-unmodifying-text-property-changes + (rng-do-some-validation-1 continue-p-function)))) + ;; errors signalled from a function run by an idle timer + ;; are ignored; if we don't catch them, validation + ;; will get mysteriously stuck at a single place + (rng-compile-error + (message "Incorrect schema. %s" (nth 1 err)) + (rng-validate-mode 0) + nil) + (error + (message "Internal error in rng-validate-mode triggered at buffer position %d. %s" + (point) + (error-message-string err)) + (rng-validate-mode 0) + nil)))))) + +(defun rng-validate-prepare () + "Prepare to do some validation, initializing point and the state. +Return t if there is work to do, nil otherwise." + (cond ((= rng-validate-up-to-date-end (point-min)) + (rng-set-initial-state) + t) + ((= rng-validate-up-to-date-end (point-max)) + nil) + (t (let ((state (get-text-property (1- rng-validate-up-to-date-end) + 'rng-state))) + (cond (state + (rng-restore-state state) + (goto-char rng-validate-up-to-date-end)) + (t + (let ((pos (previous-single-property-change + rng-validate-up-to-date-end + 'rng-state))) + (cond (pos + (rng-restore-state + (or (get-text-property (1- pos) 'rng-state) + (error "Internal error: state null"))) + (goto-char pos)) + (t (rng-set-initial-state)))))))))) + + +(defun rng-do-some-validation-1 (&optional continue-p-function) + (let ((limit (+ rng-validate-up-to-date-end + rng-validate-chunk-size)) + (remove-start rng-validate-up-to-date-end) + (next-cache-point (+ (point) rng-state-cache-distance)) + (continue t) + (xmltok-dtd rng-dtd) + have-remaining-chars + xmltok-type + xmltok-start + xmltok-name-colon + xmltok-name-end + xmltok-replacement + xmltok-attributes + xmltok-namespace-attributes + xmltok-dependent-regions + xmltok-errors) + (when (= (point) 1) + (let ((regions (xmltok-forward-prolog))) + (rng-clear-overlays 1 (point)) + (while regions + (when (eq (aref (car regions) 0) 'encoding-name) + (rng-process-encoding-name (aref (car regions) 1) + (aref (car regions) 2))) + (setq regions (cdr regions)))) + (unless (equal rng-dtd xmltok-dtd) + (rng-clear-conditional-region)) + (setq rng-dtd xmltok-dtd)) + (while continue + (setq have-remaining-chars (rng-forward)) + (let ((pos (point))) + (setq continue + (and have-remaining-chars + (or (< pos limit) + (and continue-p-function + (funcall continue-p-function) + (setq limit (+ limit rng-validate-chunk-size)) + t)))) + (cond ((and rng-conditional-up-to-date-start + ;; > because we are getting the state from (1- pos) + (> pos rng-conditional-up-to-date-start) + (< pos rng-conditional-up-to-date-end) + (rng-state-matches-current (get-text-property (1- pos) + 'rng-state))) + (when (< remove-start (1- pos)) + (rng-clear-cached-state remove-start (1- pos))) + ;; sync up with cached validation state + (setq continue nil) + ;; do this before settting rng-validate-up-to-date-end + ;; in case we get a quit + (rng-mark-xmltok-errors) + (rng-mark-xmltok-dependent-regions) + (setq rng-validate-up-to-date-end + (marker-position rng-conditional-up-to-date-end)) + (rng-clear-conditional-region) + (setq have-remaining-chars + (< rng-validate-up-to-date-end (point-max)))) + ((or (>= pos next-cache-point) + (not continue)) + (setq next-cache-point (+ pos rng-state-cache-distance)) + (rng-clear-cached-state remove-start pos) + (when have-remaining-chars + (rng-cache-state (1- pos))) + (setq remove-start pos) + (unless continue + ;; if we have just blank chars skip to the end + (when have-remaining-chars + (skip-chars-forward " \t\r\n") + (when (= (point) (point-max)) + (rng-clear-overlays pos (point)) + (rng-clear-cached-state pos (point)) + (setq have-remaining-chars nil) + (setq pos (point)))) + (when (not have-remaining-chars) + (rng-process-end-document)) + (rng-mark-xmltok-errors) + (rng-mark-xmltok-dependent-regions) + (setq rng-validate-up-to-date-end pos) + (when rng-conditional-up-to-date-end + (cond ((<= rng-conditional-up-to-date-end pos) + (rng-clear-conditional-region)) + ((< rng-conditional-up-to-date-start pos) + (set-marker rng-conditional-up-to-date-start + pos))))))))) + have-remaining-chars)) + +(defun rng-clear-conditional-region () + (when rng-conditional-up-to-date-start + (set-marker rng-conditional-up-to-date-start nil) + (setq rng-conditional-up-to-date-start nil)) + (when rng-conditional-up-to-date-end + (set-marker rng-conditional-up-to-date-end nil) + (setq rng-conditional-up-to-date-end nil))) + +(defun rng-clear-cached-state (start end) + "Clear cached state between START and END." + (remove-text-properties start end '(rng-state nil))) + +(defun rng-cache-state (pos) + "Save the current state in a text property on the character at pos." + (put-text-property pos + (1+ pos) + 'rng-state + (rng-get-state))) + +(defun rng-state-matches-current (state) + (and state + (rng-match-state-equal (car state)) + (nxml-ns-state-equal (nth 1 state)) + (equal (nth 2 state) rng-open-elements))) + +(defun rng-get-state () + (list (rng-match-state) + (nxml-ns-state) + rng-open-elements)) + +(defun rng-restore-state (state) + (rng-set-match-state (car state)) + (setq state (cdr state)) + (nxml-ns-set-state (car state)) + (setq rng-open-elements (cadr state)) + (setq rng-pending-contents nil) + (setq rng-collecting-text (rng-match-text-typed-p))) + +(defun rng-set-initial-state () + (nxml-ns-init) + (rng-match-start-document) + (setq rng-open-elements nil) + (setq rng-pending-contents nil) + (goto-char (point-min))) + +(defun rng-clear-overlays (beg end) + (unless rng-parsing-for-state + (let ((overlays (overlays-in beg end))) + (while overlays + (let* ((overlay (car overlays)) + (category (overlay-get overlay 'category))) + (cond ((eq category 'rng-error) + (let ((inhibit-quit t)) + (when (eq overlay rng-message-overlay) + (rng-error-overlay-message nil)) + (delete-overlay overlay) + ;; rng-error-count could be nil + ;; if overlays left over from a previous use + ;; of rng-validate-mode that ended with a change of mode + (when rng-error-count + (setq rng-error-count (1- rng-error-count))))) + ((and (eq category 'rng-dependent) + (<= beg (overlay-start overlay))) + (delete-overlay overlay)))) + (setq overlays (cdr overlays)))))) + +;;; Dependent regions + +(defun rng-mark-xmltok-dependent-regions () + (while xmltok-dependent-regions + (apply 'rng-mark-xmltok-dependent-region + (car xmltok-dependent-regions)) + (setq xmltok-dependent-regions + (cdr xmltok-dependent-regions)))) + +(defun rng-mark-xmltok-dependent-region (fun start end &rest args) + (let ((overlay (make-overlay start end nil t t))) + (overlay-put overlay 'category 'rng-dependent) + (overlay-put overlay 'rng-funargs (cons fun args)))) + +(put 'rng-dependent 'evaporate t) +(put 'rng-dependent 'modification-hooks '(rng-dependent-region-changed)) +(put 'rng-dependent 'insert-behind-hooks '(rng-dependent-region-changed)) + +(defun rng-dependent-region-changed (overlay + after-p + change-start + change-end + &optional pre-change-length) + (when (and after-p + ;; Emacs sometimes appears to call deleted overlays + (overlay-start overlay) + (let ((funargs (overlay-get overlay 'rng-funargs))) + (save-match-data + (save-excursion + (save-restriction + (widen) + (apply (car funargs) + (append (list change-start + change-end + pre-change-length + (overlay-start overlay) + (overlay-end overlay)) + (cdr funargs)))))))) + (rng-after-change-function (overlay-start overlay) + change-end + (+ pre-change-length + (- (overlay-start overlay) + change-start))) + (delete-overlay overlay))) + +;;; Error state + +(defun rng-mark-xmltok-errors () + (while xmltok-errors + (let ((err (car xmltok-errors))) + (rng-mark-not-well-formed (xmltok-error-message err) + (xmltok-error-start err) + (xmltok-error-end err))) + (setq xmltok-errors (cdr xmltok-errors)))) + +(defun rng-mark-invalid (message beg end) + (rng-mark-error message beg end)) + +(defun rng-mark-not-well-formed (message beg end) + ;; Don't try to validate further + ;;(rng-set-match-state rng-not-allowed-ipattern) + (rng-mark-error message beg end)) + +(defun rng-mark-error (message beg end) + (unless rng-parsing-for-state + (let ((overlays (overlays-in beg end))) + (while (and overlays message) + (let ((o (car overlays))) + (when (and (eq (overlay-get o 'category) 'rng-error) + (= (overlay-start o) beg) + (= (overlay-end o) end)) + (overlay-put o + 'help-echo + (concat (overlay-get o 'help-echo) + "\n" + message)) + (setq message nil))) + (setq overlays (cdr overlays)))) + (when message + (let ((inhibit-quit t)) + (setq rng-error-count (1+ rng-error-count)) + (let ((overlay + (make-overlay beg end nil t + ;; Need to make the rear delimiter advance + ;; with the front delimiter when the overlay + ;; is empty, otherwise the front delimiter + ;; will move past the rear delimiter. + (= beg end)))) + ;; Ensure when we have two overlapping messages, the help-echo + ;; of the one that starts first is shown + (overlay-put overlay 'priority beg) + (overlay-put overlay 'category 'rng-error) + (overlay-put overlay 'help-echo message)))))) + +(put 'rng-error 'face 'rng-error-face) +(put 'rng-error 'modification-hooks '(rng-error-modified)) + +;; If we don't do this, then the front delimiter can move +;; past the end delimiter. +(defun rng-error-modified (overlay after-p beg end &optional pre-change-len) + (when (and after-p + (overlay-start overlay) ; check not deleted + (>= (overlay-start overlay) + (overlay-end overlay))) + (let ((inhibit-quit t)) + (delete-overlay overlay) + (setq rng-error-count (1- rng-error-count))))) + +(defun rng-echo-area-clear-function () + (setq rng-message-overlay-current nil)) + +;;; Error navigation + +(defun rng-maybe-echo-error-at-point () + (when (or (not (current-message)) + (rng-current-message-from-error-overlay-p)) + (rng-error-overlay-message (rng-error-overlay-after (point))))) + +(defun rng-error-overlay-after (pos) + (let ((overlays (overlays-in pos (1+ pos))) + (best nil)) + (while overlays + (let ((overlay (car overlays))) + (when (and (eq (overlay-get overlay 'category) + 'rng-error) + (or (not best) + (< (overlay-start best) + (overlay-start overlay)))) + (setq best overlay))) + (setq overlays (cdr overlays))) + best)) + +(defun rng-first-error () + "Go to the first validation error. +Turn on `rng-validate-mode' if it is not already on." + (interactive) + (or rng-validate-mode (rng-validate-mode)) + (when (and (eq rng-validate-up-to-date-end 1) + (< rng-validate-up-to-date-end (point-max))) + (rng-do-some-validation)) + (let ((err (rng-find-next-error-overlay (1- (point-min))))) + (if err + (rng-goto-error-overlay err) + (let ((pos (save-excursion + (goto-char (point-min)) + (rng-next-error 1)))) + (when pos + (goto-char pos)))))) + +(defun rng-mouse-first-error (event) + "Go to the first validation error from a mouse click." + (interactive "e") + (select-window (posn-window (event-start event))) + (rng-first-error)) + +(defun rng-next-error (arg) + "Go to the next validation error after point. +Turn on `rng-validate-mode' if it is not already on. +A prefix ARG specifies how many errors to move. A negative ARG +moves backwards. Just \\[universal-argument] as a prefix +means goto the first error." + (interactive "P") + (if (consp arg) + (rng-first-error) + (or rng-validate-mode (rng-validate-mode)) + (setq arg (prefix-numeric-value arg)) + (if (< arg 0) + (rng-previous-error-1 (- arg)) + (rng-next-error-1 arg)))) + +(defun rng-previous-error (arg) + "Go to the previous validation error before point. +Turn on `rng-validate-mode' if it is not already on. +A prefix ARG specifies how many errors to move. A negative ARG +moves forwards. Just \\[universal-argument] as a prefix +means goto the first error." + (interactive "P") + (if (consp arg) + (rng-first-error) + (or rng-validate-mode (rng-validate-mode)) + (setq arg (prefix-numeric-value arg)) + (if (< arg 0) + (rng-next-error-1 (- arg)) + (rng-previous-error-1 arg)))) + +(defun rng-next-error-1 (arg) + (let* ((pos (point)) + err last-err) + (while (and (> arg 0) + (setq err (rng-find-next-error-overlay pos))) + (setq arg (1- arg)) + (setq last-err err) + (setq pos (overlay-start err))) + (when (> arg 0) + (setq pos (max pos (1- rng-validate-up-to-date-end))) + (when (< rng-validate-up-to-date-end (point-max)) + (message "Parsing...") + (while (let ((more-to-do (rng-do-some-validation))) + (while (and (> arg 0) + (setq err (rng-find-next-error-overlay pos))) + (setq arg (1- arg)) + (setq last-err err) + (setq pos (overlay-start err))) + (when (and (> arg 0) + more-to-do + (< rng-validate-up-to-date-end (point-max))) + ;; Display percentage validated. + (force-mode-line-update) + ;; Force redisplay but don't allow idle timers to run. + (let ((timer-idle-list nil)) + (sit-for 0)) + (setq pos + (max pos (1- rng-validate-up-to-date-end))) + t))))) + (if last-err + (rng-goto-error-overlay last-err) + (message "No more errors") + nil))) + +(defun rng-previous-error-1 (arg) + (let* ((pos (point)) + err last-err) + (while (and (> arg 0) + (setq err (rng-find-previous-error-overlay pos))) + (setq pos (overlay-start err)) + (setq last-err err) + (setq arg (1- arg))) + (when (and (> arg 0) + (< rng-validate-up-to-date-end (min pos (point-max)))) + (message "Parsing...") + (while (and (rng-do-some-validation) + (< rng-validate-up-to-date-end (min pos (point-max)))) + (force-mode-line-update) + ;; Force redisplay but don't allow idle timers to run. + (let ((timer-idle-list nil)) + (sit-for 0))) + (while (and (> arg 0) + (setq err (rng-find-previous-error-overlay pos))) + (setq pos (overlay-start err)) + (setq last-err err) + (setq arg (1- arg)))) + (if last-err + (rng-goto-error-overlay last-err) + (message "No previous errors") + nil))) + +(defun rng-goto-error-overlay (err) + "Goto the start of error overlay ERR and print its message." + (goto-char (overlay-start err)) + (setq rng-message-overlay-inhibit-point nil) + (rng-error-overlay-message err)) + +(defun rng-error-overlay-message (err) + (if err + (unless (or (and (eq rng-message-overlay-inhibit-point (point)) + (eq rng-message-overlay err)) + (= (point-max) 1)) + (message "%s" (overlay-get err 'help-echo)) + (setq rng-message-overlay-current t) + (setq rng-message-overlay-inhibit-point (point))) + (when (rng-current-message-from-error-overlay-p) + (message nil)) + (setq rng-message-overlay-inhibit-point nil)) + (setq rng-message-overlay err)) + +(defun rng-current-message-from-error-overlay-p () + (and rng-message-overlay-current + rng-message-overlay + (equal (overlay-get rng-message-overlay 'help-echo) + (current-message)))) + +(defun rng-find-next-error-overlay (pos) + "Return the overlay for the next error starting after POS. +Return nil if there is no such overlay or it is out of date. +Do not do any additional validation." + (when rng-error-count + (let (done found overlays) + (while (not done) + (cond (overlays + (let ((overlay (car overlays))) + (setq overlays (cdr overlays)) + (when (and (eq (overlay-get overlay 'category) 'rng-error) + ;; Is it the first? + (= (overlay-start overlay) pos) + ;; Is it up to date? + (<= (overlay-end overlay) + rng-validate-up-to-date-end)) + (setq done t) + (setq found overlay)))) + ((or (= pos (point-max)) + (> (setq pos (next-overlay-change pos)) + rng-validate-up-to-date-end)) + (setq done t)) + (t (setq overlays (overlays-in pos (1+ pos)))))) + found))) + +(defun rng-find-previous-error-overlay (pos) + "Return the overlay for the last error starting before POS. +Return nil if there is no such overlay or it is out of date. +Do not do any additional validation." + (when (and rng-error-count + (<= pos rng-validate-up-to-date-end)) + (let (done found overlays) + (while (not done) + (cond (overlays + (let ((overlay (car overlays))) + (setq overlays (cdr overlays)) + (when (and (eq (overlay-get overlay 'category) 'rng-error) + ;; Is it the first? + (= (overlay-start overlay) pos)) + (setq done t) + (setq found overlay)))) + ((= pos (point-min)) + (setq done t)) + (t + (setq pos (previous-overlay-change pos)) + (setq overlays (overlays-in pos (1+ pos)))))) + found))) + +;;; Parsing + +(defun rng-forward (&optional limit) + "Move forward over one or more tokens updating the state. +If LIMIT is nil, stop after tags. +If LIMIT is non-nil, stop when end of last token parsed is >= LIMIT. +Return nil at end of buffer, t otherwise." + (let (type) + (while (progn + (setq type (xmltok-forward)) + (rng-clear-overlays xmltok-start (point)) + (let ((continue + (cond ((eq type 'start-tag) + (rng-process-start-tag 'start-tag) + nil) + ((eq type 'end-tag) + (rng-process-end-tag) + nil) + ((eq type 'empty-element) + (rng-process-start-tag 'empty-element) + nil) + ((eq type 'space) + (rng-process-text xmltok-start nil t) + t) + ((eq type 'data) + (rng-process-text xmltok-start nil nil) + t) + ((memq type '(entity-ref char-ref)) + (cond (xmltok-replacement + (rng-process-text xmltok-start + nil + 'maybe + xmltok-replacement)) + ((eq type 'char-ref) + (rng-process-unknown-char)) + (t + (rng-process-unknown-entity))) + t) + ((eq type 'cdata-section) + (rng-process-text (+ xmltok-start 9) ; "" + 'maybe) + t) + ((eq type 'partial-start-tag) + (rng-process-start-tag 'partial-start-tag) + t) + ((eq type 'partial-empty-element) + (rng-process-start-tag 'empty-element) + t) + ((eq type 'partial-end-tag) + (rng-process-end-tag 'partial) + t) + (t type)))) + (if limit + (< (point) limit) + continue)))) + (and type t))) + +(defun rng-process-start-tag (tag-type) + "TAG-TYPE is `start-tag' for a start-tag, `empty-element' for +an empty element. partial-empty-element should be passed +as empty-element." + (and rng-collecting-text (rng-flush-text)) + (setq rng-collecting-text nil) + (setq rng-pending-contents nil) + (rng-process-namespaces) + (let ((tag (rng-process-tag-name))) + (rng-process-attributes) + ;; set the state appropriately + (cond ((eq tag-type 'empty-element) + (rng-process-start-tag-close) + ;; deal with missing content with empty element + (when (not (rng-match-empty-content)) + (rng-match-after) + (rng-mark-start-tag-close "Empty content not allowed")) + (nxml-ns-pop-state)) + ((eq tag-type 'start-tag) + (rng-process-start-tag-close) + (setq rng-collecting-text (rng-match-text-typed-p)) + (rng-push-tag tag)) + ((eq tag-type 'partial-start-tag) + (rng-process-start-tag-close) + (rng-match-after) + (nxml-ns-pop-state))))) + +(defun rng-process-namespaces () + (let ((nsatts xmltok-namespace-attributes) + prefixes) + (nxml-ns-push-state) + (while nsatts + (let* ((att (car nsatts)) + (value (xmltok-attribute-value att))) + (when value + (let ((ns (nxml-make-namespace value)) + (prefix (and (xmltok-attribute-prefix att) + (xmltok-attribute-local-name att)))) + (cond ((member prefix prefixes) + (rng-mark-invalid "Duplicate namespace declaration" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-end att))) + ((not prefix) + (nxml-ns-set-default ns)) + (ns + (nxml-ns-set-prefix prefix ns)) + (t + ;; cannot have xmlns:foo="" + (rng-mark-invalid "Namespace prefix cannot be undeclared" + (1- (xmltok-attribute-value-start att)) + (1+ (xmltok-attribute-value-end att))))) + (setq prefixes (cons prefix prefixes))))) + (setq nsatts (cdr nsatts))))) + +(defun rng-process-tag-name () + (let* ((prefix (xmltok-start-tag-prefix)) + (local-name (xmltok-start-tag-local-name)) + (name + (if prefix + (let ((ns (nxml-ns-get-prefix prefix))) + (cond (ns (cons ns local-name)) + ((and (setq ns + (rng-match-infer-start-tag-namespace + local-name)) + (rng-match-start-tag-open (cons ns local-name))) + (nxml-ns-set-prefix prefix ns) + (rng-mark-start-tag-close "Missing xmlns:%s=\"%s\"" + prefix + (nxml-namespace-name ns)) + nil) + (t + (rng-recover-bad-element-prefix) + nil))) + (cons (nxml-ns-get-default) local-name)))) + (when (and name + (not (rng-match-start-tag-open name))) + (unless (and (not (car name)) + (let ((ns (rng-match-infer-start-tag-namespace (cdr name)))) + (and ns + (rng-match-start-tag-open (cons ns local-name)) + (progn + (nxml-ns-set-default ns) + ;; XXX need to check we don't have xmlns="" + (rng-mark-start-tag-close "Missing xmlns=\"%s\"" + (nxml-namespace-name ns)) + t)))) + (rng-recover-start-tag-open name))) + (cons prefix local-name))) + +(defun rng-process-attributes () + (let ((atts xmltok-attributes) + names) + (while atts + (let* ((att (car atts)) + (prefix (xmltok-attribute-prefix att)) + (local-name (xmltok-attribute-local-name att)) + (name + (if prefix + (let ((ns (nxml-ns-get-prefix prefix))) + (and ns + (cons ns local-name))) + (cons nil local-name)))) + (cond ((not name) + (rng-recover-bad-attribute-prefix att)) + ((member name names) + (rng-recover-duplicate-attribute-name att)) + ((not (rng-match-attribute-name name)) + (rng-recover-attribute-name att)) + ((rng-match-text-typed-p) + (let ((value (xmltok-attribute-value att))) + (if value + (or (rng-match-attribute-value value) + (rng-recover-attribute-value att)) + (rng-match-after)))) + (t (or (rng-match-end-tag) + (error "Internal error:\ + invalid on untyped attribute value")))) + (setq names (cons name names))) + (setq atts (cdr atts))))) + +(defun rng-process-start-tag-close () + ;; deal with missing attributes + (unless (rng-match-start-tag-close) + (rng-mark-start-tag-close (rng-missing-attributes-message)) + (rng-match-ignore-attributes))) + +(defun rng-mark-start-tag-close (&rest args) + (when (not (eq xmltok-type 'partial-start-tag)) + (rng-mark-invalid (apply 'format args) + (- (point) + (if (eq xmltok-type 'empty-element) + 2 + 1)) + (point)))) + +(defun rng-recover-bad-element-prefix () + (rng-mark-invalid "Prefix not declared" + (1+ xmltok-start) + xmltok-name-colon) + (rng-match-unknown-start-tag-open)) + +(defun rng-recover-bad-attribute-prefix (att) + (rng-mark-invalid "Prefix not declared" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-colon att))) + +(defun rng-recover-duplicate-attribute-name (att) + (rng-mark-invalid "Duplicate attribute" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-end att))) + +(defun rng-recover-start-tag-open (name) + (let ((required (rng-match-required-element-name))) + (cond ((and required + (rng-match-start-tag-open required) + (rng-match-after) + (rng-match-start-tag-open name)) + (rng-mark-invalid (concat "Missing element " + (rng-quote-string + (rng-name-to-string required))) + xmltok-start + (1+ xmltok-start))) + ((and (rng-match-optionalize-elements) + (rng-match-start-tag-open name)) + (rng-mark-invalid "Required elements missing" + xmltok-start + (1+ xmltok-start))) + ((rng-match-out-of-context-start-tag-open name) + (rng-mark-invalid "Element not allowed in this context" + (1+ xmltok-start) + xmltok-name-end)) + (t + (rng-match-unknown-start-tag-open) + (rng-mark-invalid "Unknown element" + (1+ xmltok-start) + xmltok-name-end))))) + +(defun rng-recover-attribute-value (att) + (let ((start (xmltok-attribute-value-start att)) + (end (xmltok-attribute-value-end att))) + (if (= start end) + (rng-mark-invalid "Empty attribute value invalid" start (1+ end)) + (rng-mark-invalid "Attribute value invalid" start end))) + (rng-match-after)) + +(defun rng-recover-attribute-name (att) + (rng-mark-invalid "Attribute not allowed" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-end att))) + +(defun rng-missing-attributes-message () + (let ((required-attributes + (rng-match-required-attribute-names))) + (cond ((not required-attributes) + "Required attributes missing") + ((not (cdr required-attributes)) + (concat "Missing attribute " + (rng-quote-string + (rng-name-to-string (car required-attributes) t)))) + (t + (concat "Missing attributes " + (mapconcat (lambda (nm) + (rng-quote-string + (rng-name-to-string nm t))) + required-attributes + ", ")))))) + +(defun rng-process-end-tag (&optional partial) + (cond ((not rng-open-elements) + (rng-mark-not-well-formed "Extra end-tag" + xmltok-start + (point))) + ((or partial + (equal (cons (xmltok-end-tag-prefix) + (xmltok-end-tag-local-name)) + (car rng-open-elements))) + (rng-end-element)) + (t (rng-recover-mismatched-end-tag)))) + +(defun rng-end-element () + (if rng-collecting-text + (let ((contents (rng-contents-string))) + (cond ((not contents) (rng-match-after)) + ((not (rng-match-element-value contents)) + (let* ((region (rng-contents-region))) + (if (not region) + (rng-mark-invalid "Empty content not allowed" + xmltok-start + (+ xmltok-start 2)) + (rng-mark-invalid "Invalid data" + (car region) + (cdr region)))) + (rng-match-after))) + (setq rng-collecting-text nil) + (setq rng-pending-contents nil)) + (unless (rng-match-end-tag) + (rng-mark-invalid (rng-missing-element-message) + xmltok-start + (+ xmltok-start 2)) + (rng-match-after))) + (nxml-ns-pop-state) + (when (eq (car rng-open-elements) t) + (rng-pop-tag)) + (rng-pop-tag)) + +(defun rng-missing-element-message () + (let ((element (rng-match-required-element-name))) + (if element + (concat "Missing element " + (rng-quote-string (rng-name-to-string element))) + "Required child elements missing"))) + +(defun rng-recover-mismatched-end-tag () + (let* ((name (cons (xmltok-end-tag-prefix) + (xmltok-end-tag-local-name)))) + (cond ((member name (cdr rng-open-elements)) + (let* ((suppress-error (eq (car rng-open-elements) t)) + missing top) + (while (progn + (setq top (car rng-open-elements)) + (rng-pop-tag) + (unless (eq top t) + (setq missing (cons top missing)) + (nxml-ns-pop-state) + (rng-match-after)) + (not (equal top name)))) + (unless suppress-error + (rng-mark-missing-end-tags (cdr missing))))) + ((rng-match-empty-before-p) + (rng-mark-mismatched-end-tag) + (rng-end-element)) + (t (rng-mark-mismatched-end-tag) + (setq rng-open-elements + (cons t rng-open-elements)))))) + +(defun rng-mark-missing-end-tags (missing) + (rng-mark-not-well-formed + (format "Missing end-tag%s %s" + (if (null (cdr missing)) "" "s") + (mapconcat (lambda (name) + (rng-quote-string + (if (car name) + (concat (car name) + ":" + (cdr name)) + (cdr name)))) + missing + ", ")) + xmltok-start + (+ xmltok-start 2))) + +(defun rng-mark-mismatched-end-tag () + (rng-mark-not-well-formed "Mismatched end-tag" + (+ xmltok-start 2) + xmltok-name-end)) + +(defun rng-push-tag (prefix-local-name) + (setq rng-open-elements + (cons prefix-local-name rng-open-elements))) + +(defun rng-pop-tag () + (setq rng-open-elements (cdr rng-open-elements))) + +(defun rng-contents-string () + (let ((contents rng-pending-contents)) + (cond ((not contents) "") + ((memq nil contents) nil) + ((not (cdr contents)) + (rng-segment-string (car contents))) + (t (apply 'concat + (nreverse (mapcar 'rng-segment-string + contents))))))) + +(defun rng-segment-string (segment) + (or (car segment) + (apply 'buffer-substring-no-properties + (cdr segment)))) + +(defun rng-segment-blank-p (segment) + (if (car segment) + (rng-blank-p (car segment)) + (apply 'rng-region-blank-p + (cdr segment)))) + +(defun rng-contents-region () + (if (null rng-pending-contents) + nil + (let* ((contents rng-pending-contents) + (head (cdar contents)) + (start (car head)) + (end (cadr head))) + (while (setq contents (cdr contents)) + (setq start (car (cdar contents)))) + (cons start end)))) + +(defun rng-process-text (start end whitespace &optional value) + "Process characters between position START and END as text. +END nil means point. WHITESPACE t means known to be whitespace, nil +means known not to be, anything else means unknown whether whitespace +or not. END must not be nil if WHITESPACE is neither t nor nil. +VALUE is a string or nil; nil means the value is equal to the +string between START and END." + (cond (rng-collecting-text + (setq rng-pending-contents (cons (list value start (or end (point))) + rng-pending-contents))) + ((not (or (and whitespace + (or (eq whitespace t) + (if value + (rng-blank-p value) + (rng-region-blank-p start end)))) + (rng-match-mixed-text))) + (rng-mark-invalid "Text not allowed" start (or end (point)))))) + +(defun rng-process-unknown-char () + (when rng-collecting-text + (setq rng-pending-contents + (cons nil rng-pending-contents)))) + +(defun rng-process-unknown-entity () + (rng-process-unknown-char) + (rng-match-optionalize-elements)) + +(defun rng-region-blank-p (beg end) + (save-excursion + (goto-char beg) + (= (skip-chars-forward " \n\r\t" end) + (- end beg)))) + +(defun rng-flush-text () + (while rng-pending-contents + (let ((segment (car rng-pending-contents))) + (unless (or (rng-segment-blank-p segment) + (rng-match-mixed-text)) + (let ((region (cdr segment))) + (rng-mark-invalid "In this context text cannot be mixed with elements" + (car region) + (cadr region))))) + (setq rng-pending-contents (cdr rng-pending-contents)))) + +(defun rng-process-end-document () + ;; this is necessary to clear empty overlays at (point-max) + (rng-clear-overlays (point) (point)) + (let ((start (save-excursion + (skip-chars-backward " \t\r\n") + (point)))) + (cond (rng-open-elements + (unless (eq (car rng-open-elements) t) + (rng-mark-not-well-formed "Missing end-tag" + start + (point)))) + ((not (rng-match-nullable-p)) + (rng-mark-not-well-formed "No document element" + start + (point)))))) + +(defun rng-process-encoding-name (beg end) + (unless (let ((charset (buffer-substring-no-properties beg end))) + (or (nxml-mime-charset-coding-system charset) + (string= (downcase charset) "utf-16"))) + (rng-mark-not-well-formed "Unsupported encoding" beg end))) + +(defun rng-name-to-string (name &optional attributep) + (let ((ns (car name)) + (local-name (cdr name))) + (if (or (not ns) + (and (not attributep) + (eq (nxml-ns-get-default) ns))) + local-name + (let ((prefix (nxml-ns-prefix-for ns))) + (if prefix + (concat prefix ":" local-name) + (concat "{" (symbol-name ns) "}" local-name)))))) + +(provide 'rng-valid) + +;; arch-tag: 7dd846d3-519d-4a6d-8107-4ff0024a60ef +;;; rng-valid.el ends here diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el new file mode 100644 index 00000000000..782627c4205 --- /dev/null +++ b/lisp/nxml/rng-xsd.el @@ -0,0 +1,861 @@ +;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; The main entry point is `rng-xsd-compile'. The validator +;; knows to use this for the datatype library with URI +;; http://www.w3.org/2001/XMLSchema-datatypes because it +;; is the value of the rng-dt-compile property on that URI +;; as a symbol. +;; +;; W3C XML Schema Datatypes are specified by +;; http://www.w3.org/TR/xmlschema-2/ +;; Guidelines for using them with RELAX NG are described in +;; http://relaxng.org/xsd.html + +;;; Code: + +(require 'rng-dt) +(require 'rng-util) +(require 'xsd-regexp) + +;;;###autoload +(put 'http://www.w3.org/2001/XMLSchema-datatypes + 'rng-dt-compile + 'rng-xsd-compile) + +;;;###autoload +(defun rng-xsd-compile (name params) + "Provides W3C XML Schema as a RELAX NG datatypes library. NAME is a +symbol giving the local name of the datatype. PARAMS is a list of +pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving +the name of the parameter and PARAM-VALUE is a string giving its +value. If NAME or PARAMS are invalid, it calls rng-dt-error passing +it arguments in the same style as format; the value from rng-dt-error +will be returned. Otherwise, it returns a list. The first member of +the list is t if any string is a legal value for the datatype and nil +otherwise. The second argument is a symbol; this symbol will be +called as a function passing it a string followed by the remaining +members of the list. The function must return an object representing +the value of the datatype that was represented by the string, or nil +if the string is not a representation of any value. The object +returned can be any convenient non-nil value, provided that, if two +strings represent the same value, the returned objects must be equal." + (let ((convert (get name 'rng-xsd-convert))) + (if (not convert) + (rng-dt-error "There is no XSD datatype named %s" name) + (rng-xsd-compile1 name params convert)))) + +;;; Parameters + +(defun rng-xsd-compile1 (name params convert) + (if (null params) + (cons (equal convert '(identity)) + (cond ((eq name 'string) convert) + ((eq name 'normalizedString) + (cons 'rng-xsd-replace-space convert)) + ((and (not (eq name 'string)) + (or (memq 'identity convert) + (memq 'rng-xsd-convert-any-uri convert) + (memq 'rng-xsd-check-pattern convert))) + (cons 'rng-xsd-collapse-space convert)) + (t convert))) + (let* ((param (car params)) + (param-name (car param)) + (param-value (cdr param))) + (cond ((memq param-name + '(minExclusive maxExclusive minInclusive maxInclusive)) + (let ((limit (apply (car convert) + (cons param-value + (cdr convert)))) + (less-than-fun (get name 'rng-xsd-less-than))) + (cond ((not limit) + (rng-dt-error "Minimum value %s is not valid" + param-value)) + ((not less-than-fun) + (rng-dt-error "Values of type %s are not ordered" + param-name)) + (t + (rng-xsd-compile1 name + (cdr params) + (cons (get param-name + 'rng-xsd-check) + (cons less-than-fun + (cons limit convert)))))))) + ((memq param-name '(length minLength maxLength)) + (let ((limit (rng-xsd-string-to-non-negative-integer param-value)) + (length-fun (get name 'rng-xsd-length))) + (cond ((not limit) + (rng-dt-error "Length %s is not valid" param-value)) + ((not length-fun) + (rng-dt-error "Values of type %s do not have a length" + param-name)) + (t + (rng-xsd-compile1 name + (cdr params) + (cons (get param-name + 'rng-xsd-check) + (cons length-fun + (cons limit convert)))))))) + ((memq param-name '(fractionDigits totalDigits)) + (let ((n (rng-xsd-string-to-non-negative-integer param-value))) + (cond ((not n) + (rng-dt-error "Number of digits %s is not valid" + param-value)) + (t + (rng-xsd-compile1 name + (cdr params) + (cons (get param-name + 'rng-xsd-check) + (cons n convert))))))) + ((eq param-name 'pattern) + (condition-case err + (rng-xsd-compile1 name + (cdr params) + (cons 'rng-xsd-check-pattern + (cons (concat + "\\`" + (xsdre-translate param-value) + "\\'") + convert))) + (xsdre-invalid-regexp + (rng-dt-error "Invalid regular expression (%s)" + (nth 1 err))))) + ((memq param-name '(enumeration whiteSpace)) + (rng-dt-error "Facet %s cannot be used in RELAX NG" param-name)) + (t (rng-dt-error "Unknown facet %s" param-name)))))) + +(defun rng-xsd-string-to-non-negative-integer (str) + (and (rng-xsd-convert-integer str) + (let ((n (string-to-number str))) + (and (integerp n) + (>= n 0) + n)))) + +(defun rng-xsd-collapse-space (str convert &rest args) + (apply convert (cons (mapconcat 'identity (split-string str "[ \t\n\r]+") + " ") + args))) + +(defun rng-xsd-replace-space (str convert &rest args) + (apply convert + (cons (let ((i 0) + copied) + (while (and (setq i (string-match "[\r\n\t]" str i)) + (or copied (setq copied (copy-sequence str))) + (aset copied i 32) + (setq i (1+ i)))) + (or copied str)) + args))) + +(put 'minExclusive 'rng-xsd-check 'rng-xsd-check-min-exclusive) +(put 'minInclusive 'rng-xsd-check 'rng-xsd-check-min-inclusive) +(put 'maxExclusive 'rng-xsd-check 'rng-xsd-check-max-exclusive) +(put 'maxInclusive 'rng-xsd-check 'rng-xsd-check-max-inclusive) +(put 'length 'rng-xsd-check 'rng-xsd-check-length) +(put 'minLength 'rng-xsd-check 'rng-xsd-check-min-length) +(put 'maxLength 'rng-xsd-check 'rng-xsd-check-max-length) +(put 'fractionDigits 'rng-xsd-check 'rng-xsd-check-fraction-digits) +(put 'totalDigits 'rng-xsd-check 'rng-xsd-check-total-digits) + +(defun rng-xsd-check-min-exclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (funcall less-than-fun limit obj) + obj))) + +(defun rng-xsd-check-min-inclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (or (funcall less-than-fun limit obj) + (equal limit obj)) + obj))) + +(defun rng-xsd-check-max-exclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (funcall less-than-fun obj limit) + obj))) + +(defun rng-xsd-check-max-inclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (or (funcall less-than-fun obj limit) + (equal obj limit)) + obj))) + +(defun rng-xsd-check-min-length (str length-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (>= (funcall length-fun obj) limit) + obj))) + +(defun rng-xsd-check-max-length (str length-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (<= (funcall length-fun obj) limit) + obj))) + +(defun rng-xsd-check-length (str length-fun len convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (= (funcall length-fun obj) len) + obj))) + +(defun rng-xsd-check-fraction-digits (str n convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (<= (length (aref obj 2)) n) + obj))) + +(defun rng-xsd-check-total-digits (str n convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (<= (+ (length (aref obj 1)) + (length (aref obj 2))) + n) + obj))) + +(defun rng-xsd-check-pattern (str regexp convert &rest args) + (and (string-match regexp str) + (apply convert (cons str args)))) + + +(defun rng-xsd-convert-boolean (string) + (and (string-match "\\`[ \t\n\r]*\\(?:\\(true\\|1\\)\\|false\\|0\\)[ \t\n\r]*\\'" string) + (if (match-beginning 1) 'true 'false))) + +(defun rng-xsd-convert-decimal (string) + "Convert a string representing a decimal to an object representing +its values. A decimal value is represented by a vector [SIGN +INTEGER-DIGITS FRACTION-DIGITS] where SIGN is 1 or -1, INTEGER-DIGITS +is a string containing zero or more digits, with no leading zero, and +FRACTION-DIGITS is a string containing zero or more digits with no +trailing digits. For example, -0021.0430 would be represented by [-1 +\"21\" \"043\"]." + (and (string-match "\\`[ \t\n\r]*\\([-+]\\)?\\(0*\\([1-9][0-9]*\\)?\\(\\.\\([0-9]*[1-9]\\)?0*\\)?\\)[ \t\n\r]*\\'" string) + (let ((digits (match-string 2 string))) + (and (not (string= digits ".")) + (not (string= digits "")))) + (let ((integer-digits (match-string 3 string))) + (vector (if (and (equal (match-string 1 string) "-") + ;; Normalize -0 to 0 + integer-digits) + -1 + 1) + (or integer-digits "") + (or (match-string 5 string) ""))))) + +(defun rng-xsd-convert-integer (string) + (and (string-match "\\`[ \t\n\r]*\\([-+]\\)?\\(?:0*\\([1-9][0-9]*\\)\\|0+\\)[ \t\n\r]*\\'" string) + (let ((integer-digits (match-string 2 string))) + (vector (if (and (equal (match-string 1 string) "-") + ;; Normalize -0 to 0 + integer-digits) + -1 + 1) + (or integer-digits "") + "")))) + +(defun rng-xsd-decimal< (n1 n2) + (< (rng-xsd-compare-decimal n1 n2) 0)) + +(defun rng-xsd-compare-decimal (n1 n2) + "Return a < 0, 0, > 0 according as n1 < n2, n1 = n2 or n1 > n2." + (let* ((sign1 (aref n1 0)) + (sign2 (aref n2 0)) + (sign (- sign1 sign2))) + (if (= sign 0) + (* sign1 + (let* ((int1 (aref n1 1)) + (int2 (aref n2 1)) + (len1 (length int1)) + (len2 (length int2)) + (lencmp (- len1 len2))) + (if (eq lencmp 0) + (if (string= int1 int2) + (rng-xsd-strcmp (aref n1 2) (aref n2 2)) + (rng-xsd-strcmp int1 int2)) + lencmp))) + sign))) + +(defconst rng-xsd-float-regexp + (concat "\\`[ \r\n\t]*\\(?:" + "\\(" + "[-+]?\\(?:[0-9]+\\(?:\\.[0-9]*\\)?\\|\\.[0-9]+\\)" + "\\(?:[eE][-+]?[0-9]+\\)?" + "\\)" + "\\|\\(INF\\)" + "\\|\\(-INF\\)" + "\\|\\(NaN\\)" + "\\)[ \r\n\t]*\\'")) + +(defun rng-xsd-convert-float (string) + (cond ((not (string-match rng-xsd-float-regexp string)) nil) + ((match-beginning 1) + (float (string-to-number (match-string 1 string)))) + ((match-beginning 2) 1.0e+INF) + ((match-beginning 3) -1.0e+INF) + ;; Don't use a NaN float because we want NaN to be equal to NaN + ((match-beginning 4) 'NaN))) + +(defun rng-xsd-float< (f1 f2) + (and (not (eq f1 'NaN)) + (not (eq f2 'NaN)) + (< f1 f2))) + +(defun rng-xsd-convert-token (string regexp) + (and (string-match regexp string) + (match-string 1 string))) + +(defun rng-xsd-convert-hex-binary (string) + (and (string-match "\\`[ \r\n\t]*\\(\\(?:[0-9A-Fa-f][0-9A-Fa-f]\\)*\\)[ \r\n\t]*\\'" + string) + (downcase (match-string 1 string)))) + +(defun rng-xsd-hex-binary-length (obj) + (/ (length obj) 2)) + +(defconst rng-xsd-base64-binary-regexp + (let ((S "[ \t\r\n]*") + (B04 "[AQgw]") + (B16 "[AEIMQUYcgkosw048]") + (B64 "[A-Za-z0-9+/]")) + (concat "\\`" S "\\(?:\\(?:" B64 S "\\)\\{4\\}\\)*" + "\\(?:" B64 S B64 S B16 S "=" S + "\\|" B64 S B04 S "=" S "=" S "\\)?\\'"))) + +(defun rng-xsd-convert-base64-binary (string) + (and (string-match rng-xsd-base64-binary-regexp string) + (replace-regexp-in-string "[ \t\r\n]+" "" string t t))) + +(defun rng-xsd-base64-binary-length (obj) + (let ((n (* (/ (length obj) 4) 3))) + (if (and (> n 0) + (string= (substring obj -1) "=")) + (- n (if (string= (substring obj -2) "==") + 2 + 1)) + n))) + +(defun rng-xsd-convert-any-uri (string) + (and (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)?*\\'" string) + (string-match "\\`[^#]*\\(?:#[^#]*\\)?\\'" string) + (string-match "\\`\\(?:[a-zA-Z][-+.A-Za-z0-9]*:.+\\|[^:]*\\(?:[#/?].*\\)?\\)\\'" string) + string)) + +(defun rng-xsd-make-date-time-regexp (template) + "Returns a regular expression matching a ISO 8601 date/time. The +template is a string with Y standing for years field, M standing for +months, D standing for day of month, T standing for a literal T, t +standing for time and - standing for a literal hyphen. A time zone is +always allowed at the end. Regardless of the fields appearing in the +template, the regular expression will have twelve groups matching the +year sign, year, month, day of month, hours, minutes, integer seconds, +fractional seconds (including leading period), time zone, time zone +sign, time zone hours, time zone minutes." + (let ((i 0) + (len (length template)) + (parts nil) + first last c) + (while (< i len) + (setq c (aref template i)) + (setq parts + (cons (cond ((eq c ?Y) + (setq first 0) + (setq last 1) + "\\(-\\)?\\(\\(?:[1-9][0-9]*\\)?[0-9]\\{4\\}\\)") + ((eq c ?M) + (or first + (setq first 2)) + (setq last 2) + "\\([0-9][0-9]\\)") + ((eq c ?D) + (or first + (setq first 3)) + (setq last 3) + "\\([0-9][0-9]\\)") + ((eq c ?t) + (or first + (setq first 4)) + (setq last 7) + "\\([0-9][0-9]\\):\\([0-9][0-9]\\):\\([0-9][0-9]\\)\\(\\.[0-9]*\\)?") + (t (string c))) + parts)) + (setq i (1+ i))) + (while (< last 7) + (setq last (1+ last)) + ;; Add dummy fields that can never much but keep the group + ;; numbers uniform. + (setq parts (cons "\\(\\'X\\)?" parts))) + (setq parts (cons "\\(Z\\|\\([-+]\\)\\([0-9][0-9]\\):\\([0-5][0-9]\\)\\)?[ \t\n\r]*\\'" + parts)) + (setq parts (cons "\\`[ \t\n\r]*" (nreverse parts))) + (while (> first 0) + (setq first (1- first)) + (setq parts (cons "\\(X\\)?" parts))) + (apply 'concat parts))) + +(defconst rng-xsd-seconds-per-day (* 24 60 60)) +(defconst rng-xsd-days-in-month [31 28 31 30 31 30 31 31 30 31 30 31]) + +(defun rng-xsd-days-in-month (year month) + (if (and (= month 2) (rng-xsd-leap-year-p year)) + 29 + (aref rng-xsd-days-in-month (1- month)))) + +(defconst rng-xsd-months-to-days + (let ((v (make-vector 12 nil)) + (total 0) + (i 0)) + (while (< i 12) + (setq total (+ total (aref rng-xsd-days-in-month i))) + (aset v i total) + (setq i (1+ i))) + v)) + +(defun rng-xsd-convert-date-time (string regexp) + "Converts an XML Schema date/time to a list. Returns nil if +invalid. REGEXP is a regexp for parsing the date time as returned by +`rng-xsd-make-date-time-regexp'. The list has 4 members (HAS-TIME-ZONE +DAY SECOND SECOND-FRACTION), where HAS-TIME-ZONE is t or nil depending +on whether a time zone was specified, DAY is an integer giving a day +number (with Jan 1 1AD being day 1), SECOND is the second within that +day, and SECOND-FRACTION is a float giving the fractional part of the +second." + (and (string-match regexp string) + (let ((year-sign (match-string 1 string)) + (year (match-string 2 string)) + (month (match-string 3 string)) + (day (match-string 4 string)) + (hour (match-string 5 string)) + (minute (match-string 6 string)) + (second (match-string 7 string)) + (second-fraction (match-string 8 string)) + (has-time-zone (match-string 9 string)) + (time-zone-sign (match-string 10 string)) + (time-zone-hour (match-string 11 string)) + (time-zone-minute (match-string 12 string))) + (setq year-sign (if year-sign -1 1)) + (setq year + (if year + (* year-sign + (string-to-number year)) + 2000)) + (setq month + (if month (string-to-number month) 1)) + (setq day + (if day (string-to-number day) 1)) + (setq hour + (if hour (string-to-number hour) 0)) + (setq minute + (if minute (string-to-number minute) 0)) + (setq second + (if second (string-to-number second) 0)) + (setq second-fraction + (if second-fraction + (float (string-to-number second-fraction)) + 0.0)) + (setq has-time-zone (and has-time-zone t)) + (setq time-zone-sign + (if (equal time-zone-sign "-") -1 1)) + (setq time-zone-hour + (if time-zone-hour (string-to-number time-zone-hour) 0)) + (setq time-zone-minute + (if time-zone-minute (string-to-number time-zone-minute) 0)) + (and (>= month 1) + (<= month 12) + (>= day 1) + (<= day (rng-xsd-days-in-month year month)) + (<= hour 23) + (<= minute 59) + (<= second 60) ; leap second + (<= time-zone-hour 23) + (<= time-zone-minute 59) + (cons has-time-zone + (rng-xsd-add-seconds + (list (rng-xsd-date-to-days year month day) + (rng-xsd-time-to-seconds hour minute second) + second-fraction) + (* (rng-xsd-time-to-seconds time-zone-hour + time-zone-minute + 0) + (- time-zone-sign)))))))) + +(defun rng-xsd-leap-year-p (year) + (and (= (% year 4) 0) + (or (/= (% year 100) 0) + (= (% year 400) 0)))) + +(defun rng-xsd-time-to-seconds (hour minute second) + (+ (* (+ (* hour 60) + minute) + 60) + second)) + +(defconst rng-xsd-max-tz (rng-xsd-time-to-seconds 14 0 0)) + +(defun rng-xsd-date-time< (dt1 dt2) + (cond ((eq (car dt1) (car dt2)) + (rng-xsd-number-list< (cdr dt1) (cdr dt2))) + ((car dt1) + (rng-xsd-number-list< (cdr dt1) + (rng-xsd-add-seconds (cdr dt2) + (- rng-xsd-max-tz)))) + (t + (rng-xsd-number-list< (rng-xsd-add-seconds (cdr dt1) + rng-xsd-max-tz) + (cdr dt2))))) + +(defun rng-xsd-add-seconds (date offset) + (let ((day (nth 0 date)) + (second (+ (nth 1 date) offset)) + (fraction (nth 2 date))) + (cond ((< second 0) + (list (1- day) + (+ second rng-xsd-seconds-per-day) + fraction)) + ((>= second rng-xsd-seconds-per-day) + (list (1+ day) + (- second rng-xsd-seconds-per-day) + fraction)) + (t (list day second fraction))))) + +(defun rng-xsd-number-list< (numbers1 numbers2) + (while (and numbers1 (= (car numbers1) (car numbers2))) + (setq numbers1 (cdr numbers1)) + (setq numbers2 (cdr numbers2))) + (and numbers1 + (< (car numbers1) (car numbers2)))) + +(defun rng-xsd-date-to-days (year month day) + "Return a unique day number where Jan 1 1 AD is day 1" + (if (> year 0) ; AD + (+ (rng-xsd-days-in-years (- year 1)) + (rng-xsd-day-number-in-year year month day)) + (- (+ (- (rng-xsd-days-in-years (- 3 year)) + (rng-xsd-days-in-years 3)) + (- (if (rng-xsd-leap-year-p year) 366 365) + (rng-xsd-day-number-in-year year month day)))))) + +(defun rng-xsd-days-in-years (years) + "The number of days in YEARS years where the first year is 1AD." + (+ (* 365 years) + (/ years 4) + (- (/ years 100)) + (/ years 400))) + +(defun rng-xsd-day-number-in-year (year month day) + (+ (if (= month 1) + 0 + (aref rng-xsd-months-to-days (- month 2))) + day + (if (and (> month 2) + (rng-xsd-leap-year-p year)) + 1 + 0))) + +(defconst rng-xsd-duration-regexp + "\\`[ \t\r\n]*\\(-\\)?P\ +\\([0-9]+Y\\)?\\([0-9]+M\\)?\\([0-9]+D\\)?\ +\\(?:T\\([0-9]+H\\)?\\([0-9]+M\\)?\ +\\(\\([0-9]+\\(?:\\.[0-9]*\\)?\\|\\.[0-9]+\\)S\\)?\\)?\ +[ \t\r\n]*\\'") + + +(defun rng-xsd-convert-duration (string) + (and (string-match rng-xsd-duration-regexp string) + (let ((last (substring string -1))) + (not (or (string= last "P") + (string= last "T")))) + ;; years months days hours minutes seconds + (let ((v (make-vector 6 0)) + (sign (if (match-beginning 1) -1 1)) + (i 0)) + (while (< i 6) + (let ((start (match-beginning (+ i 2)))) + (when start + (aset v i (* sign + (string-to-number + (substring string + start + (1- (match-end (+ i 2))))))))) + (setq i (1+ i))) + ;; Force seconds to be float so that equal works properly. + (aset v 5 (float (aref v 5))) + v))) + +(defconst rng-xsd-min-seconds-per-month (* 28 rng-xsd-seconds-per-day)) + +(defun rng-xsd-duration< (d1 d2) + (let* ((months1 (rng-xsd-duration-months d1)) + (months2 (rng-xsd-duration-months d2)) + (seconds1 (rng-xsd-duration-seconds d1)) + (seconds2 (rng-xsd-duration-seconds d2))) + (cond ((< months1 months2) + (if (< (- seconds1 seconds2) rng-xsd-min-seconds-per-month) + t + (rng-xsd-months-seconds< months1 seconds1 months2 seconds2))) + ((> months1 months2) + (if (< (- seconds2 seconds1) rng-xsd-min-seconds-per-month) + nil + (rng-xsd-months-seconds< months1 seconds1 months2 seconds2))) + (t (< seconds1 seconds2))))) + +(defconst xsd-duration-reference-dates + '((1696 . 9) (1697 . 2) (1903 . 3) (1903 . 7))) + +(defun rng-xsd-months-seconds< (months1 seconds1 months2 seconds2) + (let ((ret t) + (ref-dates xsd-duration-reference-dates)) + (while (let* ((ref-date (car ref-dates)) + (ref-year (car ref-date)) + (ref-month (cdr ref-date))) + (unless (< (+ (rng-xsd-month-seconds months1 + ref-year + ref-month) + seconds1) + (+ (rng-xsd-month-seconds months2 + ref-year + ref-month) + seconds2)) + (setq ret nil)) + (and ret + (setq ref-dates (cdr ref-dates))))) + ret)) + + +(defun rng-xsd-month-seconds (months ref-year ref-month) + "Return the seconds in a number of months starting on a reference date. +Returns a floating point number." + (* (rng-xsd-month-days (abs months) ref-year ref-month) + (float rng-xsd-seconds-per-day) + (if (< months 0) -1.0 1.0))) + +(defconst rng-xsd-years-per-gregorian-cycle 400) +(defconst rng-xsd-months-per-gregorian-cycle + (* rng-xsd-years-per-gregorian-cycle 12)) +(defconst rng-xsd-leap-years-per-gregorian-cycle (- 100 (- 4 1))) +(defconst rng-xsd-days-per-gregorian-cycle + (+ (* 365 rng-xsd-years-per-gregorian-cycle) + rng-xsd-leap-years-per-gregorian-cycle)) + +(defun rng-xsd-month-days (months ref-year ref-month) + "Return the days in a number of months starting on a reference date. +MONTHS must be an integer >= 0." + (let ((days 0)) + (setq months (mod months rng-xsd-months-per-gregorian-cycle)) + ;; This may be rather slow, but it is highly unlikely + ;; ever to be used in real life. + (while (> months 0) + (setq days + (+ (rng-xsd-days-in-month ref-year ref-month) + days)) + (setq ref-month + (if (eq ref-month 12) + (progn + (setq ref-year (1+ ref-year)) + 1) + (1+ ref-month))) + (setq months (1- months))) + (+ (* (/ months rng-xsd-months-per-gregorian-cycle) + rng-xsd-days-per-gregorian-cycle) + days))) + +(defun rng-xsd-duration-months (d) + (+ (* (aref d 0) 12) + (aref d 1))) + +(defun rng-xsd-duration-seconds (d) + (+ (* (+ (* (+ (* (aref d 2) + 24.0) + (aref d 3)) + 60.0) + (aref d 4)) + 60.0) + (aref d 5))) + +(defun rng-xsd-convert-qname (string) + (and (string-match "\\`[ \r\n\t]*\\([_[:alpha:]][-._[:alnum:]]*\\(:[_[:alpha:]][-._[:alnum:]]*\\)?\\)[ \r\n\t]*\\'" string) + (let ((colon (match-beginning 2)) + (context (apply (car rng-dt-namespace-context-getter) + (cdr rng-dt-namespace-context-getter)))) + (if colon + (let* ((prefix (substring string + (match-beginning 1) + colon)) + (binding (assoc prefix (cdr context)))) + (and binding + (cons (cdr binding) + (substring string + (1+ colon) + (match-end 1))))) + (cons (car context) + (match-string 1 string)))))) + +(defun rng-xsd-convert-list (string convert &rest args) + (let* ((tokens (split-string string "[ \t\n\r]+")) + (tem tokens)) + (while tem + (let ((obj (apply convert + (cons (car tem) args)))) + (cond (obj + (setcar tem obj) + (setq tem (cdr tem))) + (t + (setq tokens nil) + (setq tem nil))))) + ;; Fortuitously this returns nil if the list is empty + ;; which is what we want since the list types + ;; have to have one or more members. + tokens)) + +(defun rng-xsd-strcmp (s1 s2) + (cond ((string= s1 s2) 0) + ((string< s1 s2) -1) + (t 1))) + +(put 'string 'rng-xsd-convert '(identity)) +(put 'string 'rng-xsd-length 'length) +(put 'string 'rng-xsd-matches-anything t) + +(put 'normalizedString 'rng-xsd-convert '(identity)) +(put 'normalizedString 'rng-xsd-length 'length) +(put 'normalizedString 'rng-xsd-matches-anything t) + +(put 'token 'rng-xsd-convert '(identity)) +(put 'token 'rng-xsd-length 'length) +(put 'token 'rng-xsd-matches-anything t) + +(put 'hexBinary 'rng-xsd-convert '(rng-xsd-convert-hex-binary)) +(put 'hexBinary 'rng-xsd-length 'rng-xsd-hex-binary-length) + +(put 'base64Binary 'rng-xsd-convert '(rng-xsd-convert-base64-binary)) +(put 'base64Binary 'rng-xsd-length 'rng-xsd-base64-binary-length) + +(put 'boolean 'rng-xsd-convert '(rng-xsd-convert-boolean)) + +(put 'float 'rng-xsd-convert '(rng-xsd-convert-float)) +(put 'float 'rng-xsd-less-than 'rng-xsd-float<) + +(put 'double 'rng-xsd-convert '(rng-xsd-convert-float)) +(put 'double 'rng-xsd-less-than 'rng-xsd-float<) + +(put 'decimal 'rng-xsd-convert '(rng-xsd-convert-decimal)) +(put 'decimal 'rng-xsd-less-than 'rng-xsd-decimal<) + +(put 'integer 'rng-xsd-convert '(rng-xsd-convert-integer)) +(put 'integer 'rng-xsd-less-than 'rng-xsd-decimal<) + +(defun rng-xsd-def-integer-type (name min max) + (put name 'rng-xsd-less-than 'rng-xsd-decimal<) + (put name + 'rng-xsd-convert + (cdr (rng-xsd-compile 'integer + (append (and min `((minInclusive . ,min))) + (and max `((maxInclusive . ,max)))))))) + +(defun rng-xsd-def-token-type (name regexp) + (put name 'rng-xsd-convert (list 'rng-xsd-convert-token + (concat "\\`[\r\n\t ]*\\(" + regexp + "\\)[\r\n\t ]*\\'"))) + (put name 'rng-xsd-length 'length)) + +(rng-xsd-def-token-type 'NMTOKEN "[-.:_[:alnum:]]+") +(rng-xsd-def-token-type 'Name "[:_[:alpha:]][-.:_[:alnum:]]*") +(rng-xsd-def-token-type 'NCName "[_[:alpha:]][-._[:alnum:]]*") +(rng-xsd-def-token-type 'language + "[a-zA-Z]\\{1,8\\}\\(?:-[a-zA-Z0-9]\\{1,8\\}\\)*") + +(put 'ENTITY 'rng-xsd-convert (get 'NCName 'rng-xsd-convert)) +(put 'ENTITY 'rng-xsd-length 'length) +(put 'ID 'rng-xsd-convert (get 'NCName 'rng-xsd-convert)) +(put 'ID 'rng-xsd-length 'length) +(put 'IDREF 'rng-xsd-convert (get 'NCName 'rng-xsd-convert)) +(put 'IDREF 'rng-xsd-length 'length) + +(defun rng-xsd-def-list-type (name member-name) + (put name 'rng-xsd-convert (cons 'rng-xsd-convert-list + (get member-name 'rng-xsd-convert))) + (put name 'rng-xsd-length 'length)) + +(rng-xsd-def-list-type 'NMTOKENS 'NMTOKEN) +(rng-xsd-def-list-type 'IDREFS 'IDREF) +(rng-xsd-def-list-type 'ENTITIES 'ENTITY) + +(put 'anyURI 'rng-xsd-convert '(rng-xsd-convert-any-uri)) +(put 'anyURI 'rng-xsd-length 'length) + +(put 'QName 'rng-xsd-convert '(rng-xsd-convert-qname)) +(put 'NOTATION 'rng-xsd-convert '(rng-xsd-convert-qname)) + +(defconst rng-xsd-long-max "9223372036854775807") +(defconst rng-xsd-long-min "-9223372036854775808") +(defconst rng-xsd-int-max "2147483647") +(defconst rng-xsd-int-min "-2147483648") +(defconst rng-xsd-short-max "32767") +(defconst rng-xsd-short-min "-32768") +(defconst rng-xsd-byte-max "127") +(defconst rng-xsd-byte-min "-128") +(defconst rng-xsd-unsigned-long-max "18446744073709551615") +(defconst rng-xsd-unsigned-int-max "4294967295") +(defconst rng-xsd-unsigned-short-max "65535") +(defconst rng-xsd-unsigned-byte-max "255") + +(rng-xsd-def-integer-type 'nonNegativeInteger "0" nil) +(rng-xsd-def-integer-type 'positiveInteger "1" nil) +(rng-xsd-def-integer-type 'nonPositiveInteger nil "0") +(rng-xsd-def-integer-type 'negativeInteger nil "-1") +(rng-xsd-def-integer-type 'long rng-xsd-long-min rng-xsd-long-max) +(rng-xsd-def-integer-type 'int rng-xsd-int-min rng-xsd-int-max) +(rng-xsd-def-integer-type 'short rng-xsd-short-min rng-xsd-short-max) +(rng-xsd-def-integer-type 'byte rng-xsd-byte-min rng-xsd-byte-max) +(rng-xsd-def-integer-type 'unsignedLong "0" rng-xsd-unsigned-long-max) +(rng-xsd-def-integer-type 'unsignedInt "0" rng-xsd-unsigned-int-max) +(rng-xsd-def-integer-type 'unsignedShort "0" rng-xsd-unsigned-short-max) +(rng-xsd-def-integer-type 'unsignedByte "0" rng-xsd-unsigned-byte-max) + +(defun rng-xsd-def-date-time-type (name template) + (put name 'rng-xsd-convert (list 'rng-xsd-convert-date-time + (rng-xsd-make-date-time-regexp template))) + (put name 'rng-xsd-less-than 'rng-xsd-date-time<)) + +(rng-xsd-def-date-time-type 'dateTime "Y-M-DTt") +(rng-xsd-def-date-time-type 'time "t") +(rng-xsd-def-date-time-type 'date "Y-M-D") +(rng-xsd-def-date-time-type 'gYearMonth "Y-M") +(rng-xsd-def-date-time-type 'gYear "Y") +(rng-xsd-def-date-time-type 'gMonthDay "--M-D") +(rng-xsd-def-date-time-type 'gDay "---D") +(rng-xsd-def-date-time-type 'gMonth "--M") + +(put 'duration 'rng-xsd-convert '(rng-xsd-convert-duration)) +(put 'duration 'rng-xsd-less-than 'rng-xsd-duration<) + +(provide 'rng-xsd) + +;; arch-tag: 6b05510e-a5bb-4b99-8618-4660d00d0abb +;;; rng-xsd.el ends here diff --git a/lisp/nxml/test.invalid.xml b/lisp/nxml/test.invalid.xml new file mode 100644 index 00000000000..87a0031f8e7 --- /dev/null +++ b/lisp/nxml/test.invalid.xml @@ -0,0 +1,11 @@ + + + An invalid document + + +

    This XHTML document is invalid.

    + + + + diff --git a/lisp/nxml/test.valid.xml b/lisp/nxml/test.valid.xml new file mode 100644 index 00000000000..c11380a0e41 --- /dev/null +++ b/lisp/nxml/test.valid.xml @@ -0,0 +1,11 @@ + + + A valid document + + +

    This is a valid, albeit boring, XHTML document.

    + + + + diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el new file mode 100644 index 00000000000..add55bf9840 --- /dev/null +++ b/lisp/nxml/xmltok.el @@ -0,0 +1,1928 @@ +;;; xmltok.el --- XML tokenization + +;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3, or (at your option) +;; any later version. + +;; GNU Emacs 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 GNU Emacs; 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 implements an XML 1.0 parser. It also implements the XML +;; Namespaces Recommendation. It is designed to be conforming, but it +;; works a bit differently from a normal XML parser. An XML document +;; consists of the prolog and an instance. The prolog is parsed as a +;; single unit using `xmltok-forward-prolog'. The instance is +;; considered as a sequence of tokens, where a token is something like +;; a start-tag, a comment, a chunk of data or a CDATA section. The +;; tokenization of the instance is stateless: the tokenization of one +;; part of the instance does not depend on tokenization of the +;; preceding part of the instance. This allows the instance to be +;; parsed incrementally. The main entry point is `xmltok-forward': +;; this can be called at any point in the instance provided it is +;; between tokens. The other entry point is `xmltok-forward-special' +;; which skips over tokens other comments, processing instructions or +;; CDATA sections (i.e. the constructs in an instance that can contain +;; less than signs that don't start a token). +;; +;; This is a non-validating XML 1.0 processor. It does not resolve +;; parameter entities (including the external DTD subset) and it does +;; not resolve external general entities. +;; +;; It is non-conformant by design in the following respects. +;; +;; 1. It expects the client to detect aspects of well-formedness that +;; are not internal to a single token, specifically checking that +;; end-tags match start-tags and that the instance contains exactly +;; one element. +;; +;; 2. It expects the client to detect duplicate attributes. Detection +;; of duplicate attributes after expansion of namespace prefixes +;; requires the namespace processing state. Detection of duplicate +;; attributes before expansion of namespace prefixes does not, but is +;; redundant given that the client will do detection of duplicate +;; attributes after expansion of namespace prefixes. +;; +;; 3. It allows the client to recover from well-formedness errors. +;; This is essential for use in applications where the document is +;; being parsed during the editing process. +;; +;; 4. It does not support documents that do not conform to the lexical +;; requirements of the XML Namespaces Recommendation (e.g. a document +;; with a colon in an entity name). +;; +;; There are also a number of things that have not yet been +;; implemented that make it non-conformant. +;; +;; 1. It does not implement default attributes. ATTLIST declarations +;; are parsed, but no checking is done on the content of attribute +;; value literals specifying default attribute values, and default +;; attribute values are not reported to the client. +;; +;; 2. It does not implement internal entities containing elements. If +;; an internal entity is referenced and parsing its replacement text +;; yields one or more tags, then it will skip the reference and +;; report this to the client. +;; +;; 3. It does not check the syntax of public identifiers in the DTD. +;; +;; 4. It allows some non-ASCII characters in certain situations where +;; it should not. For example, it only enforces XML 1.0's +;; restrictions on name characters strictly for ASCII characters. The +;; problem here is XML's character model is based squarely on Unicode, +;; whereas Emacs's is not (as of version 21). It is not clear what +;; the right thing to do is. + +;;; Code: + +(defvar xmltok-type nil) +(defvar xmltok-start nil) +(defvar xmltok-name-colon nil) +(defvar xmltok-name-end nil) +(defvar xmltok-replacement nil + "String containing replacement for a character or entity reference.") + +(defvar xmltok-attributes nil + "List containing attributes of last scanned element. +Each member of the list is a vector representing an attribute, which +can be accessed using the functions `xmltok-attribute-name-start', +`xmltok-attribute-name-colon', `xmltok-attribute-name-end', +`xmltok-attribute-value-start', `xmltok-attribute-value-end', +`xmltok-attribute-raw-normalized-value', `xmltok-attribute-refs'.") + +(defvar xmltok-namespace-attributes nil + "List containing namespace declarations of last scanned element. +List has same format as `xmltok-attributes'.") + +(defvar xmltok-dtd nil + "Information about the DTD used by `xmltok-forward'. +`xmltok-forward-prolog' sets this up. + +It consists of an alist of general entity names vs definitions. The +first member of the alist is t if references to entities not in the +alist are well-formed \(e.g. because there's an external subset that +wasn't parsed). + +Each general entity name is a string. The definition is either nil, a +symbol, a string, a cons cell. If the definition is nil, then it +means that it's an internal entity but the result of parsing it is +unknown. If it is a symbol, then the symbol is either `unparsed', +meaning the entity is an unparsed entity, `external', meaning the +entity is or references an external entity, `element', meaning the +entity includes one or more elements, or `not-well-formed', meaning +the replacement text is not well-formed. If the definition is a +string, then the replacement text of the entity is that string; this +happens only during the parsing of the prolog. If the definition is a +cons cell \(ER . AR), then ER specifies the string that results from +referencing the entity in element content and AR is either nil, +meaning the replacement text included a <, or a string which is the +normalized attribute value.") + +(defvar xmltok-dependent-regions nil + "List of descriptors of regions that a parsed token depends on. + +A token depends on a region if the region occurs after the token and a +change in the region may require the token to be reparsed. This only +happens with markup that is not well-formed. For example, if a , then the then the buffer must be reparsed from the space-count 0) + (setq xmltok-type 'space)) + (t + (goto-char (1+ (point))) + (xmltok-scan-after-lt)))) + ((eq ch ?\&) + (cond ((> space-count 0) + (setq xmltok-type 'space)) + (t + (goto-char (1+ (point))) + (xmltok-scan-after-amp + (lambda (start end) + (xmltok-handle-entity start end)))))) + ((re-search-forward "[<&]\\|\\(]]>\\)" nil t) + (cond ((not (match-beginning 1)) + (goto-char (match-beginning 0)) + ;; must have got a non-space char + (setq xmltok-type 'data)) + ((= (match-beginning 1) xmltok-start) + (xmltok-add-error "Found `]]>' not closing a CDATA section") + (setq xmltok-type 'not-well-formed)) + (t + (goto-char (match-beginning 0)) + (setq xmltok-type + (if (= (point) (+ xmltok-start space-count)) + 'space + 'data))))) + ((eq ch nil) + (setq xmltok-type + (if (> space-count 0) + 'space + nil))) + (t + (goto-char (point-max)) + (setq xmltok-type 'data))))) + +(defun xmltok-forward-special (bound) + "Scan forward past the first special token starting at or after point. +Return nil if there is no special token that starts before BOUND. +CDATA sections, processing instructions and comments (and indeed +anything starting with < following by ? or !) count +as special. Return the type of the token." + (when (re-search-forward "<[?!]" (1+ bound) t) + (setq xmltok-start (match-beginning 0)) + (goto-char (1+ xmltok-start)) + (let ((case-fold-search nil)) + (xmltok-scan-after-lt)))) + +(eval-when-compile + + ;; A symbolic regexp is represented by a list whose CAR is the string + ;; containing the regexp and whose cdr is a list of symbolic names + ;; for the groups in the string. + + ;; Construct a symbolic regexp from a regexp. + (defun xmltok-r (str) + (cons str nil)) + + ;; Concatenate zero of more regexps and symbolic regexps. + (defun xmltok+ (&rest args) + (let (strs names) + (while args + (let ((arg (car args))) + (if (stringp arg) + (setq strs (cons arg strs)) + (setq strs (cons (car arg) strs)) + (setq names (cons (cdr arg) names))) + (setq args (cdr args)))) + (cons (apply 'concat (nreverse strs)) + (apply 'append (nreverse names)))))) + +(eval-when-compile + ;; Make a symbolic group named NAME from the regexp R. + ;; R may be a symbolic regexp or an ordinary regexp. + (defmacro xmltok-g (name &rest r) + (let ((sym (make-symbol "r"))) + `(let ((,sym (xmltok+ ,@r))) + (if (stringp ,sym) + (cons (concat "\\(" ,sym "\\)") (cons ',name nil)) + (cons (concat "\\(" (car ,sym) "\\)") (cons ',name (cdr ,sym))))))) + + (defun xmltok-p (&rest r) (xmltok+ "\\(?:" + (apply 'xmltok+ r) + "\\)")) + + ;; Get the group index of ELEM in a LIST of symbols. + (defun xmltok-get-index (elem list) + (or elem + (error "Missing group name")) + (let ((found nil) + (i 1)) + (while list + (cond ((eq elem (car list)) + (setq found i) + (setq list nil)) + (t + (setq i (1+ i)) + (setq list (cdr list))))) + (or found + (error "Bad group name %s" elem)))) + + ;; Define a macro SYM using a symbolic regexp R. + ;; SYM can be called in three ways: + ;; (SYM regexp) + ;; expands to the regexp in R + ;; (SYM start G) + ;; expands to + ;; (match-beginning N) + ;; where N is the group index of G in R. + ;; (SYM end G) + ;; expands to + ;; (match-end N) + ;; where N is the group index of G in R. + (defmacro xmltok-defregexp (sym r) + `(defalias ',sym + (let ((r ,r)) + `(macro lambda (action &optional group-name) + (cond ((eq action 'regexp) + ,(car r)) + ((or (eq action 'start) (eq action 'beginning)) + (list 'match-beginning (xmltok-get-index group-name + ',(cdr r)))) + ((eq action 'end) + (list 'match-end (xmltok-get-index group-name + ',(cdr r)))) + ((eq action 'string) + (list 'match-string + (xmltok-get-index group-name ',(cdr r)))) + ((eq action 'string-no-properties) + (list 'match-string-no-properties + (xmltok-get-index group-name ',(cdr r)))) + (t (error "Invalid action: %s" action)))))))) + + +(eval-when-compile + (let* ((or "\\|") + (open "\\(?:") + (gopen "\\(") + (close "\\)") + (name-start-char "[_[:alpha:]]") + (name-continue-not-start-char "[-.[:digit:]]") + (name-continue-char "[-._[:alnum:]]") + (* "*") + (+ "+") + (opt "?") + (question "\\?") + (s "[ \r\t\n]") + (s+ (concat s +)) + (s* (concat s *)) + (ncname (concat name-start-char name-continue-char *)) + (entity-ref + (xmltok+ (xmltok-g entity-name ncname) + (xmltok-g entity-ref-close ";") opt)) + (decimal-ref + (xmltok+ (xmltok-g decimal "[0-9]" +) + (xmltok-g decimal-ref-close ";") opt)) + (hex-ref + (xmltok+ "x" open + (xmltok-g hex "[0-9a-fA-F]" +) + (xmltok-g hex-ref-close ";") opt + close opt)) + (char-ref + (xmltok+ (xmltok-g number-sign "#") + open decimal-ref or hex-ref close opt)) + (start-tag-close + (xmltok+ open (xmltok-g start-tag-close s* ">") + or open (xmltok-g empty-tag-slash s* "/") + (xmltok-g empty-tag-close ">") opt close + or (xmltok-g start-tag-s s+) + close)) + (start-tag + (xmltok+ (xmltok-g start-tag-name + ncname (xmltok-g start-tag-colon ":" ncname) opt) + start-tag-close opt)) + (end-tag + (xmltok+ (xmltok-g end-tag-slash "/") + open (xmltok-g end-tag-name + ncname + (xmltok-g end-tag-colon ":" ncname) opt) + (xmltok-g end-tag-close s* ">") opt + close opt)) + (comment + (xmltok+ (xmltok-g markup-declaration "!") + (xmltok-g comment-first-dash "-" + (xmltok-g comment-open "-") opt) opt)) + (cdata-section + (xmltok+ "!" + (xmltok-g marked-section-open "\\[") + open "C" + open "D" + open "A" + open "T" + open "A" + (xmltok-g cdata-section-open "\\[" ) opt + close opt ; A + close opt ; T + close opt ; A + close opt ; D + close opt)) ; C + (processing-instruction + (xmltok-g processing-instruction-question question))) + + (xmltok-defregexp xmltok-ncname (xmltok+ open ncname close)) + + (xmltok-defregexp xmltok-after-amp + (xmltok+ entity-ref or char-ref)) + (xmltok-defregexp xmltok-after-lt + (xmltok+ start-tag + or end-tag + ;; cdata-section must come before comment + ;; because we treat "))) + (xmltok-defregexp + xmltok-prolog + (let* ((single-char (xmltok-g single-char "[[|,(\"'>]")) + (internal-subset-close (xmltok-g internal-subset-close + "][ \t\r\n]*>")) + (starts-with-close-paren + (xmltok-g close-paren + ")" + (xmltok-p + (xmltok-g close-paren-occur "[+?]") + or + (xmltok-g close-paren-star "\\*")) + opt)) + (starts-with-percent + (xmltok-g percent + "%" (xmltok-g param-entity-ref + ncname + (xmltok-g param-entity-ref-close + ";") opt) opt)) + (starts-with-nmtoken-not-name + (xmltok-g nmtoken + (xmltok-p name-continue-not-start-char or ":") + (xmltok-p name-continue-char or ":") *)) + (nmtoken-after-colon + (xmltok+ + (xmltok-p name-continue-not-start-char or ":") + (xmltok-p name-continue-char or ":") * + or + name-start-char + name-continue-char * + ":" + (xmltok-p name-continue-char or ":") *)) + (after-ncname + (xmltok+ (xmltok-g ncname-nmtoken + ":" (xmltok-p nmtoken-after-colon)) + or (xmltok-p (xmltok-g colon ":" ncname) + (xmltok-g colon-name-occur "[?+*]") opt) + or (xmltok-g ncname-occur "[?+*]") + or (xmltok-g ncname-colon ":"))) + (starts-with-name + (xmltok-g name ncname (xmltok-p after-ncname) opt)) + (starts-with-hash + (xmltok-g pound + "#" (xmltok-g hash-name ncname))) + (markup-declaration + (xmltok-g markup-declaration + "!" (xmltok-p (xmltok-g comment-first-dash "-" + (xmltok-g comment-open "-") opt) + or (xmltok-g named-markup-declaration + ncname)) opt)) + (after-lt + (xmltok+ markup-declaration + or (xmltok-g processing-instruction-question + question) + or (xmltok-g instance-start + ncname))) + (starts-with-lt (xmltok-g less-than "<" (xmltok-p after-lt) opt))) + (xmltok+ starts-with-lt + or single-char + or starts-with-close-paren + or starts-with-percent + or starts-with-name + or starts-with-nmtoken-not-name + or starts-with-hash + or internal-subset-close))))) + +(defconst xmltok-ncname-regexp (xmltok-ncname regexp)) + +(defun xmltok-scan-after-lt () + (cond ((not (looking-at (xmltok-after-lt regexp))) + (xmltok-add-error "`<' that is not markup must be entered as `<'") + (setq xmltok-type 'not-well-formed)) + (t + (goto-char (match-end 0)) + (cond ((xmltok-after-lt start start-tag-close) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-attributes nil) + (setq xmltok-namespace-attributes nil) + (setq xmltok-type 'start-tag)) + ((xmltok-after-lt start end-tag-close) + (setq xmltok-name-end + (xmltok-after-lt end end-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start end-tag-colon)) + (setq xmltok-type 'end-tag)) + ((xmltok-after-lt start start-tag-s) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-namespace-attributes nil) + (setq xmltok-attributes nil) + (xmltok-scan-attributes) + xmltok-type) + ((xmltok-after-lt start empty-tag-close) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-attributes nil) + (setq xmltok-namespace-attributes nil) + (setq xmltok-type 'empty-element)) + ((xmltok-after-lt start cdata-section-open) + (setq xmltok-type + (if (search-forward "]]>" nil t) + 'cdata-section + (xmltok-add-error "No closing ]]>") + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + "]]>") + 'not-well-formed))) + ((xmltok-after-lt start processing-instruction-question) + (xmltok-scan-after-processing-instruction-open)) + ((xmltok-after-lt start comment-open) + (xmltok-scan-after-comment-open)) + ((xmltok-after-lt start empty-tag-slash) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-attributes nil) + (setq xmltok-namespace-attributes nil) + (xmltok-add-error "Expected `/>'" (1- (point))) + (setq xmltok-type 'partial-empty-element)) + ((xmltok-after-lt start start-tag-name) + (xmltok-add-error "Missing `>'" + nil + (1+ xmltok-start)) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-namespace-attributes nil) + (setq xmltok-attributes nil) + (setq xmltok-type 'partial-start-tag)) + ((xmltok-after-lt start end-tag-name) + (setq xmltok-name-end (xmltok-after-lt end end-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start end-tag-colon)) + (cond ((and (not xmltok-name-colon) + (eq (char-after) ?:)) + (goto-char (1+ (point))) + (xmltok-add-error "Expected name following `:'" + (1- (point)))) + (t + (xmltok-add-error "Missing `>'" + nil + (1+ xmltok-start)))) + (setq xmltok-type 'partial-end-tag)) + ((xmltok-after-lt start end-tag-slash) + (xmltok-add-error "Expected name following `) in unclosed PI +(defun xmltok-scan-after-processing-instruction-open () + (cond ((not (search-forward "?>" nil t)) + (xmltok-add-error "No closing ?>" + xmltok-start + (+ xmltok-start 2)) + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + "?>") + (setq xmltok-type 'not-well-formed)) + (t + (cond ((not (save-excursion + (goto-char (+ 2 xmltok-start)) + (and (looking-at (xmltok-ncname regexp)) + (setq xmltok-name-end (match-end 0))))) + (setq xmltok-name-end (+ xmltok-start 2)) + (xmltok-add-error "") + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + ;; not --> because + ;; -- is not allowed + ;; in comments in XML + "--") + 'not-well-formed) + ((eq (char-after) ?>) + (goto-char (1+ (point))) + 'comment) + (t + (xmltok-add-dependent + 'xmltok-semi-closed-reparse-p + nil + (point) + "--" + 2) + ;; just include the