rsc | f701258 | 2003-11-25 01:40:27 +0000 | [diff] [blame] | 1 | #ifndef _REGEXP9_H_ |
| 2 | #define _REGEXP9_H_ 1 |
| 3 | #if defined(__cplusplus) |
| 4 | extern "C" { |
| 5 | #endif |
rsc | b2cfc4e | 2003-09-30 17:47:41 +0000 | [diff] [blame] | 6 | |
rsc | 78e51a8 | 2005-01-14 03:45:44 +0000 | [diff] [blame] | 7 | #ifdef AUTOLIB |
rsc | 1a0954a | 2005-01-04 21:18:08 +0000 | [diff] [blame] | 8 | AUTOLIB(regexp9) |
rsc | 78e51a8 | 2005-01-14 03:45:44 +0000 | [diff] [blame] | 9 | #endif |
rsc | 1a0954a | 2005-01-04 21:18:08 +0000 | [diff] [blame] | 10 | |
rsc | b2cfc4e | 2003-09-30 17:47:41 +0000 | [diff] [blame] | 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 | |
rsc | 54952ce | 2003-11-24 22:48:39 +0000 | [diff] [blame] | 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); |
rsc | b2cfc4e | 2003-09-30 17:47:41 +0000 | [diff] [blame] | 74 | |
rsc | 54952ce | 2003-11-24 22:48:39 +0000 | [diff] [blame] | 75 | extern int rregexec9(Reprog*, Rune*, Resub*, int); |
rsc | 230d62c | 2004-03-05 05:48:32 +0000 | [diff] [blame] | 76 | extern void rregsub9(Rune*, Rune*, int, Resub*, int); |
rsc | 54952ce | 2003-11-24 22:48:39 +0000 | [diff] [blame] | 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 |
rsc | b2cfc4e | 2003-09-30 17:47:41 +0000 | [diff] [blame] | 92 | |
rsc | f701258 | 2003-11-25 01:40:27 +0000 | [diff] [blame] | 93 | #if defined(__cplusplus) |
| 94 | } |
| 95 | #endif |
rsc | b2cfc4e | 2003-09-30 17:47:41 +0000 | [diff] [blame] | 96 | #endif |