Mercurial > emacs
comparison src/search.c @ 7674:947d24fefd9e
(Freplace_match): Improve capitalization heuristics.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Wed, 25 May 1994 03:59:06 +0000 |
parents | 6ad64419ba08 |
children | 9687141f6264 |
comparison
equal
deleted
inserted
replaced
7673:6ad64419ba08 | 7674:947d24fefd9e |
---|---|
1172 { | 1172 { |
1173 enum { nochange, all_caps, cap_initial } case_action; | 1173 enum { nochange, all_caps, cap_initial } case_action; |
1174 register int pos, last; | 1174 register int pos, last; |
1175 int some_multiletter_word; | 1175 int some_multiletter_word; |
1176 int some_lowercase; | 1176 int some_lowercase; |
1177 int some_uppercase; | |
1177 int some_lowercase_initial; | 1178 int some_lowercase_initial; |
1178 register int c, prevc; | 1179 register int c, prevc; |
1179 int inslen; | 1180 int inslen; |
1180 | 1181 |
1181 CHECK_STRING (newtext, 0); | 1182 CHECK_STRING (newtext, 0); |
1203 /* some_multiletter_word is set nonzero if any original word | 1204 /* some_multiletter_word is set nonzero if any original word |
1204 is more than one letter long. */ | 1205 is more than one letter long. */ |
1205 some_multiletter_word = 0; | 1206 some_multiletter_word = 0; |
1206 some_lowercase = 0; | 1207 some_lowercase = 0; |
1207 some_lowercase_initial = 0; | 1208 some_lowercase_initial = 0; |
1209 some_uppercase = 0; | |
1208 | 1210 |
1209 for (pos = search_regs.start[0]; pos < last; pos++) | 1211 for (pos = search_regs.start[0]; pos < last; pos++) |
1210 { | 1212 { |
1211 c = FETCH_CHAR (pos); | 1213 c = FETCH_CHAR (pos); |
1212 if (LOWERCASEP (c)) | 1214 if (LOWERCASEP (c)) |
1219 else | 1221 else |
1220 some_multiletter_word = 1; | 1222 some_multiletter_word = 1; |
1221 } | 1223 } |
1222 else if (!NOCASEP (c)) | 1224 else if (!NOCASEP (c)) |
1223 { | 1225 { |
1226 some_uppercase = 1; | |
1224 if (SYNTAX (prevc) != Sword) | 1227 if (SYNTAX (prevc) != Sword) |
1225 ; | 1228 ; |
1226 else | 1229 else |
1227 some_multiletter_word = 1; | 1230 some_multiletter_word = 1; |
1228 } | 1231 } |
1233 /* Convert to all caps if the old text is all caps | 1236 /* Convert to all caps if the old text is all caps |
1234 and has at least one multiletter word. */ | 1237 and has at least one multiletter word. */ |
1235 if (! some_lowercase && some_multiletter_word) | 1238 if (! some_lowercase && some_multiletter_word) |
1236 case_action = all_caps; | 1239 case_action = all_caps; |
1237 /* Capitalize each word, if the old text has all capitalized words. */ | 1240 /* Capitalize each word, if the old text has all capitalized words. */ |
1238 /* We used to insist on some_multiletter_word here, | 1241 else if (!some_lowercase_initial && some_multiletter_word) |
1239 but that screwed query replacing x with y, acting on X. | |
1240 Even what we have now is more strict than what 19.22 had. */ | |
1241 else if (!some_lowercase_initial) | |
1242 case_action = cap_initial; | 1242 case_action = cap_initial; |
1243 else if (!some_lowercase_initial && some_uppercase) | |
1244 /* Should x -> yz, operating on X, give Yz or YZ? | |
1245 We'll assume the latter. */ | |
1246 case_action = all_caps; | |
1243 else | 1247 else |
1244 case_action = nochange; | 1248 case_action = nochange; |
1245 } | 1249 } |
1246 | 1250 |
1247 /* We insert the replacement text before the old text, and then | 1251 /* We insert the replacement text before the old text, and then |