regex: Add accessor for PCRE_INFO_HASCRORLF
authorChristian Persch <chpe@gnome.org>
Thu, 7 Jun 2012 13:57:15 +0000 (15:57 +0200)
committerChristian Persch <chpe@gnome.org>
Mon, 2 Jul 2012 13:59:34 +0000 (15:59 +0200)
This flag is new in PCRE 7.3, and checks whether there is an explicit
CR or LF reference in the pattern.

docs/reference/glib/glib-sections.txt
glib/glib.symbols
glib/gregex.c
glib/gregex.h
glib/tests/regex.c

index 6e2ad35d20d3800f60946c25672101aa68aed127..d2e985e68f92068a26e64524dc2ef2ec84a503ca 100644 (file)
@@ -1005,6 +1005,7 @@ g_regex_unref
 g_regex_get_pattern
 g_regex_get_max_backref
 g_regex_get_capture_count
+g_regex_get_has_cr_or_lf
 g_regex_get_string_number
 g_regex_get_compile_flags
 g_regex_get_match_flags
index 5ffbcb9fe7565f10d34fb9007ed8f415581311e5..d5c1fc6a9884a49f6697aa86710ce60b96c17417 100644 (file)
@@ -1405,6 +1405,7 @@ g_regex_unref
 g_regex_get_pattern
 g_regex_get_max_backref
 g_regex_get_capture_count
+g_regex_get_has_cr_or_lf
 g_regex_get_string_number
 g_regex_get_compile_flags
 g_regex_get_match_flags
index 1a1c41b37748da19cc3bc3b5b0fc42ddb8e5772a..7dc7abbd14797fd498f5f70b227031a24d4a3379 100644 (file)
@@ -1455,6 +1455,27 @@ g_regex_get_capture_count (const GRegex *regex)
   return value;
 }
 
+/**
+ * g_regex_get_has_cr_or_lf:
+ * @regex: a #GRegex structure
+ *
+ * Checks whether the pattern contains explicit CR or LF references.
+ *
+ * Returns: %TRUE if the pattern contains explicit CR or LF references
+ *
+ * Since: 2.34
+ */
+gboolean
+g_regex_get_has_cr_or_lf (const GRegex *regex)
+{
+  gint value;
+
+  pcre_fullinfo (regex->pcre_re, regex->extra,
+                 PCRE_INFO_HASCRORLF, &value);
+
+  return !!value;
+}
+
 /**
  * g_regex_get_compile_flags:
  * @regex: a #GRegex
index 4d6ac18e039886a16cfc3eb7f4dbb4f7c4e103e1..9b6a5fe705aa9cfa64be36c17bc846144677f0c1 100644 (file)
@@ -406,6 +406,7 @@ void                  g_regex_unref                 (GRegex              *regex);
 const gchar     *g_regex_get_pattern           (const GRegex        *regex);
 gint             g_regex_get_max_backref       (const GRegex        *regex);
 gint             g_regex_get_capture_count     (const GRegex        *regex);
+gboolean          g_regex_get_has_cr_or_lf      (const GRegex        *regex);
 gint             g_regex_get_string_number     (const GRegex        *regex, 
                                                 const gchar         *name);
 gchar           *g_regex_escape_string         (const gchar         *string,
index 7d19333345d93139d9e18e7e8fa23642784f77a0..ab9405533abeb67b05285537d54ed4b819500cf8 100644 (file)
@@ -2023,6 +2023,16 @@ test_multiline (void)
   g_assert_cmpint (count, ==, 2);
 }
 
+static void
+test_explicit_crlf (void)
+{
+  GRegex *regex;
+
+  regex = g_regex_new ("[\r\n]a", 0, 0, NULL);
+  g_assert_cmpint (g_regex_get_has_cr_or_lf (regex), ==, TRUE);
+  g_regex_unref (regex);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -2041,6 +2051,7 @@ main (int argc, char *argv[])
   g_test_add_func ("/regex/condition", test_condition);
   g_test_add_func ("/regex/recursion", test_recursion);
   g_test_add_func ("/regex/multiline", test_multiline);
+  g_test_add_func ("/regex/explicit-crlf", test_explicit_crlf);
 
   /* TEST_NEW(pattern, compile_opts, match_opts) */
   TEST_NEW("", 0, 0);