Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Indexer parse fix

2002-12-06 Alain Magloire

        * indexer/.../internal/core/index/CTagsentry.java (parse): Remove
        The parsing was wrong for Exuberant Ctags.


Index: org/eclipse/cdt/internal/core/index/CTagsEntry.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/CTagsEntry.java,v
retrieving revision 1.1
diff -u -r1.1 CTagsEntry.java
--- org/eclipse/cdt/internal/core/index/CTagsEntry.java	26 Jun 2002 20:33:48 -0000	1.1
+++ org/eclipse/cdt/internal/core/index/CTagsEntry.java	6 Dec 2002 19:51:10 -0000
@@ -63,7 +63,7 @@
 		String delim = TAB_SEPARATOR;
 		StringTokenizer st = new StringTokenizer(line, delim);
 		for (int state = 0; st.hasMoreTokens(); state++) {
-			String token = st.nextToken(delim);
+			String token = st.nextToken();
 			switch (state) {
 				case 0: // TAG_NAME:
 					tagName = token;
@@ -71,33 +71,52 @@
 
 				case 1: // FILE_NAME:
 					fileName = token;
-					delim = PATTERN_SEPARATOR;
 				break;
 
 				case 2: // PATTERN;
 					try {
-						String sub = token.substring(1);
+						String sub = token.trim();
 						if (Character.isDigit(sub.charAt(0))) {
 							lineNumber = Integer.parseInt(sub);
 						} else {
+							// Filter out the prepend delimeter.
+							if (sub.startsWith("/") || sub.startsWith("?")) {
+								sub = sub.substring(1);
+							}
+							if (sub.startsWith("^")) {
+								sub = sub.substring(1);
+							}
+
 							// Filter out the delimiters
-							int i = sub.indexOf("/^");
-							int j = sub.lastIndexOf("$/");
-							try {
-								if(i >= 0 && j >= 0 ) {
-									sub = sub.substring(i + 2, j);
-								} else if(i >= 0) {
-									sub = sub.substring(i + 2, sub.length()-1);
-								}
-							} catch (Exception e) {}
+							if (sub.endsWith("\"")) {
+								int j = sub.lastIndexOf('"');
+								sub = sub.substring(0, j);
+							}
+							if (sub.endsWith(";")) {
+								int j = sub.lastIndexOf(';');
+								sub = sub.substring(0, j);
+							}
+							if (sub.endsWith("?")) {
+								int j = sub.lastIndexOf('?');
+								sub = sub.substring(0, j);
+							}
+							if (sub.endsWith("/")) {
+								int j = sub.lastIndexOf('/');
+								sub = sub.substring(0, j);
+							}
+							if (sub.endsWith("$")) {			
+								int j = sub.lastIndexOf('$');
+								sub = sub.substring(0, j);
+							}
 							pattern = sub;
 						}
 					} catch (NumberFormatException e) {
+						pattern = token;
 						//e.printStackTrace();
 					} catch (IndexOutOfBoundsException e) {
+						pattern = token;
 						//e.printStackTrace();
 					}
-					delim = TAB_SEPARATOR;
 				break;
 
 				default: // EXTENSION_FIELDS:



Back to the top