diff lisp/derived.el @ 3163:04a435415e1d

[xemacs-hg @ 2005-12-23 11:42:32 by stephent] undo spurious commit
author stephent
date Fri, 23 Dec 2005 11:42:35 +0000
parents 6e11554a16aa
children 308d34e9f07d
line wrap: on
line diff
--- a/lisp/derived.el	Fri Dec 23 11:40:39 2005 +0000
+++ b/lisp/derived.el	Fri Dec 23 11:42:35 2005 +0000
@@ -419,13 +419,22 @@
   ;; (set-char-table-parent new old) here.
   ;; We use map-char-table, not map-syntax-table, so we can explicitly
   ;; check for inheritance.
-  (map-char-table #'(lambda (range value)
-		      (when (eq ?@ (char-syntax-from-code value))
-			(map-char-table #'(lambda (rng val)
-					    (put-char-table rng val new))
-					old
-					range)))
-		  new))
+  (map-char-table
+   #'(lambda (key value)
+       (let ((newval (get-range-char-table key new 'multi)))
+	 (cond ((eq newval 'multi)	; OK, dive into the class hierarchy
+		(map-char-table
+		 #'(lambda (key1 value1)
+		     (when (eq ?@ (char-syntax-from-code
+				   (get-range-char-table key new ?@)))
+		       (put-char-table key1 value new))
+		     nil)
+		 new
+		 key))
+	       ((eq ?@ (char-syntax-from-code newval)) ;; class at once
+		(put-char-table key value new))))
+       nil)
+   old))
 
 ;; Merge an old abbrev table into a new one.
 ;; This function requires internal knowledge of how abbrev tables work,