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 rregsub(Rune *sp, /* source string */
7 b2cfc4e2 2003-09-30 devnull Rune *dp, /* destination string */
8 b2cfc4e2 2003-09-30 devnull Resub *mp, /* subexpression elements */
9 b2cfc4e2 2003-09-30 devnull int ms) /* number of elements pointed to by mp */
10 b2cfc4e2 2003-09-30 devnull {
11 b2cfc4e2 2003-09-30 devnull Rune *ssp;
12 b2cfc4e2 2003-09-30 devnull int i;
13 b2cfc4e2 2003-09-30 devnull
14 b2cfc4e2 2003-09-30 devnull while(*sp != '\0'){
15 b2cfc4e2 2003-09-30 devnull if(*sp == '\\'){
16 b2cfc4e2 2003-09-30 devnull switch(*++sp){
17 b2cfc4e2 2003-09-30 devnull case '0':
18 b2cfc4e2 2003-09-30 devnull case '1':
19 b2cfc4e2 2003-09-30 devnull case '2':
20 b2cfc4e2 2003-09-30 devnull case '3':
21 b2cfc4e2 2003-09-30 devnull case '4':
22 b2cfc4e2 2003-09-30 devnull case '5':
23 b2cfc4e2 2003-09-30 devnull case '6':
24 b2cfc4e2 2003-09-30 devnull case '7':
25 b2cfc4e2 2003-09-30 devnull case '8':
26 b2cfc4e2 2003-09-30 devnull case '9':
27 b2cfc4e2 2003-09-30 devnull i = *sp-'0';
28 b2cfc4e2 2003-09-30 devnull if(mp[i].s.rsp != 0 && mp!=0 && ms>i)
29 b2cfc4e2 2003-09-30 devnull for(ssp = mp[i].s.rsp;
30 b2cfc4e2 2003-09-30 devnull ssp < mp[i].e.rep;
31 b2cfc4e2 2003-09-30 devnull ssp++)
32 b2cfc4e2 2003-09-30 devnull *dp++ = *ssp;
33 b2cfc4e2 2003-09-30 devnull break;
34 b2cfc4e2 2003-09-30 devnull case '\\':
35 b2cfc4e2 2003-09-30 devnull *dp++ = '\\';
36 b2cfc4e2 2003-09-30 devnull break;
37 b2cfc4e2 2003-09-30 devnull case '\0':
38 b2cfc4e2 2003-09-30 devnull sp--;
39 b2cfc4e2 2003-09-30 devnull break;
40 b2cfc4e2 2003-09-30 devnull default:
41 b2cfc4e2 2003-09-30 devnull *dp++ = *sp;
42 b2cfc4e2 2003-09-30 devnull break;
43 b2cfc4e2 2003-09-30 devnull }
44 b2cfc4e2 2003-09-30 devnull }else if(*sp == '&'){
45 b2cfc4e2 2003-09-30 devnull if(mp[0].s.rsp != 0 && mp!=0 && ms>0)
46 b2cfc4e2 2003-09-30 devnull if(mp[0].s.rsp != 0)
47 b2cfc4e2 2003-09-30 devnull for(ssp = mp[0].s.rsp;
48 b2cfc4e2 2003-09-30 devnull ssp < mp[0].e.rep; ssp++)
49 b2cfc4e2 2003-09-30 devnull *dp++ = *ssp;
50 b2cfc4e2 2003-09-30 devnull }else
51 b2cfc4e2 2003-09-30 devnull *dp++ = *sp;
52 b2cfc4e2 2003-09-30 devnull sp++;
53 b2cfc4e2 2003-09-30 devnull }
54 b2cfc4e2 2003-09-30 devnull *dp = '\0';
55 b2cfc4e2 2003-09-30 devnull }