164 (1 << Character.SURROGATE) |
165 (1 << Character.UNASSIGNED)) >> Character.getType(ch)) & 1)
166 == 0;
167 }
168 },
169
170 PRINT {
171 // \p{graph}
172 // \p{blank}
173 // -- \p{cntrl}
174 public boolean is(int ch) {
175 return (GRAPH.is(ch) || BLANK.is(ch)) && !CONTROL.is(ch);
176 }
177 },
178
179 WORD {
180 // \p{alpha}
181 // \p{gc=Mark}
182 // \p{digit}
183 // \p{gc=Connector_Punctuation}
184
185 public boolean is(int ch) {
186 return ALPHABETIC.is(ch) ||
187 ((((1 << Character.NON_SPACING_MARK) |
188 (1 << Character.ENCLOSING_MARK) |
189 (1 << Character.COMBINING_SPACING_MARK) |
190 (1 << Character.DECIMAL_DIGIT_NUMBER) |
191 (1 << Character.CONNECTOR_PUNCTUATION)) >> Character.getType(ch)) & 1)
192 != 0;
193 }
194 };
195
196 private final static HashMap<String, String> posix = new HashMap<>();
197 private final static HashMap<String, String> aliases = new HashMap<>();
198 static {
199 posix.put("ALPHA", "ALPHABETIC");
200 posix.put("LOWER", "LOWERCASE");
201 posix.put("UPPER", "UPPERCASE");
202 posix.put("SPACE", "WHITE_SPACE");
203 posix.put("PUNCT", "PUNCTUATION");
204 posix.put("XDIGIT","HEX_DIGIT");
205 posix.put("ALNUM", "ALNUM");
206 posix.put("CNTRL", "CONTROL");
207 posix.put("DIGIT", "DIGIT");
208 posix.put("BLANK", "BLANK");
209 posix.put("GRAPH", "GRAPH");
210 posix.put("PRINT", "PRINT");
211
212 aliases.put("WHITESPACE", "WHITE_SPACE");
213 aliases.put("HEXDIGIT","HEX_DIGIT");
214 aliases.put("NONCHARACTERCODEPOINT", "NONCHARACTER_CODE_POINT");
215 }
216
217 public static UnicodeProp forName(String propName) {
218 propName = propName.toUpperCase(Locale.ENGLISH);
219 String alias = aliases.get(propName);
220 if (alias != null)
221 propName = alias;
222 try {
223 return valueOf (propName);
224 } catch (IllegalArgumentException x) {}
225 return null;
226 }
227
228 public static UnicodeProp forPOSIXName(String propName) {
229 propName = posix.get(propName.toUpperCase(Locale.ENGLISH));
230 if (propName == null)
231 return null;
232 return valueOf (propName);
233 }
234
|
164 (1 << Character.SURROGATE) |
165 (1 << Character.UNASSIGNED)) >> Character.getType(ch)) & 1)
166 == 0;
167 }
168 },
169
170 PRINT {
171 // \p{graph}
172 // \p{blank}
173 // -- \p{cntrl}
174 public boolean is(int ch) {
175 return (GRAPH.is(ch) || BLANK.is(ch)) && !CONTROL.is(ch);
176 }
177 },
178
179 WORD {
180 // \p{alpha}
181 // \p{gc=Mark}
182 // \p{digit}
183 // \p{gc=Connector_Punctuation}
184 // \p{Join_Control} 200C..200D
185
186 public boolean is(int ch) {
187 return ALPHABETIC.is(ch) ||
188 ((((1 << Character.NON_SPACING_MARK) |
189 (1 << Character.ENCLOSING_MARK) |
190 (1 << Character.COMBINING_SPACING_MARK) |
191 (1 << Character.DECIMAL_DIGIT_NUMBER) |
192 (1 << Character.CONNECTOR_PUNCTUATION)) >> Character.getType(ch)) & 1)
193 != 0 ||
194 JOIN_CONTROL.is(ch);
195 }
196 },
197
198 JOIN_CONTROL {
199 // 200C..200D PropList.txt:Join_Control
200 public boolean is(int ch) {
201 return (ch == 0x200C || ch == 0x200D);
202 }
203 };
204
205 private final static HashMap<String, String> posix = new HashMap<>();
206 private final static HashMap<String, String> aliases = new HashMap<>();
207 static {
208 posix.put("ALPHA", "ALPHABETIC");
209 posix.put("LOWER", "LOWERCASE");
210 posix.put("UPPER", "UPPERCASE");
211 posix.put("SPACE", "WHITE_SPACE");
212 posix.put("PUNCT", "PUNCTUATION");
213 posix.put("XDIGIT","HEX_DIGIT");
214 posix.put("ALNUM", "ALNUM");
215 posix.put("CNTRL", "CONTROL");
216 posix.put("DIGIT", "DIGIT");
217 posix.put("BLANK", "BLANK");
218 posix.put("GRAPH", "GRAPH");
219 posix.put("PRINT", "PRINT");
220
221 aliases.put("WHITESPACE", "WHITE_SPACE");
222 aliases.put("HEXDIGIT","HEX_DIGIT");
223 aliases.put("NONCHARACTERCODEPOINT", "NONCHARACTER_CODE_POINT");
224 aliases.put("JOINCONTROL", "JOIN_CONTROL");
225 }
226
227 public static UnicodeProp forName(String propName) {
228 propName = propName.toUpperCase(Locale.ENGLISH);
229 String alias = aliases.get(propName);
230 if (alias != null)
231 propName = alias;
232 try {
233 return valueOf (propName);
234 } catch (IllegalArgumentException x) {}
235 return null;
236 }
237
238 public static UnicodeProp forPOSIXName(String propName) {
239 propName = posix.get(propName.toUpperCase(Locale.ENGLISH));
240 if (propName == null)
241 return null;
242 return valueOf (propName);
243 }
244
|