tregexp9.h - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) 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 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