@@ -202,27 +202,51 @@ void Zdelete_blanks(void)
202
202
{
203
203
struct mark * pmark = bcremark (Bbuff );
204
204
struct mark * tmark = bcremark (Bbuff );
205
- if (pmark && tmark ) {
206
- if (bcrsearch (Bbuff , NL )) {
207
- bmove1 (Bbuff );
208
- bmrktopnt (Bbuff , tmark );
209
- movepast (isspace , BACKWARD );
210
- if (!bisstart (Bbuff ))
211
- bcsearch (Bbuff , NL );
212
- if (bisbeforemrk (Bbuff , tmark ))
213
- bdeltomrk (tmark );
205
+ if (!pmark || !tmark ) {
206
+ tbell ();
207
+ goto done ;
208
+ }
209
+
210
+ if (Argp ) {
211
+ regexp_t re ;
212
+ Arg = 0 ;
213
+
214
+ if (re_compile (& re , "^[ \t]*\r?$" , REG_EXTENDED )) {
215
+ error ("Internal re error." );
216
+ goto done ;
214
217
}
215
- if (bcsearch (Bbuff , NL )) {
216
- bmrktopnt (Bbuff , tmark );
217
- movepast (isspace , FORWARD );
218
- if (bcrsearch (Bbuff , NL ))
219
- bmove1 (Bbuff );
220
- if (bisaftermrk (Bbuff , tmark ))
221
- bdeltomrk (tmark );
218
+
219
+ btostart (Bbuff );
220
+ while (re_step (Bbuff , & re , tmark )) {
221
+ bmove1 (Bbuff ); /* skip over the NL */
222
+ bdeltomrk (tmark );
222
223
}
223
- } else
224
- tbell ();
225
- bpnttomrk (Bbuff , pmark );
224
+
225
+ re_free (& re );
226
+ goto done ;
227
+ }
228
+
229
+ if (bcrsearch (Bbuff , NL )) {
230
+ bmove1 (Bbuff );
231
+ bmrktopnt (Bbuff , tmark );
232
+ movepast (isspace , BACKWARD );
233
+ if (!bisstart (Bbuff ))
234
+ bcsearch (Bbuff , NL );
235
+ if (bisbeforemrk (Bbuff , tmark ))
236
+ bdeltomrk (tmark );
237
+ }
238
+ if (bcsearch (Bbuff , NL )) {
239
+ bmrktopnt (Bbuff , tmark );
240
+ movepast (isspace , FORWARD );
241
+ if (bcrsearch (Bbuff , NL ))
242
+ bmove1 (Bbuff );
243
+ if (bisaftermrk (Bbuff , tmark ))
244
+ bdeltomrk (tmark );
245
+ }
246
+
247
+ done :
248
+ if (pmark )
249
+ bpnttomrk (Bbuff , pmark );
226
250
unmark (pmark );
227
251
unmark (tmark );
228
252
}
0 commit comments