Skip to content

Commit bdf6716

Browse files
yulian-gaponenkoitext-teamcity
authored andcommitted
Revert getBaseName usage avoiding in order to not fail on redundant font names usage, add woff support in FontProgramDescriptorFactory
ITXT-CR-284, DEVSIX-1148 Autoported commit. Original commit hash: [2762266]
1 parent a44f6b2 commit bdf6716

File tree

4 files changed

+25
-17
lines changed

4 files changed

+25
-17
lines changed

itext/itext.io/itext/io/font/FontProgramDescriptorFactory.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static FontProgramDescriptor FetchDescriptor(String fontName) {
6262
}
6363
}
6464
try {
65-
String fontNameLowerCase = fontName.ToLowerInvariant();
65+
String fontNameLowerCase = baseName.ToLowerInvariant();
6666
if (isBuiltinFonts14 || fontNameLowerCase.EndsWith(".afm") || fontNameLowerCase.EndsWith(".pfm")) {
6767
fontDescriptor = FetchType1FontDescriptor(fontName, null);
6868
}
@@ -71,11 +71,18 @@ public static FontProgramDescriptor FetchDescriptor(String fontName) {
7171
fontDescriptor = FetchCidFontDescriptor(fontName);
7272
}
7373
else {
74-
if (fontNameLowerCase.EndsWith(".ttf") || fontNameLowerCase.EndsWith(".otf")) {
75-
fontDescriptor = FetchTrueTypeFontDescriptor(fontName);
74+
if (fontNameLowerCase.EndsWith(".ttf") || fontNameLowerCase.EndsWith(".otf") || fontNameLowerCase.EndsWith
75+
(".woff")) {
76+
if (fontNameLowerCase.EndsWith(".woff")) {
77+
byte[] fontProgram = WoffConverter.Convert(FontProgramFactory.ReadFontBytesFromPath(baseName));
78+
fontDescriptor = FetchTrueTypeFontDescriptor(fontProgram);
79+
}
80+
else {
81+
fontDescriptor = FetchTrueTypeFontDescriptor(fontName);
82+
}
7683
}
7784
else {
78-
fontDescriptor = FetchTTCDescriptor(fontName);
85+
fontDescriptor = FetchTTCDescriptor(baseName);
7986
}
8087
}
8188
}
@@ -137,11 +144,11 @@ private static FontProgramDescriptor FetchTTCDescriptor(String baseName) {
137144
int ttcIndex;
138145
try {
139146
ttcName = baseName.JSubstring(0, ttcSplit + 4);
140-
//count(.ttc) = 4
147+
// count(.ttc) = 4
141148
ttcIndex = System.Convert.ToInt32(baseName.Substring(ttcSplit + 5));
142149
}
143150
catch (FormatException nfe) {
144-
//count(.ttc,) = 5)
151+
// count(.ttc,) = 5)
145152
throw new iText.IO.IOException(nfe.Message, nfe);
146153
}
147154
OpenTypeParser parser = new OpenTypeParser(ttcName, ttcIndex);

itext/itext.io/itext/io/font/FontProgramFactory.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,9 @@ public static FontProgram CreateFont(String name, byte[] fontProgram, bool cache
200200
}
201201
else {
202202
String fontFileExtension = null;
203-
int extensionBeginIndex = name.LastIndexOf('.');
203+
int extensionBeginIndex = baseName.LastIndexOf('.');
204204
if (extensionBeginIndex > 0) {
205-
fontFileExtension = name.Substring(extensionBeginIndex).ToLowerInvariant();
205+
fontFileExtension = baseName.Substring(extensionBeginIndex).ToLowerInvariant();
206206
}
207207
if (isBuiltinFonts14 || ".afm".Equals(fontFileExtension) || ".pfm".Equals(fontFileExtension)) {
208208
fontBuilt = new Type1Font(name, null, null, null);
@@ -216,7 +216,7 @@ public static FontProgram CreateFont(String name, byte[] fontProgram, bool cache
216216
)) {
217217
if (".woff".Equals(fontFileExtension)) {
218218
if (fontProgram == null) {
219-
fontProgram = ReadBytesFromPath(name);
219+
fontProgram = ReadFontBytesFromPath(baseName);
220220
}
221221
try {
222222
fontProgram = WoffConverter.Convert(fontProgram);
@@ -233,12 +233,12 @@ public static FontProgram CreateFont(String name, byte[] fontProgram, bool cache
233233
}
234234
}
235235
else {
236-
int ttcSplit = name.ToLowerInvariant().IndexOf(".ttc,", StringComparison.Ordinal);
236+
int ttcSplit = baseName.ToLowerInvariant().IndexOf(".ttc,", StringComparison.Ordinal);
237237
if (ttcSplit > 0) {
238238
try {
239-
String ttcName = name.JSubstring(0, ttcSplit + 4);
239+
String ttcName = baseName.JSubstring(0, ttcSplit + 4);
240240
// count(.ttc) = 4
241-
int ttcIndex = System.Convert.ToInt32(name.Substring(ttcSplit + 5));
241+
int ttcIndex = System.Convert.ToInt32(baseName.Substring(ttcSplit + 5));
242242
// count(.ttc,) = 5)
243243
fontBuilt = new TrueTypeFont(ttcName, ttcIndex);
244244
}
@@ -564,7 +564,7 @@ public static void ClearRegisteredFontFamilies() {
564564
}
565565

566566
/// <exception cref="System.IO.IOException"/>
567-
private static byte[] ReadBytesFromPath(String path) {
567+
internal static byte[] ReadFontBytesFromPath(String path) {
568568
RandomAccessFileOrArray raf = new RandomAccessFileOrArray(new RandomAccessSourceFactory().CreateBestSource
569569
(path));
570570
int bufLen = (int)raf.Length();

itext/itext.io/itext/io/font/OpenTypeParser.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,11 @@ public OpenTypeParser(String ttcPath, int ttcIndex) {
278278

279279
/// <exception cref="System.IO.IOException"/>
280280
public OpenTypeParser(String name) {
281-
String ttcName = GetTTCName(name);
281+
String baseName = FontProgram.GetBaseName(name);
282+
String ttcName = GetTTCName(baseName);
282283
this.fileName = ttcName;
283-
if (ttcName.Length < name.Length) {
284-
ttcIndex = System.Convert.ToInt32(name.Substring(ttcName.Length + 1));
284+
if (ttcName.Length < baseName.Length) {
285+
ttcIndex = System.Convert.ToInt32(baseName.Substring(ttcName.Length + 1));
285286
}
286287
raf = new RandomAccessFileOrArray(new RandomAccessSourceFactory().CreateBestSource(fileName));
287288
InitializeSfntTables();

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5d7fa1869148bbbca746e1c92e3541dc3696adeb
1+
2762266b3de461c006adca4072c1af562d23a81d

0 commit comments

Comments
 (0)