--- php.c	2006-05-30 00:37:12.000000000 -0400
+++ php.c.mine	2007-07-26 00:06:38.000000000 -0400
@@ -62,10 +62,11 @@
 	vString *name = vStringNew ();
 	const unsigned char *line;
 
+
 	while ((line = fileReadLine ()) != NULL)
 	{
 		const unsigned char *cp = line;
-
+		int funcStrSize = 0;
 		while (isspace (*cp))
 			cp++;
 
@@ -87,27 +88,6 @@
 				vStringClear (name);
 			}
 		}
-		else if (strncmp ((const char*) cp, "function", (size_t) 8) == 0  &&
-			isspace ((int) cp [8]))
-		{
-			cp += 8;
-
-			while (isspace ((int) *cp))
-				++cp;
-
-			if (*cp == '&')  /* skip reference character */
-				cp++;
-
-			vStringClear (name);
-			while (isalnum ((int) *cp)  ||  *cp == '_')
-			{
-				vStringPut (name, (int) *cp);
-				++cp;
-			}
-			vStringTerminate (name);
-			makeSimpleTag (name, PhpKinds, K_FUNCTION);
-			vStringClear (name);
-		} 
 		else if (strncmp ((const char*) cp, "class", (size_t) 5) == 0 &&
 				 isspace ((int) cp [5]))
 		{
@@ -153,6 +133,51 @@
 			makeSimpleTag (name, PhpKinds, K_DEFINE);
 			vStringClear (name);
 		}
+
+		else if (strncmp ((const char*) cp, "function", (size_t) 8) == 0  &&
+				 isspace ((int) cp [8])) 
+			funcStrSize = 8;
+		else if (strncmp ((const char*) cp, "private function", (size_t) 16) == 0  &&
+				 isspace ((int) cp [16]))
+			funcStrSize = 16;
+		else if (strncmp ((const char*) cp, "public function", (size_t) 15) == 0  &&
+				 isspace ((int) cp [15]))
+			funcStrSize = 15;
+		else if (strncmp ((const char*) cp, "static function", (size_t) 15) == 0  &&
+				 isspace ((int) cp [15]))
+			funcStrSize = 15;
+		else if (strncmp ((const char*) cp, "public static function", (size_t) 22) == 0  &&
+				 isspace ((int) cp [22]))
+			funcStrSize = 22;
+		else if (strncmp ((const char*) cp, "static public function", (size_t) 22) == 0  &&
+				 isspace ((int) cp [22]))
+			funcStrSize = 22;
+		else if (strncmp ((const char*) cp, "private static function", (size_t) 23) == 0  &&
+				 isspace ((int) cp [23]))
+			funcStrSize = 23;
+		else if (strncmp ((const char*) cp, "static private function", (size_t) 23) == 0  &&
+				 isspace ((int) cp [23]))
+			funcStrSize = 23;
+		if(funcStrSize > 0) 
+		{
+			cp += funcStrSize;
+
+			while (isspace ((int) *cp))
+				++cp;
+
+			if (*cp == '&')  /* skip reference character */
+				cp++;
+
+			vStringClear (name);
+			while (isalnum ((int) *cp)  ||  *cp == '_')
+			{
+				vStringPut (name, (int) *cp);
+				++cp;
+			}
+			vStringTerminate (name);
+			makeSimpleTag (name, PhpKinds, K_FUNCTION);
+			vStringClear (name);
+		} 
 	}
 	vStringDelete (name);
 }
