X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fregex.h;h=ae2c910b80447bffc01e8c4bf84334a03f53fe2d;hb=166ba1350d802535b6a6ea7ea0bc29c56a71b7ec;hp=08d8bd98434952febea3c6abd1938f55cf2fd6ba;hpb=3e447015251ce6dcde843cbed10d9033d5538622;p=chise%2Fxemacs-chise.git.1 diff --git a/src/regex.h b/src/regex.h index 08d8bd9..ae2c910 100644 --- a/src/regex.h +++ b/src/regex.h @@ -23,10 +23,37 @@ #ifndef INCLUDED_regex_h_ #define INCLUDED_regex_h_ +#ifdef emacs +#define RE_TRANSLATE_TYPE Lisp_Object +#else +#define RE_TRANSLATE_TYPE char * + +/* type definitions copied from lisp.h */ +#ifndef SIZEOF_EMACS_INT +# define SIZEOF_EMACS_INT SIZEOF_VOID_P +#endif + +#ifndef EMACS_INT +# if SIZEOF_EMACS_INT == SIZEOF_LONG +# define EMACS_INT long +# elif SIZEOF_EMACS_INT == SIZEOF_INT +# define EMACS_INT int +# elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG +# define EMACS_INT long long +# else +# error Unable to determine suitable type for EMACS_INT +# endif +#endif + +/* Counts of bytes or array elements */ +typedef EMACS_INT Memory_count; +typedef EMACS_INT Element_count; + +#endif /* emacs */ + /* POSIX says that must be included (by the caller) before . */ - /* The following bits are used to determine the regexp syntax we recognize. The not-set meaning typically corresponds to the syntax used by Emacs (the exception is RE_INTERVAL, made for historical @@ -329,10 +356,15 @@ struct re_pattern_buffer comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ - char *translate; + RE_TRANSLATE_TYPE translate; - /* Number of subexpressions found by the compiler. */ - size_t re_nsub; + /* Number of returnable groups found by the compiler. (This does + not count shy groups.) */ + Element_count re_nsub; + + /* Total number of groups found by the compiler. (Including + shy ones.) */ + Element_count re_ngroups; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in `re_search_2', to see @@ -368,6 +400,12 @@ struct re_pattern_buffer /* If true, an anchor at a newline matches. */ unsigned newline_anchor : 1; + /* Mapping between back references and groups (may not be + equivalent with shy groups). */ + int *external_to_internal_register; + + int external_to_internal_register_size; + /* [[[end pattern_buffer]]] */ }; @@ -381,7 +419,7 @@ typedef int regoff_t; regex.texinfo for a full description of what registers match. */ struct re_registers { - unsigned num_regs; + int num_regs; regoff_t *start; regoff_t *end; }; @@ -475,11 +513,13 @@ int re_exec (const char *); #endif /* POSIX compatibility. */ +/* #### Arrgh, not any more. But I don't have time to deal with this + properly, and I don't know if we should care. - sjt */ int regcomp (regex_t *preg, const char *pattern, int cflags); -int regexec (const regex_t *preg, const char *string, size_t nmatch, +int regexec (const regex_t *preg, const char *string, Element_count nmatch, regmatch_t pmatch[], int eflags); -size_t regerror (int errcode, const regex_t *preg, char *errbuf, - size_t errbuf_size); +Memory_count regerror (int errcode, const regex_t *preg, char *errbuf, + Memory_count errbuf_size); void regfree (regex_t *preg); #endif /* INCLUDED_regex_h_ */