Skip to content

Commit bf285fd

Browse files
committed
Fixed last of the tests
1 parent 50b0df1 commit bf285fd

4 files changed

Lines changed: 29 additions & 59 deletions

File tree

src/EPPlus.Fonts.OpenType.Tests/TextFragmentCollectionTests.cs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void MeasureBold()
3737
var maxSizePoints = Math.Round(300d, 0, MidpointRounding.AwayFromZero).PixelToPoint();
3838

3939
var measurer = OpenTypeFonts.GetShaperForFont(font2);
40-
var widthInPoints = measurer.GetDescentInPoints(font2.Size);
40+
var widthInPoints = measurer.ShapeLight(test).GetWidthInPoints(font2.Size);
4141

4242
var inPixels = Math.Round(widthInPoints.PointToPixel(),0,MidpointRounding.AwayFromZero);
4343

@@ -54,8 +54,10 @@ public void MeasureGoudy()
5454
Style = MeasurementFontStyles.Regular
5555
};
5656

57+
var text = "Goudy size";
58+
5759
var measurer = OpenTypeFonts.GetShaperForFont(font5);
58-
var widthInPoints = measurer.GetDescentInPoints(font5.Size);
60+
var widthInPoints = measurer.ShapeLight(text).GetWidthInPoints(16f);
5961

6062
var inPixels = Math.Round(widthInPoints.PointToPixel(), 0, MidpointRounding.AwayFromZero);
6163

@@ -121,25 +123,25 @@ public void MeasureWrappedWidthsWithInternalLineBreaks()
121123

122124
var line1 = wrappedLines[0];
123125

124-
var pixels11 = Math.Round(line1.RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
126+
var pixels11 = Math.Round(line1.LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
125127
var pixelsWholeline1 = Math.Round(line1.Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
126128

127129
Assert.AreEqual(44, pixels11);
128130
Assert.AreEqual(pixels11, pixelsWholeline1);
129131

130132
var line2 = wrappedLines[1];
131133

132-
var pixels21 = Math.Round(line2.RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
134+
var pixels21 = Math.Round(line2.LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
133135
var pixelsWholeline2 = Math.Round(line2.Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
134136

135137
Assert.AreEqual(7, pixels21);
136138
Assert.AreEqual(pixels21, pixelsWholeline2);
137139

138140
var line3 = wrappedLines[2];
139141

140-
var pixels31 = Math.Round(line3.RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
141-
var pixels32 = Math.Round(line3.RtFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
142-
var pixels33 = Math.Round(line3.RtFragments[2].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
142+
var pixels31 = Math.Round(line3.LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
143+
var pixels32 = Math.Round(line3.LineFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
144+
var pixels33 = Math.Round(line3.LineFragments[2].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
143145
var pixelsWholeLine3 = Math.Round(line3.Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
144146

145147
//~54 px
@@ -154,8 +156,8 @@ public void MeasureWrappedWidthsWithInternalLineBreaks()
154156

155157
var line4 = wrappedLines[3];
156158

157-
var pixels41 = Math.Round(line4.RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
158-
var pixels42 = Math.Round(line4.RtFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
159+
var pixels41 = Math.Round(line4.LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
160+
var pixels42 = Math.Round(line4.LineFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
159161
var pixelsWholeLine4 = Math.Round(line4.Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
160162
//~34 px
161163
Assert.AreEqual(33, pixels41);
@@ -166,8 +168,8 @@ public void MeasureWrappedWidthsWithInternalLineBreaks()
166168

167169
var line5 = wrappedLines[4];
168170

169-
var pixels51 = Math.Round(line5.RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
170-
var pixels52 = Math.Round(line5.RtFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
171+
var pixels51 = Math.Round(line5.LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
172+
var pixels52 = Math.Round(line5.LineFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
171173
var pixelsWholeLine5 = Math.Round(line5.Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
172174
Assert.AreEqual(35, pixels51);
173175
//This line does NOT contain a space at the end
@@ -227,9 +229,9 @@ public void MeasureWrappedWidths()
227229

228230
var wrappedLines = ttMeasurer.WrapRichTextLines(textFragments, maxSizePoints);
229231

230-
var pixels1 = Math.Round(wrappedLines[0].RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
231-
var pixels2 = Math.Round(wrappedLines[0].RtFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
232-
var pixels3 = Math.Round(wrappedLines[0].RtFragments[2].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
232+
var pixels1 = Math.Round(wrappedLines[0].LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
233+
var pixels2 = Math.Round(wrappedLines[0].LineFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
234+
var pixels3 = Math.Round(wrappedLines[0].LineFragments[2].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
233235
var pixelsWholeLine = Math.Round(wrappedLines[0].Width.PointToPixel(),0, MidpointRounding.AwayFromZero);
234236

235237
//~54 px
@@ -242,8 +244,8 @@ public void MeasureWrappedWidths()
242244
//Total Width: ~140
243245
Assert.AreEqual(140d, pixelsWholeLine);
244246

245-
var pixels21 = Math.Round(wrappedLines[1].RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
246-
var pixels22 = Math.Round(wrappedLines[1].RtFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
247+
var pixels21 = Math.Round(wrappedLines[1].LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
248+
var pixels22 = Math.Round(wrappedLines[1].LineFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
247249
var pixelsWholeLine2 = Math.Round(wrappedLines[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
248250
//~34 px
249251
Assert.AreEqual(33, pixels21);
@@ -252,8 +254,8 @@ public void MeasureWrappedWidths()
252254

253255
Assert.AreEqual(281, pixelsWholeLine2);
254256

255-
var pixels31 = Math.Round(wrappedLines[2].RtFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
256-
var pixels32 = Math.Round(wrappedLines[2].RtFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
257+
var pixels31 = Math.Round(wrappedLines[2].LineFragments[0].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
258+
var pixels32 = Math.Round(wrappedLines[2].LineFragments[1].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
257259
var pixelsWholeLine3 = Math.Round(wrappedLines[2].Width.PointToPixel(), 0, MidpointRounding.AwayFromZero);
258260
Assert.AreEqual(35, pixels31);
259261
//This line does NOT contain a space at the end

src/EPPlus.Fonts.OpenType/Integration/DataHolders/TextLineSimple.cs

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ namespace EPPlus.Fonts.OpenType.Integration
88
{
99
public class TextLineSimple
1010
{
11-
public List<RichTextFragmentSimple> RtFragments { get; private set; } = new List<RichTextFragmentSimple>();
12-
1311
public List<LineFragment> LineFragments { get; internal set; } = new List<LineFragment>();
1412

1513
public string Text { get; internal set; }
@@ -68,46 +66,14 @@ public TextLineSimple()
6866
{
6967
}
7068

71-
public TextLineSimple(List<RichTextFragmentSimple> rtFragments, string text, double largestFontSize, double largestAscent, double largestDescent)
69+
public TextLineSimple(string text, double largestFontSize, double largestAscent, double largestDescent)
7270
{
73-
RtFragments = rtFragments;
7471
Text = text;
7572
LargestFontSize = largestFontSize;
7673
LargestAscent = largestAscent;
7774
LargestDescent = largestDescent;
7875
}
7976

80-
/// <summary>
81-
/// Get the text of one of the fragments in this line
82-
/// </summary>
83-
/// <param name=""></param>
84-
/// <returns></returns>
85-
public string GetFragmentText(RichTextFragmentSimple rtFragment)
86-
{
87-
if(RtFragments.Contains(rtFragment) == false)
88-
{
89-
throw new InvalidOperationException($"GetFragmentText failed. Cannot retrieve {rtFragment} since it is not part of this textLine: {this}");
90-
}
91-
92-
if(string.IsNullOrEmpty(Text))
93-
{
94-
return Text;
95-
}
96-
97-
var startIdx = rtFragment.charStarIdxWithinCurrentLine;
98-
99-
var idxInLst = RtFragments.FindIndex(x => x == rtFragment);
100-
if(idxInLst == RtFragments.Count -1)
101-
{
102-
return Text.Substring(startIdx, Text.Length - startIdx);
103-
}
104-
else
105-
{
106-
var endIdx = RtFragments[idxInLst + 1].charStarIdxWithinCurrentLine;
107-
return Text.Substring(startIdx, endIdx - startIdx);
108-
}
109-
}
110-
11177
public string GetLineFragmentText(LineFragment rtFragment)
11278
{
11379
if (LineFragments.Contains(rtFragment) == false)

src/EPPlus.Fonts.OpenType/Integration/TextLayoutEngine.Wrapping.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ private void ProcessCompleteWord(
4343
if (totalWidth <= maxWidth || state.LineStart == state.WordStart)
4444
{
4545
// Word fits on current line
46-
_lineBuilder.AppendSpaceIfNotEmpty();
46+
if(_lineBuilder.LastChar() != ' ')
47+
{
48+
_lineBuilder.AppendSpaceIfNotEmpty();
49+
}
4750
_lineBuilder.AppendSubstring(text, state.WordStart, currentPos - state.WordStart);
4851
state.CurrentLineWidth = totalWidth;
4952
}
@@ -85,8 +88,7 @@ double maxWidth
8588

8689
if (totalWidth <= maxWidth)
8790
{
88-
// Space fits on current line
89-
_lineBuilder.AppendSpaceIfNotEmpty();
91+
_lineBuilder.Append(" ");
9092
_lineBuilder.AppendSubstring(text, state.WordStart, currentPos - state.WordStart);
9193
state.CurrentLineWidth = totalWidth;
9294
}

src/EPPlus.Fonts.OpenType/Integration/TextLayoutEngine.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,11 @@ public List<string> WrapText(
137137

138138
var paragraphs = text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
139139

140-
////paragraphs that have endline symbols should keep trailing spaces
141-
////others should not. Add an extra space as the trailing space is always trimmed
140+
//paragraphs that have endline symbols should keep trailing spaces
141+
//others should not. Add an extra space as the trailing space is always trimmed
142142
//if (paragraphs.Length > 1)
143143
//{
144-
// for (int i = 0; i < paragraphs.Length - 1; i++)
144+
// for (int i = 1; i < paragraphs.Length - 1; i++)
145145
// {
146146
// paragraphs[i] = paragraphs[i] + " ";
147147
// }

0 commit comments

Comments
 (0)