#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 <sys/types.h> must be included (by the caller) before
<regex.h>. */
-
/* 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
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
/* 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]]] */
};
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;
};
#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_ */