1 package gnu.kawa.ant; 2 3 import org.apache.tools.ant.types.FilterSet; 4 5 import org.apache.tools.ant.Project; 6 7 import java.util.Enumeration ; 8 import java.util.Hashtable ; 9 10 public class LineStripperSet extends FilterSet 11 { 12 private String strippingUntil = null; 15 16 public LineStripperSet() 17 { 18 } 19 20 26 public static class LineStripper { 28 String first; 29 String last; 30 31 public LineStripper() 32 { 33 } 34 35 public void setFirst(final String s) 36 { 37 first = s; 38 } 39 40 public void setLast(final String s) 41 { 42 last = s; 43 } 44 45 public String getFirst() 46 { 47 return first; 48 } 49 50 public String getLast() 51 { 52 return last; 53 } 54 55 } 56 57 62 public Hashtable getStripperHash() { 63 final int filterSize = getFilters().size(); 64 final Hashtable stripperHash = new Hashtable (filterSize); 65 for (final Enumeration e = getFilters().elements(); e.hasMoreElements();) { 66 LineStripper stripper = (LineStripper) e.nextElement(); 67 stripperHash.put(stripper.getFirst(), stripper.getLast()); 68 } 69 return stripperHash; 70 } 71 72 79 public String replaceTokens(String line) 80 { 81 final String beginToken = getBeginToken(); 82 final String endToken = getEndToken(); 83 int index = line.indexOf(beginToken); 84 85 if (strippingUntil != null) { 86 log( "Stripping until: " + beginToken + strippingUntil + endToken 87 , Project.MSG_VERBOSE ); 88 } 89 90 if (index < 0) { 91 if (strippingUntil == null) { 92 return line; 93 } 94 95 return ""; 96 } 97 98 final Hashtable tokens = getStripperHash(); 99 try { 100 StringBuffer b = new StringBuffer (); 101 int i = 0; 102 String token = null; 103 104 do { 105 int endIndex = line.indexOf(endToken, index + beginToken.length() + 1 ); 106 if (endIndex == -1) { 107 break; 108 } 109 token = line.substring(index + beginToken.length(), endIndex ); 110 111 if (strippingUntil == null) { 112 b.append(line.substring(i, index)); 114 if (tokens.containsKey(token)) { 115 strippingUntil = (String ) tokens.get(token); 116 log( "Stripping: " + beginToken + token + endToken, Project.MSG_VERBOSE ); 117 i = index + beginToken.length() + token.length() + endToken.length(); 118 } else { 119 b.append(beginToken); 121 i = index + beginToken.length(); 122 } 123 } else { 124 if (strippingUntil.equals(token)) { 128 log( "Stripping ends with: " + beginToken + token + endToken 129 , Project.MSG_VERBOSE ); 130 i = index + beginToken.length() + token.length() + endToken.length(); 133 strippingUntil = null; 135 } else { 136 i = index + beginToken.length(); 138 } 139 } 140 } while ((index = line.indexOf( beginToken, i )) > -1 ); 141 142 b.append(line.substring(i)); 143 return b.toString(); 144 } catch (StringIndexOutOfBoundsException e) { 145 return line; 146 } 147 } 148 149 154 public void addLineStripper(LineStripper stripper) 155 { 156 if (isReference()) { 157 throw noChildrenAllowed(); 158 } 159 getFilters().addElement(stripper); 160 } 161 162 } 163 | Popular Tags |