Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 81 lines (74 sloc) 2.308 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
/* vi:set ts=8 sts=4 sw=4:
*
* NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
*
* This is NOT the original regular expression code as written by Henry
* Spencer. This code has been modified specifically for use with Vim, and
* should not be used apart from compiling Vim. If you want a good regular
* expression library, get the original code.
*
* NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
*/

#ifndef _REGEXP_H
#define _REGEXP_H

/*
* The number of sub-matches is limited to 10.
* The first one (index 0) is the whole match, referenced with "\0".
* The second one (index 1) is the first sub-match, referenced with "\1".
* This goes up to the tenth (index 9), referenced with "\9".
*/
#define NSUBEXP 10

/*
* Structure returned by vim_regcomp() to pass on to vim_regexec().
* These fields are only to be used in regexp.c!
* See regep.c for an explanation.
*/
typedef struct
{
    int regstart;
    char_u reganch;
    char_u *regmust;
    int regmlen;
    unsigned regflags;
    char_u reghasz;
    char_u program[1]; /* actually longer.. */
} regprog_T;

/*
* Structure to be used for single-line matching.
* Sub-match "no" starts at "startp[no]" and ends just before "endp[no]".
* When there is no match, the pointer is NULL.
*/
typedef struct
{
    regprog_T *regprog;
    char_u *startp[NSUBEXP];
    char_u *endp[NSUBEXP];
    int rm_ic;
} regmatch_T;

/*
* Structure to be used for multi-line matching.
* Sub-match "no" starts in line "startpos[no].lnum" column "startpos[no].col"
* and ends in line "endpos[no].lnum" just before column "endpos[no].col".
* The line numbers are relative to the first line, thus startpos[0].lnum is
* always 0.
* When there is no match, the line number is -1.
*/
typedef struct
{
    regprog_T *regprog;
    lpos_T startpos[NSUBEXP];
    lpos_T endpos[NSUBEXP];
    int rmm_ic;
    colnr_T rmm_maxcol; /* when not zero: maximum column */
} regmmatch_T;

/*
* Structure used to store external references: "\z\(\)" to "\z\1".
* Use a reference count to avoid the need to copy this around. When it goes
* from 1 to zero the matches need to be freed.
*/
typedef struct
{
    short refcnt;
    char_u *matches[NSUBEXP];
} reg_extmatch_T;

#endif /* _REGEXP_H */
Something went wrong with that request. Please try again.