summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@gnome.org>2012-06-07 15:23:37 +0200
committerChristian Persch <chpe@gnome.org>2012-07-02 14:17:34 +0200
commitc8c049b177dc40c0242409389ddccfa59ba88953 (patch)
tree177bf8478774fc026b79dda11cb0ebb18e4d83a4
parent7e8b5ea442f235f5e272b0fe7a4768bf897b6aad (diff)
downloadglib-c8c049b177dc40c0242409389ddccfa59ba88953.tar.gz
regex: Add NEWLINE_ANYCRLF compile option
The PCRE_NEWLINE_ANYCRLF option is new in PCRE 7.1. With it set, the only only newline sequences recognised are CR, LF and CRLF.
-rw-r--r--glib/gregex.c4
-rw-r--r--glib/gregex.h21
-rw-r--r--glib/tests/regex.c2
3 files changed, 17 insertions, 10 deletions
diff --git a/glib/gregex.c b/glib/gregex.c
index 7da65694b..b51d59b32 100644
--- a/glib/gregex.c
+++ b/glib/gregex.c
@@ -112,7 +112,8 @@
G_REGEX_DUPNAMES | \
G_REGEX_NEWLINE_CR | \
G_REGEX_NEWLINE_LF | \
- G_REGEX_NEWLINE_CRLF)
+ G_REGEX_NEWLINE_CRLF | \
+ G_REGEX_NEWLINE_ANYCRLF)
/* Mask of all the possible values for GRegexMatchFlags. */
#define G_REGEX_MATCH_MASK (G_REGEX_MATCH_ANCHORED | \
@@ -138,6 +139,7 @@ G_STATIC_ASSERT (G_REGEX_DUPNAMES == PCRE_DUPNAMES);
G_STATIC_ASSERT (G_REGEX_NEWLINE_CR == PCRE_NEWLINE_CR);
G_STATIC_ASSERT (G_REGEX_NEWLINE_LF == PCRE_NEWLINE_LF);
G_STATIC_ASSERT (G_REGEX_NEWLINE_CRLF == PCRE_NEWLINE_CRLF);
+G_STATIC_ASSERT (G_REGEX_NEWLINE_ANYCRLF == PCRE_NEWLINE_ANYCRLF);
G_STATIC_ASSERT (G_REGEX_MATCH_ANCHORED == PCRE_ANCHORED);
G_STATIC_ASSERT (G_REGEX_MATCH_NOTBOL == PCRE_NOTBOL);
diff --git a/glib/gregex.h b/glib/gregex.h
index 4964c662e..6e510c33f 100644
--- a/glib/gregex.h
+++ b/glib/gregex.h
@@ -259,12 +259,18 @@ GQuark g_regex_error_quark (void);
* be unique. This can be helpful for certain types of pattern when it
* is known that only one instance of the named subpattern can ever be
* matched.
- * @G_REGEX_NEWLINE_CR: Usually any newline character is recognized, if this
- * option is set, the only recognized newline character is '\r'.
- * @G_REGEX_NEWLINE_LF: Usually any newline character is recognized, if this
- * option is set, the only recognized newline character is '\n'.
- * @G_REGEX_NEWLINE_CRLF: Usually any newline character is recognized, if this
- * option is set, the only recognized newline character sequence is '\r\n'.
+ * @G_REGEX_NEWLINE_CR: Usually any newline character or character sequence is
+ * recognized. If this option is set, the only recognized newline character
+ * is '\r'.
+ * @G_REGEX_NEWLINE_LF: Usually any newline character or character sequence is
+ * recognized. If this option is set, the only recognized newline character
+ * is '\n'.
+ * @G_REGEX_NEWLINE_CRLF: Usually any newline character or character sequence is
+ * recognized. If this option is set, the only recognized newline character
+ * sequence is '\r\n'.
+ * @G_REGEX_NEWLINE_ANYCRLF: Usually any newline character or character sequence
+ * is recognized. If this option is set, the only recognized newline character
+ * sequences are '\r', '\n', and '\r\n'. Since: 2.34
*
* Flags specifying compile-time options.
*
@@ -287,7 +293,8 @@ typedef enum
G_REGEX_DUPNAMES = 1 << 19,
G_REGEX_NEWLINE_CR = 1 << 20,
G_REGEX_NEWLINE_LF = 1 << 21,
- G_REGEX_NEWLINE_CRLF = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF
+ G_REGEX_NEWLINE_CRLF = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF,
+ G_REGEX_NEWLINE_ANYCRLF = G_REGEX_NEWLINE_CR | 1 << 22
} GRegexCompileFlags;
/**
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
index 6deb50f40..7d1933334 100644
--- a/glib/tests/regex.c
+++ b/glib/tests/regex.c
@@ -2102,9 +2102,7 @@ main (int argc, char *argv[])
#endif
TEST_NEW_FAIL ("\\666", G_REGEX_RAW, G_REGEX_ERROR_INVALID_OCTAL_VALUE);
TEST_NEW_FAIL ("^(?(DEFINE) abc | xyz ) ", 0, G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE);
-#if 0
TEST_NEW_FAIL ("a", G_REGEX_NEWLINE_CRLF | G_REGEX_NEWLINE_ANYCRLF, G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS);
-#endif
TEST_NEW_FAIL ("^(a)\\g{3", 0, G_REGEX_ERROR_MISSING_BACK_REFERENCE);
TEST_NEW_FAIL ("^(a)\\g{0}", 0, G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE);
TEST_NEW_FAIL ("abc(*FAIL:123)xyz", 0, G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN);