aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1993-03-28 05:21:24 +0000
committerRichard M. Stallman1993-03-28 05:21:24 +0000
commit97832bd0c8ca815c417e86482d5d2306779277a6 (patch)
tree46aa5f34744efe6f036f6a7388f80e9d3dc025a7 /src
parent9c3f23b7e7b1d01064ba9da65b61f0d24af965fc (diff)
downloademacs-97832bd0c8ca815c417e86482d5d2306779277a6.tar.gz
emacs-97832bd0c8ca815c417e86482d5d2306779277a6.zip
(Freplace_match): Clean up criterion about converting case.
If old text has any capitalized words, capitalize new text.
Diffstat (limited to 'src')
-rw-r--r--src/search.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/search.c b/src/search.c
index c837dbee071..03ed61fcd0d 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1147,7 +1147,8 @@ Leaves point at end of replacement text.")
1147 enum { nochange, all_caps, cap_initial } case_action; 1147 enum { nochange, all_caps, cap_initial } case_action;
1148 register int pos, last; 1148 register int pos, last;
1149 int some_multiletter_word; 1149 int some_multiletter_word;
1150 int some_letter = 0; 1150 int some_lowercase;
1151 int some_uppercase_initial;
1151 register int c, prevc; 1152 register int c, prevc;
1152 int inslen; 1153 int inslen;
1153 1154
@@ -1162,8 +1163,8 @@ Leaves point at end of replacement text.")
1162 if (search_regs.start[0] < BEGV 1163 if (search_regs.start[0] < BEGV
1163 || search_regs.start[0] > search_regs.end[0] 1164 || search_regs.start[0] > search_regs.end[0]
1164 || search_regs.end[0] > ZV) 1165 || search_regs.end[0] > ZV)
1165 args_out_of_range(make_number (search_regs.start[0]), 1166 args_out_of_range (make_number (search_regs.start[0]),
1166 make_number (search_regs.end[0])); 1167 make_number (search_regs.end[0]));
1167 1168
1168 if (NILP (fixedcase)) 1169 if (NILP (fixedcase))
1169 { 1170 {
@@ -1176,6 +1177,8 @@ Leaves point at end of replacement text.")
1176 /* some_multiletter_word is set nonzero if any original word 1177 /* some_multiletter_word is set nonzero if any original word
1177 is more than one letter long. */ 1178 is more than one letter long. */
1178 some_multiletter_word = 0; 1179 some_multiletter_word = 0;
1180 some_lowercase = 0;
1181 some_uppercase_initial = 0;
1179 1182
1180 for (pos = search_regs.start[0]; pos < last; pos++) 1183 for (pos = search_regs.start[0]; pos < last; pos++)
1181 { 1184 {
@@ -1184,33 +1187,32 @@ Leaves point at end of replacement text.")
1184 { 1187 {
1185 /* Cannot be all caps if any original char is lower case */ 1188 /* Cannot be all caps if any original char is lower case */
1186 1189
1187 case_action = cap_initial; 1190 some_lowercase = 1;
1188 if (SYNTAX (prevc) != Sword) 1191 if (SYNTAX (prevc) != Sword)
1189 { 1192 ;
1190 /* Cannot even be cap initials
1191 if some original initial is lower case */
1192 case_action = nochange;
1193 break;
1194 }
1195 else 1193 else
1196 some_multiletter_word = 1; 1194 some_multiletter_word = 1;
1197 } 1195 }
1198 else if (!NOCASEP (c)) 1196 else if (!NOCASEP (c))
1199 { 1197 {
1200 some_letter = 1; 1198 if (SYNTAX (prevc) != Sword)
1201 if (!some_multiletter_word && SYNTAX (prevc) == Sword) 1199 some_uppercase_initial = 1;
1200 else
1202 some_multiletter_word = 1; 1201 some_multiletter_word = 1;
1203 } 1202 }
1204 1203
1205 prevc = c; 1204 prevc = c;
1206 } 1205 }
1207 1206
1208 /* Do not make new text all caps 1207 /* Convert to all caps if the old text is all caps
1209 if the original text contained only single letter words. */ 1208 and has at least one multiletter word. */
1210 if (case_action == all_caps && !some_multiletter_word) 1209 if (! some_lowercase && some_multiletter_word)
1210 case_action = all_caps;
1211 /* Capitalize each word, if the old text has a capitalized word. */
1212 else if (some_uppercase_initial)
1211 case_action = cap_initial; 1213 case_action = cap_initial;
1212 1214 else
1213 if (!some_letter) case_action = nochange; 1215 case_action = nochange;
1214 } 1216 }
1215 1217
1216 SET_PT (search_regs.end[0]); 1218 SET_PT (search_regs.end[0]);