3 new commits in XEmacs:
https://bitbucket.org/xemacs/xemacs/commits/3bfcdeb65578/
Changeset:   3bfcdeb65578
User:        kehoea
Date:        2013-12-15 10:57:28
Summary:     Return a fixnum as documented with marker arg, #'max, #'min
2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
	* data.c (Fmax):
	* data.c (Fmin):
	When an argument is a marker or a character, and WITH_NUMBER_TYPES
	is defined, return a fixnum in these functions as is documented
	and as the non-NUMBER_TYPES code does.
Affected #:  2 files
diff -r 4e69b24a23011918b25ad7a1ed3d38f6f22c6704 -r
3bfcdeb65578e17883ff14fb2b0463bf1a723d74 src/ChangeLog
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
+
+	* data.c (Fmax):
+	* data.c (Fmin):
+	When an argument is a marker or a character, and WITH_NUMBER_TYPES
+	is defined, return a fixnum in these functions as is documented
+	and as the non-NUMBER_TYPES code does.
+
 2013-09-10  Stephen J. Turnbull  <stephen(a)xemacs.org>
 
 	* font-mgr.c: Fix a bunch of comments and reformat some docstrings.
diff -r 4e69b24a23011918b25ad7a1ed3d38f6f22c6704 -r
3bfcdeb65578e17883ff14fb2b0463bf1a723d74 src/data.c
--- a/src/data.c
+++ b/src/data.c
@@ -1891,7 +1891,6 @@
 {
 #ifdef WITH_NUMBER_TYPES
   REGISTER int i, maxindex = 0;
-  Lisp_Object comp1, comp2;
 
   while (!(CHARP (args[0]) || MARKERP (args[0]) || REALP (args[0])))
     args[0] = wrong_type_argument (Qnumber_char_or_marker_p, args[0]);
@@ -1901,33 +1900,33 @@
     args[0] = make_fixnum (marker_position (args[0]));
   for (i = 1; i < nargs; i++)
     {
-      comp1 = args[maxindex];
-      comp2 = args[i];
-      switch (promote_args (&comp1, &comp2))
+      switch (promote_args (args + maxindex, args + i))
 	{
 	case FIXNUM_T:
-	  if (XREALFIXNUM (comp1) < XREALFIXNUM (comp2))
+	  if (XREALFIXNUM (args[maxindex]) < XREALFIXNUM (args[i]))
 	    maxindex = i;
 	  break;
 #ifdef HAVE_BIGNUM
 	case BIGNUM_T:
-	  if (bignum_lt (XBIGNUM_DATA (comp1), XBIGNUM_DATA (comp2)))
+	  if (bignum_lt (XBIGNUM_DATA (args[maxindex]),
+			 XBIGNUM_DATA (args[i])))
 	    maxindex = i;
 	  break;
 #endif
 #ifdef HAVE_RATIO
 	case RATIO_T:
-	  if (ratio_lt (XRATIO_DATA (comp1), XRATIO_DATA (comp2)))
+	  if (ratio_lt (XRATIO_DATA (args[maxindex]), XRATIO_DATA (args[i])))
 	    maxindex = i;
 	  break;
 #endif
 	case FLOAT_T:
-	  if (XFLOAT_DATA (comp1) < XFLOAT_DATA (comp2))
+	  if (XFLOAT_DATA (args[maxindex]) < XFLOAT_DATA (args[i]))
 	    maxindex = i;
 	  break;
 #ifdef HAVE_BIGFLOAT
 	case BIGFLOAT_T:
-	  if (bigfloat_lt (XBIGFLOAT_DATA (comp1), XBIGFLOAT_DATA (comp2)))
+	  if (bigfloat_lt (XBIGFLOAT_DATA (args[maxindex]),
+			   XBIGFLOAT_DATA (args[i])))
 	    maxindex = i;
 	  break;
 #endif
@@ -1988,7 +1987,6 @@
 {
 #ifdef WITH_NUMBER_TYPES
   REGISTER int i, minindex = 0;
-  Lisp_Object comp1, comp2;
 
   while (!(CHARP (args[0]) || MARKERP (args[0]) || REALP (args[0])))
     args[0] = wrong_type_argument (Qnumber_char_or_marker_p, args[0]);
@@ -1998,33 +1996,34 @@
     args[0] = make_fixnum (marker_position (args[0]));
   for (i = 1; i < nargs; i++)
     {
-      comp1 = args[minindex];
-      comp2 = args[i];
-      switch (promote_args (&comp1, &comp2))
+      switch (promote_args (args + minindex, args + i))
 	{
 	case FIXNUM_T:
-	  if (XREALFIXNUM (comp1) > XREALFIXNUM (comp2))
+	  if (XREALFIXNUM (args[minindex]) > XREALFIXNUM (args[i]))
 	    minindex = i;
 	  break;
 #ifdef HAVE_BIGNUM
 	case BIGNUM_T:
-	  if (bignum_gt (XBIGNUM_DATA (comp1), XBIGNUM_DATA (comp2)))
+	  if (bignum_gt (XBIGNUM_DATA (args[minindex]),
+			 XBIGNUM_DATA (args[i])))
 	    minindex = i;
 	  break;
 #endif
 #ifdef HAVE_RATIO
 	case RATIO_T:
-	  if (ratio_gt (XRATIO_DATA (comp1), XRATIO_DATA (comp2)))
+	  if (ratio_gt (XRATIO_DATA (args[minindex]),
+			XRATIO_DATA (args[i])))
 	    minindex = i;
 	  break;
 #endif
 	case FLOAT_T:
-	  if (XFLOAT_DATA (comp1) > XFLOAT_DATA (comp2))
+	  if (XFLOAT_DATA (args[minindex]) > XFLOAT_DATA (args[i]))
 	    minindex = i;
 	  break;
 #ifdef HAVE_BIGFLOAT
 	case BIGFLOAT_T:
-	  if (bigfloat_gt (XBIGFLOAT_DATA (comp1), XBIGFLOAT_DATA (comp2)))
+	  if (bigfloat_gt (XBIGFLOAT_DATA (args[minindex]),
+			   XBIGFLOAT_DATA (args[i])))
 	    minindex = i;
 	  break;
 #endif
https://bitbucket.org/xemacs/xemacs/commits/ffc0c5a66ab1/
Changeset:   ffc0c5a66ab1
User:        kehoea
Date:        2013-12-15 11:26:31
Summary:     Be lazy converting markers to integers, bytecode_{arithcompare,arithop}().
src/ChangeLog addition:
2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
	* bytecode.c (bytecode_arithcompare):
	* bytecode.c (bytecode_arithop):
	Call promote_args_lazy () in these two functions, only converting
	markers to fixnums if absolutely necessary (since that is ON with
	large, mule buffers).
	* data.c (BIGNUM_CASE):
	* data.c (RATIO_CASE):
	* data.c (BIGFLOAT_CASE):
	* data.c (ARITHCOMPARE_MANY):
	Call promote_args_lazy () here too if WITH_NUMBER_TYPES is defined.
	We're not doing the equivalent with the non-NUMBER_TYPES code, but
	that's mostly fine, we are doing it in the bytecode.
	* number.h:
	* number.h (NUMBER_TYPES):
	* number.h (promote_args_lazy):
	Add this, returning LAZY_MARKER_T if both arguments are markers
	that point to the same buffer.
tests/ChangeLog addition:
2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
	* automated/lisp-tests.el:
	Test arithmetic comparisons with markers, check the type of the
	returned values for #'min and #'max.
Affected #:  6 files
diff -r 3bfcdeb65578e17883ff14fb2b0463bf1a723d74 -r
ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 src/ChangeLog
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,25 @@
+2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
+
+	* bytecode.c (bytecode_arithcompare):
+	* bytecode.c (bytecode_arithop):
+	Call promote_args_lazy () in these two functions, only converting
+	markers to fixnums if absolutely necessary (since that is ON with
+	large, mule buffers).
+
+	* data.c (BIGNUM_CASE):
+	* data.c (RATIO_CASE):
+	* data.c (BIGFLOAT_CASE):
+	* data.c (ARITHCOMPARE_MANY):
+	Call promote_args_lazy () here too if WITH_NUMBER_TYPES is defined.
+	We're not doing the equivalent with the non-NUMBER_TYPES code, but
+	that's mostly fine, we are doing it in the bytecode.
+	
+	* number.h:
+	* number.h (NUMBER_TYPES):
+	* number.h (promote_args_lazy):
+	Add this, returning LAZY_MARKER_T if both arguments are markers
+	that point to the same buffer.
+
 2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
 
 	* data.c (Fmax):
diff -r 3bfcdeb65578e17883ff14fb2b0463bf1a723d74 -r
ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 src/bytecode.c
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -287,25 +287,32 @@
 bytecode_arithcompare (Lisp_Object obj1, Lisp_Object obj2)
 {
 #ifdef WITH_NUMBER_TYPES
-  switch (promote_args (&obj1, &obj2))
+  switch (promote_args_lazy (&obj1, &obj2))
     {
-    case FIXNUM_T:
+    case LAZY_FIXNUM_T:
       {
 	EMACS_INT ival1 = XREALFIXNUM (obj1), ival2 = XREALFIXNUM (obj2);
 	return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0;
       }
 #ifdef HAVE_BIGNUM
-    case BIGNUM_T:
+    case LAZY_BIGNUM_T:
       return bignum_cmp (XBIGNUM_DATA (obj1), XBIGNUM_DATA (obj2));
 #endif
 #ifdef HAVE_RATIO
-    case RATIO_T:
+    case LAZY_RATIO_T:
       return ratio_cmp (XRATIO_DATA (obj1), XRATIO_DATA (obj2));
 #endif
 #ifdef HAVE_BIGFLOAT
-    case BIGFLOAT_T:
+    case LAZY_BIGFLOAT_T:
       return bigfloat_cmp (XBIGFLOAT_DATA (obj1), XBIGFLOAT_DATA (obj2));
 #endif
+    case LAZY_MARKER_T:
+      {
+	Bytebpos ival1 = byte_marker_position (obj1);
+	Bytebpos ival2 = byte_marker_position (obj2);
+	return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0;
+      }
+
     default: /* FLOAT_T */
       {
 	double dval1 = XFLOAT_DATA (obj1), dval2 = XFLOAT_DATA (obj2);
@@ -320,7 +327,19 @@
 
     if      (FIXNUMP    (obj1)) ival1 = XFIXNUM  (obj1);
     else if (CHARP   (obj1)) ival1 = XCHAR (obj1);
-    else if (MARKERP (obj1)) ival1 = marker_position (obj1);
+    else if (MARKERP (obj1))
+      {
+	/* Handle markers specially, since #'marker-position can be O(N): */
+	if (MARKERP (obj2)
+	    && (XMARKER (obj1)->buffer == XMARKER (obj2)->buffer))
+	  {
+	    Bytebpos ival1 = byte_marker_position (obj1);
+	    Bytebpos ival2 = byte_marker_position (obj2);
+	    return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0;
+	  }
+
+	ival1 = marker_position (obj1);
+      }
     else goto arithcompare_float;
 
     if      (FIXNUMP    (obj2)) ival2 = XFIXNUM  (obj2);
@@ -365,9 +384,29 @@
 bytecode_arithop (Lisp_Object obj1, Lisp_Object obj2, Opcode opcode)
 {
 #ifdef WITH_NUMBER_TYPES
-  switch (promote_args (&obj1, &obj2))
+  switch (promote_args_lazy (&obj1, &obj2))
     {
-    case FIXNUM_T:
+    case LAZY_MARKER_T:
+      {
+	switch (opcode)
+	  {
+	  case Bmax:
+	    return make_fixnum (marker_position
+				((byte_marker_position (obj1)
+				  < byte_marker_position (obj2)) ?
+				 obj2 : obj1));
+	  case Bmin:
+	    return make_fixnum (marker_position
+				((byte_marker_position (obj1)
+				  > byte_marker_position (obj2)) ?
+				 obj2 : obj1));
+	  default:
+	    obj1 = make_fixnum (marker_position (obj1));
+	    obj2 = make_fixnum (marker_position (obj2));
+	    /* FALLTHROUGH */
+	  }
+      }
+    case LAZY_FIXNUM_T:
       {
 	EMACS_INT ival1 = XREALFIXNUM (obj1), ival2 = XREALFIXNUM (obj2);
 	switch (opcode)
@@ -395,7 +434,7 @@
 	return make_integer (ival1);
       }
 #ifdef HAVE_BIGNUM
-    case BIGNUM_T:
+    case LAZY_BIGNUM_T:
       switch (opcode)
 	{
 	case Bplus:
@@ -426,7 +465,7 @@
       return Fcanonicalize_number (make_bignum_bg (scratch_bignum));
 #endif
 #ifdef HAVE_RATIO
-    case RATIO_T:
+    case LAZY_RATIO_T:
       switch (opcode)
 	{
 	case Bplus:
@@ -453,7 +492,7 @@
       return make_ratio_rt (scratch_ratio);
 #endif
 #ifdef HAVE_BIGFLOAT
-    case BIGFLOAT_T:
+    case LAZY_BIGFLOAT_T:
       bigfloat_set_prec (scratch_bigfloat, max (XBIGFLOAT_GET_PREC (obj1),
 						XBIGFLOAT_GET_PREC (obj2)));
       switch (opcode)
diff -r 3bfcdeb65578e17883ff14fb2b0463bf1a723d74 -r
ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 src/data.c
--- a/src/data.c
+++ b/src/data.c
@@ -899,7 +899,7 @@
 
 #ifdef HAVE_BIGNUM
 #define BIGNUM_CASE(op)							\
-	case BIGNUM_T:							\
+        case LAZY_BIGNUM_T:                                             \
 	  if (!bignum_##op (XBIGNUM_DATA (obj1), XBIGNUM_DATA (obj2)))	\
 	    return Qnil;						\
 	  break;
@@ -909,7 +909,7 @@
 
 #ifdef HAVE_RATIO
 #define RATIO_CASE(op)							\
-	case RATIO_T:							\
+        case LAZY_RATIO_T:                                              \
 	  if (!ratio_##op (XRATIO_DATA (obj1), XRATIO_DATA (obj2)))	\
 	    return Qnil;						\
 	  break;
@@ -919,7 +919,7 @@
 
 #ifdef HAVE_BIGFLOAT
 #define BIGFLOAT_CASE(op)						\
-	case BIGFLOAT_T:						\
+	case LAZY_BIGFLOAT_T:						\
 	  if (!bigfloat_##op (XBIGFLOAT_DATA (obj1), XBIGFLOAT_DATA (obj2))) \
 	    return Qnil;						\
 	  break;
@@ -936,24 +936,33 @@
     {								\
       obj1 = args[i - 1];					\
       obj2 = args[i];						\
-      switch (promote_args (&obj1, &obj2))			\
+      switch (promote_args_lazy (&obj1, &obj2))                 \
 	{							\
-	case FIXNUM_T:						\
-	  if (!(XREALFIXNUM (obj1) c_op XREALFIXNUM (obj2)))		\
+        case LAZY_FIXNUM_T:                                     \
+          if (!(XREALFIXNUM (obj1) c_op XREALFIXNUM (obj2)))    \
 	    return Qnil;					\
 	  break;						\
 	BIGNUM_CASE (op)					\
 	RATIO_CASE (op)						\
-	case FLOAT_T:						\
+        case LAZY_FLOAT_T:                                      \
 	  if (!(XFLOAT_DATA (obj1) c_op XFLOAT_DATA (obj2)))	\
 	    return Qnil;					\
 	  break;						\
 	BIGFLOAT_CASE (op)					\
+        case LAZY_MARKER_T:                                     \
+          if (!(byte_marker_position (obj1) c_op                \
+                byte_marker_position (obj2)))                   \
+            return Qnil;                                        \
+          break;                                                \
 	}							\
     }								\
   return Qt;							\
 }
 #else /* !WITH_NUMBER_TYPES */
+/* We don't convert markers lazily here, although we could. It's more
+   important that we do this lazily in bytecode, which is the case; see
+   bytecode_arithcompare().
+   */
 #define ARITHCOMPARE_MANY(c_op,op)				\
 {								\
   int_or_double iod1, iod2, *p = &iod1, *q = &iod2;		\
diff -r 3bfcdeb65578e17883ff14fb2b0463bf1a723d74 -r
ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 src/number.h
--- a/src/number.h
+++ b/src/number.h
@@ -373,11 +373,42 @@
 
 EXFUN (Fcanonicalize_number, 1);
 
-enum number_type {FIXNUM_T, BIGNUM_T, RATIO_T, FLOAT_T, BIGFLOAT_T};
+#define NUMBER_TYPES(prefix) prefix##FIXNUM_T, prefix##BIGNUM_T, \
+    prefix##RATIO_T, prefix##FLOAT_T, prefix##BIGFLOAT_T
+
+enum number_type { NUMBER_TYPES() };
+enum lazy_number_type { NUMBER_TYPES(LAZY_), LAZY_MARKER_T };
+
+#undef NUMBER_TYPES
 
 extern enum number_type get_number_type (Lisp_Object);
 extern enum number_type promote_args (Lisp_Object *, Lisp_Object *);
 
+/* promote_args() *always* converts a marker argument to a fixnum.
+
+   Unfortunately, for a marker with byte position N, getting the (character)
+   marker position is O(N). Getting the character position isn't necessary
+   for bytecode_arithcompare() if two markers being compared are in the same
+   buffer, comparing the byte position is enough.
+
+   Similarly, min and max don't necessarily need to have their arguments
+   converted from markers, though we have always promised up to this point
+   that the result is a fixnum rather than a marker, and that's what we're
+   continuing to do. */
+
+DECLARE_INLINE_HEADER (
+enum lazy_number_type
+promote_args_lazy (Lisp_Object *obj1, Lisp_Object *obj2))
+{
+  if (MARKERP (*obj1) && MARKERP (*obj2) &&
+      XMARKER (*obj1)->buffer == XMARKER (*obj2)->buffer)
+    {
+      return LAZY_MARKER_T;
+    }
+
+  return (enum lazy_number_type) promote_args (obj1, obj2);
+}
+
 #ifdef WITH_NUMBER_TYPES
 DECLARE_INLINE_HEADER (
 int
diff -r 3bfcdeb65578e17883ff14fb2b0463bf1a723d74 -r
ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 tests/ChangeLog
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
+
+	* automated/lisp-tests.el:
+	Test arithmetic comparisons with markers, check the type of the
+	returned values for #'min and #'max.
+
 2013-09-15  Mats Lidell  <matsl(a)xemacs.org>
 
 	* automated/files-tests.el: New file. Test new states in
diff -r 3bfcdeb65578e17883ff14fb2b0463bf1a723d74 -r
ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 tests/automated/lisp-tests.el
--- a/tests/automated/lisp-tests.el
+++ b/tests/automated/lisp-tests.el
@@ -3041,4 +3041,83 @@
                 (macroexpand '(with-second-arguments)))))
    (with-both-arguments (list))))
 
+;; Test arithmetic comparisons of markers and operations on markers. Most
+;; relevant with Mule, but also worth doing on non-Mule.
+(let ((character (if (featurep 'mule) (decode-char 'ucs #x20ac) ?\xff))
+      (translation (make-char-table 'generic))
+      markers fixnums)
+  (macrolet
+      ((Assert-arith-equivalences (markers context)
+	 `(progn
+	   (Assert (apply #'> markers)
+		   ,(concat "checking #'> correct with long arguments list, "
+		     context))
+	   (Assert 0 ,context)
+	   (Assert (apply #'< (reverse markers))
+		   ,(concat "checking #'< correct with long arguments list, "
+			    context))
+	   (map-plist #'(lambda (object1 object2)
+			  (Assert (> object1 object2)
+				  ,(concat 
+				    "checking markers correctly ordered, >, "
+				    context))
+			  (Assert (< object2 object1)
+				  ,(concat
+				    "checking markers correctly ordered, <, "
+				    context)))
+		      markers)
+	   ;; OK, so up to this point there has been no need for byte-char
+	   ;; conversion. The following requires it, though:
+	   (map-plist #'(lambda (object1 object2)
+			  (Assert
+			   (= (max object1 object2) object1)
+			   ,(concat
+			     "checking max correct, two markers, " context))
+			  (Assert
+			   (= (min object1 object2) object2)
+			   ,(concat
+			     "checking min, correct, two markers, " context))
+			  ;; It is probably reasonable to change this design
+			  ;; decision.
+			  (Assert
+			   (fixnump (max object1 object2))
+			   ,(concat
+			     "checking fixnum conversion as documented, max, "
+			     context))
+			  (Assert
+			   (fixnump (min object1 object2))
+			   ,(concat
+			     "checking fixnum conversion as documented, min, "
+			     context)))
+	              markers))))
+    (with-temp-buffer
+      (princ "hello there, in with-temp-buffer\n" (get-buffer
"*scratch*"))
+      (loop for ii from 0 to 100
+	do (progn
+	     (insert " " character " " character " " character
" "
+			 character "\n")
+	     (insert character)
+	     (push (copy-marker (1- (point)) t) markers)
+	     (insert ?\x20)
+	     (push (copy-marker (1- (point)) t) markers)))
+      (Assert-arith-equivalences markers "with Euro sign")
+      ;; Save the markers as fixnum character positions:
+      (setq fixnums (mapcar #'marker-position markers))
+      ;; Check that the equivalences work with the fixnums, while we
+      ;; have them:
+      (Assert-arith-equivalences fixnums "fixnums, with Euro sign")
+      ;; Now, transform the characters that may be problematic to ASCII,
+      ;; check our equivalences still hold.
+      (put-char-table character ?\x7f translation)
+      (translate-region (point-min) (point-max) translation)
+      ;; Sigh, restore the markers #### shouldn't the insertion and
+      ;; deletion code do this?!
+      (map nil #'set-marker markers fixnums)
+      (Assert-arith-equivalences markers "without Euro sign")
+      ;; Restore the problematic character.
+      (put-char-table ?\x7f character translation)
+      (translate-region (point-min) (point-max) translation)
+      (map nil #'set-marker markers fixnums)
+      (Assert-arith-equivalences markers "with Euro sign restored"))))
+
 ;;; end of lisp-tests.el
https://bitbucket.org/xemacs/xemacs/commits/f22989bb7632/
Changeset:   f22989bb7632
User:        kehoea
Date:        2013-12-15 11:38:19
Summary:     Check (featurep 'font-mgr) before calling fontconfig functions, tests
tests/ChangeLog addition:
2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
	* automated/face-tests.el:
	Only test fontconfig if the font-mgr feature is available, avoid
	errors when it isn't.
Affected #:  2 files
diff -r ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 -r
f22989bb76320d7d68b84212f765e77d01567b11 tests/ChangeLog
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
+
+	* automated/face-tests.el:
+	Only test fontconfig if the font-mgr feature is available, avoid
+	errors when it isn't.
+
 2013-12-15  Aidan Kehoe  <kehoea(a)parhasard.net>
 
 	* automated/lisp-tests.el:
diff -r ffc0c5a66ab16ee04acb86c6d26dc4d31fc34913 -r
f22989bb76320d7d68b84212f765e77d01567b11 tests/automated/face-tests.el
--- a/tests/automated/face-tests.el
+++ b/tests/automated/face-tests.el
@@ -29,76 +29,74 @@
 
 ;; Test fontconfig
 
-(let* ((test-name-parts
-	'("Bitstream Vera Sans Mono-16"
-	  "familylang=en"
-	  "style=Roman"
-	  "stylelang=en"
-	  "fullname=Bitstream Vera Sans Mono"
-	  "fullnamelang=en"
-	  "slant=0"
-	  "weight=80"
-	  "width=100"
-	  "pixelsize=21.3174"
-	  "spacing=100"
-	  "foundry=bitstream"
-	  "antialias=True"
-	  "hintstyle=3"
-	  "hinting=True"
-	  "verticallayout=False"
-	  "autohint=False"
-	  "globaladvance=True"
-	  "file=/usr/X11/lib/X11/fonts/TTF/VeraMono.ttf"
-	  "index=0"
-	  "outline=True"
-	  "scalable=True"
-	  "dpi=95.9282"
-	  "rgba=0"
-	  "scale=1"
-	  "minspace=False"
-	  "charset=  |>^1!|>^1!P0oWQ
|>^1!|>^1!|>^1!!!!%#gfN8.!!B7%ggR6OF3y?4!!K?&   !!!)$      9;*f! !!!.%    
!!!)$!!!!# !!#0GM>RAd#y#fx   !!!W5  !!#3H !!!!&      !!#6I<UKaX!!!?+!!!%#!!!!X  
 !!#AL      !!!1& !!+u{!!!!)       "
-	 
"lang=aa|ay|bi|br|ch|co|da|de|en|es|et|eu|fi|fj|fo|fr|fur|fy|gd|gl|gv|ho|ia|id|ie|io|is|it|lb|mg|nb|nds|nl|nn|no|nr|nso|oc|om|pt|rm|sma|smj|so|sq|ss|st|sv|sw|tl|tn|tr|ts|uz|vo|vot|wa|xh|yap|zu|an|crh|fil|ht|jv|kj|ku-tr|kwm|li|ms|ng|pap-an|pap-aw|rn|rw|sc|sg|sn|su|za"
-	  "fontversion=131072"
-	  "fontformat=TrueType"
-	  "embolden=False"
-	  "embeddedbitmap=True"
-	  "decorative=False"
-	  "lcdfilter=1"
-	  "namelang=en"
-	  "prgname=xemacs"
-	 
"hash=sha256\\:da4281dc7db17a3dfce64a62ced92875c5895340055ec8ba24a3914eb97b349d"
-	  "postscriptname=BitstreamVeraSansMono-Roman"))
-	(test-name-degenerate "")
-	(test-name-trivial (nth 0 test-name-parts))
-	(test-name-short
-	 (concat (nth 0 test-name-parts) ":" (nth 26 test-name-parts)))
-	(test-name-long	(mapconcat #'identity
-				   (append (subseq test-name-parts 0 26)
-					   (subseq test-name-parts 27))
-				   ":"))
-	(test-name-full (mapconcat #'identity test-name-parts ":"))
-	)
-  (labels ((try (fontname)
-	     (fc-name-unparse (fc-name-parse fontname)))
-	   (try-harder (fontname)
-	     (fc-name-unparse (fc-name-parse-harder fontname))))
-    (Assert (string= test-name-degenerate (try test-name-degenerate)))
-    (Assert (string= test-name-degenerate (try-harder test-name-degenerate)))
-    (Assert (string= test-name-trivial (try test-name-trivial)))
-    (Assert (string= test-name-trivial (try-harder test-name-trivial)))
-    ;; Note when the `try' form fails, the `try-harder' form returns a
-    ;; shorter name.
-    (Check-Error 'invalid-argument
-		 (string= test-name-short (try test-name-short)))
-    (Assert (string= test-name-trivial (try-harder test-name-short)))
-    (Assert (string= test-name-long (try test-name-long)))
-    (Assert (string= test-name-long (try-harder test-name-long)))
-    ;; Note when the `try' form fails, the `try-harder' form returns a
-    ;; shorter name.
-    (Check-Error 'invalid-argument
-		 (string= test-name-full (try test-name-full)))
-    (Assert (string= test-name-long (try-harder test-name-full)))
-    ) ; labels
-  ) ; let
+(when (featurep 'font-mgr)
+  (let* ((test-name-parts
+	  '("Bitstream Vera Sans Mono-16"
+	    "familylang=en"
+	    "style=Roman"
+	    "stylelang=en"
+	    "fullname=Bitstream Vera Sans Mono"
+	    "fullnamelang=en"
+	    "slant=0"
+	    "weight=80"
+	    "width=100"
+	    "pixelsize=21.3174"
+	    "spacing=100"
+	    "foundry=bitstream"
+	    "antialias=True"
+	    "hintstyle=3"
+	    "hinting=True"
+	    "verticallayout=False"
+	    "autohint=False"
+	    "globaladvance=True"
+	    "file=/usr/X11/lib/X11/fonts/TTF/VeraMono.ttf"
+	    "index=0"
+	    "outline=True"
+	    "scalable=True"
+	    "dpi=95.9282"
+	    "rgba=0"
+	    "scale=1"
+	    "minspace=False"
+	    "charset=  |>^1!|>^1!P0oWQ
|>^1!|>^1!|>^1!!!!%#gfN8.!!B7%ggR6OF3y?4!!K?&   !!!)$      9;*f! !!!.%    
!!!)$!!!!# !!#0GM>RAd#y#fx   !!!W5  !!#3H !!!!&      !!#6I<UKaX!!!?+!!!%#!!!!X  
 !!#AL      !!!1& !!+u{!!!!)       "
+	   
"lang=aa|ay|bi|br|ch|co|da|de|en|es|et|eu|fi|fj|fo|fr|fur|fy|gd|gl|gv|ho|ia|id|ie|io|is|it|lb|mg|nb|nds|nl|nn|no|nr|nso|oc|om|pt|rm|sma|smj|so|sq|ss|st|sv|sw|tl|tn|tr|ts|uz|vo|vot|wa|xh|yap|zu|an|crh|fil|ht|jv|kj|ku-tr|kwm|li|ms|ng|pap-an|pap-aw|rn|rw|sc|sg|sn|su|za"
+	    "fontversion=131072"
+	    "fontformat=TrueType"
+	    "embolden=False"
+	    "embeddedbitmap=True"
+	    "decorative=False"
+	    "lcdfilter=1"
+	    "namelang=en"
+	    "prgname=xemacs"
+	   
"hash=sha256\\:da4281dc7db17a3dfce64a62ced92875c5895340055ec8ba24a3914eb97b349d"
+	    "postscriptname=BitstreamVeraSansMono-Roman"))
+	 (test-name-degenerate "")
+	 (test-name-trivial (nth 0 test-name-parts))
+	 (test-name-short
+	  (concat (nth 0 test-name-parts) ":" (nth 26 test-name-parts)))
+	 (test-name-long	(mapconcat #'identity
+					   (append (subseq test-name-parts 0 26)
+						   (subseq test-name-parts 27))
+					   ":"))
+	 (test-name-full (mapconcat #'identity test-name-parts ":")))
+    (labels ((try (fontname)
+	       (fc-name-unparse (fc-name-parse fontname)))
+	     (try-harder (fontname)
+	       (fc-name-unparse (fc-name-parse-harder fontname))))
+      (Assert (string= test-name-degenerate (try test-name-degenerate)))
+      (Assert (string= test-name-degenerate (try-harder test-name-degenerate)))
+      (Assert (string= test-name-trivial (try test-name-trivial)))
+      (Assert (string= test-name-trivial (try-harder test-name-trivial)))
+      ;; Note when the `try' form fails, the `try-harder' form returns a
+      ;; shorter name.
+      (Check-Error 'invalid-argument
+		   (string= test-name-short (try test-name-short)))
+      (Assert (string= test-name-trivial (try-harder test-name-short)))
+      (Assert (string= test-name-long (try test-name-long)))
+      (Assert (string= test-name-long (try-harder test-name-long)))
+      ;; Note when the `try' form fails, the `try-harder' form returns a
+      ;; shorter name.
+      (Check-Error 'invalid-argument
+		   (string= test-name-full (try test-name-full)))
+      (Assert (string= test-name-long (try-harder test-name-full))))))
 
 ;;; end face-tests.el
Repository URL: 
https://bitbucket.org/xemacs/xemacs/
--
This is a commit notification from 
bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches