Blame


1 b2cfc4e2 2003-09-30 devnull #include "lib9.h"
2 b2cfc4e2 2003-09-30 devnull #include "regexp9.h"
3 b2cfc4e2 2003-09-30 devnull
4 b2cfc4e2 2003-09-30 devnull /* substitute into one string using the matches from the last regexec() */
5 b2cfc4e2 2003-09-30 devnull extern void
6 b2cfc4e2 2003-09-30 devnull regsub(char *sp, /* source string */
7 b2cfc4e2 2003-09-30 devnull char *dp, /* destination string */
8 b2cfc4e2 2003-09-30 devnull int dlen,
9 b2cfc4e2 2003-09-30 devnull Resub *mp, /* subexpression elements */
10 b2cfc4e2 2003-09-30 devnull int ms) /* number of elements pointed to by mp */
11 b2cfc4e2 2003-09-30 devnull {
12 b2cfc4e2 2003-09-30 devnull char *ssp, *ep;
13 b2cfc4e2 2003-09-30 devnull int i;
14 b2cfc4e2 2003-09-30 devnull
15 b2cfc4e2 2003-09-30 devnull ep = dp+dlen-1;
16 b2cfc4e2 2003-09-30 devnull while(*sp != '\0'){
17 b2cfc4e2 2003-09-30 devnull if(*sp == '\\'){
18 b2cfc4e2 2003-09-30 devnull switch(*++sp){
19 b2cfc4e2 2003-09-30 devnull case '0':
20 b2cfc4e2 2003-09-30 devnull case '1':
21 b2cfc4e2 2003-09-30 devnull case '2':
22 b2cfc4e2 2003-09-30 devnull case '3':
23 b2cfc4e2 2003-09-30 devnull case '4':
24 b2cfc4e2 2003-09-30 devnull case '5':
25 b2cfc4e2 2003-09-30 devnull case '6':
26 b2cfc4e2 2003-09-30 devnull case '7':
27 b2cfc4e2 2003-09-30 devnull case '8':
28 b2cfc4e2 2003-09-30 devnull case '9':
29 b2cfc4e2 2003-09-30 devnull i = *sp-'0';
30 3d31240b 2013-07-02 0intro if(mp!=0 && mp[i].s.sp != 0 && ms>i)
31 b2cfc4e2 2003-09-30 devnull for(ssp = mp[i].s.sp;
32 b2cfc4e2 2003-09-30 devnull ssp < mp[i].e.ep;
33 b2cfc4e2 2003-09-30 devnull ssp++)
34 b2cfc4e2 2003-09-30 devnull if(dp < ep)
35 b2cfc4e2 2003-09-30 devnull *dp++ = *ssp;
36 b2cfc4e2 2003-09-30 devnull break;
37 b2cfc4e2 2003-09-30 devnull case '\\':
38 b2cfc4e2 2003-09-30 devnull if(dp < ep)
39 b2cfc4e2 2003-09-30 devnull *dp++ = '\\';
40 b2cfc4e2 2003-09-30 devnull break;
41 b2cfc4e2 2003-09-30 devnull case '\0':
42 b2cfc4e2 2003-09-30 devnull sp--;
43 b2cfc4e2 2003-09-30 devnull break;
44 b2cfc4e2 2003-09-30 devnull default:
45 b2cfc4e2 2003-09-30 devnull if(dp < ep)
46 b2cfc4e2 2003-09-30 devnull *dp++ = *sp;
47 b2cfc4e2 2003-09-30 devnull break;
48 b2cfc4e2 2003-09-30 devnull }
49 3d31240b 2013-07-02 0intro }else if(*sp == '&'){
50 3d31240b 2013-07-02 0intro if(mp!=0 && mp[0].s.sp != 0 && ms>0)
51 b2cfc4e2 2003-09-30 devnull for(ssp = mp[0].s.sp;
52 b2cfc4e2 2003-09-30 devnull ssp < mp[0].e.ep; ssp++)
53 b2cfc4e2 2003-09-30 devnull if(dp < ep)
54 b2cfc4e2 2003-09-30 devnull *dp++ = *ssp;
55 62390091 2004-03-05 devnull }else{
56 b2cfc4e2 2003-09-30 devnull if(dp < ep)
57 b2cfc4e2 2003-09-30 devnull *dp++ = *sp;
58 62390091 2004-03-05 devnull }
59 b2cfc4e2 2003-09-30 devnull sp++;
60 b2cfc4e2 2003-09-30 devnull }
61 b2cfc4e2 2003-09-30 devnull *dp = '\0';
62 b2cfc4e2 2003-09-30 devnull }