blob: df2b2bb7626e7a4895262fce9cf2119985af5e7d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*******************************************************************************
* Copyright (c) 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* This is an implementation of an early-draft specification developed under the Java
* Community Process (JCP) and is made available for testing and evaluation purposes
* only. The code is not compatible with any specification of the JCP.
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.internal.tools.unicode;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TableBuilder {
private static final String CHAR_ELEMENT = "char"; //$NON-NLS-1$
private static final String SINCE_UNICODE_VERSION = "age"; //$NON-NLS-1$
private static final String CODE_POINT = "cp"; //$NON-NLS-1$
private static final String GROUP_CODE = "gc"; //$NON-NLS-1$
public static String[] buildTables(
final double unicodeValue,
boolean usePredefinedRange,
Environment env,
String unicodeDataFileName) throws IOException {
List<String> result = new ArrayList<>();
SAXParser saxParser = null;
try {
saxParser = SAXParserFactory.newInstance().newSAXParser();
} catch (ParserConfigurationException e) {
e.printStackTrace();
return null;
} catch (SAXException e) {
e.printStackTrace();
return null;
}
DefaultHandler defaultHandler = new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (CHAR_ELEMENT.equals(qName)) {
final String group = attributes.getValue(GROUP_CODE);
if (env.hasCategory(group)) {
final String codePoint = attributes.getValue(CODE_POINT);
final String age = attributes.getValue(SINCE_UNICODE_VERSION);
double ageValue = 0.0;
try {
ageValue = Double.parseDouble(age);
} catch (NumberFormatException e) {
e.printStackTrace();
}
if (ageValue <= unicodeValue) {
result.add(codePoint);
}
}
}
}
};
try {
saxParser.parse(new File(unicodeDataFileName), defaultHandler);
} catch (SAXException e) {
e.printStackTrace();
return null;
}
if (usePredefinedRange) {
// predefined ranges - ISO control character (see
// isIdentifierIgnorable(int))
result.add("0000..0008"); //$NON-NLS-1$
result.add("000E..001B"); //$NON-NLS-1$
result.add("007F..009F"); //$NON-NLS-1$
}
return result.toArray(new String[result.size()]);
}
}
|