]> git.0d.be Git - empathy.git/commitdiff
String parser is changed in order not to break URLs at apostrophes.
authorVitaly Minko <vitaly.minko@gmail.com>
Mon, 1 Nov 2010 15:55:00 +0000 (18:55 +0300)
committerVitaly Minko <vitaly.minko@gmail.com>
Mon, 1 Nov 2010 15:55:00 +0000 (18:55 +0300)
libempathy-gtk/empathy-string-parser.c
tests/empathy-parser-test.c

index 45ae6a7202ae2a0fd4ce648f06b34b01aa09ce0e..3bb6a82beb0af5a72aff628566a2a5b0c5217fb8 100644 (file)
 #include "empathy-ui-utils.h"
 
 #define SCHEMES           "([a-zA-Z\\+]+)"
-#define INVALID_CHARS     "\\s\"'"
-#define INVALID_CHARS_EXT INVALID_CHARS "\\[\\]<>(){},;:?"
-#define BODY              "([^"INVALID_CHARS"]+)"
-#define BODY_END          "([^"INVALID_CHARS"]*)[^"INVALID_CHARS_EXT".]"
-#define BODY_STRICT       "([^"INVALID_CHARS_EXT"]+)"
+#define INVALID_CHARS     "\\s\"<>"
+#define INVALID_CHARS_EXT INVALID_CHARS "\\[\\](){},;:"
+#define INVALID_CHARS_FULL INVALID_CHARS_EXT "?'"
+#define BODY              "([^"INVALID_CHARS_FULL"])([^"INVALID_CHARS_EXT"]*)"
+#define BODY_END          "([^"INVALID_CHARS"]*)[^"INVALID_CHARS_FULL".]"
 #define URI_REGEX         "("SCHEMES"://"BODY_END")" \
                          "|((www|ftp)\\."BODY_END")" \
-                         "|((mailto:)?"BODY_STRICT"@"BODY"\\."BODY_END")"
+                         "|((mailto:)?"BODY"@"BODY"\\."BODY_END")"
 
 static GRegex *
 uri_regex_dup_singleton (void)
index 5713d967c7302cd498265f889c04d8924ecc32c1..a79a7a2875c5e2b0a0bd89250a9c2155e30aa37b 100644 (file)
@@ -44,6 +44,8 @@ test_parsers (void)
       "http://foo.com; bar", "[http://foo.com]; bar",
       "http://foo.com: bar", "[http://foo.com]: bar",
       "http://foo.com:bar", "[http://foo.com:bar]",
+      "http://apos'foo.com", "[http://apos'foo.com]",
+      "mailto:bar'?user@server.com", "[mailto:bar'?user@server.com]",
 
       /* They are not links! */
       "http://", "http[:/]/", /* Hm... */
@@ -54,7 +56,7 @@ test_parsers (void)
       "mailto:user@.com", "mailto:user@.com",
       "user@.com", "user@.com",
 
-      /* Links inside (), {}, [], <> or "" */
+      /* Links inside (), {}, [], <>, "" or '' */
       /* FIXME: How to test if the ending ] is matched or not? */
       "Foo (www.foo.com)", "Foo ([www.foo.com])",
       "Foo {www.foo.com}", "Foo {[www.foo.com]}",
@@ -68,6 +70,8 @@ test_parsers (void)
       "Foo [user@server.com]", "Foo [[user@server.com]]",
       "Foo <user@server.com>", "Foo &lt;[user@server.com]&gt;",
       "Foo \"user@server.com\"", "Foo &quot;[user@server.com]&quot;",
+      "<a href='http://apos'foo.com'>bar</a>", "&lt;a href=&apos;[http://apos'foo.com]&apos;&gt;bar&lt;/a&gt;",
+      "Foo 'bar'?user@server.com'", "Foo &apos;[bar'?user@server.com]&apos;",
 
       /* Basic smileys */
       "a:)b", "a[:)]b",