diff options
| author | Richard M. Stallman | 1993-03-28 05:21:24 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1993-03-28 05:21:24 +0000 |
| commit | 97832bd0c8ca815c417e86482d5d2306779277a6 (patch) | |
| tree | 46aa5f34744efe6f036f6a7388f80e9d3dc025a7 /src | |
| parent | 9c3f23b7e7b1d01064ba9da65b61f0d24af965fc (diff) | |
| download | emacs-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.c | 36 |
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]); |