Mercurial > emacs
comparison src/search.c @ 2655:594a33ffed85
* search.c (Freplace_match): Arrange for markers sitting at the
beginning or end of the original text to float to the
corresponding position in the replacement text.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Tue, 04 May 1993 02:35:38 +0000 |
parents | 052bbdf1b817 |
children | e94a593c3952 |
comparison
equal
deleted
inserted
replaced
2654:ba685dcc3750 | 2655:594a33ffed85 |
---|---|
1234 case_action = cap_initial; | 1234 case_action = cap_initial; |
1235 else | 1235 else |
1236 case_action = nochange; | 1236 case_action = nochange; |
1237 } | 1237 } |
1238 | 1238 |
1239 SET_PT (search_regs.end[0]); | 1239 /* We insert the replacement text before the old text, and then |
1240 delete the original text. This means that markers at the | |
1241 beginning or end of the original will float to the corresponding | |
1242 position in the replacement. */ | |
1243 SET_PT (search_regs.start[0]); | |
1240 if (!NILP (literal)) | 1244 if (!NILP (literal)) |
1241 Finsert (1, &string); | 1245 Finsert (1, &string); |
1242 else | 1246 else |
1243 { | 1247 { |
1244 struct gcpro gcpro1; | 1248 struct gcpro gcpro1; |
1245 GCPRO1 (string); | 1249 GCPRO1 (string); |
1246 | 1250 |
1247 for (pos = 0; pos < XSTRING (string)->size; pos++) | 1251 for (pos = 0; pos < XSTRING (string)->size; pos++) |
1248 { | 1252 { |
1253 int offset = point - search_regs.start[0]; | |
1254 | |
1249 c = XSTRING (string)->data[pos]; | 1255 c = XSTRING (string)->data[pos]; |
1250 if (c == '\\') | 1256 if (c == '\\') |
1251 { | 1257 { |
1252 c = XSTRING (string)->data[++pos]; | 1258 c = XSTRING (string)->data[++pos]; |
1253 if (c == '&') | 1259 if (c == '&') |
1254 Finsert_buffer_substring (Fcurrent_buffer (), | 1260 Finsert_buffer_substring |
1255 make_number (search_regs.start[0]), | 1261 (Fcurrent_buffer (), |
1256 make_number (search_regs.end[0])); | 1262 make_number (search_regs.start[0] + offset), |
1263 make_number (search_regs.end[0] + offset)); | |
1257 else if (c >= '1' && c <= search_regs.num_regs + '0') | 1264 else if (c >= '1' && c <= search_regs.num_regs + '0') |
1258 { | 1265 { |
1259 if (search_regs.start[c - '0'] >= 1) | 1266 if (search_regs.start[c - '0'] >= 1) |
1260 Finsert_buffer_substring (Fcurrent_buffer (), | 1267 Finsert_buffer_substring |
1261 make_number (search_regs.start[c - '0']), | 1268 (Fcurrent_buffer (), |
1262 make_number (search_regs.end[c - '0'])); | 1269 make_number (search_regs.start[c - '0'] + offset), |
1270 make_number (search_regs.end[c - '0'] + offset)); | |
1263 } | 1271 } |
1264 else | 1272 else |
1265 insert_char (c); | 1273 insert_char (c); |
1266 } | 1274 } |
1267 else | 1275 else |
1268 insert_char (c); | 1276 insert_char (c); |
1269 } | 1277 } |
1270 UNGCPRO; | 1278 UNGCPRO; |
1271 } | 1279 } |
1272 | 1280 |
1273 inslen = point - (search_regs.end[0]); | 1281 inslen = point - (search_regs.start[0]); |
1274 del_range (search_regs.start[0], search_regs.end[0]); | 1282 del_range (search_regs.start[0] + inslen, search_regs.end[0] + inslen); |
1275 | 1283 |
1276 if (case_action == all_caps) | 1284 if (case_action == all_caps) |
1277 Fupcase_region (make_number (point - inslen), make_number (point)); | 1285 Fupcase_region (make_number (point - inslen), make_number (point)); |
1278 else if (case_action == cap_initial) | 1286 else if (case_action == cap_initial) |
1279 upcase_initials_region (make_number (point - inslen), make_number (point)); | 1287 upcase_initials_region (make_number (point - inslen), make_number (point)); |