Skip to content

Commit 80c92b5

Browse files
swmalswmal
authored andcommitted
Replace global font singleton with per-workbook RenderContext in render stack; split FontAvailability into result enum plus RequireExactFont policy
1 parent 1d14074 commit 80c92b5

29 files changed

Lines changed: 328 additions & 206 deletions

File tree

src/EPPlus.DrawingRenderer.Tests/DrawingShapeRenderer/SvgStandAloneTests.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using EPPlus.DrawingRenderer.RenderItems;
33
using EPPlus.DrawingRenderer.RenderItems.SvgItem;
44
using EPPlus.Export.ImageRenderer.RenderItems.SvgItem;
5+
using EPPlus.Fonts.OpenType;
56
using EPPlus.Fonts.OpenType.Integration.DataHolders;
67
using EPPlus.Graphics;
78
using System.Drawing;
@@ -119,7 +120,9 @@ private void GenerateTextBodyFile(string fileName, GroupRenderItem baseGroup, Sv
119120

120121
private SvgTextBodyRenderItem GenerateTextBody(GroupRenderItem baseGroup)
121122
{
122-
var textBody = new SvgTextBodyRenderItem(baseGroup.Bounds, true);
123+
var engine = new OpenTypeFontEngine(x => x.SearchSystemDirectories = true);
124+
var renderContext = new RenderContext(() => engine);
125+
var textBody = new SvgTextBodyRenderItem(renderContext, baseGroup.Bounds, true);
123126
var paragraph = textBody.AddParagraph("Hello");
124127

125128
paragraph.AddText(" There");
@@ -270,7 +273,9 @@ private RenderTextbox GenerateTextBox(out GroupRenderItem group)
270273
group = GenerateGroupRenderItem();
271274

272275
var textbox = new RenderTextbox(group.Bounds, 500d, 500d);
273-
textbox.TextBody = new SvgTextBodyRenderItem(group.Bounds, true);
276+
var engine = new OpenTypeFontEngine(x => x.SearchSystemDirectories = true);
277+
var rc = new RenderContext(() => engine);
278+
textbox.TextBody = new SvgTextBodyRenderItem(rc, group.Bounds, true);
274279
var paragraph = textbox.TextBody.AddParagraph("Hello");
275280

276281
paragraph.AddText(" There");

src/EPPlus.DrawingRenderer.Tests/Shape/ShapeToSvgTests.cs

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,33 @@ namespace EPPlus.Export.ImageRenderer.Tests.Shape
1515
[TestClass]
1616
public sealed class ShapeToSvgTests : TestBase
1717
{
18+
19+
[TestInitialize]
20+
public void Initialize()
21+
{
22+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
23+
}
24+
25+
private OpenTypeFontEngine DefaultFontEngine
26+
{
27+
get { return new OpenTypeFontEngine(x => x.SearchSystemDirectories = true); }
28+
}
29+
30+
private ExcelPackage GetPackage()
31+
{
32+
var p = new ExcelPackage();
33+
p.Workbook.UseFontEngine(DefaultFontEngine);
34+
return p;
35+
}
36+
37+
1838
[TestMethod]
1939
public void Rect()
2040
{
21-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
41+
2242
using (var p = OpenPackage("svg/rect.xlsx", true))
2343
{
44+
p.Workbook.UseFontEngine(DefaultFontEngine);
2445
var ws = p.Workbook.Worksheets.Add("Sheet1");
2546
var d = ws.Drawings.AddShape("Shape1", OfficeOpenXml.Drawing.eShapeStyle.Rect);
2647
d.Text = "Rectangle Rectangle Rectangle Rectangle";
@@ -35,9 +56,9 @@ public void Rect()
3556
[TestMethod]
3657
public void AddShapeWithPatternFill()
3758
{
38-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
3959
using (var p = OpenTemplatePackage("ShapeWithPattern.xlsx"))
4060
{
61+
p.Workbook.UseFontEngine(DefaultFontEngine);
4162
var ws = p.Workbook.Worksheets[0];
4263

4364
var myShape = ws.Drawings[0].As.Shape;
@@ -53,8 +74,7 @@ public void AddShapeWithPatternFill()
5374
[TestMethod]
5475
public void RoundRect()
5576
{
56-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
57-
using (var p = new ExcelPackage())
77+
using (var p = GetPackage())
5878
{
5979
var ws = p.Workbook.Worksheets.Add("Sheet1");
6080
var d = ws.Drawings.AddShape("Shape1", eShapeStyle.RoundRect);
@@ -71,7 +91,7 @@ public void RoundRect()
7191
[TestMethod]
7292
public void Triangle()
7393
{
74-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
94+
7595
using (var p = new ExcelPackage())
7696
{
7797
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -87,7 +107,6 @@ public void Triangle()
87107
[TestMethod]
88108
public void RightArrow()
89109
{
90-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
91110
using (var p = new ExcelPackage())
92111
{
93112
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -101,7 +120,6 @@ public void RightArrow()
101120
[TestMethod]
102121
public void SmileyFace()
103122
{
104-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
105123
using (var p = new ExcelPackage())
106124
{
107125
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -115,7 +133,6 @@ public void SmileyFace()
115133
[TestMethod]
116134
public void VerticalScroll()
117135
{
118-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
119136
using (var p = new ExcelPackage())
120137
{
121138
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -129,7 +146,6 @@ public void VerticalScroll()
129146
[TestMethod]
130147
public void CloudCallout()
131148
{
132-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
133149
using (var p = new ExcelPackage())
134150
{
135151
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -143,7 +159,6 @@ public void CloudCallout()
143159
[TestMethod]
144160
public void IrregularSeal2()
145161
{
146-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
147162
using (var p = new ExcelPackage())
148163
{
149164
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -157,7 +172,6 @@ public void IrregularSeal2()
157172
[TestMethod]
158173
public void LightningBolt()
159174
{
160-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
161175
using (var p = new ExcelPackage())
162176
{
163177
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -171,7 +185,6 @@ public void LightningBolt()
171185
[TestMethod]
172186
public void FlowChartMagneticTape()
173187
{
174-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
175188
using (var p = new ExcelPackage())
176189
{
177190
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -185,7 +198,6 @@ public void FlowChartMagneticTape()
185198
[TestMethod]
186199
public void MathNotEqual()
187200
{
188-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
189201
using (var p = new ExcelPackage())
190202
{
191203
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -199,7 +211,6 @@ public void MathNotEqual()
199211
[TestMethod]
200212
public void Sun()
201213
{
202-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
203214
using (var p = new ExcelPackage())
204215
{
205216
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -215,7 +226,6 @@ public void Sun()
215226
[TestMethod]
216227
public void Ellipse()
217228
{
218-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
219229
using (var p = new ExcelPackage())
220230
{
221231
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -231,8 +241,7 @@ public void Ellipse()
231241
[TestMethod]
232242
public void Heart()
233243
{
234-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
235-
using (var p = new ExcelPackage())
244+
using (var p = GetPackage())
236245
{
237246
var ws = p.Workbook.Worksheets.Add("Sheet1");
238247
var d = ws.Drawings.AddShape("Shape1", OfficeOpenXml.Drawing.eShapeStyle.Heart);
@@ -247,7 +256,6 @@ public void Heart()
247256
[TestMethod]
248257
public void BevelRed()
249258
{
250-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
251259
using (var p = new ExcelPackage())
252260
{
253261
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -263,7 +271,6 @@ public void BevelRed()
263271
[TestMethod]
264272
public void Bevel()
265273
{
266-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
267274
using (var p = new ExcelPackage())
268275
{
269276
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -279,7 +286,6 @@ public void Bevel()
279286
[TestMethod]
280287
public void LeftBracket()
281288
{
282-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
283289
using (var p = new ExcelPackage())
284290
{
285291
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -295,7 +301,6 @@ public void LeftBracket()
295301
[TestMethod]
296302
public void CalloutQuadArrow()
297303
{
298-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
299304
using (var p = new ExcelPackage())
300305
{
301306
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -310,7 +315,6 @@ public void CalloutQuadArrow()
310315
[TestMethod]
311316
public void ActionButtonHome()
312317
{
313-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
314318
using (var p = new ExcelPackage())
315319
{
316320
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -325,7 +329,6 @@ public void ActionButtonHome()
325329
[TestMethod]
326330
public void ActionButtonMovie()
327331
{
328-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
329332
using (var p = new ExcelPackage())
330333
{
331334
var ws = p.Workbook.Worksheets.Add("Sheet1");
@@ -340,7 +343,6 @@ public void ActionButtonMovie()
340343
[TestMethod]
341344
public void CustomPath()
342345
{
343-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
344346
using (var p = OpenTemplatePackage(@"svg\CustPath.xlsx"))
345347
{
346348
var ws = p.Workbook.Worksheets[0];
@@ -364,7 +366,6 @@ public void CustomPath()
364366
[TestMethod]
365367
public void GenerateAllShapes()
366368
{
367-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
368369
using (var p = new ExcelPackage())
369370
{
370371
var ws = p.Workbook.Worksheets.Add("Shapes");
@@ -387,7 +388,6 @@ public void GenerateAllShapes()
387388
[TestMethod]
388389
public void TestShapes()
389390
{
390-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
391391
using (var p = OpenTemplatePackage("margins.xlsx"))
392392
{
393393
var drawings = p.Workbook.Worksheets[0].Drawings;
@@ -401,7 +401,6 @@ public void TestShapes()
401401
[TestMethod]
402402
public void GenerateSvgForGradientFilledShapes()
403403
{
404-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
405404
using (var p = OpenTemplatePackage("GradientFillShapes.xlsx"))
406405
{
407406
var ws = p.Workbook.Worksheets[0];
@@ -422,7 +421,6 @@ public void GenerateSvgForGradientFilledShapes()
422421
[TestMethod]
423422
public void GenerateSvgForGradientRadialFilledShapes()
424423
{
425-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
426424
using (var p = OpenTemplatePackage("GradiantRadial.xlsx"))
427425
{
428426
var ws = p.Workbook.Worksheets[0];
@@ -443,7 +441,6 @@ public void GenerateSvgForGradientRadialFilledShapes()
443441
[TestMethod]
444442
public void GenerateSvgForPatternFilledShapes()
445443
{
446-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
447444
using (var p = OpenTemplatePackage("PatternFills.xlsx"))
448445
{
449446
var ws = p.Workbook.Worksheets[0];
@@ -460,7 +457,6 @@ public void GenerateSvgForPatternFilledShapes()
460457
[TestMethod]
461458
public void GenerateSvgForBlipFillShapes()
462459
{
463-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
464460
using (var p = OpenTemplatePackage("BlipFills.xlsx"))
465461
{
466462
var ws = p.Workbook.Worksheets[0];
@@ -479,7 +475,6 @@ public void GenerateSvgForBlipFillShapes()
479475
[TestMethod]
480476
public void GenerateSvgForCircle()
481477
{
482-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
483478
using (var p = OpenTemplatePackage("GradientRadialVerifyCircle.xlsx"))
484479
{
485480
var ws = p.Workbook.Worksheets[0];
@@ -500,7 +495,6 @@ public void GenerateSvgForCircle()
500495
[TestMethod]
501496
public void SuperScriptShape()
502497
{
503-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
504498
using (var p = OpenTemplatePackage("Superscript.xlsx"))
505499
{
506500
var ws = p.Workbook.Worksheets[0];
@@ -520,7 +514,6 @@ public void SuperScriptShape()
520514
[TestMethod]
521515
public void SuperAndSubScript()
522516
{
523-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
524517
using (var p = OpenTemplatePackage("SuperAndSubScript.xlsx"))
525518
{
526519
var ws = p.Workbook.Worksheets[0];
@@ -535,7 +528,6 @@ public void SuperAndSubScript()
535528
[TestMethod]
536529
public void OpenRightAligned()
537530
{
538-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
539531
using (var p = OpenTemplatePackage("SimpleChartRightAlign.xlsx"))
540532
{
541533
var c = p.Workbook.Worksheets[0].Drawings[0];
@@ -547,7 +539,6 @@ public void OpenRightAligned()
547539
[TestMethod]
548540
public void TestStyling()
549541
{
550-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
551542
using (var p = OpenTemplatePackage("MyCellsAdvanced.xlsx"))
552543
{
553544
var ws = p.Workbook.Worksheets[0];
@@ -576,7 +567,6 @@ public void TestStyling()
576567
[TestMethod]
577568
public void GenerateShapeCenteredParagraph()
578569
{
579-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
580570
using (var p = OpenPackage("ShapeTestCentered.xlsx",true))
581571
{
582572
var sheet = p.Workbook.Worksheets.Add("ShapeSheet");
@@ -642,7 +632,6 @@ public void GenerateShapeCenteredParagraph()
642632
[TestMethod]
643633
public void ChartAndShapeGreen()
644634
{
645-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
646635
using (var p = OpenTemplatePackage("ShapeAndChartTestGreen.xlsx"))
647636
{
648637
var ws = p.Workbook.Worksheets[0];
@@ -662,7 +651,6 @@ public void ChartAndShapeGreen()
662651
[TestMethod]
663652
public void CreateChartsWithDifferentSize()
664653
{
665-
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
666654
using (var p = OpenPackage("ChartWithDifferentSizes.xlsx", true))
667655
{
668656
var ws = p.Workbook.Worksheets.Add("Chart1");

src/EPPlus.DrawingRenderer.Tests/TestFontMeasurer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ public void LoremIpsumTesting()
178178

179179
ShapingOptions options = new ShapingOptions();
180180

181-
var layout = OpenTypeFonts.GetTextLayoutEngineForFont(mf);
181+
var engine = new OpenTypeFontEngine(x => x.SearchSystemDirectories = true);
182+
var layout = engine.GetTextLayoutEngineForFont(mf);
182183

183184
//var wrappedStrings = layout.WrapRichText(new List<string>() { text }, new List<MeasurementFont>() { mf }, 39.4f);
184185

0 commit comments

Comments
 (0)