Initial revision
This commit is contained in:
parent
5f7d5e8d18
commit
b2cfc4e2e7
242 changed files with 18177 additions and 0 deletions
62
src/libregexp/regsub.c
Normal file
62
src/libregexp/regsub.c
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include "lib9.h"
|
||||
#include "regexp9.h"
|
||||
|
||||
/* substitute into one string using the matches from the last regexec() */
|
||||
extern void
|
||||
regsub(char *sp, /* source string */
|
||||
char *dp, /* destination string */
|
||||
int dlen,
|
||||
Resub *mp, /* subexpression elements */
|
||||
int ms) /* number of elements pointed to by mp */
|
||||
{
|
||||
char *ssp, *ep;
|
||||
int i;
|
||||
|
||||
ep = dp+dlen-1;
|
||||
while(*sp != '\0'){
|
||||
if(*sp == '\\'){
|
||||
switch(*++sp){
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
i = *sp-'0';
|
||||
if(mp[i].s.sp != 0 && mp!=0 && ms>i)
|
||||
for(ssp = mp[i].s.sp;
|
||||
ssp < mp[i].e.ep;
|
||||
ssp++)
|
||||
if(dp < ep)
|
||||
*dp++ = *ssp;
|
||||
break;
|
||||
case '\\':
|
||||
if(dp < ep)
|
||||
*dp++ = '\\';
|
||||
break;
|
||||
case '\0':
|
||||
sp--;
|
||||
break;
|
||||
default:
|
||||
if(dp < ep)
|
||||
*dp++ = *sp;
|
||||
break;
|
||||
}
|
||||
}else if(*sp == '&'){
|
||||
if(mp[0].s.sp != 0 && mp!=0 && ms>0)
|
||||
if(mp[0].s.sp != 0)
|
||||
for(ssp = mp[0].s.sp;
|
||||
ssp < mp[0].e.ep; ssp++)
|
||||
if(dp < ep)
|
||||
*dp++ = *ssp;
|
||||
}else
|
||||
if(dp < ep)
|
||||
*dp++ = *sp;
|
||||
sp++;
|
||||
}
|
||||
*dp = '\0';
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue