Kaydet (Commit) 03d22bec authored tarafından Nick Treleaven's avatar Nick Treleaven

Fix CTags bug 2970274 - when using addCallbackRegex the callback

receives less than the number of matches. The number is still not 
correct (due to POSIX regex compatibility) but at least includes 
all non-empty matches now.
http://sourceforge.net/tracker/index.php?func=detail&aid=2970274
&group_id=6556&atid=106556



git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5997 ea778897-0a13-0410-b9d1-a72fbfd435f5
üst 3462cc90
2011-10-05 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* tagmanager/lregex.c, tagmanager/php.c:
Fix CTags bug 2970274 - when using addCallbackRegex the callback
receives less than the number of matches. The number is still not
correct (due to POSIX regex compatibility) but at least includes
all non-empty matches now.
http://sourceforge.net/tracker/index.php?func=detail&aid=2970274
&group_id=6556&atid=106556
2011-10-04 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> 2011-10-04 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* tagmanager/js.c: * tagmanager/js.c:
......
...@@ -471,11 +471,16 @@ static void matchCallbackPattern ( ...@@ -471,11 +471,16 @@ static void matchCallbackPattern (
for (i = 0 ; i < BACK_REFERENCE_COUNT ; ++i) for (i = 0 ; i < BACK_REFERENCE_COUNT ; ++i)
{ {
int so, eo; int so, eo;
if (!g_match_info_fetch_pos(minfo, i, &so, &eo) || so == -1) if (!g_match_info_fetch_pos(minfo, i, &so, &eo))
break; break;
matches [i].start = so; matches [i].start = so;
matches [i].length = eo - so; matches [i].length = eo - so;
++count; /* a valid match may have both offsets == -1,
* e.g. (foo)*(bar) matching "bar" - see CTags bug 2970274.
* As POSIX regex doesn't seem to have a way to count matches,
* we return the count up to the last non-empty match. */
if (so != -1)
count = i + 1;
} }
patbuf->u.callback.function (vStringValue (line), matches, count); patbuf->u.callback.function (vStringValue (line), matches, count);
} }
......
...@@ -80,12 +80,7 @@ static void installPHPRegex (const langType language) ...@@ -80,12 +80,7 @@ static void installPHPRegex (const langType language)
addTagRegex(language, "^[ \t]*const[ \t]*([" ALPHA "_][" ALNUM "_]*)[ \t]*[=;]", addTagRegex(language, "^[ \t]*const[ \t]*([" ALPHA "_][" ALNUM "_]*)[ \t]*[=;]",
"\\1", "m,macro,macros", NULL); "\\1", "m,macro,macros", NULL);
addCallbackRegex(language, addCallbackRegex(language,
"^[ \t]*((public|protected|private|static|final)[ \t]+)+function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*)[[:space:]]*(\\(.*\\))", "^[ \t]*((public|protected|private|static|final)[ \t]+)*function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*)[[:space:]]*(\\(.*\\))",
NULL, function_cb);
/* note: using (qualifiers)* instead of (qualifiers)+ in the above regex doesn't seem to
* match 'function' on its own, so we handle that separately: */
addCallbackRegex(language,
"^[ \t]*function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*)[[:space:]]*(\\(.*\\))",
NULL, function_cb); NULL, function_cb);
addTagRegex(language, "^[ \t]*(\\$|::\\$|\\$this->)([" ALPHA "_][" ALNUM "_]*)[ \t]*=", addTagRegex(language, "^[ \t]*(\\$|::\\$|\\$this->)([" ALPHA "_][" ALNUM "_]*)[ \t]*=",
"\\2", "v,variable,variables", NULL); "\\2", "v,variable,variables", NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment