Introduction
Introduction Statistics Contact Development Disclaimer Help
rregsub.c - 9base - revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
rregsub.c (1156B)
---
1 #include "lib9.h"
2 #include "regexp9.h"
3
4 /* substitute into one string using the matches from the last regexec() …
5 extern void
6 rregsub(Rune *sp, /* source string */
7 Rune *dp, /* destination string */
8 int dlen,
9 Resub *mp, /* subexpression elements */
10 int ms) /* number of elements pointed to by mp */
11 {
12 Rune *ssp, *ep;
13 int i;
14
15 ep = dp+(dlen/sizeof(Rune))-1;
16 while(*sp != '\0'){
17 if(*sp == '\\'){
18 switch(*++sp){
19 case '0':
20 case '1':
21 case '2':
22 case '3':
23 case '4':
24 case '5':
25 case '6':
26 case '7':
27 case '8':
28 case '9':
29 i = *sp-'0';
30 if(mp[i].s.rsp != 0 && mp!=0 && ms>i)
31 for(ssp = mp[i].s.rsp;
32 ssp < mp[i].e.rep;
33 ssp++)
34 if(dp < ep)
35 *dp++ = *ssp;
36 break;
37 case '\\':
38 if(dp < ep)
39 *dp++ = '\\';
40 break;
41 case '\0':
42 sp--;
43 break;
44 default:
45 if(dp < ep)
46 *dp++ = *sp;
47 break;
48 }
49 }else if(*sp == '&'){
50 if(mp[0].s.rsp != 0 && mp!=0 && ms>0)
51 if(mp[0].s.rsp != 0)
52 for(ssp = mp[0].s.rsp;
53 ssp < mp[0].e.rep; ssp++)
54 if(dp < ep)
55 *dp++ = *ssp;
56 }else{
57 if(dp < ep)
58 *dp++ = *sp;
59 }
60 sp++;
61 }
62 *dp = '\0';
63 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.