changeset 4566:26aae3bacf99

Merge.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 09 Aug 2008 13:11:06 +0200
parents 31344162cf9a (diff) 46ddeaa7c738 (current diff)
children 84d618b355f5
files lisp/ChangeLog lisp/unicode.el
diffstat 34 files changed, 708 insertions(+), 438 deletions(-) [+]
line wrap: on
line diff
--- a/etc/ChangeLog	Fri Jul 18 01:00:32 2008 +0200
+++ b/etc/ChangeLog	Sat Aug 09 13:11:06 2008 +0200
@@ -1,3 +1,7 @@
+2008-08-05  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* HELLO: Encode the Arabic using UTF-8 sequences, not ISO-8859-6. 
+
 2008-02-21  Stephen J. Turnbull  <stephen@xemacs.org>
 
 	* README: Add descriptions of Daniel Polansky's icons.
--- a/etc/HELLO	Fri Jul 18 01:00:32 2008 +0200
+++ b/etc/HELLO	Sat Aug 09 13:11:06 2008 +0200
@@ -3,7 +3,7 @@
 
 ---------------------------------------------------------
 Amharic	($(3"c!<!N"^(B)	$(3!A!,!>(B
-Arabic			[2](38R(47d(3T!JSa(4W(3W[0](B
+Arabic (%Gةّيبرعلا%@)	%Gمكيلع%@ %Gمالّسلا%@
 Croatian (Hrvatski)	Bog (Bok), Dobar dan
 Czech (,Bh(Besky)		Dobr,B}(B den
 Danish (Dansk)		Hej, Goddag
--- a/lisp/ChangeLog	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/ChangeLog	Sat Aug 09 13:11:06 2008 +0200
@@ -1,3 +1,96 @@
+2008-08-09  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* subr.el (skip-chars-quote): New.
+	Given STRING, return a string that means that all characters in
+	STRING will be skipped when passed to #'skip-chars-forward,
+	#'skip-chars-backward. 
+
+2008-08-09  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* subr.el (skip-chars-quote): New.
+
+	* mule/cyril-util.el: Remove. Use the version in packages instead.
+
+2008-08-08  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* unicode.el: 
+	* mule/mule-cmds.el: 
+	* mule/latin.el: 
+	* mule/cyrillic.el: 
+	Rework the various identifiers using error-sequence to use
+	invalid-sequence instead.
+
+2008-08-05  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* specifier.el (current-display-table): Initialise this here, not
+	in x-init.el, since we want it even on non-X builds to use the
+	support for displaying Unicode error sequences according to the
+	current locale.
+	* mule/mule-cmds.el (set-language-info): 
+	Document error-sequence-coding-system, used to describe how to
+	display characters that are not valid Unicode on disk. 
+	* mule/mule-cmds.el (finish-set-language-environment): 
+	Implement error-sequence-coding-system. 
+	* unicode.el (unicode-error-sequence-warning-face): 
+	New face, to make it possible to distinguish invalid Unicode
+	sequences from the characters given by the valid Unicode
+	sequences. 
+	* mule/cyrillic.el ("Russian"): 
+	("Ukrainian"): 
+	("Bulgarian"): 
+	("Belarusian"): 
+	("Cyrillic-ALT"): Add support for error-sequence-coding-system for
+	all these languages.
+	* mule/latin.el: 
+	Add support for error-sequence-coding-system for the
+	Latin-alphabet language environments.
+
+2008-08-05  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* mule/iso-with-esc.el (greek-iso-8bit-with-esc): 
+	(arabic-iso-8bit-with-esc): 
+	Add these two here. Move the implementation of the
+	'arabic-iso8859-6  character set here, with commentary on why that
+	is reasonable. 
+	* mule/arabic.el (iso-8859-6): 
+	Add iso-8859-6, windows-1256 implementations using
+	make-8-bit-coding-system. Remove our non-standard Mule character
+	sets. 
+	* unicode.el (load-unicode-tables): Remove Arabic since it's no
+	longer dumped.
+	* mule/mule-msw-init-late.el: Remove Arabic.
+	* mule/mule-category.el (predefined-category-list): Remove
+	Arabic. 
+
+2008-07-26  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* x-init.el (x-initialize-compose): 
+	Rewrite to use #'loop, as does similar code in x-win-sun.el,
+	x-win-xfree86.el. Locally bind function-key-map to the correct
+	value for the device's console.
+	* x-win-xfree86.el (x-win-init-xfree86): 
+	Locally bind function-key-map to the correct value for the
+	device's console.
+	* x-win-sun.el (x-win-init-sun): 
+	Locally bind function-key-map to the correct value for the
+	device's console.
+
+2008-07-20  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* descr-text.el (describe-char-unicode-data): 
+	Correct three calls to #'error; it doesn't take #'message style
+	format strings and arguments.
+
+2008-07-19  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* descr-text.el (describe-property-list): Move the (require
+	'hyper-apropos) call to top level, this isn't the only function
+	that uses the relevant face. 
+	(describe-char): Wrap the Unihan field descriptions if they are
+	longer than the windows width minus 50.
+	Rename the created buffer to reflect the character's position as
+	well as its value. 
+
 2008-07-07  Aidan Kehoe  <kehoea@parhasard.net>
 
 	Patch to make it up to the device-specific code whether
--- a/lisp/descr-text.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/descr-text.el	Sat Aug 09 13:11:06 2008 +0200
@@ -32,6 +32,8 @@
 
 (eval-when-compile (require 'wid-edit))
 
+(require 'hyper-apropos)
+
 ;;; Describe-Text Utilities.
 
 (defun describe-text-widget (widget)
@@ -82,7 +84,6 @@
 into help buttons that call `describe-text-category' or
 `describe-face' when pushed."
   ;; Sort the properties by the size of their value.
-  (require 'hyper-apropos)
   (dolist (elt (sort (let (ret)
 		       (while properties
 			 (push (list (pop properties) (pop properties)) ret))
@@ -676,7 +677,8 @@
   (when describe-char-unicodedata-file
     (unless (file-exists-p describe-char-unicodedata-file)
       (error 'file-error
-             "`unicodedata-file' %s not found" describe-char-unicodedata-file))
+             (format "`unicodedata-file' %s not found"
+                     describe-char-unicodedata-file)))
     ;; XEmacs change; accept a character argument, use the cache if
     ;; appropriate.
     (when (characterp char)
@@ -696,13 +698,14 @@
                 (coding-system-for-read 'no-conversion-unix)
                 key lookup)
             (unless database-handle
-              (error 'io-error "Could not open %s as a %s database"
-                     (unidata-generate-database-file-name
-                      describe-char-unicodedata-file
-                      (eighth (file-attributes
-                               describe-char-unicodedata-file))
-                      unidata-database-format)
-                     unidata-database-format))
+              (error 'io-error 
+                     (format "Could not open %s as a %s database"
+                             (unidata-generate-database-file-name
+                              describe-char-unicodedata-file
+                              (eighth (file-attributes
+                                       describe-char-unicodedata-file))
+                              unidata-database-format)
+                             unidata-database-format)))
             (setq key (format "%04X" char)
                   lookup (get-database key database-handle))
             (if lookup
@@ -760,7 +763,8 @@
 	      (unless (or (= 13 (length fields))
 			  (= 14 (length fields)))
 		(error 'invalid-argument
-                       "Invalid contents in %s" describe-char-unicodedata-file))
+                       (format "Invalid contents in %s"
+                               describe-char-unicodedata-file)))
 	      ;; The field names and values lists are slightly
 	      ;; modified from Mule-UCS unidata.el.
 	      (apply #'list
@@ -1029,7 +1033,8 @@
 		  (describe-text-properties pos tmp-buf)
 		  (with-current-buffer tmp-buf (buffer-string)))
 	      (kill-buffer tmp-buf))))
-	 item-list max-width unicode unicode-formatted unicode-error)
+	 item-list max-width unicode unicode-formatted unicode-error
+	 unicodedata (max-unicode-description-width (- (window-width) 50)))
 
 
     (setq unicode-error
@@ -1185,13 +1190,29 @@
 				     `(insert-gui-button
                                        (make-gui-button
                                         ,(symbol-name face)))))))
-	    ,@(let ((unicodedata (and unicode
-				      (describe-char-unicode-data unicode))))
+	    ,@(progn 
+		(setq unicodedata (and unicode
+				       (describe-char-unicode-data unicode)))
 		(if unicodedata
 		    (cons (list "Unicode data" " ") unicodedata)))))
     (setq max-width (apply #'max (mapcar #'(lambda (x)
 					     (if (cadr x) (length (car x)) 0))
 					 item-list)))
+    (when (and unicodedata (> max-width max-unicode-description-width))
+      (setq max-width max-unicode-description-width)
+      (with-temp-buffer
+	(let ((fill-column max-unicode-description-width)
+	      (indent-tabs-mode nil))
+	  (dolist (unidata-line unicodedata)
+	    (when (cadr unidata-line)
+	      (setf (car unidata-line)
+		    (progn (insert (car unidata-line))
+			   (goto-char (point-min))
+			   (fill-paragraph 'right)
+			   (delete-region (1- (point-max))
+					  (point-max))
+			   (buffer-string)))
+	      (delete-region (point-min) (point-max)))))))
     ; (help-setup-xref nil (interactive-p))
     (with-displaying-help-buffer
      (lambda ()
@@ -1274,7 +1295,7 @@
 ;        (setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
          (toggle-read-only 1)
          (print-help-return-message)))
-     (format "Describe %c" (char-after pos)))))
+       (format "Describe %c <%d>" (char-after pos) pos))))
 
 (defalias 'describe-char-after 'describe-char)
 (make-obsolete 'describe-char-after 'describe-char "22.1")
--- a/lisp/mule/arabic.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/arabic.el	Sat Aug 09 13:11:06 2008 +0200
@@ -28,79 +28,204 @@
 
 ;;; Code:
 
-; (make-charset 'arabic-iso8859-6 
-; 	      "Right-Hand Part of Latin/Arabic Alphabet (ISO/IEC 8859-6): ISO-IR-127"
-; 	      '(dimension
-; 		1
-; 		registry "ISO8859-6"
-; 		chars 96
-; 		columns 1
-; 		direction r2l
-; 		final ?G
-; 		graphic 1
-; 		short-name "RHP of ISO8859/6"
-; 		long-name "RHP of Arabic (ISO 8859-6): ISO-IR-127"
-; 		))
+;; See iso-with-esc.el for commentary on the ISO standard Arabic character
+;; set.
 
-;; For Arabic, we need three different types of character sets.
-;; Digits are of direction left-to-right and of width 1-column.
-;; Others are of direction right-to-left and of width 1-column or
-;; 2-column.
-(make-charset 'arabic-digit "Arabic digit"
-	      '(dimension 1
-		registries ["MuleArabic-0"]
-		chars 94
-		columns 1
-		direction l2r
-		final ?2
-		graphic 0
-		short-name "Arabic digit"
-		long-name "Arabic digit"
-		))
+(make-8-bit-coding-system
+ 'iso-8859-6
+ '((#xA0 ?\u00A0) ;; NO-BREAK SPACE
+   (#xA4 ?\u00A4) ;; CURRENCY SIGN
+   (#xAC ?\u060C) ;; ARABIC COMMA
+   (#xAD ?\u00AD) ;; SOFT HYPHEN
+   (#xBB ?\u061B) ;; ARABIC SEMICOLON
+   (#xBF ?\u061F) ;; ARABIC QUESTION MARK
+   (#xC1 ?\u0621) ;; ARABIC LETTER HAMZA
+   (#xC2 ?\u0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
+   (#xC3 ?\u0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
+   (#xC4 ?\u0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
+   (#xC5 ?\u0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
+   (#xC6 ?\u0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
+   (#xC7 ?\u0627) ;; ARABIC LETTER ALEF
+   (#xC8 ?\u0628) ;; ARABIC LETTER BEH
+   (#xC9 ?\u0629) ;; ARABIC LETTER TEH MARBUTA
+   (#xCA ?\u062A) ;; ARABIC LETTER TEH
+   (#xCB ?\u062B) ;; ARABIC LETTER THEH
+   (#xCC ?\u062C) ;; ARABIC LETTER JEEM
+   (#xCD ?\u062D) ;; ARABIC LETTER HAH
+   (#xCE ?\u062E) ;; ARABIC LETTER KHAH
+   (#xCF ?\u062F) ;; ARABIC LETTER DAL
+   (#xD0 ?\u0630) ;; ARABIC LETTER THAL
+   (#xD1 ?\u0631) ;; ARABIC LETTER REH
+   (#xD2 ?\u0632) ;; ARABIC LETTER ZAIN
+   (#xD3 ?\u0633) ;; ARABIC LETTER SEEN
+   (#xD4 ?\u0634) ;; ARABIC LETTER SHEEN
+   (#xD5 ?\u0635) ;; ARABIC LETTER SAD
+   (#xD6 ?\u0636) ;; ARABIC LETTER DAD
+   (#xD7 ?\u0637) ;; ARABIC LETTER TAH
+   (#xD8 ?\u0638) ;; ARABIC LETTER ZAH
+   (#xD9 ?\u0639) ;; ARABIC LETTER AIN
+   (#xDA ?\u063A) ;; ARABIC LETTER GHAIN
+   (#xE0 ?\u0640) ;; ARABIC TATWEEL
+   (#xE1 ?\u0641) ;; ARABIC LETTER FEH
+   (#xE2 ?\u0642) ;; ARABIC LETTER QAF
+   (#xE3 ?\u0643) ;; ARABIC LETTER KAF
+   (#xE4 ?\u0644) ;; ARABIC LETTER LAM
+   (#xE5 ?\u0645) ;; ARABIC LETTER MEEM
+   (#xE6 ?\u0646) ;; ARABIC LETTER NOON
+   (#xE7 ?\u0647) ;; ARABIC LETTER HEH
+   (#xE8 ?\u0648) ;; ARABIC LETTER WAW
+   (#xE9 ?\u0649) ;; ARABIC LETTER ALEF MAKSURA
+   (#xEA ?\u064A) ;; ARABIC LETTER YEH
+   (#xEB ?\u064B) ;; ARABIC FATHATAN
+   (#xEC ?\u064C) ;; ARABIC DAMMATAN
+   (#xED ?\u064D) ;; ARABIC KASRATAN
+   (#xEE ?\u064E) ;; ARABIC FATHA
+   (#xEF ?\u064F) ;; ARABIC DAMMA
+   (#xF0 ?\u0650) ;; ARABIC KASRA
+   (#xF1 ?\u0651) ;; ARABIC SHADDA
+   (#xF2 ?\u0652)) ;; ARABIC SUKUN
+ "ISO 8859-6 (Arabic)"
+'(mnemonic "ArISO"))
 
-(make-charset 'arabic-1-column "Arabic 1-column"
-	      '(dimension
-		1
-		registries ["MuleArabic-1"]
-		chars 94
-		columns 1
-		direction r2l
-		final ?3
-		graphic 0
-		short-name "Arabic 1-col"
-		long-name "Arabic 1-column"
-		))
+(make-8-bit-coding-system
+ 'windows-1256
+ '((#x80 ?\u20AC) ;; EURO SIGN
+   (#x81 ?\u067E) ;; ARABIC LETTER PEH
+   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+   (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
+   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+   (#x86 ?\u2020) ;; DAGGER
+   (#x87 ?\u2021) ;; DOUBLE DAGGER
+   (#x88 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
+   (#x89 ?\u2030) ;; PER MILLE SIGN
+   (#x8A ?\u0679) ;; ARABIC LETTER TTEH
+   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+   (#x8C ?\u0152) ;; LATIN CAPITAL LIGATURE OE
+   (#x8D ?\u0686) ;; ARABIC LETTER TCHEH
+   (#x8E ?\u0698) ;; ARABIC LETTER JEH
+   (#x8F ?\u0688) ;; ARABIC LETTER DDAL
+   (#x90 ?\u06AF) ;; ARABIC LETTER GAF
+   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+   (#x95 ?\u2022) ;; BULLET
+   (#x96 ?\u2013) ;; EN DASH
+   (#x97 ?\u2014) ;; EM DASH
+   (#x98 ?\u06A9) ;; ARABIC LETTER KEHEH
+   (#x99 ?\u2122) ;; TRADE MARK SIGN
+   (#x9A ?\u0691) ;; ARABIC LETTER RREH
+   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+   (#x9C ?\u0153) ;; LATIN SMALL LIGATURE OE
+   (#x9D ?\u200C) ;; ZERO WIDTH NON-JOINER
+   (#x9E ?\u200D) ;; ZERO WIDTH JOINER
+   (#x9F ?\u06BA) ;; ARABIC LETTER NOON GHUNNA
+   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+   (#xA1 ?\u060C) ;; ARABIC COMMA
+   (#xA2 ?\u00A2) ;; CENT SIGN
+   (#xA3 ?\u00A3) ;; POUND SIGN
+   (#xA4 ?\u00A4) ;; CURRENCY SIGN
+   (#xA5 ?\u00A5) ;; YEN SIGN
+   (#xA6 ?\u00A6) ;; BROKEN BAR
+   (#xA7 ?\u00A7) ;; SECTION SIGN
+   (#xA8 ?\u00A8) ;; DIAERESIS
+   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+   (#xAA ?\u06BE) ;; ARABIC LETTER HEH DOACHASHMEE
+   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+   (#xAC ?\u00AC) ;; NOT SIGN
+   (#xAD ?\u00AD) ;; SOFT HYPHEN
+   (#xAE ?\u00AE) ;; REGISTERED SIGN
+   (#xAF ?\u00AF) ;; MACRON
+   (#xB0 ?\u00B0) ;; DEGREE SIGN
+   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+   (#xB4 ?\u00B4) ;; ACUTE ACCENT
+   (#xB5 ?\u00B5) ;; MICRO SIGN
+   (#xB6 ?\u00B6) ;; PILCROW SIGN
+   (#xB7 ?\u00B7) ;; MIDDLE DOT
+   (#xB8 ?\u00B8) ;; CEDILLA
+   (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
+   (#xBA ?\u061B) ;; ARABIC SEMICOLON
+   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+   (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
+   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+   (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
+   (#xBF ?\u061F) ;; ARABIC QUESTION MARK
+   (#xC0 ?\u06C1) ;; ARABIC LETTER HEH GOAL
+   (#xC1 ?\u0621) ;; ARABIC LETTER HAMZA
+   (#xC2 ?\u0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
+   (#xC3 ?\u0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
+   (#xC4 ?\u0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
+   (#xC5 ?\u0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
+   (#xC6 ?\u0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
+   (#xC7 ?\u0627) ;; ARABIC LETTER ALEF
+   (#xC8 ?\u0628) ;; ARABIC LETTER BEH
+   (#xC9 ?\u0629) ;; ARABIC LETTER TEH MARBUTA
+   (#xCA ?\u062A) ;; ARABIC LETTER TEH
+   (#xCB ?\u062B) ;; ARABIC LETTER THEH
+   (#xCC ?\u062C) ;; ARABIC LETTER JEEM
+   (#xCD ?\u062D) ;; ARABIC LETTER HAH
+   (#xCE ?\u062E) ;; ARABIC LETTER KHAH
+   (#xCF ?\u062F) ;; ARABIC LETTER DAL
+   (#xD0 ?\u0630) ;; ARABIC LETTER THAL
+   (#xD1 ?\u0631) ;; ARABIC LETTER REH
+   (#xD2 ?\u0632) ;; ARABIC LETTER ZAIN
+   (#xD3 ?\u0633) ;; ARABIC LETTER SEEN
+   (#xD4 ?\u0634) ;; ARABIC LETTER SHEEN
+   (#xD5 ?\u0635) ;; ARABIC LETTER SAD
+   (#xD6 ?\u0636) ;; ARABIC LETTER DAD
+   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+   (#xD8 ?\u0637) ;; ARABIC LETTER TAH
+   (#xD9 ?\u0638) ;; ARABIC LETTER ZAH
+   (#xDA ?\u0639) ;; ARABIC LETTER AIN
+   (#xDB ?\u063A) ;; ARABIC LETTER GHAIN
+   (#xDC ?\u0640) ;; ARABIC TATWEEL
+   (#xDD ?\u0641) ;; ARABIC LETTER FEH
+   (#xDE ?\u0642) ;; ARABIC LETTER QAF
+   (#xDF ?\u0643) ;; ARABIC LETTER KAF
+   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+   (#xE1 ?\u0644) ;; ARABIC LETTER LAM
+   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+   (#xE3 ?\u0645) ;; ARABIC LETTER MEEM
+   (#xE4 ?\u0646) ;; ARABIC LETTER NOON
+   (#xE5 ?\u0647) ;; ARABIC LETTER HEH
+   (#xE6 ?\u0648) ;; ARABIC LETTER WAW
+   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+   (#xEC ?\u0649) ;; ARABIC LETTER ALEF MAKSURA
+   (#xED ?\u064A) ;; ARABIC LETTER YEH
+   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+   (#xF0 ?\u064B) ;; ARABIC FATHATAN
+   (#xF1 ?\u064C) ;; ARABIC DAMMATAN
+   (#xF2 ?\u064D) ;; ARABIC KASRATAN
+   (#xF3 ?\u064E) ;; ARABIC FATHA
+   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+   (#xF5 ?\u064F) ;; ARABIC DAMMA
+   (#xF6 ?\u0650) ;; ARABIC KASRA
+   (#xF7 ?\u00F7) ;; DIVISION SIGN
+   (#xF8 ?\u0651) ;; ARABIC SHADDA
+   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+   (#xFA ?\u0652) ;; ARABIC SUKUN
+   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+   (#xFD ?\u200E) ;; LEFT-TO-RIGHT MARK
+   (#xFE ?\u200F) ;; RIGHT-TO-LEFT MARK
+   (#xFF ?\u06D2));; ARABIC LETTER YEH BARREE
+ "Windows-1256 (Arabic)"
+ '(mnemonic "cp1256"
+   documentation
+   "This is the much Windows encoding for Arabic, much superior to the ISO
+standard one."
+   aliases (cp1256)))
 
-(make-charset 'arabic-2-column "Arabic 2-column"
-	      '(dimension
-		1
-		registries ["MuleArabic-2"]
-		chars 94
-		columns 2
-		direction r2l
-		final ?4
-		graphic 0
-		short-name "Arabic 2-col"
-		long-name "Arabic 2-column"
-		))
+;; The Mac Arabic coding systems don't have defined MIME names. 
 
-(make-coding-system 'iso-8859-6 'iso2022
-		    "ISO-8859-6 (Arabic)"
-		    '(charset-g0 ascii
-				 charset-g1 arabic-iso8859-6
-				 charset-g2 t
-				 charset-g3 t
-				 no-iso6429 t
-				 mnemonic "MIME/Arbc"
-				 ))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; ARABIC
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; (define-language-environment 'arabic
-;;   "Arabic"
-;;   (lambda ()
-;;     (require 'arabic)))
+;; #### Decide what to do about the syntax of the Arabic punctuation. 
 
 ;;; arabic.el ends here
--- a/lisp/mule/cyril-util.el	Fri Jul 18 01:00:32 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-;;; cyril-util.el ---  utilities for Cyrillic scripts -*- coding: iso-2022-7bit; -*-
-
-;; Copyright (C) 1997  Free Software Foundation, Inc.
-;; Copyright (C) 2002 Ben Wing.
-
-;; Keywords: mule, multilingual, Cyrillic
-
-;; This file is part of XEmacs.
-
-;; XEmacs is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; XEmacs is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; see the file COPYING.  If not, write to the Free
-;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-;; 02111-1307, USA.
-
-;;; Synched up with: Emacs 21.1 (language/cyril-util.el).
-
-;;; Commentary:
-
-;;; #### Remove this, use the one in packages instead, but with the below
-;;; standard-display-cyrillic-translit. This file is unfortunately shadowed
-;;; if you have the Mule packages installed!
-
-;;; Code:
-
-
-;; Display 
-
-;; Written by Valery Alexeev <valery@math.uga.edu>.
-
-(defvar cyrillic-language-alist
-      '(("Belorussian") ("Bulgarian") ("Macedonian") ("Russian") ("Serbian")
-        ("Ukrainian"))
-      "*List of known Cyrillic languages")
-
-;;;###autoload
-(defun standard-display-cyrillic-translit (&optional cyrillic-language
-					   disable)
-  "Display a cyrillic buffer using a transliteration.
-For readability, the table is slightly
-different from the one used for the input method `cyrillic-translit'.
-
-The argument is a string which specifies which language you are using;
-that affects the choice of transliterations slightly.
-Possible values are listed in 'cyrillic-language-alist'.
-
-Specifying a prefix arg, by preceding
-\\[standard-display-cyrillic-translit] with \\[universal-argument]
-turns off Cyrillic display.  Noninteractively, the DISABLE argument
-does the same thing.  "
-  (interactive
-   (list
-    (let* ((completion-ignore-case t)
-	   (default-language (if (assoc-ignore-case
-				  current-language-environment
-				  cyrillic-language-alist)
-				 current-language-environment
-			       "Russian")))
-      (or current-prefix-arg
-	  (completing-read
-	   (format "Cyrillic language (default %s): " default-language)
-	   cyrillic-language-alist nil t nil nil default-language)))))
-  (frob-display-table
-   (lambda (display-table)
-     (if (or disable current-prefix-arg)
-         (if (char-table-p display-table)
-             (remove-char-table 'cyrillic-iso8859-5 display-table))
-       (put-display-table ?,LP(B "a"   display-table)
-       (put-display-table ?,LQ(B "b"   display-table)
-       (put-display-table ?,LR(B "v"   display-table)
-       (put-display-table ?,LS(B "g"   display-table)
-       (put-display-table ?,LT(B "d"   display-table)
-       (put-display-table ?,LU(B "e"   display-table)
-       (put-display-table ?,Lq(B "yo"  display-table)
-       (put-display-table ?,LV(B "zh"  display-table)
-       (put-display-table ?,LW(B "z"   display-table)
-       (put-display-table ?,LX(B "i"   display-table)
-       (put-display-table ?,LY(B "j"   display-table)
-       (put-display-table ?,LZ(B "k"   display-table)
-       (put-display-table ?,L[(B "l"   display-table)
-       (put-display-table ?,L\(B "m"   display-table)
-       (put-display-table ?,L](B "n"   display-table)
-       (put-display-table ?,L^(B "o"   display-table)
-       (put-display-table ?,L_(B "p"   display-table)
-       (put-display-table ?,L`(B "r"   display-table)
-       (put-display-table ?,La(B "s"   display-table)
-       (put-display-table ?,Lb(B "t"   display-table)
-       (put-display-table ?,Lc(B "u"   display-table)
-       (put-display-table ?,Ld(B "f"   display-table)
-       (put-display-table ?,Le(B "kh"  display-table)
-       (put-display-table ?,Lf(B "ts"  display-table)
-       (put-display-table ?,Lg(B "ch"  display-table)
-       (put-display-table ?,Lh(B "sh"  display-table)
-       (put-display-table ?,Li(B "sch" display-table)
-       (put-display-table ?,Lj(B "~"   display-table)
-       (put-display-table ?,Lk(B "y"   display-table)
-       (put-display-table ?,Ll(B "'"   display-table)
-       (put-display-table ?,Lm(B "e'"  display-table)
-       (put-display-table ?,Ln(B "yu"  display-table)
-       (put-display-table ?,Lo(B "ya"  display-table)
-       (put-display-table ?,L0(B "A"   display-table)
-       (put-display-table ?,L1(B "B"   display-table)
-       (put-display-table ?,L2(B "V"   display-table)
-       (put-display-table ?,L3(B "G"   display-table)
-       (put-display-table ?,L4(B "D"   display-table)
-       (put-display-table ?,L5(B "E"   display-table)
-       (put-display-table ?,L!(B "Yo"  display-table)
-       (put-display-table ?,L6(B "Zh"  display-table)
-       (put-display-table ?,L7(B "Z"   display-table)
-       (put-display-table ?,L8(B "I"   display-table)
-       (put-display-table ?,L9(B "J"   display-table)
-       (put-display-table ?,L:(B "K"   display-table)
-       (put-display-table ?,L;(B "L"   display-table)
-       (put-display-table ?,L<(B "M"   display-table)
-       (put-display-table ?,L=(B "N"   display-table)
-       (put-display-table ?,L>(B "O"   display-table)
-       (put-display-table ?,L?(B "P"   display-table)
-       (put-display-table ?,L@(B "R"   display-table)
-       (put-display-table ?,LA(B "S"   display-table)
-       (put-display-table ?,LB(B "T"   display-table)
-       (put-display-table ?,LC(B "U"   display-table)
-       (put-display-table ?,LD(B "F"   display-table)
-       (put-display-table ?,LE(B "Kh"  display-table)
-       (put-display-table ?,LF(B "Ts"  display-table)
-       (put-display-table ?,LG(B "Ch"  display-table)
-       (put-display-table ?,LH(B "Sh"  display-table)
-       (put-display-table ?,LI(B "Sch" display-table)
-       (put-display-table ?,LJ(B "~"   display-table)
-       (put-display-table ?,LK(B "Y"   display-table)
-       (put-display-table ?,LL(B "'"   display-table)
-       (put-display-table ?,LM(B "E'"  display-table)
-       (put-display-table ?,LN(B "Yu"  display-table)
-       (put-display-table ?,LO(B "Ya"  display-table)
-       (put-display-table ?,Lt(B "ie"  display-table)
-       (put-display-table ?,Lw(B "i"   display-table)
-       (put-display-table ?,L~(B "u"   display-table)
-       (put-display-table ?,Lr(B "dj"  display-table)
-       (put-display-table ?,L{(B "chj" display-table)
-       (put-display-table ?,Ls(B "gj"  display-table)
-       (put-display-table ?,Lu(B "s"   display-table)
-       (put-display-table ?,L|(B "k"   display-table)
-       (put-display-table ?,Lv(B "i"   display-table)
-       (put-display-table ?,Lx(B "j"   display-table)
-       (put-display-table ?,Ly(B "lj"  display-table)
-       (put-display-table ?,Lz(B "nj"  display-table)
-       (put-display-table ?,L(B "dz"  display-table)
-       (put-display-table ?,L$(B "Ye"  display-table)
-       (put-display-table ?,L'(B "Yi"  display-table)
-       (put-display-table ?,L.(B "U"   display-table)
-       (put-display-table ?,L"(B "Dj"  display-table)
-       (put-display-table ?,L+(B "Chj" display-table)
-       (put-display-table ?,L#(B "Gj"  display-table)
-       (put-display-table ?,L%(B "S"   display-table)
-       (put-display-table ?,L,(B "K"   display-table)
-       (put-display-table ?,L&(B "I"   display-table)
-       (put-display-table ?,L((B "J"   display-table)
-       (put-display-table ?,L)(B "Lj"  display-table)
-       (put-display-table ?,L*(B "Nj"  display-table)
-       (put-display-table ?,L/(B "Dj"  display-table)
-    
-       (when (equal cyrillic-language "Bulgarian")
-         (put-display-table ?,Li(B "sht"  display-table)
-         (put-display-table ?,LI(B "Sht"  display-table)
-         (put-display-table ?,Ln(B "iu"   display-table)
-         (put-display-table ?,LN(B "Iu"   display-table)
-         (put-display-table ?,Lo(B "ia"   display-table)
-         (put-display-table ?,LO(B "Ia"   display-table))
-
-       (when (equal cyrillic-language "Ukrainian") ; based on the official 
-                                        ; transliteration table
-         (put-display-table ?,LX(B "y"    display-table)
-         (put-display-table ?,L8(B "Y"    display-table)
-         (put-display-table ?,LY(B "i"    display-table)
-         (put-display-table ?,L9(B "Y"    display-table)
-         (put-display-table ?,Ln(B "iu"   display-table)
-         (put-display-table ?,Lo(B "ia"   display-table)))) nil))
-;;
-(provide 'cyril-util)
-
-;; Local Variables:
-;; coding: iso-2022-7bit
-;; End:
-
-;;; cyril-util.el ends here
--- a/lisp/mule/cyrillic.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/cyrillic.el	Sat Aug 09 13:11:06 2008 +0200
@@ -370,6 +370,7 @@
 	     (coding-system koi8-r)
 	     (native-coding-system koi8-r)
 	     (coding-priority koi8-r)
+	     (invalid-sequence-coding-system koi8-r)
 	     (input-method . "cyrillic-yawerty")
 	     (features cyril-util)
 	     (locale "ru")
@@ -543,6 +544,7 @@
  "Ukrainian" '((coding-system koi8-u)
                (coding-priority koi8-u)
                (locale "uk")
+               (invalid-sequence-coding-system koi8-u)
                (input-method . "cyrillic-ukrainian")
                (documentation
                 . "Support for Ukrainian."))
@@ -689,6 +691,7 @@
 (set-language-info-alist
  "Bulgarian" '((coding-system windows-1251)
                (coding-priority windows-1251)
+	       (invalid-sequence-coding-system windows-1251)
                (input-method . "bulgarian-bds")
                (locale "bg")
                (documentation
@@ -699,6 +702,7 @@
 (set-language-info-alist
  "Belarusian" '((coding-system windows-1251)
                 (coding-priority windows-1251)
+		(invalid-sequence-coding-system windows-1251)
                 (locale "be")
                 (input-method . "belarusian")
                 (documentation
@@ -845,6 +849,7 @@
  "Cyrillic-ALT" '((charset cyrillic-iso8859-5)
                   (coding-system alternativnyj)
                   (native-coding-system alternativnyj)
+		  (invalid-sequence-coding-system alternativnyj)
                   (coding-priority alternativnyj)
                   (input-method . "cyrillic-yawerty")
                   (features cyril-util)
--- a/lisp/mule/greek.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/greek.el	Sat Aug 09 13:11:06 2008 +0200
@@ -328,6 +328,7 @@
 	   (coding-system iso-8859-7)
 	   (coding-priority iso-8859-7)
 	   (native-coding-system iso-8859-7)
+	   (invalid-sequence-coding-system iso-8859-7)
 	   (locale "el")
 	   (input-method . "greek")
 	   (sample-text . "Greek (,FGkk]mija(B)	,FCei\(B ,Fsar(B")
--- a/lisp/mule/iso-with-esc.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/iso-with-esc.el	Sat Aug 09 13:11:06 2008 +0200
@@ -98,3 +98,108 @@
   charset-g3 t
    no-iso6429 t
    mnemonic "MIME/Hbrw"))
+
+;;;###autoload
+(make-coding-system
+ 'greek-iso-8bit-with-esc 'iso2022 "MIME ISO-8859-7"
+ '(charset-g0 ascii
+   charset-g1 greek-iso8859-7
+   charset-g2 t
+   charset-g3 t
+   mnemonic "Grk"))
+
+;; ISO 8859-6 is such a useless character set that it seems a waste of
+;; codespace to dump it. Let me count the ways: 
+;; 
+;; 1. It doesn't support Persian or Urdu, let alone Sinhalese, despite
+;;    plenty of unallocated code points.
+;;
+;; 2. It doesn't encode all the vowel diacritics (the Harakaat) despite that
+;;    they are necessary, even for the Arabs, for basic things like
+;;    dictionary entries, children's books, and occasional disambiguation.
+;;
+;; 3. The Arabs don't use it, they use Windows-1256, which also supports
+;;    Persian, at least, as well as the French characters necessary in
+;;    Lebanon and North Africa.
+
+(make-charset
+ 'arabic-iso8859-6 
+ "Right-Hand Part of Latin/Arabic Alphabet (ISO/IEC 8859-6): ISO-IR-127"
+ '(dimension 1
+   registry "ISO8859-6"
+   chars 96
+   columns 1
+   direction r2l
+   final ?G
+   graphic 1
+   short-name "RHP of ISO8859/6"
+   long-name "RHP of Arabic (ISO 8859-6): ISO-IR-127"))
+
+(loop
+  for (iso8859-6 unicode)
+  in '((#xA0 #x00A0) ;; NO-BREAK SPACE
+       (#xA4 #x00A4) ;; CURRENCY SIGN
+       (#xAC #x060C) ;; ARABIC COMMA
+       (#xAD #x00AD) ;; SOFT HYPHEN
+       (#xBB #x061B) ;; ARABIC SEMICOLON
+       (#xBF #x061F) ;; ARABIC QUESTION MARK
+       (#xC1 #x0621) ;; ARABIC LETTER HAMZA
+       (#xC2 #x0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
+       (#xC3 #x0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
+       (#xC4 #x0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
+       (#xC5 #x0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
+       (#xC6 #x0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
+       (#xC7 #x0627) ;; ARABIC LETTER ALEF
+       (#xC8 #x0628) ;; ARABIC LETTER BEH
+       (#xC9 #x0629) ;; ARABIC LETTER TEH MARBUTA
+       (#xCA #x062A) ;; ARABIC LETTER TEH
+       (#xCB #x062B) ;; ARABIC LETTER THEH
+       (#xCC #x062C) ;; ARABIC LETTER JEEM
+       (#xCD #x062D) ;; ARABIC LETTER HAH
+       (#xCE #x062E) ;; ARABIC LETTER KHAH
+       (#xCF #x062F) ;; ARABIC LETTER DAL
+       (#xD0 #x0630) ;; ARABIC LETTER THAL
+       (#xD1 #x0631) ;; ARABIC LETTER REH
+       (#xD2 #x0632) ;; ARABIC LETTER ZAIN
+       (#xD3 #x0633) ;; ARABIC LETTER SEEN
+       (#xD4 #x0634) ;; ARABIC LETTER SHEEN
+       (#xD5 #x0635) ;; ARABIC LETTER SAD
+       (#xD6 #x0636) ;; ARABIC LETTER DAD
+       (#xD7 #x0637) ;; ARABIC LETTER TAH
+       (#xD8 #x0638) ;; ARABIC LETTER ZAH
+       (#xD9 #x0639) ;; ARABIC LETTER AIN
+       (#xDA #x063A) ;; ARABIC LETTER GHAIN
+       (#xE0 #x0640) ;; ARABIC TATWEEL
+       (#xE1 #x0641) ;; ARABIC LETTER FEH
+       (#xE2 #x0642) ;; ARABIC LETTER QAF
+       (#xE3 #x0643) ;; ARABIC LETTER KAF
+       (#xE4 #x0644) ;; ARABIC LETTER LAM
+       (#xE5 #x0645) ;; ARABIC LETTER MEEM
+       (#xE6 #x0646) ;; ARABIC LETTER NOON
+       (#xE7 #x0647) ;; ARABIC LETTER HEH
+       (#xE8 #x0648) ;; ARABIC LETTER WAW
+       (#xE9 #x0649) ;; ARABIC LETTER ALEF MAKSURA
+       (#xEA #x064A) ;; ARABIC LETTER YEH
+       (#xEB #x064B) ;; ARABIC FATHATAN
+       (#xEC #x064C) ;; ARABIC DAMMATAN
+       (#xED #x064D) ;; ARABIC KASRATAN
+       (#xEE #x064E) ;; ARABIC FATHA
+       (#xEF #x064F) ;; ARABIC DAMMA
+       (#xF0 #x0650) ;; ARABIC KASRA
+       (#xF1 #x0651) ;; ARABIC SHADDA
+       (#xF2 #x0652));; ARABIC SUKUN
+  do (set-unicode-conversion (make-char 'arabic-iso8859-6 iso8859-6)
+                             unicode))
+
+;;;###autoload
+(make-coding-system
+ 'arabic-iso-8bit-with-esc 'iso2022  ;; GNU's iso-8859-6 is
+                                     ;; iso2022-compatible.
+ "ISO-8859-6 (Arabic)"
+ '(charset-g0 ascii
+   charset-g1 arabic-iso8859-6
+   charset-g2 t
+   charset-g3 t
+   no-iso6429 t
+   mnemonic "MIME/Arbc"))
+
--- a/lisp/mule/latin.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/latin.el	Sat Aug 09 13:11:06 2008 +0200
@@ -957,11 +957,12 @@
   for ((charset codesys default-input nice-charset-1 nice-charset-2
                 ;; supported-langs is a list if the doc string is replaced
                 ;; entirely
-                supported-langs) 
+                supported-langs invalid-sequence-coding-system) 
        langenvs) in
   '(((latin-iso8859-1 iso-8859-1 "latin-1-prefix" "Latin-1" "ISO-8859-1"
 " Danish, Dutch, English, Faeroese, Finnish, French, German, Icelandic,
- Irish, Italian, Norwegian, Portuguese, Spanish, and Swedish.")
+ Irish, Italian, Norwegian, Portuguese, Spanish, and Swedish."
+      windows-1252)
      (("Danish" "da")
       ("Dutch" "nl" "TUTORIAL.nl")
       ("Faeroese" "fo")
@@ -1024,6 +1025,8 @@
      (coding-system ,codesys)
      (coding-priority ,codesys)
      (native-coding-system ,codesys)
+     (invalid-sequence-coding-system ,(or invalid-sequence-coding-system
+                                          codesys))
      (documentation . ,(if (listp supported-langs) (car supported-langs)
 			 (format "\
 Generic language environment for %s (%s)." nice-charset-1 nice-charset-2))))
--- a/lisp/mule/mule-category.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/mule-category.el	Sat Aug 09 13:11:06 2008 +0200
@@ -244,7 +244,6 @@
     (latin-iso8859-4	?l)
     (latin-iso8859-9	?l)
     (cyrillic-iso8859-5 ?y "Cyrillic character set")
-    (arabic-iso8859-6	?b "Arabic character set")
     (greek-iso8859-7	?g "Greek character set")
     (hebrew-iso8859-8	?w "Hebrew character set")
     (katakana-jisx0201	?k "Japanese 1-byte Katakana character set")
--- a/lisp/mule/mule-cmds.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/mule-cmds.el	Sat Aug 09 13:11:06 2008 +0200
@@ -225,7 +225,15 @@
 
                      If there is no value for this property, the MS Windows
                      locale is assumed to have the same name as the
-                     language environment."
+                     language environment.
+
+  invalid-sequence-coding-system
+                     VALUE is a fixed-width 8-bit coding system used to
+                     display Unicode error sequences (using a face to make
+                     it clear that the data is invalid).  In Western Europe
+                     this is normally windows-1252; in the Russia and the
+                     former Soviet Union koi8-ru or windows-1251 makes more
+                     sense."
   (if (symbolp lang-env)
       (setq lang-env (symbol-name lang-env)))
   (let (lang-slot prop-slot)
@@ -760,6 +768,25 @@
     (if (functionp func)
 	(funcall func)))
 
+  (let ((invalid-sequence-coding-system
+         (get-language-info language-name 'invalid-sequence-coding-system))
+        (disp-table (specifier-instance current-display-table))
+        glyph)
+    (when (consp invalid-sequence-coding-system)
+      (setq invalid-sequence-coding-system
+            (car invalid-sequence-coding-system)))
+    (map-char-table
+     #'(lambda (key entry)
+         (setq glyph (make-glyph
+                      (vector
+                       'string :data
+                       (decode-coding-string (string entry)
+                                             invalid-sequence-coding-system))))
+         (set-glyph-face glyph 'unicode-invalid-sequence-warning-face)
+         (put-char-table key glyph disp-table)
+         nil)
+     unicode-error-default-translation-table))
+
   ;; Fit the charsets preferences in unicode conversions for the
   ;; language environment.
   (set-language-unicode-precedence-list
--- a/lisp/mule/mule-msw-init-late.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/mule-msw-init-late.el	Sat Aug 09 13:11:06 2008 +0200
@@ -37,7 +37,6 @@
 	   (greek-iso8859-7 . "Greek") 
 	   (latin-iso8859-9 . "Turkish")
 	   (hebrew-iso8859-8 . "Hebrew")
-	   (arabic-iso8859-6 . "Arabic")
 	   (latin-iso8859-4 . "Baltic")
 	   (vietnamese-viscii-lower . "Viet Nam")
 	   (vietnamese-viscii-upper . "Viet Nam")
--- a/lisp/mule/mule-win32-init.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/mule/mule-win32-init.el	Sat Aug 09 13:11:06 2008 +0200
@@ -162,7 +162,8 @@
         ; ("ANSI"        1253 no-conversion "Windows 3.1 Greek")
        ("ANSI"        1254 no-conversion "Windows 3.1 Turkish")
        ("ANSI"        1255 no-conversion "Hebrew")
-       ("ANSI"        1256 no-conversion "Arabic")
+       ;; We implement these ourselves.
+       ; ("ANSI"        1256 no-conversion "Arabic")
        ("ANSI"        1257 no-conversion "Baltic")
        ("ANSI"        1258 no-conversion "VietNam")
        ;; #### Is this category right? I don't have Lunde to hand, and the
--- a/lisp/specifier.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/specifier.el	Sat Aug 09 13:11:06 2008 +0200
@@ -988,4 +988,18 @@
 			 (specifier-instance specifier domain))))
 		   (list (cons nil inst))))))))))
 
+;; Character 160 (octal 0240) displays incorrectly under some X
+;; installations apparently due to a universally crocked font width
+;; specification.  Display it as a space since that's what's expected. 
+;;
+;; (make-char-table 'generic) instead of (make-display-table) because
+;; make-display-table isn't dumped, and this file is. 
+;;
+;; We also want the global display table to be actually globally
+;; initialised; that's why this is here, and not in x-init.el, these days.
+
+(set-specifier current-display-table 
+               #s(char-table type generic data (?\xA0 ?\x20))
+               'global)
+
 ;;; specifier.el ends here
--- a/lisp/subr.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/subr.el	Sat Aug 09 13:11:06 2008 +0200
@@ -1722,4 +1722,25 @@
 
 ;; define-mail-user-agent is in simple.el.
 
+;; XEmacs; added. 
+(defun skip-chars-quote (string)
+  "Return a string that means all characters in STRING will be skipped,
+if passed to `skip-chars-forward' or `skip-chars-backward'.
+
+Ranges and carets are not treated specially.  This implementation is
+in Lisp; do not use it in performance-critical code."
+  (let ((list (delete-duplicates (string-to-list string) :test #'=)))
+    (when (equal list '((?- ?\[) (?\[ ?\-)))
+      (error 'invalid-argument
+	     "Cannot create `skip-chars-forward' arg from string"
+	     string))
+    (when (memq ?\] list)
+      (setq list (cons ?\] (delq ?\] list))))
+    (when (eq ?^ (car list))
+      (setq list (nconc (cdr list) '(?^))))
+    (when (memq ?- list)
+      (setq list (delq ?- list)
+	    list (nconc list (list (second list) ?- (second list) ?-))))
+    (apply #'string list)))
+
 ;;; subr.el ends here
--- a/lisp/unicode.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/unicode.el	Sat Aug 09 13:11:06 2008 +0200
@@ -73,7 +73,6 @@
 	    ("8859-3.TXT" latin-iso8859-3 #xA0 #xFF #x-80)
 	    ("8859-4.TXT" latin-iso8859-4 #xA0 #xFF #x-80)
 	    ("8859-5.TXT" cyrillic-iso8859-5 #xA0 #xFF #x-80)
-	    ("8859-6.TXT" arabic-iso8859-6 #xA0 #xFF #x-80)
 	    ("8859-7.TXT" greek-iso8859-7 #xA0 #xFF #x-80)
 	    ("8859-8.TXT" hebrew-iso8859-8 #xA0 #xFF #x-80)
 	    ("8859-9.TXT" latin-iso8859-9 #xA0 #xFF #x-80)
@@ -154,12 +153,12 @@
       '(ascii control-1 latin-iso8859-1 latin-iso8859-2 latin-iso8859-15
 	greek-iso8859-7 hebrew-iso8859-8 ipa cyrillic-iso8859-5
 	latin-iso8859-16 latin-iso8859-3 latin-iso8859-4 latin-iso8859-9
-	vietnamese-viscii-lower vietnamese-viscii-upper arabic-iso8859-6
+	vietnamese-viscii-lower vietnamese-viscii-upper 
 	jit-ucs-charset-0 japanese-jisx0208 japanese-jisx0208-1978
 	japanese-jisx0212 japanese-jisx0213-1 japanese-jisx0213-2
 	chinese-gb2312 chinese-sisheng chinese-big5-1 chinese-big5-2
 	indian-is13194 korean-ksc5601 chinese-cns11643-1 chinese-cns11643-2
-	chinese-isoir165 arabic-1-column arabic-2-column arabic-digit
+	chinese-isoir165 
 	composite ethiopic indian-1-column indian-2-column jit-ucs-charset-0
 	katakana-jisx0201 lao thai-tis620 thai-xtis tibetan tibetan-1-column
 	latin-jisx0201 chinese-cns11643-3 chinese-cns11643-4
@@ -526,7 +525,7 @@
 To transform XEmacs Unicode error sequences to the Latin-1 characters that
 correspond to the octets on disk, you can use this variable.  ")
 
-(defvar unicode-error-sequence-regexp-range
+(defvar unicode-invalid-sequence-regexp-range
   (and (featurep 'mule)
        (format "%c%c-%c"
                (aref (decode-coding-string "\xd8\x00\x00\x00" 'utf-16-be) 0)
@@ -564,7 +563,7 @@
     ;; Comment out until the issue in
     ;; 18179.49815.622843.336527@parhasard.net is fixed.
     (assert t ; (re-search-forward (concat "[" 
-              ;                        unicode-error-sequence-regexp-range
+              ;                        unicode-invalid-sequence-regexp-range
               ;                        "]"))
             nil
             (format "Could not find char ?\\x%x in buffer" i))))
@@ -586,12 +585,12 @@
 	  (setq begin
 		(progn
 		  (skip-chars-forward
-		   (concat "^" unicode-error-sequence-regexp-range))
+		   (concat "^" unicode-invalid-sequence-regexp-range))
 		  (point))
 		end (and (not (= (point) (point-max)))
 			 (progn
 			   (skip-chars-forward
-			    unicode-error-sequence-regexp-range)
+			    unicode-invalid-sequence-regexp-range)
 			   (point))))
 	  (if end
 	      (funcall frob-function begin end))))))
@@ -611,6 +610,9 @@
        (translate-region start finish table))
      begin end buffer))
 
+;; Sure would be nice to be able to use defface here. 
+(copy-face 'highlight 'unicode-invalid-sequence-warning-face)
+
 (defvar unicode-query-coding-skip-chars-arg nil ;; Set in general-late.el
   "Used by `unicode-query-coding-region' to skip chars with known mappings.")
 
@@ -689,8 +691,8 @@
   ;; Lisp.
   (mapcar #'unintern
           '(ccl-encode-to-ucs-2 unicode-error-default-translation-table
-            unicode-error-sequence-regexp-range
-            frob-unicode-errors-region unicode-error-translate-region)))
+            unicode-invalid-regexp-range frob-unicode-errors-region
+            unicode-error-translate-region)))
 
 ;; #### UTF-7 is not yet implemented, and it's tricky to do.  There's
 ;; an implementation in appendix A.1 of the Unicode Standard, Version
--- a/lisp/x-init.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/x-init.el	Sat Aug 09 13:11:06 2008 +0200
@@ -84,12 +84,6 @@
 ;; Load X-server specific code.
 ;; Specifically, load some code to repair the grievous damage that MIT and
 ;; Sun have done to the default keymap for the Sun keyboards.
-
-(eval-when-compile
-  (defmacro x-define-dead-key (key map device)
-    `(when (x-keysym-on-keyboard-p ',key device)
-       (define-key function-key-map [,key] ',map))))
-
 (defun x-initialize-compose (device)
   "Enable compose key and dead key processing on DEVICE."
   (autoload 'compose-map	    "x-compose" nil t 'keymap)
@@ -100,111 +94,118 @@
   (autoload 'compose-circumflex-map "x-compose" nil t 'keymap)
   (autoload 'compose-tilde-map	    "x-compose" nil t 'keymap)
 
-  (when (x-keysym-on-keyboard-p 'multi-key device)
-    (define-key function-key-map [multi-key] 'compose-map))
+  (loop 
+    for (key map)
+    ;; The dead keys might really be called just about anything, depending
+    ;; on the vendor.  MIT thinks that the prefixes are "SunFA_", "D", and
+    ;; "hpmute_" for Sun, DEC, and HP respectively.  However, OpenWindows 3
+    ;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_".
+    ;; And HP (who don't mention Sun and DEC at all) use "XK_mute_".  Go
+    ;; figure.
+
+    ;; Presumably if someone is running OpenWindows, they won't be using the
+    ;; DEC or HP keysyms, but if they are defined then that is possible, so
+    ;; in that case we accept them all.
 
-  ;; The dead keys might really be called just about anything, depending
-  ;; on the vendor.  MIT thinks that the prefixes are "SunFA_", "D", and
-  ;; "hpmute_" for Sun, DEC, and HP respectively.  However, OpenWindows 3
-  ;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_".
-  ;; And HP (who don't mention Sun and DEC at all) use "XK_mute_".
-  ;; Go figure.
+    ;; If things seem not to be working, you might want to check your
+    ;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally
+    ;; mixed up view of what these keys should be called.
 
-  ;; Presumably if someone is running OpenWindows, they won't be using
-  ;; the DEC or HP keysyms, but if they are defined then that is possible,
-  ;; so in that case we accept them all.
-
-  ;; If things seem not to be working, you might want to check your
-  ;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally
-  ;; mixed up view of what these keys should be called.
+    ;; Canonical names:
+    in '((acute			compose-acute-map)
+         (grave			compose-grave-map)
+         (cedilla		compose-cedilla-map)
+         (diaeresis		compose-diaeresis-map)
+         (circumflex		compose-circumflex-map)
+         (tilde			compose-tilde-map)
+         (degree			compose-ring-map)
+         (multi-key              compose-map)
 
-  ;; Canonical names:
-  (x-define-dead-key acute			compose-acute-map device)
-  (x-define-dead-key grave			compose-grave-map device)
-  (x-define-dead-key cedilla			compose-cedilla-map device)
-  (x-define-dead-key diaeresis			compose-diaeresis-map device)
-  (x-define-dead-key circumflex			compose-circumflex-map device)
-  (x-define-dead-key tilde			compose-tilde-map device)
-  (x-define-dead-key degree			compose-ring-map device)
+         ;; Sun according to MIT:
+         (SunFA_Acute		compose-acute-map)
+         (SunFA_Grave		compose-grave-map)
+         (SunFA_Cedilla		compose-cedilla-map)
+         (SunFA_Diaeresis	compose-diaeresis-map)
+         (SunFA_Circum		compose-circumflex-map)
+         (SunFA_Tilde		compose-tilde-map)
+
+         ;; Sun according to OpenWindows 2:
+         (Dead_Grave		compose-grave-map)
+         (Dead_Circum		compose-circumflex-map)
+         (Dead_Tilde		compose-tilde-map)
 
-  ;; Sun according to MIT:
-  (x-define-dead-key SunFA_Acute		compose-acute-map device)
-  (x-define-dead-key SunFA_Grave		compose-grave-map device)
-  (x-define-dead-key SunFA_Cedilla		compose-cedilla-map device)
-  (x-define-dead-key SunFA_Diaeresis		compose-diaeresis-map device)
-  (x-define-dead-key SunFA_Circum		compose-circumflex-map device)
-  (x-define-dead-key SunFA_Tilde		compose-tilde-map device)
+         ;; Sun according to OpenWindows 3:
+         (SunXK_FA_Acute		compose-acute-map)
+         (SunXK_FA_Grave		compose-grave-map)
+         (SunXK_FA_Cedilla	compose-cedilla-map)
+         (SunXK_FA_Diaeresis	compose-diaeresis-map)
+         (SunXK_FA_Circum	compose-circumflex-map)
+         (SunXK_FA_Tilde		compose-tilde-map)
 
-  ;; Sun according to OpenWindows 2:
-  (x-define-dead-key Dead_Grave			compose-grave-map device)
-  (x-define-dead-key Dead_Circum		compose-circumflex-map device)
-  (x-define-dead-key Dead_Tilde			compose-tilde-map device)
-
-  ;; Sun according to OpenWindows 3:
-  (x-define-dead-key SunXK_FA_Acute		compose-acute-map device)
-  (x-define-dead-key SunXK_FA_Grave		compose-grave-map device)
-  (x-define-dead-key SunXK_FA_Cedilla		compose-cedilla-map device)
-  (x-define-dead-key SunXK_FA_Diaeresis		compose-diaeresis-map device)
-  (x-define-dead-key SunXK_FA_Circum		compose-circumflex-map device)
-  (x-define-dead-key SunXK_FA_Tilde		compose-tilde-map device)
+         ;; DEC according to MIT:
+         (Dacute_accent		compose-acute-map)
+         (Dgrave_accent		compose-grave-map)
+         (Dcedilla_accent	compose-cedilla-map)
+         (Dcircumflex_accent	compose-circumflex-map)
+         (Dtilde			compose-tilde-map)
+         (Dring_accent		compose-ring-map)
 
-  ;; DEC according to MIT:
-  (x-define-dead-key Dacute_accent		compose-acute-map device)
-  (x-define-dead-key Dgrave_accent		compose-grave-map device)
-  (x-define-dead-key Dcedilla_accent		compose-cedilla-map device)
-  (x-define-dead-key Dcircumflex_accent		compose-circumflex-map device)
-  (x-define-dead-key Dtilde			compose-tilde-map device)
-  (x-define-dead-key Dring_accent		compose-ring-map device)
+         ;; DEC according to OpenWindows 3:
+         (DXK_acute_accent	compose-acute-map)
+         (DXK_grave_accent	compose-grave-map)
+         (DXK_cedilla_accent	compose-cedilla-map)
+         (DXK_circumflex_accent	compose-circumflex-map)
+         (DXK_tilde		compose-tilde-map)
+         (DXK_ring_accent	compose-ring-map)
 
-  ;; DEC according to OpenWindows 3:
-  (x-define-dead-key DXK_acute_accent		compose-acute-map device)
-  (x-define-dead-key DXK_grave_accent		compose-grave-map device)
-  (x-define-dead-key DXK_cedilla_accent		compose-cedilla-map device)
-  (x-define-dead-key DXK_circumflex_accent	compose-circumflex-map device)
-  (x-define-dead-key DXK_tilde			compose-tilde-map device)
-  (x-define-dead-key DXK_ring_accent		compose-ring-map device)
+         ;; HP according to MIT:
+         (hpmute_acute		compose-acute-map)
+         (hpmute_grave		compose-grave-map)
+         (hpmute_diaeresis	compose-diaeresis-map)
+         (hpmute_asciicircum	compose-circumflex-map)
+         (hpmute_asciitilde	compose-tilde-map)
 
-  ;; HP according to MIT:
-  (x-define-dead-key hpmute_acute		compose-acute-map device)
-  (x-define-dead-key hpmute_grave		compose-grave-map device)
-  (x-define-dead-key hpmute_diaeresis		compose-diaeresis-map device)
-  (x-define-dead-key hpmute_asciicircum		compose-circumflex-map device)
-  (x-define-dead-key hpmute_asciitilde		compose-tilde-map device)
+         ;; Empirically discovered on Linux XFree86 MetroX:
+         (usldead_acute		compose-acute-map)
+         (usldead_grave		compose-grave-map)
+         (usldead_diaeresis	compose-diaeresis-map)
+         (usldead_asciicircum	compose-circumflex-map)
+         (usldead_asciitilde	compose-tilde-map)
 
-  ;; Empirically discovered on Linux XFree86 MetroX:
-  (x-define-dead-key usldead_acute		compose-acute-map device)
-  (x-define-dead-key usldead_grave		compose-grave-map device)
-  (x-define-dead-key usldead_diaeresis		compose-diaeresis-map device)
-  (x-define-dead-key usldead_asciicircum	compose-circumflex-map device)
-  (x-define-dead-key usldead_asciitilde		compose-tilde-map device)
+         ;; HP according to OpenWindows 3:
+         (hpXK_mute_acute	compose-acute-map)
+         (hpXK_mute_grave	compose-grave-map)
+         (hpXK_mute_diaeresis	compose-diaeresis-map)
+         (hpXK_mute_asciicircum	compose-circumflex-map)
+         (hpXK_mute_asciitilde	compose-tilde-map)
 
-  ;; HP according to OpenWindows 3:
-  (x-define-dead-key hpXK_mute_acute		compose-acute-map device)
-  (x-define-dead-key hpXK_mute_grave		compose-grave-map device)
-  (x-define-dead-key hpXK_mute_diaeresis	compose-diaeresis-map device)
-  (x-define-dead-key hpXK_mute_asciicircum	compose-circumflex-map device)
-  (x-define-dead-key hpXK_mute_asciitilde	compose-tilde-map device)
+         ;; HP according to HP-UX 8.0:
+         (XK_mute_acute		compose-acute-map)
+         (XK_mute_grave		compose-grave-map)
+         (XK_mute_diaeresis	compose-diaeresis-map)
+         (XK_mute_asciicircum	compose-circumflex-map)
+         (XK_mute_asciitilde	compose-tilde-map)
 
-  ;; HP according to HP-UX 8.0:
-  (x-define-dead-key XK_mute_acute		compose-acute-map device)
-  (x-define-dead-key XK_mute_grave		compose-grave-map device)
-  (x-define-dead-key XK_mute_diaeresis		compose-diaeresis-map device)
-  (x-define-dead-key XK_mute_asciicircum	compose-circumflex-map device)
-  (x-define-dead-key XK_mute_asciitilde		compose-tilde-map device)
-
-  ;; [[ XFree86 seems to use lower case and a hyphen ]] Not true; they use
-  ;; lower case and an underscore. XEmacs converts the underscore to a
-  ;; hyphen in x_keysym_to_emacs_keysym because the keysym is in the
-  ;; "Keyboard" character set, which is just totally fucking random,
-  ;; considering it doesn't happen for any other character sets. 
-  (x-define-dead-key dead-acute			compose-acute-map device)
-  (x-define-dead-key dead-grave			compose-grave-map device)
-  (x-define-dead-key dead-cedilla		compose-cedilla-map device)
-  (x-define-dead-key dead-diaeresis		compose-diaeresis-map device)
-  (x-define-dead-key dead-circum		compose-circumflex-map device)
-  (x-define-dead-key dead-circumflex		compose-circumflex-map device)
-  (x-define-dead-key dead-tilde			compose-tilde-map device)
-  )
+         ;; [[ XFree86 seems to use lower case and a hyphen ]] Not true;
+         ;; they use lower case and an underscore. XEmacs converts the
+         ;; underscore to a hyphen in x_keysym_to_emacs_keysym because the
+         ;; keysym is in the "Keyboard" character set, which is just totally
+         ;; fucking random, considering it doesn't happen for any other
+         ;; character sets.
+         (dead-acute		compose-acute-map)
+         (dead-grave		compose-grave-map)
+         (dead-cedilla		compose-cedilla-map)
+         (dead-diaeresis		compose-diaeresis-map)
+         (dead-circum		compose-circumflex-map)
+         (dead-circumflex	compose-circumflex-map)
+         (dead-tilde		compose-tilde-map))
+    
+    ;; Get the correct value for function-key-map
+    with function-key-map = (symbol-value-in-console 'function-key-map
+                                                     (device-console device)
+                                                     function-key-map)
+    do (when (x-keysym-on-keyboard-p key device)
+         (define-key function-key-map (vector key) map))))
 
 (eval-when-compile
   (load "x-win-sun"     nil t)
@@ -311,15 +312,4 @@
   (if (equal display "") (setq display nil))
   (make-frame-on-device 'x display props))
 
-;; Character 160 (octal 0240) displays incorrectly under X apparently
-;; due to a universally crocked font width specification.  Display it
-;; as a space since that's what seems to be expected.
-;;
-;; (make-char-table 'generic) instead of (make-display-table) because
-;; make-display-table isn't dumped, and this file is. 
-
-(let ((tab (make-char-table 'generic)))
-  (put-char-table 160 " " tab)
-  (set-specifier current-display-table tab 'global 'x))
-
 ;;; x-init.el ends here
--- a/lisp/x-win-sun.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/x-win-sun.el	Sat Aug 09 13:11:06 2008 +0200
@@ -156,6 +156,10 @@
 		 (f11    stop)
 		 (f12    again))))
       )
+    ;; Get the correct value for function-key-map
+    with function-key-map = (symbol-value-in-console 'function-key-map
+                                                     (device-console device)
+                                                     function-key-map)
     do (when (x-keysym-on-keyboard-sans-modifiers-p from-key device)
 	 (dolist (prefix '(() (shift) (control) (meta) (alt)
 			   (shift control) (shift alt) (shift meta)
--- a/lisp/x-win-xfree86.el	Fri Jul 18 01:00:32 2008 +0200
+++ b/lisp/x-win-xfree86.el	Sat Aug 09 13:11:06 2008 +0200
@@ -90,6 +90,11 @@
       (f22 f10)
       (f23 f11)
       (f24 f12))
+    ;; Get the correct value for function-key-map
+    with function-key-map = (symbol-value-in-console 'function-key-map
+                                                     (device-console device)
+                                                     function-key-map)
+
     do
     (when (and (x-keysym-on-keyboard-p key device)
 	       (not (x-keysym-on-keyboard-sans-modifiers-p key device)))
--- a/man/ChangeLog	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/ChangeLog	Sat Aug 09 13:11:06 2008 +0200
@@ -1,3 +1,21 @@
+2008-07-26  Ville Skyttä  <scop@xemacs.org>
+
+	* xemacs/custom.texi, xemacs/frame.texi, xemacs/mule.texi,
+	xemacs/packages.texi, xemacs/programs.texi, xemacs/trouble.texi:
+	Spelling fixes.
+
+2008-07-26  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* lispref/objects.texi (Character Type):
+	Document the error provoked when the reader sees an over-long
+	hexadecimal constant.
+
+2008-07-26  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* lispref/variables.texi (Extent): 
+	Correct a misspelling of macros, add a needed space. Thank you
+	John Paul Wallington, thank you Stephen Turnbull. 
+
 2008-05-29  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* lispref/objects.texi (Equality Predicates): 
--- a/man/lispref/objects.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/lispref/objects.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -647,17 +647,16 @@
 followed by a backslash and the character code in octal (up to three
 octal digits); thus, @samp{?\101} for the character @kbd{A},
 @samp{?\001} for the character @kbd{C-a}, and @code{?\002} for the
-character @kbd{C-b}.
+character @kbd{C-b}.  The reader will finalize the character and start
+reading the next token when a non-octal-digit is encountered or three
+octal digits are read. 
 
   The second consists of a question mark followed by a backslash, the
 character @samp{x}, and the character code in hexadecimal (up to two
 hexadecimal digits); thus, @samp{?\x41} for the character @kbd{A},
 @samp{?\x1} for the character @kbd{C-a}, and @code{?\x2} for the
-character @kbd{C-b}.
-
-In both cases, the reader will finalize the character when a non-digit
-is encountered or the maximum length of a character code is reached.  It
-then starts reading the next token.
+character @kbd{C-b}.  If more than two hexadecimal codes are given, the
+reader signals an error.
 
 @example
 @group
--- a/man/lispref/variables.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/lispref/variables.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -895,7 +895,7 @@
 @cindex closures not available
   Some Lisp dialects have ``closures'', objects that are like functions
 but record additional variable bindings.  Closures are available in
-XEmacs Lisp using the @code{lexical-let} and @code{lexical-let*}macroes,
+XEmacs Lisp using the @code{lexical-let} and @code{lexical-let*} macros,
 which are autoloaded from @file{cl-macs}.  @xref{(cl)Lexical Bindings}.
 Note that function arguments cannot be closed around using these
 macros, and that any lambda expressions returned will not be
--- a/man/xemacs/custom.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/xemacs/custom.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -136,7 +136,7 @@
 @c functions to enable or disable a given behavior.  The behavior registry
 @c was introduced in XEmacs 21.5.6.
 @c
-@c @defun enable-behavior behavior &optionl force
+@c @defun enable-behavior behavior &optional force
 @c Called interactively, prompt the user, read a behavior symbol name with
 @c completion for @var{behavior}, and take @var{force} from the prefix
 @c argument.  Then enable the behavior registered under the symbol
@@ -2282,7 +2282,7 @@
 @emph{convenient}.  Precision means that all properties available in the
 programming API can be individually specified.  Accuracy means that the
 truename of the font is exactly the list of all properties specified by
-the font.  Thus, the anomolies that occur with XLFDs on many servers
+the font.  Thus, the anomalies that occur with XLFDs on many servers
 (including modern Linux distributions with XFree86 or X.org servers)
 cannot occur.  Convenience is subjective, of course.  However,
 @file{fontconfig} provides a configuration system which (1) explicitly
--- a/man/xemacs/frame.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/xemacs/frame.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -343,7 +343,7 @@
 
 XEmacs scrollbars provide the usual interface.  Arrow buttons at either
 end allow for line by line scrolling, including autorepeat.  Clicking in
-the scrollbar itself provides scrolling by windowsfull, depending on
+the scrollbar itself provides scrolling by a windowful, depending on
 which side of the slider is clicked.  The slider itself may be dragged
 for smooth scrolling.
 
@@ -400,7 +400,7 @@
 example, change every time the selected buffer in the frame changes.
 And for progress gauges a gutter to contain the gauge is typically
 created on the fly when needed, then destroyed when the operation whose
-staus is being displayed is completed.
+status is being displayed is completed.
 
 Buffer tabs, having somewhat complex behavior, deserve a closer look.
 By default, a row of buffer tabs is displayed at the top of every frame.
--- a/man/xemacs/mule.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/xemacs/mule.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -509,7 +509,7 @@
 Normally, unification works in the background by installing
 @code{unity-sanity-check} on @code{write-region-pre-hook}.
 Unification is on by default for the ISO-8859 Latin sets.  The user
-activates this functionality for other chacter set families by
+activates this functionality for other character set families by
 invoking @code{enable-unification}, either interactively or in her
 init file.  @xref{Init File, , , xemacs}.  Unification can be
 deactivated by invoking @code{disable-unification}.
@@ -1041,7 +1041,7 @@
 possible to use a single Latin coded character set before saving the
 buffer.
 
-Because the problem is rarely noticable in editing a buffer, but tends
+Because the problem is rarely noticeable in editing a buffer, but tends
 to manifest when that buffer is exported to a file or process,
 unification uses the strategy of examining the buffer prior to export.
 If use of multiple Latin coded character sets is detected, unification
--- a/man/xemacs/packages.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/xemacs/packages.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -392,11 +392,11 @@
 Because the exact files and their locations contained in a package may
 change it is recommended to remove a package first before installing a
 new version. In order to facilitate removal each package contains an
-@file{pgkinfo/MANIFEST.pkgname} file which list all the files belonging
+@file{pkginfo/MANIFEST.pkgname} file which lists all the files belonging
 to the package. 
 
 No need to panic, you don't have to go through the
-@file{pkinfo/MANIFEST.pkgname} and manually delete the files.  Instead, use
+@file{pkginfo/MANIFEST.pkgname} and manually delete the files.  Instead, use
 @code{M-x package-get-delete-package RET}.
 
 Note that the interactive package tools included with XEmacs already do
--- a/man/xemacs/programs.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/xemacs/programs.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -75,7 +75,7 @@
 supported by XEmacs. Examples include Ada, Awk, C, C++, CORBA (IDL),
 Fortran, Java, Lisp, Modula 2, Objective-C, Perl, Pike, Prolog, Python,
 Ruby, Scheme, Simula, SQL, Tcl, Unix Shell scripts, and VHDL. Some of
-these language have seperate manuals, and some times more than one mode
+these language have separate manuals, and some times more than one mode
 may be available for a language.  For example, there are several
 variants of Lisp mode, which differ in the way they interface to Lisp
 execution.  @xref{Lisp Modes}. 
@@ -1649,7 +1649,7 @@
 
 @itemize @bullet
 @item
-``gnu'' --- The recommeded style from the Free Software Foundation for
+``gnu'' --- The recommended style from the Free Software Foundation for
 GNU software. 
 @item
 ``k&r'' --- The classic style from Kernighan and Ritchie.
@@ -1693,7 +1693,7 @@
   Most customizations for indentation in various CC modes can be
 accomplished by choosing a style and then choosing value for
 @code{c-basic-offset} that meets the local coding convention. CC Mode
-has a very customizable indentation engine and a furthur discussion is
+has a very customizable indentation engine and a further discussion is
 really beyond the scope of this manual. @xref{Indentation
 Engine,,,cc-mode,The CC Mode Manual}.
 
--- a/man/xemacs/trouble.texi	Fri Jul 18 01:00:32 2008 +0200
+++ b/man/xemacs/trouble.texi	Sat Aug 09 13:11:06 2008 +0200
@@ -392,7 +392,7 @@
 The newsgroup @samp{comp.emacs.xemacs} may be used for bug reports,
 other discussions and requests for assistance.  
 
-If you don't have access to this newgroup, you can subscribe to the
+If you don't have access to this newsgroup, you can subscribe to the
 mailing list version: the newsgroup is bidirectionally gatewayed into
 the mailing list @samp{xemacs@@xemacs.org}.
 
--- a/src/ChangeLog	Fri Jul 18 01:00:32 2008 +0200
+++ b/src/ChangeLog	Sat Aug 09 13:11:06 2008 +0200
@@ -1,9 +1,27 @@
+2008-08-05  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* mule-charset.c (complex_vars_of_mule_charset): 
+	Remove Vcharset_arabic_iso8859_7.
+	* lisp.h: Remove Vcharset_arabic_iso8859_7.
+	See commentary in lisp/mule/iso-with-esc.el for motivation. 
+
+2008-07-20  John Paul Wallington  <jpw@pobox.com>
+
+	* nt.c (Fmswindows_short_file_name, Fmswindows_long_file_name):
+	Remove their interactive specs; they shouldn't be called interactively.
+
 2008-07-17  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* redisplay.c (init_redisplay): 
 	Don't set window-system to 'stream if running noninteractively,
 	revert to the documented behaviour. 
 
+2008-07-16  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* lread.c (read_escape): 
+	Error if we're handed an over-long hex character escape, something
+	which arises reasonably frequently in code written for GNU. 
+
 2008-07-07  Aidan Kehoe  <kehoea@parhasard.net>
 
 	Patch to make it up to the device-specific code whether
--- a/src/lisp.h	Fri Jul 18 01:00:32 2008 +0200
+++ b/src/lisp.h	Sat Aug 09 13:11:06 2008 +0200
@@ -5229,7 +5229,6 @@
 extern Lisp_Object Vcharset_latin_iso8859_4;
 extern Lisp_Object Vcharset_thai_tis620;
 extern Lisp_Object Vcharset_greek_iso8859_7;
-extern Lisp_Object Vcharset_arabic_iso8859_6;
 extern Lisp_Object Vcharset_hebrew_iso8859_8;
 extern Lisp_Object Vcharset_katakana_jisx0201;
 extern Lisp_Object Vcharset_latin_jisx0201;
--- a/src/lread.c	Fri Jul 18 01:00:32 2008 +0200
+++ b/src/lread.c	Sat Aug 09 13:11:06 2008 +0200
@@ -1855,6 +1855,28 @@
 		break;
 	      }
 	  }
+
+        if (count == 3)
+          {
+            c = readchar (readcharfun);
+            if ((c >= '0' && c <= '9') ||
+                (c >= 'a' && c <= 'f') ||
+                (c >= 'A' && c <= 'F'))
+              {
+                Lisp_Object args[2];
+
+                if      (c >= '0' && c <= '9')  i = (i << 4) + (c - '0');
+                else if (c >= 'a' && c <= 'f')  i = (i << 4) + (c - 'a') + 10;
+                else if (c >= 'A' && c <= 'F')  i = (i << 4) + (c - 'A') + 10;
+
+                args[0] = build_string ("?\\x%x");
+                args[1] = make_int (i);
+                syntax_error ("Overlong hex character escape",
+                              Fformat (2, args));
+              }
+            unreadchar (readcharfun, c);
+          }
+
 	return i;
       }
     case 'U':
--- a/src/mule-charset.c	Fri Jul 18 01:00:32 2008 +0200
+++ b/src/mule-charset.c	Sat Aug 09 13:11:06 2008 +0200
@@ -47,7 +47,6 @@
 Lisp_Object Vcharset_latin_iso8859_4;
 Lisp_Object Vcharset_thai_tis620;
 Lisp_Object Vcharset_greek_iso8859_7;
-Lisp_Object Vcharset_arabic_iso8859_6;
 Lisp_Object Vcharset_hebrew_iso8859_8;
 Lisp_Object Vcharset_katakana_jisx0201;
 Lisp_Object Vcharset_latin_jisx0201;
@@ -94,7 +93,6 @@
   Qlatin_iso8859_4,
   Qthai_tis620,
   Qgreek_iso8859_7,
-  Qarabic_iso8859_6,
   Qhebrew_iso8859_8,
   Qkatakana_jisx0201,
   Qlatin_jisx0201,
@@ -1112,7 +1110,6 @@
   DEFSYMBOL (Qlatin_iso8859_4);
   DEFSYMBOL (Qthai_tis620);
   DEFSYMBOL (Qgreek_iso8859_7);
-  DEFSYMBOL (Qarabic_iso8859_6);
   DEFSYMBOL (Qhebrew_iso8859_8);
   DEFSYMBOL (Qkatakana_jisx0201);
   DEFSYMBOL (Qlatin_jisx0201);
@@ -1236,15 +1233,6 @@
 		  build_msg_string ("ISO8859-7 (Greek)"),
 		  build_msg_string ("ISO8859-7 (Greek)"),
 		  vector1(build_string("iso8859-7")), 0, 0);
-  staticpro (&Vcharset_arabic_iso8859_6);
-  Vcharset_arabic_iso8859_6 =
-    make_charset (LEADING_BYTE_ARABIC_ISO8859_6, Qarabic_iso8859_6, 2,
-		  CHARSET_TYPE_96, 1, 1, 'G',
-		  CHARSET_RIGHT_TO_LEFT,
-		  build_string ("ISO8859-6"),
-		  build_msg_string ("ISO8859-6 (Arabic)"),
-		  build_msg_string ("ISO8859-6 (Arabic)"),
-		  vector1(build_string ("iso8859-6")), 0, 0);
   staticpro (&Vcharset_hebrew_iso8859_8);
   Vcharset_hebrew_iso8859_8 =
     make_charset (LEADING_BYTE_HEBREW_ISO8859_8, Qhebrew_iso8859_8, 2,
--- a/src/nt.c	Fri Jul 18 01:00:32 2008 +0200
+++ b/src/nt.c	Sat Aug 09 13:11:06 2008 +0200
@@ -2063,7 +2063,7 @@
 /* Some miscellaneous functions that are Windows specific, but not GUI
    specific (ie. are applicable in terminal or batch mode as well).  */
 
-DEFUN ("mswindows-short-file-name", Fmswindows_short_file_name, 1, 1, "", /*
+DEFUN ("mswindows-short-file-name", Fmswindows_short_file_name, 1, 1, 0, /*
   Return the short file name version (8.3) of the full path of FILENAME.
 If FILENAME does not exist, return nil.
 All path elements in FILENAME are converted to their short names.
@@ -2092,7 +2092,7 @@
 }
 
 
-DEFUN ("mswindows-long-file-name", Fmswindows_long_file_name, 1, 1, "", /*
+DEFUN ("mswindows-long-file-name", Fmswindows_long_file_name, 1, 1, 0, /*
   Return the long file name version of the full path of FILENAME.
 If FILENAME does not exist, return nil.
 All path elements in FILENAME are converted to their long names.