PSNameFontDatabase.java
4.21 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
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.fontengine.fontmanagement.postscript;
import com.adobe.fontengine.font.Font;
import com.adobe.fontengine.font.FontLoadingException;
import com.adobe.fontengine.font.InvalidFontException;
import com.adobe.fontengine.font.UnsupportedFontException;
import com.adobe.fontengine.fontmanagement.FontResolutionPriority;
import com.adobe.fontengine.fontmanagement.IntelligentResolver;
import com.adobe.fontengine.fontmanagement.postscript.PSNameResolver;
import com.adobe.fontengine.fontmanagement.postscript.PostscriptFontDescription;
import com.adobe.fontengine.inlineformatting.css20.FamilyNameNormalizer;
import com.adobe.fontengine.inlineformatting.css20.PassThroughFamilyNameNormalizer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public final class PSNameFontDatabase
implements PSNameResolver {
static final long serialVersionUID = 1;
private HashMap psFonts;
private FontResolutionPriority resolutionPriority = FontResolutionPriority.FIRST;
private final FamilyNameNormalizer normalizer;
public PSNameFontDatabase() {
this(new PassThroughFamilyNameNormalizer());
}
public PSNameFontDatabase(FamilyNameNormalizer normalizer) {
this.psFonts = new HashMap();
if (normalizer == null) {
normalizer = new PassThroughFamilyNameNormalizer();
}
this.normalizer = normalizer;
}
public PSNameFontDatabase(PSNameFontDatabase original) {
this.psFonts = (HashMap)original.psFonts.clone();
this.normalizer = original.normalizer;
}
public void addFont(Font font) throws UnsupportedFontException, InvalidFontException, FontLoadingException {
PostscriptFontDescription[] fontDesc = font.getPostscriptFontDescription();
for (int i = 0; i < fontDesc.length; ++i) {
this.addFont(fontDesc[i], font);
}
}
public void addFont(PostscriptFontDescription psDesc, Font font) throws UnsupportedFontException, InvalidFontException, FontLoadingException {
String name = this.normalizer.normalize(psDesc.getPSName());
Font oldFont = (Font)this.psFonts.get(name);
if (oldFont != null) {
Font preferredFont;
if (this.resolutionPriority == FontResolutionPriority.FIRST) {
return;
}
if ((this.resolutionPriority == FontResolutionPriority.INTELLIGENT_LAST || this.resolutionPriority == FontResolutionPriority.INTELLIGENT_FIRST) && (preferredFont = IntelligentResolver.choosePreferredFont(oldFont, font, this.resolutionPriority == FontResolutionPriority.INTELLIGENT_FIRST)) == oldFont) {
return;
}
}
this.psFonts.put(name, font);
}
public boolean isEmpty() {
return this.psFonts.isEmpty();
}
public Font findFont(PostscriptFontDescription psDesc) {
return this.findFont(psDesc.getPSName());
}
public Font findFont(String psName) {
return (Font)this.psFonts.get(this.normalizer.normalize(psName));
}
public FontResolutionPriority setResolutionPriority(FontResolutionPriority priority) {
FontResolutionPriority oldPriority = this.resolutionPriority;
this.resolutionPriority = priority;
return oldPriority;
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
return this.psFonts.equals(((PSNameFontDatabase)obj).psFonts);
}
public int hashCode() {
return this.psFonts.hashCode();
}
public String toString() {
TreeSet tempSet = new TreeSet();
Iterator it = this.psFonts.keySet().iterator();
while (it.hasNext()) {
tempSet.add(it.next());
}
StringBuffer sb = new StringBuffer();
sb.append("priority = ");
sb.append(this.resolutionPriority.toString());
sb.append("; PS names = ");
String prefix = "";
Iterator it2 = tempSet.iterator();
while (it2.hasNext()) {
sb.append(prefix);
sb.append((String)it2.next());
prefix = ", ";
}
return sb.toString();
}
}