9base

revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log | Files | Refs | README | LICENSE

regexp9.h (1790B)


      1 #ifndef _REGEXP9_H_
      2 #define _REGEXP9_H_ 1
      3 #if defined(__cplusplus)
      4 extern "C" { 
      5 #endif
      6 
      7 #ifdef AUTOLIB
      8 AUTOLIB(regexp9)
      9 #endif
     10 
     11 #include <utf.h>
     12 
     13 typedef struct Resub		Resub;
     14 typedef struct Reclass		Reclass;
     15 typedef struct Reinst		Reinst;
     16 typedef struct Reprog		Reprog;
     17 
     18 /*
     19  *	Sub expression matches
     20  */
     21 struct Resub{
     22 	union
     23 	{
     24 		char *sp;
     25 		Rune *rsp;
     26 	}s;
     27 	union
     28 	{
     29 		char *ep;
     30 		Rune *rep;
     31 	}e;
     32 };
     33 
     34 /*
     35  *	character class, each pair of rune's defines a range
     36  */
     37 struct Reclass{
     38 	Rune	*end;
     39 	Rune	spans[64];
     40 };
     41 
     42 /*
     43  *	Machine instructions
     44  */
     45 struct Reinst{
     46 	int	type;
     47 	union	{
     48 		Reclass	*cp;		/* class pointer */
     49 		Rune	r;		/* character */
     50 		int	subid;		/* sub-expression id for RBRA and LBRA */
     51 		Reinst	*right;		/* right child of OR */
     52 	}u1;
     53 	union {	/* regexp relies on these two being in the same union */
     54 		Reinst *left;		/* left child of OR */
     55 		Reinst *next;		/* next instruction for CAT & LBRA */
     56 	}u2;
     57 };
     58 
     59 /*
     60  *	Reprogram definition
     61  */
     62 struct Reprog{
     63 	Reinst	*startinst;	/* start pc */
     64 	Reclass	class[16];	/* .data */
     65 	Reinst	firstinst[5];	/* .text */
     66 };
     67 
     68 extern Reprog	*regcomp9(char*);
     69 extern Reprog	*regcomplit9(char*);
     70 extern Reprog	*regcompnl9(char*);
     71 extern void	regerror9(char*);
     72 extern int	regexec9(Reprog*, char*, Resub*, int);
     73 extern void	regsub9(char*, char*, int, Resub*, int);
     74 
     75 extern int	rregexec9(Reprog*, Rune*, Resub*, int);
     76 extern void	rregsub9(Rune*, Rune*, int, Resub*, int);
     77 
     78 /*
     79  * Darwin simply cannot handle having routines that
     80  * override other library routines.
     81  */
     82 #ifndef NOPLAN9DEFINES
     83 #define regcomp regcomp9
     84 #define regcomplit regcomplit9
     85 #define regcompnl regcompnl9
     86 #define regerror regerror9
     87 #define regexec regexec9
     88 #define regsub regsub9
     89 #define rregexec rregexec9
     90 #define rregsub rregsub9
     91 #endif
     92 
     93 #if defined(__cplusplus)
     94 }
     95 #endif
     96 #endif