blob: a7786ede012a2984d80911f602ccb4caa41cd0f5 [file] [log] [blame]
Guido van Rossumb700df92000-03-31 14:59:30 +00001/*
2 * Secret Labs' Regular Expression Engine
3 * $Id$
4 *
5 * simple regular expression matching engine
6 *
7 * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved.
8 *
9 * See the _sre.c file for information on usage and redistribution.
10 */
11
12#ifndef SRE_INCLUDED
13#define SRE_INCLUDED
14
15#include "sre_constants.h"
16
Fredrik Lundh102f3ad2000-06-29 08:55:54 +000017/* size of a code word (must be unsigned short or larger) */
18#define SRE_CODE unsigned short
19
Guido van Rossumb700df92000-03-31 14:59:30 +000020typedef struct {
21 PyObject_HEAD
22 PyObject* code; /* link to the code string object */
Guido van Rossumb700df92000-03-31 14:59:30 +000023 int groups;
24 PyObject* groupindex;
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000025 /* compatibility */
26 PyObject* pattern; /* pattern source (or None) */
27 int flags; /* flags used when compiling pattern source */
Guido van Rossumb700df92000-03-31 14:59:30 +000028} PatternObject;
29
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000030#define PatternObject_GetCode(o)\
31 ((void*) PyString_AS_STRING(((PatternObject*)(o))->code))
Guido van Rossumb700df92000-03-31 14:59:30 +000032
33typedef struct {
34 PyObject_HEAD
35 PyObject* string; /* link to the target string */
36 PatternObject* pattern; /* link to the regex (pattern) object */
37 int groups; /* number of groups (start/end marks) */
38 int mark[2];
39} MatchObject;
40
Fredrik Lundh102f3ad2000-06-29 08:55:54 +000041typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch);
42
43typedef struct {
44 /* stack elements */
45 SRE_CODE* pattern;
46 void* ptr;
47} SRE_STACK;
48
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000049typedef struct {
50 /* string pointers */
51 void* ptr; /* current position (also end of current slice) */
52 void* beginning; /* start of original string */
53 void* start; /* start of current slice */
54 void* end; /* end of original string */
55 /* character size */
56 int charsize;
57 /* registers */
Fredrik Lundh102f3ad2000-06-29 08:55:54 +000058 int lastmark;
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000059 void* mark[64]; /* FIXME: <fl> should be dynamically allocated! */
60 /* backtracking stack */
Fredrik Lundh102f3ad2000-06-29 08:55:54 +000061 SRE_STACK* stack;
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000062 int stacksize;
63 int stackbase;
Fredrik Lundh102f3ad2000-06-29 08:55:54 +000064 /* hooks */
Fredrik Lundhb389df32000-06-29 12:48:37 +000065 SRE_TOLOWER_HOOK lower;
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000066} SRE_STATE;
Guido van Rossumb700df92000-03-31 14:59:30 +000067
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000068typedef struct {
Fredrik Lundh102f3ad2000-06-29 08:55:54 +000069 /* search helper */
Jeremy Hyltonb1aa1952000-06-01 17:39:12 +000070 PyObject_HEAD
71 PyObject* pattern;
72 PyObject* string;
73 SRE_STATE state;
74} CursorObject;
75
76#endif