DevanagariFormatter.java
3.93 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.fontengine.inlineformatting.infontformatting;
import com.adobe.fontengine.inlineformatting.AttributedRun;
import com.adobe.fontengine.inlineformatting.infontformatting.IndicFormatter;
final class DevanagariFormatter
extends IndicFormatter {
DevanagariFormatter() {
}
protected int splitVowelsAndNormalize(AttributedRun run, int start, int limit) {
while (start < limit) {
int usv = run.elementAt(start);
switch (usv) {
case 2353: {
if (start + 1 >= limit || run.elementAt(start + 1) != 2381) break;
run.replace(new int[]{start, start + 1}, new int[]{2352, 2381, 8205});
++limit;
start += 3;
}
}
++start;
}
return limit;
}
protected int nukta() {
return 2364;
}
protected int virama() {
return 2381;
}
protected boolean isConsonant(int usv) {
return 2325 <= usv && usv <= 2361 || 2392 <= usv && usv <= 2399 || 9676 == usv;
}
protected boolean hasNukta(int usv) {
return 2345 == usv || 2353 == usv || 2356 == usv || 2392 <= usv && usv <= 2399;
}
protected int removeNukta(int usv) {
switch (usv) {
case 2345: {
return 2344;
}
case 2353: {
return 2352;
}
case 2356: {
return 2355;
}
case 2392: {
return 2325;
}
case 2393: {
return 2326;
}
case 2394: {
return 2327;
}
case 2395: {
return 2332;
}
case 2396: {
return 2337;
}
case 2397: {
return 2364;
}
case 2398: {
return 2347;
}
case 2399: {
return 2351;
}
}
return usv;
}
protected boolean isMark(int usv) {
return 2366 <= usv && usv <= 2380 || 2402 <= usv && usv <= 2403 || 2305 <= usv && usv <= 2307 || 2385 <= usv && usv <= 2388;
}
protected boolean isIndependentVowel(int usv) {
return 2308 <= usv && usv <= 2324 || 2400 <= usv && usv <= 2401 || 9676 == usv;
}
protected IndicFormatter.Position getPosition(int usv) {
switch (usv) {
case 2367: {
return IndicFormatter.Position.left;
}
case 2373:
case 2374:
case 2375:
case 2376: {
return IndicFormatter.Position.topMatra;
}
case 2305:
case 2306:
case 2385:
case 2387:
case 2388: {
return IndicFormatter.Position.topOther;
}
case 2369:
case 2370:
case 2371:
case 2372:
case 2386:
case 2402:
case 2403: {
return IndicFormatter.Position.bottom;
}
case 2366:
case 2368:
case 2377:
case 2378:
case 2379:
case 2380: {
return IndicFormatter.Position.rightMatra;
}
case 2307: {
return IndicFormatter.Position.rightOther;
}
}
return IndicFormatter.Position.any;
}
protected IndicFormatter.Shape rephLike(int usv) {
if (usv == 2352) {
return IndicFormatter.Shape.rephVowel;
}
return IndicFormatter.Shape.any;
}
protected boolean subjoins(int usv) {
return usv == 2352;
}
protected boolean postjoins(int usv) {
return false;
}
protected boolean postjoinsIndependentVowels(int usv) {
return false;
}
}