#undef nanosleep.
[gnulib.git] / regex.h
diff --git a/regex.h b/regex.h
index 61bdd6e..36775d5 100644 (file)
--- a/regex.h
+++ b/regex.h
    add or remove a bit, only one other definition need change.  */
 typedef unsigned reg_syntax_t;
 
+/* If this bit is set, then even *?, +? and ?? match greedily. */
+#define RE_ALL_GREEDY (1)
+
 /* If this bit is not set, then \ inside a bracket expression is literal.
    If set, then such a \ quotes the following character.  */
-#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
+#define RE_BACKSLASH_ESCAPE_IN_LISTS (RE_ALL_GREEDY << 1)
 
 /* If this bit is not set, then + and ? are operators, and \+ and \? are
      literals. 
@@ -127,19 +130,26 @@ typedef unsigned reg_syntax_t;
      starting range point, the range is ignored.  */
 #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
 
-/* If this bit is set, then an unmatched ) is ordinary.
-   If not set, then an unmatched ) is invalid.  */
-#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
-
 /* If this bit is set, succeed as soon as we match the whole pattern,
    without further backtracking.  */
-#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+#define RE_NO_POSIX_BACKTRACKING (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_POSIX_BACKTRACKING << 1)
 
 /* This global variable defines the particular regexp syntax to use (for
    some interfaces).  When a regexp is compiled, the syntax used is
    stored in the pattern buffer, so changing this does not affect
    already-compiled regexps.  */
 extern reg_syntax_t re_syntax_options;
+
+#ifdef emacs
+/* In Emacs, this is the string or buffer in which we
+   are matching.  It is used for looking up syntax properties.  */
+extern Lisp_Object re_match_object;
+#endif
+
 \f
 /* Define combinations of the above bits for the standard possibilities.
    (The [[[ comments delimit what gets put into the Texinfo file, so
@@ -151,7 +161,7 @@ extern reg_syntax_t re_syntax_options;
   (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL                      \
    | RE_NO_BK_PARENS            | RE_NO_BK_REFS                                \
    | RE_NO_BK_VBAR               | RE_NO_EMPTY_RANGES                  \
-   | RE_UNMATCHED_RIGHT_PAREN_ORD)
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_ALL_GREEDY)
 
 #define RE_SYNTAX_POSIX_AWK                                            \
   (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
@@ -159,13 +169,13 @@ extern reg_syntax_t re_syntax_options;
 #define RE_SYNTAX_GREP                                                 \
   (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
    | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
-   | RE_NEWLINE_ALT)
+   | RE_NEWLINE_ALT          | RE_ALL_GREEDY)
 
 #define RE_SYNTAX_EGREP                                                        \
   (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
    | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
    | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
-   | RE_NO_BK_VBAR)
+   | RE_NO_BK_VBAR       | RE_ALL_GREEDY)
 
 #define RE_SYNTAX_POSIX_EGREP                                          \
   (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
@@ -178,7 +188,7 @@ extern reg_syntax_t re_syntax_options;
 /* Syntax bits common to both basic and extended POSIX regex syntax.  */
 #define _RE_SYNTAX_POSIX_COMMON                                                \
   (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
-   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES         | RE_ALL_GREEDY)
 
 #define RE_SYNTAX_POSIX_BASIC                                          \
   (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
@@ -282,6 +292,8 @@ typedef enum
 
 #ifndef RE_TRANSLATE_TYPE 
 #define RE_TRANSLATE_TYPE char *
+#define RE_TRANSLATE(TBL, C) ((TBL)[C])
+#define RE_TRANSLATE_P(TBL) (TBL)
 #endif
 
 struct re_pattern_buffer
@@ -349,6 +361,10 @@ struct re_pattern_buffer
         /* If true, an anchor at a newline matches.  */
   unsigned newline_anchor : 1;
 
+  /* If true, multi-byte form in the `buffer' should be recognized as a
+     multibyte character. */
+  unsigned multibyte : 1;
+
 /* [[[end pattern_buffer]]] */
 };