diff src/search.c @ 2393:a35d2c5cbb3b

(Freplace_match): Clean up criterion about converting case. If old text has any capitalized words, capitalize new text.
author Richard M. Stallman <rms@gnu.org>
date Sun, 28 Mar 1993 05:21:24 +0000
parents 952f2a18f83d
children b6c62e4abf59
line wrap: on
line diff
--- a/src/search.c	Sun Mar 28 05:20:42 1993 +0000
+++ b/src/search.c	Sun Mar 28 05:21:24 1993 +0000
@@ -1147,7 +1147,8 @@
   enum { nochange, all_caps, cap_initial } case_action;
   register int pos, last;
   int some_multiletter_word;
-  int some_letter = 0;
+  int some_lowercase;
+  int some_uppercase_initial;
   register int c, prevc;
   int inslen;
 
@@ -1162,8 +1163,8 @@
   if (search_regs.start[0] < BEGV
       || search_regs.start[0] > search_regs.end[0]
       || search_regs.end[0] > ZV)
-    args_out_of_range(make_number (search_regs.start[0]),
-		      make_number (search_regs.end[0]));
+    args_out_of_range (make_number (search_regs.start[0]),
+		       make_number (search_regs.end[0]));
 
   if (NILP (fixedcase))
     {
@@ -1176,6 +1177,8 @@
       /* some_multiletter_word is set nonzero if any original word
 	 is more than one letter long. */
       some_multiletter_word = 0;
+      some_lowercase = 0;
+      some_uppercase_initial = 0;
 
       for (pos = search_regs.start[0]; pos < last; pos++)
 	{
@@ -1184,33 +1187,32 @@
 	    {
 	      /* Cannot be all caps if any original char is lower case */
 
-	      case_action = cap_initial;
+	      some_lowercase = 1;
 	      if (SYNTAX (prevc) != Sword)
-		{
-		  /* Cannot even be cap initials
-		     if some original initial is lower case */
-		  case_action = nochange;
-		  break;
-		}
+		;
 	      else
 		some_multiletter_word = 1;
 	    }
 	  else if (!NOCASEP (c))
 	    {
-	      some_letter = 1;
-	      if (!some_multiletter_word && SYNTAX (prevc) == Sword)
+	      if (SYNTAX (prevc) != Sword)
+		some_uppercase_initial = 1;
+	      else
 		some_multiletter_word = 1;
 	    }
 
 	  prevc = c;
 	}
 
-      /* Do not make new text all caps
-	 if the original text contained only single letter words. */
-      if (case_action == all_caps && !some_multiletter_word)
+      /* Convert to all caps if the old text is all caps
+	 and has at least one multiletter word.  */
+      if (! some_lowercase && some_multiletter_word)
+	case_action = all_caps;
+      /* Capitalize each word, if the old text has a capitalized word.  */
+      else if (some_uppercase_initial)
 	case_action = cap_initial;
-
-      if (!some_letter) case_action = nochange;
+      else
+	case_action = nochange;
     }
 
   SET_PT (search_regs.end[0]);