1 19 20 package org.netbeans.modules.tasklist.docscan; 21 22 import java.io.Externalizable ; 23 import java.io.IOException ; 24 import java.io.ObjectInput ; 25 import java.io.ObjectOutput ; 26 import java.util.regex.*; 27 28 import org.openide.ErrorManager; 29 30 31 38 public final class TaskTags implements Externalizable { 39 40 static final long serialVersionUID = 1L; 41 private TaskTag[] tags = null; 42 43 public TaskTags() { 44 } 45 46 49 public void setTags(TaskTag[] tags) { 50 this.tags = tags; 51 } 52 53 public TaskTag[] getTags() { 54 return tags; 55 } 56 57 public TaskTag getTag(CharSequence token, int start, int len) { 58 if (tags == null) { 59 return null; 60 } 61 for (int i = 0; i < tags.length; i++) { 62 if (same(tags[i].getToken(), token, start, len)) { 63 return tags[i]; 64 } 65 } 66 return null; 67 } 68 69 private static boolean same(String s1, CharSequence s2, int start, int len) { 70 if (s1.length() != len) return false; 71 for (int i = 0; i<len; i++) { 72 if (s1.charAt(i) != s2.charAt(start+i)) return false; 73 } 74 return true; 75 } 76 77 private Pattern regexp = null; 78 79 90 public Pattern getScanRegexp() { 91 if (regexp == null) { 93 StringBuffer sb = new StringBuffer (200); 94 TaskTag[] tgs = getTags(); 95 for (int i = 0; i < tgs.length; i++) { 96 if (i > 0) { 97 sb.append('|'); 98 } 99 String s = tgs[i].getToken(); 100 int n = s.length(); 101 if (Character.isJavaIdentifierPart(s.charAt(0))) { 109 112 sb.append("\\W"); } 115 for (int j = 0; j < n; j++) { 118 char c = s.charAt(j); 119 if ((c == '(') || (c == ')') || 121 (c == '{') || (c == '}') || 122 (c == '[') || (c == ']') || 123 (c == '?') || (c == '*') || (c == '+') || 124 (c == '!') || (c == '|') || (c == '\\') || 125 (c == '^') || (c == '$')) { 126 sb.append('\\'); 127 } 128 sb.append(c); 129 } 130 if (Character.isJavaIdentifierPart(s.charAt(n-1))) { 131 sb.append("\\b"); } 133 } 134 try { 135 regexp = Pattern.compile(sb.toString()); 136 } catch (PatternSyntaxException e) { 137 ErrorManager.getDefault().notify(ErrorManager.ERROR, e); 140 return null; 141 } 142 } 143 return regexp; 144 } 145 146 151 public void readExternal(ObjectInput objectInput) throws IOException , java.lang.ClassNotFoundException { 152 int ver = objectInput.read(); 153 assert ver == 1 : "serialization version incorrect; should be 1"; 154 155 int num = ((Integer )objectInput.readObject()).intValue(); 157 tags = new TaskTag[num]; 158 for (int i = 0; i < num; i++) { 159 tags[i] = (TaskTag)objectInput.readObject(); 160 } 161 } 162 163 166 public void writeExternal(ObjectOutput objectOutput) throws IOException { 167 objectOutput.write(1); objectOutput.writeObject(new Integer (tags.length)); 169 for (int i = 0; i < tags.length; i++) { 170 objectOutput.writeObject(tags[i]); 171 } 172 } 173 } 174 175 176 177 | Popular Tags |