BreakIteratorFactory.java
4.35 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.agl.text;
import com.adobe.agl.impl.*;
import com.adobe.agl.text.BreakIterator;
import com.adobe.agl.text.RuleBasedBreakIterator;
import com.adobe.agl.text.ThaiBreakIterator;
import com.adobe.agl.util.ULocale;
import com.adobe.agl.util.UResourceBundle;
import java.io.IOException;
import java.io.InputStream;
import java.text.StringCharacterIterator;
import java.util.Locale;
import java.util.MissingResourceException;
final class BreakIteratorFactory
extends BreakIterator.BreakIteratorServiceShim {
static final ICULocaleService service = new BFService();
private static final String[] KIND_NAMES = new String[]{"grapheme", "word", "line", "sentence", "title"};
private static final boolean[] DICTIONARY_POSSIBLE = new boolean[]{false, true, true, false, false};
BreakIteratorFactory() {
}
public Object registerInstance(BreakIterator iter, ULocale locale, int kind) {
iter.setText(new StringCharacterIterator(""));
return service.registerObject(iter, locale, kind);
}
public boolean unregister(Object key) {
if (service.isDefault()) {
return false;
}
return service.unregisterFactory((ICUService.Factory)key);
}
public Locale[] getAvailableLocales() {
if (service == null) {
return ICUResourceBundle.getAvailableLocales("com/adobe/agl/impl/data/icudt40b");
}
return service.getAvailableLocales();
}
public ULocale[] getAvailableULocales() {
if (service == null) {
return ICUResourceBundle.getAvailableULocales("com/adobe/agl/impl/data/icudt40b");
}
return service.getAvailableULocales();
}
public BreakIterator createBreakIterator(ULocale locale, int kind) {
if (service.isDefault()) {
return BreakIteratorFactory.createBreakInstance(locale, kind);
}
ULocale[] actualLoc = new ULocale[1];
BreakIterator iter = (BreakIterator)service.get(locale, kind, actualLoc);
iter.setLocale(actualLoc[0], actualLoc[0]);
return iter;
}
private static BreakIterator createBreakInstance(ULocale locale, int kind) {
RuleBasedBreakIterator iter = null;
ICUResourceBundle rb = (ICUResourceBundle)UResourceBundle.getBundleInstance("com/adobe/agl/impl/data/icudt40b/brkitr", locale);
InputStream ruleStream = null;
try {
String typeKey = KIND_NAMES[kind];
String brkfname = rb.getStringWithFallback("boundaries/" + typeKey);
String rulesFileName = "data/icudt40b/brkitr/" + brkfname;
ruleStream = ICUData.getStream(rulesFileName);
}
catch (Exception e) {
throw new MissingResourceException(e.toString(), "", "");
}
if (DICTIONARY_POSSIBLE[kind]) {
try {
if (locale.getLanguage().equals("th")) {
String dictType = "Thai";
String dictFileName = rb.getStringWithFallback("dictionaries/" + dictType);
dictFileName = "data/icudt40b/brkitr/" + dictFileName;
InputStream is = ICUData.getStream(dictFileName);
iter = new ThaiBreakIterator(ruleStream, is);
}
}
catch (MissingResourceException e) {
}
catch (IOException e) {
Assert.fail(e);
}
}
if (iter == null) {
try {
iter = RuleBasedBreakIterator.getInstanceFromCompiledRules(ruleStream);
}
catch (IOException e) {
Assert.fail(e);
}
}
ULocale uloc = ULocale.forLocale(rb.getLocale());
iter.setLocale(uloc, uloc);
return iter;
}
private static class BFService
extends ICULocaleService {
BFService() {
class RBBreakIteratorFactory
extends ICULocaleService.ICUResourceBundleFactory {
RBBreakIteratorFactory() {
}
protected Object handleCreate(ULocale loc, int kind, ICUService srvc) {
return BreakIteratorFactory.createBreakInstance(loc, kind);
}
}
super("BreakIterator");
this.registerFactory(new RBBreakIteratorFactory());
this.markDefault();
}
}
}