Skip to content

Commit 2ab2cfb

Browse files
dmitry.radchukiText-CI
authored andcommitted
Improve font characteristics parsing at FontSelector level
Parse font characteristics of specific font-family rather than falsely reuse the characteristics of the previously parse family DEVSIX-5587 Autoported commit. Original commit hash: [a0654a1ed]
1 parent 51a0e38 commit 2ab2cfb

File tree

4 files changed

+37
-11
lines changed

4 files changed

+37
-11
lines changed

itext.tests/itext.layout.tests/itext/layout/FontSelectorTest.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,31 @@ public virtual void OpenSansOutOfNotBoldFontWeightTest() {
878878
().GetDescriptor().GetFontName());
879879
}
880880

881+
[NUnit.Framework.Test]
882+
public virtual void FontCharacteristicIsUnmodifiedTest() {
883+
FontSet set = GetOpenSansFontSet();
884+
IList<String> fontFamilies = new List<String>();
885+
fontFamilies.Add("OpenSans italic");
886+
fontFamilies.Add("OpenSans bold");
887+
FontCharacteristics fc = new FontCharacteristics();
888+
FontCharacteristics expectedFc = new FontCharacteristics(fc);
889+
// previously font characteristics might have been updated while sorting fonts
890+
new FontSelector(set.GetFonts(), fontFamilies, fc);
891+
NUnit.Framework.Assert.AreEqual(expectedFc, fc);
892+
}
893+
894+
[NUnit.Framework.Test]
895+
public virtual void FontCharacteristicsNullTest() {
896+
FontSet set = GetOpenSansFontSet();
897+
IList<String> fontFamilies = new List<String>();
898+
fontFamilies.Add("test");
899+
FontCharacteristics fc = null;
900+
FontSelector fontSelector = new FontSelector(set.GetFonts(), fontFamilies, fc);
901+
// We expect default font characteristics to be used, e.g. as a result regular font must be the best
902+
NUnit.Framework.Assert.AreEqual("OpenSans-Regular", fontSelector.BestMatch().GetDescriptor().GetFontName()
903+
);
904+
}
905+
881906
private void CheckSelector(ICollection<FontInfo> fontInfoCollection, String fontFamily, String expectedNormal
882907
, String expectedBold, String expectedItalic, String expectedBoldItalic) {
883908
IList<String> fontFamilies = new List<String>();

itext/itext.layout/itext/layout/font/FontSelector.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,29 +132,30 @@ public virtual int Compare(FontInfo o1, FontInfo o2) {
132132
for (int i = 0; i < fontFamilies.Count && res == 0; i++) {
133133
FontCharacteristics fc = fontStyles[i];
134134
String fontFamily = fontFamilies[i];
135-
if ("monospace".EqualsIgnoreCase(fontFamily)) {
136-
fc.SetMonospaceFlag(true);
137-
}
138135
bool isLastFontFamilyToBeProcessed = i == fontFamilies.Count - 1;
139136
res = CharacteristicsSimilarity(fontFamily, fc, o2, isLastFontFamilyToBeProcessed) - CharacteristicsSimilarity
140137
(fontFamily, fc, o1, isLastFontFamilyToBeProcessed);
141138
}
142139
return res;
143140
}
144141

145-
private static FontCharacteristics ParseFontStyle(String fontFamily, FontCharacteristics fc) {
146-
if (fc == null) {
147-
fc = new FontCharacteristics();
142+
private static FontCharacteristics ParseFontStyle(String fontFamily, FontCharacteristics defaultFc) {
143+
if (defaultFc == null) {
144+
defaultFc = new FontCharacteristics();
148145
}
149-
if (fc.IsUndefined()) {
146+
FontCharacteristics parsedFc = new FontCharacteristics(defaultFc);
147+
if (parsedFc.IsUndefined()) {
148+
if ("monospace".EqualsIgnoreCase(fontFamily)) {
149+
parsedFc.SetMonospaceFlag(true);
150+
}
150151
if (fontFamily.Contains("bold")) {
151-
fc.SetBoldFlag(true);
152+
parsedFc.SetBoldFlag(true);
152153
}
153154
if (fontFamily.Contains("italic") || fontFamily.Contains("oblique")) {
154-
fc.SetItalicFlag(true);
155+
parsedFc.SetItalicFlag(true);
155156
}
156157
}
157-
return fc;
158+
return parsedFc;
158159
}
159160

160161
/// <summary>

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4ef5318967b79f6fc1cc8b4197f1fe9ee9b8e186
1+
a0654a1ed99416c1597d6d34739d1538368d2cb4

0 commit comments

Comments
 (0)