diff src/tag.c @ 188:041a413d626d

updated for version 7.0057
author vimboss
date Mon, 07 Mar 2005 23:09:59 +0000
parents 7fd70926e2e1
children 79c3648993c3
line wrap: on
line diff
--- a/src/tag.c
+++ b/src/tag.c
@@ -3551,12 +3551,15 @@ add_tag_field(dict, field_name, start, e
     char_u  *end;
 {
     char_u	buf[MAXPATHL];
-    int		len;
+    int		len = 0;
 
-    len = end - start;
-    if (len > sizeof(buf) - 1)
-	len = sizeof(buf) - 1;
-    STRNCPY(buf, start, len);
+    if (start != NULL)
+    {
+	len = end - start;
+	if (len > sizeof(buf) - 1)
+	    len = sizeof(buf) - 1;
+	STRNCPY(buf, start, len);
+    }
     buf[len] = NUL;
     return dict_add_nr_str(dict, field_name, 0L, buf);
 }
@@ -3575,8 +3578,6 @@ get_tags(list, pat)
     dict_T	*dict;
     tagptrs_T	tp;
     long	is_static;
-    char_u	buf[200];
-    char_u	*bp;
 
     ret = find_tags(pat, &num_matches, &matches,
 				    TAG_REGEXP | TAG_NOIC, (int)MAXCOL, NULL);
@@ -3584,14 +3585,18 @@ get_tags(list, pat)
     {
 	for (i = 0; i < num_matches; ++i)
 	{
+	    parse_match(matches[i], &tp);
+	    is_static = test_for_static(&tp);
+
+	    /* Skip pseudo-tag lines. */
+	    if (STRNCMP(tp.tagname, "!_TAG_", 6) == 0)
+		continue;
+
 	    if ((dict = dict_alloc()) == NULL)
 		ret = FAIL;
 	    if (list_append_dict(list, dict) == FAIL)
 		ret = FAIL;
 
-	    parse_match(matches[i], &tp);
-	    is_static = test_for_static(&tp);
-
 	    if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
 		    || add_tag_field(dict, "filename", tp.fname,
 							 tp.fname_end) == FAIL
@@ -3602,8 +3607,6 @@ get_tags(list, pat)
 		    || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
 		ret = FAIL;
 
-	    bp = buf;
-
 	    if (tp.command_end != NULL)
 	    {
 		for (p = tp.command_end + 3;
@@ -3616,41 +3619,28 @@ get_tags(list, pat)
 		    else if (STRNCMP(p, "file:", 5) == 0)
 			/* skip "file:" (static tag) */
 			p += 4;
-		    else if (STRNCMP(p, "struct:", 7) == 0
-			    || STRNCMP(p, "enum:", 5) == 0
-			    || STRNCMP(p, "class:", 6) == 0)
+		    else if (!vim_iswhite(*p))
 		    {
 			char_u	*s, *n;
+			int	len;
 
-			/* Field we recognize, add as a dict entry. */
+			/* Add extra field as a dict entry. */
 			n = p;
-			if (*n == 's')
-			    p += 7;
-			else if (*n == 'e')
-			    p += 5;
-			else
-			    p += 6;
-			s = p;
-			while (*p != NUL && *p != '\n' && *p != '\r')
+			while (*p != NUL && *p > ' ' && *p < 127 && *p != ':')
 			    ++p;
-			if (add_tag_field(dict,
-				    *n == 's' ? "struct"
-					       : *n == 'e' ? "enum" : "class",
-								s, p) == FAIL)
-			    ret = FAIL;
+			len = p - n;
+			if (*p == ':' && len > 0)
+			{
+			    s = ++p;
+			    while (*p != NUL && *p > ' ' && *p < 127)
+				++p;
+			    n[len] = NUL;
+			    if (add_tag_field(dict, (char *)n, s, p) == FAIL)
+				ret = FAIL;
+			    n[len] = ':';
+			}
 			--p;
 		    }
-		    else if ((bp - buf) < sizeof(buf) - 1
-					    && (bp > buf || !vim_iswhite(*p)))
-			/* Field not recognized, add to "extra" dict entry. */
-			*bp++ = *p;
-		}
-
-		if (bp > buf)
-		{
-		    *bp = NUL;
-		    if (dict_add_nr_str(dict, "extra", 0L, buf) == FAIL)
-			ret = FAIL;
 		}
 	    }