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.
This commit is contained in:
Christian Persch 2012-06-07 15:23:37 +02:00
parent 7e8b5ea442
commit c8c049b177
3 changed files with 17 additions and 10 deletions

View File

@ -112,7 +112,8 @@
G_REGEX_DUPNAMES | \ G_REGEX_DUPNAMES | \
G_REGEX_NEWLINE_CR | \ G_REGEX_NEWLINE_CR | \
G_REGEX_NEWLINE_LF | \ G_REGEX_NEWLINE_LF | \
G_REGEX_NEWLINE_CRLF) G_REGEX_NEWLINE_CRLF | \
G_REGEX_NEWLINE_ANYCRLF)
/* Mask of all the possible values for GRegexMatchFlags. */ /* Mask of all the possible values for GRegexMatchFlags. */
#define G_REGEX_MATCH_MASK (G_REGEX_MATCH_ANCHORED | \ #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_CR == PCRE_NEWLINE_CR);
G_STATIC_ASSERT (G_REGEX_NEWLINE_LF == PCRE_NEWLINE_LF); 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_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_ANCHORED == PCRE_ANCHORED);
G_STATIC_ASSERT (G_REGEX_MATCH_NOTBOL == PCRE_NOTBOL); G_STATIC_ASSERT (G_REGEX_MATCH_NOTBOL == PCRE_NOTBOL);

View File

@ -259,12 +259,18 @@ GQuark g_regex_error_quark (void);
* be unique. This can be helpful for certain types of pattern when it * 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 * is known that only one instance of the named subpattern can ever be
* matched. * matched.
* @G_REGEX_NEWLINE_CR: Usually any newline character is recognized, if this * @G_REGEX_NEWLINE_CR: Usually any newline character or character sequence is
* option is set, the only recognized newline character is '\r'. * recognized. If this option is set, the only recognized newline character
* @G_REGEX_NEWLINE_LF: Usually any newline character is recognized, if this * is '\r'.
* option is set, the only recognized newline character is '\n'. * @G_REGEX_NEWLINE_LF: Usually any newline character or character sequence is
* @G_REGEX_NEWLINE_CRLF: Usually any newline character is recognized, if this * recognized. If this option is set, the only recognized newline character
* option is set, the only recognized newline character sequence is '\r\n'. * 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. * Flags specifying compile-time options.
* *
@ -287,7 +293,8 @@ typedef enum
G_REGEX_DUPNAMES = 1 << 19, G_REGEX_DUPNAMES = 1 << 19,
G_REGEX_NEWLINE_CR = 1 << 20, G_REGEX_NEWLINE_CR = 1 << 20,
G_REGEX_NEWLINE_LF = 1 << 21, 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; } GRegexCompileFlags;
/** /**

View File

@ -2102,9 +2102,7 @@ main (int argc, char *argv[])
#endif #endif
TEST_NEW_FAIL ("\\666", G_REGEX_RAW, G_REGEX_ERROR_INVALID_OCTAL_VALUE); 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); 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); 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{3", 0, G_REGEX_ERROR_MISSING_BACK_REFERENCE);
TEST_NEW_FAIL ("^(a)\\g{0}", 0, G_REGEX_ERROR_INVALID_RELATIVE_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); TEST_NEW_FAIL ("abc(*FAIL:123)xyz", 0, G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN);