1 30 31 package de.susebox.jtopas.spi; 32 33 34 import de.susebox.jtopas.TokenizerProperties; 38 import de.susebox.jtopas.TokenizerException; 39 import de.susebox.jtopas.Flags; 40 41 42 46 63 public class StandardWhitespaceHandler implements WhitespaceHandler { 64 65 72 public StandardWhitespaceHandler(TokenizerProperties props) { 73 _properties = props; 74 } 75 76 83 public boolean isWhitespace(char testChar) { 84 String whitespaces; 85 86 if (_properties != null && (whitespaces = _properties.getWhitespaces()) != null) { 87 if (_properties.isFlagSet(Flags.F_NO_CASE)) { 88 return whitespaces.toLowerCase().indexOf(Character.toLowerCase(testChar)) >= 0; 89 } else { 90 return whitespaces.indexOf(testChar) >= 0; 91 } 92 } else { 93 return false; 94 } 95 } 96 97 106 public int countLeadingWhitespaces(DataProvider dataProvider) throws NullPointerException { 107 int len = 0; 108 int maxChars = dataProvider.getLength(); 109 110 while (len < maxChars && isWhitespace(dataProvider.getCharAt(len))) { 111 len++; 112 } 113 return len; 114 } 115 116 125 public boolean newlineIsWhitespace() { 126 String whitespaces; 127 boolean isWhitespace; 128 129 if (_properties != null && (whitespaces = _properties.getWhitespaces()) != null) { 130 return newlineIsWhitespace(whitespaces); 131 } else { 132 return false; 133 } 134 } 135 136 140 145 private boolean newlineIsWhitespace(String set) { 146 int len = (set != null) ? set.length() : 0; 147 char start, end, setChar; 148 boolean crFound = false; 149 boolean lfFound = false; 150 151 for (int ii = 0; ii < len; ++ii) { 152 switch (setChar = set.charAt(ii)) { 153 case '-': 154 start = (ii > 0) ? set.charAt(ii - 1) : 0; 155 end = (ii < len - 1) ? set.charAt(ii + 1) : 0xFFFF; 156 if ('\n' >= start && '\n' <= end) { 157 lfFound = true; 158 } 159 if ('\r' >= start && '\r' <= end) { 160 crFound = true; 161 } 162 ii += 2; 163 break; 164 165 case '\r': 166 crFound = true; 167 break; 168 169 case '\n': 170 lfFound = true; 171 break; 172 173 case '\\': 174 ii++; 175 break; 176 } 177 178 if (crFound && lfFound) { 180 return true; 181 } 182 } 183 184 return false; 186 } 187 188 192 196 private TokenizerProperties _properties = null; 197 } 198 | Popular Tags |