diff src/fontcolor-msw.c @ 5182:2e528066e2fc

Move #'sort*, #'fill, #'merge to C from cl-seq.el. lisp/ChangeLog addition: 2010-04-01 Aidan Kehoe <kehoea@parhasard.net> * cl-seq.el (fill, sort*, merge): Move these functions to fns.c. (stable-sort): Make this docstring reflect the argument names used in the #'sort* docstring. * cl-macs.el (stable-sort): Make #'stable-sort exactly equivalent to #'sort* in compiled code. * bytecomp.el (byte-compile-maybe-add-*): New macro, for functions like #'sort and #'mapcar that, to be strictly compatible, should only take two args, but in our implementation can take more, because they're aliases of #'sort* and #'mapcar*. (byte-compile-mapcar, byte-compile-sort, byte-compile-fillarray): Use this new macro. (map-into): Add a byte-compile method for #'map-into in passing. * apropos.el (apropos-print): Use #'sort* with a :key argument, now it's in C. * compat.el (extent-at): Ditto. * register.el (list-registers): Ditto. * package-ui.el (pui-list-packages): Ditto. * help.el (sorted-key-descriptions): Ditto. src/ChangeLog addition: 2010-03-31 Aidan Kehoe <kehoea@parhasard.net> * fns.c (STRING_DATA_TO_OBJECT_ARRAY) (BIT_VECTOR_TO_OBJECT_ARRAY, c_merge_predicate_key) (c_merge_predicate_nokey, list_merge, array_merge) (list_array_merge_into_list, list_list_merge_into_array) (list_array_merge_into_array, CHECK_KEY_ARGUMENT, Fmerge) (list_sort, array_sort, FsortX): Move #'sort*, #'fill, #'merge from cl-seq.el to C, extending the implementations of Fsort, Ffillarray, and merge() to do so. * keymap.c (keymap_submaps, map_keymap_sort_predicate) (describe_map_sort_predicate): Change the calling semantics of the C sort predicates to return a non-nil Lisp object if the first argument is less than the second, rather than C integers. * fontcolor-msw.c (sort_font_list_function): * fileio.c (build_annotations): * dired.c (Fdirectory_files): * abbrev.c (Finsert_abbrev_table_description): Call list_sort instead of Fsort, list_merge instead of merge() in these functions. man/ChangeLog addition: 2010-04-01 Aidan Kehoe <kehoea@parhasard.net> * lispref/lists.texi (Rearrangement): Update the documentation of #'sort here, now that it accepts any type of sequence and the KEY keyword argument. (Though this is probably now the wrong place for this function, given that.)
author Aidan Kehoe <kehoea@parhasard.net>
date Thu, 01 Apr 2010 20:22:50 +0100
parents 8b2f75cecb89
children 71ee43b8a74d
line wrap: on
line diff
--- a/src/fontcolor-msw.c	Mon Mar 29 23:23:33 2010 -0500
+++ b/src/fontcolor-msw.c	Thu Apr 01 20:22:50 2010 +0100
@@ -1172,9 +1172,10 @@
    "family::::charset" for TrueType fonts, "family::size::charset"
    otherwise. */
 
-static int
+static Lisp_Object
 sort_font_list_function (Lisp_Object obj1, Lisp_Object obj2,
-			 Lisp_Object UNUSED (pred))
+			 Lisp_Object UNUSED (pred),
+                         Lisp_Object UNUSED (key_function))
 {
   Ibyte *font1, *font2;
   Ibyte *c1, *c2;
@@ -1188,16 +1189,16 @@
     5. Courier New over other families.
   */
 
-  /* The sort function should return > 0 if OBJ1 < OBJ2, < 0 otherwise.
+  /* The sort function should return non-nil if OBJ1 < OBJ2, nil otherwise.
      NOTE: This is backwards from the way qsort() works. */
 
   t1 = !NILP (XCDR (obj1));
   t2 = !NILP (XCDR (obj2));
 
   if (t1 && !t2)
-    return 1;
+    return Qt;
   if (t2 && !t1)
-    return -1;
+    return Qnil;
 
   font1 = XSTRING_DATA (XCAR (obj1));
   font2 = XSTRING_DATA (XCAR (obj2));
@@ -1209,9 +1210,9 @@
   t2 = !qxestrcasecmp_ascii (c2 + 1, "western");
 
   if (t1 && !t2)
-    return 1;
+    return Qt;
   if (t2 && !t1)
-    return -1;
+    return Qnil;
 
   c1 -= 2;
   c2 -= 2;
@@ -1219,9 +1220,9 @@
   t2 = *c2 == ':';
 
   if (t1 && !t2)
-    return 1;
+    return Qt;
   if (t2 && !t1)
-    return -1;
+    return Qnil;
 
   if (!t1 && !t2)
     {
@@ -1234,25 +1235,25 @@
       t2 = qxeatoi (c2 + 1) - 10;
 
       if (abs (t1) < abs (t2))
-	return 1;
+	return Qt;
       else if (abs (t2) < abs (t1))
-	return -1;
+	return Qnil;
       else if (t1 < t2)
 	/* Prefer a smaller font over a larger one just as far away
 	   because the smaller one won't upset the total line height if it's
 	   just a few chars. */
-	return 1;
+	return Qt;
     }
 
   t1 = !qxestrncasecmp_ascii (font1, "courier new:", 12);
   t2 = !qxestrncasecmp_ascii (font2, "courier new:", 12);
 
   if (t1 && !t2)
-    return 1;
+    return Qt;
   if (t2 && !t1)
-    return -1;
+    return Qnil;
 
-  return -1;
+  return Qnil;
 }
 
 /*
@@ -1278,7 +1279,7 @@
   qxeEnumFontFamiliesEx (hdc, &logfont, (FONTENUMPROCW) font_enum_callback_1,
 			 (LPARAM) (&font_enum), 0);
 
-  return list_sort (font_enum.list, Qnil, sort_font_list_function);
+  return list_sort (font_enum.list, sort_font_list_function, Qnil, Qidentity);
 }
 
 static HFONT