tregexp9.h - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
tregexp9.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 fo… | |
51 Reinst *right; /* right child of O… | |
52 }u1; | |
53 union { /* regexp relies on these two being in the same u… | |
54 Reinst *left; /* left child of OR */ | |
55 Reinst *next; /* next instruction for CAT… | |
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 |