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