| 1 | /* |
| 2 | ** $Id: lpcap.h,v 1.3 2016/09/13 17:45:58 roberto Exp $ |
| 3 | */ |
| 4 | |
| 5 | #if !defined(lpcap_h) |
| 6 | #define lpcap_h |
| 7 | |
| 8 | |
| 9 | #include "lptypes.h" |
| 10 | |
| 11 | |
| 12 | /* kinds of captures */ |
| 13 | typedef enum CapKind { |
| 14 | Cclose, /* not used in trees */ |
| 15 | Cposition, |
| 16 | Cconst, /* ktable[key] is Lua constant */ |
| 17 | Cbackref, /* ktable[key] is "name" of group to get capture */ |
| 18 | Carg, /* 'key' is arg's number */ |
| 19 | Csimple, /* next node is pattern */ |
| 20 | Ctable, /* next node is pattern */ |
| 21 | Cfunction, /* ktable[key] is function; next node is pattern */ |
| 22 | Cquery, /* ktable[key] is table; next node is pattern */ |
| 23 | Cstring, /* ktable[key] is string; next node is pattern */ |
| 24 | Cnum, /* numbered capture; 'key' is number of value to return */ |
| 25 | Csubst, /* substitution capture; next node is pattern */ |
| 26 | Cfold, /* ktable[key] is function; next node is pattern */ |
| 27 | Cruntime, /* not used in trees (is uses another type for tree) */ |
| 28 | Cgroup /* ktable[key] is group's "name" */ |
| 29 | } CapKind; |
| 30 | |
| 31 | |
| 32 | typedef struct Capture { |
| 33 | const char *s; /* subject position */ |
| 34 | unsigned short idx; /* extra info (group name, arg index, etc.) */ |
| 35 | byte kind; /* kind of capture */ |
| 36 | byte siz; /* size of full capture + 1 (0 = not a full capture) */ |
| 37 | } Capture; |
| 38 | |
| 39 | |
| 40 | typedef struct CapState { |
| 41 | Capture *cap; /* current capture */ |
| 42 | Capture *ocap; /* (original) capture list */ |
| 43 | lua_State *L; |
| 44 | int ptop; /* index of last argument to 'match' */ |
| 45 | const char *s; /* original string */ |
| 46 | int valuecached; /* value stored in cache slot */ |
| 47 | } CapState; |
| 48 | |
| 49 | |
| 50 | int runtimecap (CapState *cs, Capture *close, const char *s, int *rem); |
| 51 | int getcaptures (lua_State *L, const char *s, const char *r, int ptop); |
| 52 | int finddyncap (Capture *cap, Capture *last); |
| 53 | |
| 54 | #endif |
| 55 | |
| 56 | |
| 57 | |