Skip to content

Commit 9c20ef2

Browse files
authored
Merge pull request OpenXmlDev#33 from Codeuctivity/MigrateSystemDrawingToImageSharp
Migrated system.drawing to imageSharp
2 parents f9e2a2e + 449a6ba commit 9c20ef2

File tree

29 files changed

+251
-345
lines changed

29 files changed

+251
-345
lines changed

.github/workflows/dotnet.yml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: .NET build and test
2+
env:
3+
LAST_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
4+
5+
on:
6+
push:
7+
pull_request:
8+
9+
jobs:
10+
build:
11+
runs-on: ${{ matrix.os }}
12+
strategy:
13+
matrix:
14+
os: [ubuntu-latest, macos-latest, windows-latest]
15+
steps:
16+
- uses: actions/checkout@v2
17+
- name: Setup .NET
18+
uses: actions/setup-dotnet@v1
19+
with:
20+
dotnet-version: 6.0.x
21+
- name: Restore dependencies
22+
run: dotnet restore
23+
- name: Build
24+
run: dotnet build --configuration Release --no-restore
25+
- name: Test
26+
run: dotnet test --no-build --verbosity normal --configuration Release
27+
28+
deployRelease:
29+
if: github.ref == 'refs/heads/main'
30+
runs-on: ubuntu-latest
31+
needs: build
32+
steps:
33+
- uses: actions/checkout@v2
34+
- name: Setup .NET
35+
uses: actions/setup-dotnet@v1
36+
with:
37+
dotnet-version: 6.0.x
38+
- name: Restore dependencies
39+
run: dotnet restore
40+
- name: Build
41+
run: dotnet build --configuration Release --no-restore
42+
- name: NugetPush
43+
run: |
44+
dotnet nuget push ./OpenXmlPowerTools/bin/Release/*.nupkg --skip-duplicate --api-key ${{secrets.NUGET_TOKEN}} --source https://api.nuget.org/v3/index.json
45+
- uses: papeloto/action-zip@v1
46+
with:
47+
files: ./OpenXmlPowerTools/bin/Release/net6.0/publish/
48+
dest: OpenXmlPowerTools.zip
49+
- uses: "marvinpinto/action-automatic-releases@latest"
50+
with:
51+
repo_token: "${{ secrets.GITHUB_TOKEN }}"
52+
automatic_release_tag: "latest"
53+
title: "Release Build"
54+
files: |
55+
LICENSE
56+
OpenXmlPowerTools.zip
57+
58+
deployTest:
59+
if: github.ref != 'refs/heads/main'
60+
runs-on: ubuntu-latest
61+
needs: build
62+
steps:
63+
- uses: actions/checkout@v2
64+
- name: Setup .NET
65+
uses: actions/setup-dotnet@v1
66+
with:
67+
dotnet-version: 6.0.x
68+
- name: Restore dependencies
69+
run: dotnet restore
70+
- name: Build
71+
run: dotnet build --configuration Release --no-restore
72+
- name: NugetPush
73+
run: |
74+
ls ./OpenXmlPowerTools/bin/Release
75+
dotnet nuget push ./OpenXmlPowerTools/bin/Release/*.nupkg --skip-duplicate --api-key ${{secrets.NUGET_TEST_TOKEN}} --source https://apiint.nugettest.org/v3/index.json
76+
- uses: papeloto/action-zip@v1
77+
with:
78+
files: ./OpenXmlPowerTools/bin/Release/
79+
dest: OpenXmlPowerTools.zip
80+
- uses: "marvinpinto/action-automatic-releases@latest"
81+
with:
82+
repo_token: "${{ secrets.GITHUB_TOKEN }}"
83+
automatic_release_tag: "latest-prerelease"
84+
prerelease: true
85+
title: "Prerelease Build"
86+
files: |
87+
OpenXmlPowerTools.zip

.vscode/extensions.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"recommendations": [
3+
"redhat.vscode-yaml"
4+
]
5+
}

OpenXmlPowerTools.Tests/HtmlToWmlConverterTests.cs

Lines changed: 2 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -268,96 +268,20 @@ public class HwTests
268268
[InlineData("T1850.html")]
269269
public void HW001(string name)
270270
{
271-
#if false
272-
string[] cssFilter = new[] {
273-
"text-indent",
274-
"margin-left",
275-
"margin-right",
276-
"padding-left",
277-
"padding-right",
278-
};
279-
#else
280-
string[] cssFilter = null;
281-
#endif
282-
283-
#if false
284-
string[] htmlFilter = new[] {
285-
"img",
286-
};
287-
#else
288-
string[] htmlFilter = null;
289-
#endif
290-
291271
var sourceDir = new DirectoryInfo("../../../../TestFiles/");
292272
var sourceHtmlFi = new FileInfo(Path.Combine(sourceDir.FullName, name));
293273
var sourceImageDi = new DirectoryInfo(Path.Combine(sourceDir.FullName, sourceHtmlFi.Name.Replace(".html", "_files")));
294-
295-
var destImageDi = new DirectoryInfo(Path.Combine(TestUtil.TempDir.FullName, sourceImageDi.Name));
296-
var sourceCopiedToDestHtmlFi = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, sourceHtmlFi.Name.Replace(".html", "-1-Source.html")));
297274
var destCssFi = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, sourceHtmlFi.Name.Replace(".html", "-2.css")));
298275
var destDocxFi = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, sourceHtmlFi.Name.Replace(".html", "-3-ConvertedByHtmlToWml.docx")));
299276
var annotatedHtmlFi = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, sourceHtmlFi.Name.Replace(".html", "-4-Annotated.txt")));
300277

301-
if (!sourceCopiedToDestHtmlFi.Exists)
302-
{
303-
File.Copy(sourceHtmlFi.FullName, sourceCopiedToDestHtmlFi.FullName);
304-
}
305-
306-
var html = HtmlToWmlReadAsXElement.ReadAsXElement(sourceCopiedToDestHtmlFi);
307-
308-
var htmlString = html.ToString();
309-
if (htmlFilter != null && htmlFilter.Any())
310-
{
311-
var found = false;
312-
foreach (var item in htmlFilter)
313-
{
314-
if (htmlString.Contains(item))
315-
{
316-
found = true;
317-
break;
318-
}
319-
}
320-
if (!found)
321-
{
322-
sourceCopiedToDestHtmlFi.Delete();
323-
return;
324-
}
325-
}
326-
278+
var html = HtmlToWmlReadAsXElement.ReadAsXElement(sourceHtmlFi);
327279
var usedAuthorCss = HtmlToWmlConverter.CleanUpCss((string)html.Descendants().FirstOrDefault(d => d.Name.LocalName.ToLower() == "style"));
328280
File.WriteAllText(destCssFi.FullName, usedAuthorCss);
329281

330-
if (cssFilter != null && cssFilter.Any())
331-
{
332-
var found = false;
333-
foreach (var item in cssFilter)
334-
{
335-
if (usedAuthorCss.Contains(item))
336-
{
337-
found = true;
338-
break;
339-
}
340-
}
341-
if (!found)
342-
{
343-
sourceCopiedToDestHtmlFi.Delete();
344-
destCssFi.Delete();
345-
return;
346-
}
347-
}
348-
349-
if (sourceImageDi.Exists)
350-
{
351-
destImageDi.Create();
352-
foreach (var file in sourceImageDi.GetFiles())
353-
{
354-
File.Copy(file.FullName, destImageDi.FullName + "/" + file.Name);
355-
}
356-
}
357-
358282
var settings = HtmlToWmlConverter.GetDefaultSettings();
359283
// image references in HTML files contain the path to the subdir that contains the images, so base URI is the name of the directory that contains the HTML files
360-
settings.BaseUriForImages = Path.Combine(TestUtil.TempDir.FullName);
284+
settings.BaseUriForImages = sourceDir.FullName;
361285

362286
var doc = HtmlToWmlConverter.ConvertHtmlToWml(defaultCss, usedAuthorCss, userCss, html, settings, null, s_ProduceAnnotatedHtml ? annotatedHtmlFi.FullName : null);
363287
Assert.NotNull(doc);

OpenXmlPowerTools.Tests/OpenXMLWordprocessingMLToHtmlConverter/WmlToHtmlConverterHandlerTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
using Codeuctivity.BitmapCompare;
1+
using Codeuctivity;
22
using OpenXmlPowerTools;
33
using OpenXmlPowerTools.OpenXMLWordprocessingMLToHtmlConverter;
44
using System;
55
using System.Collections.Generic;
6-
using System.Drawing;
76
using System.IO;
87
using System.Linq;
98
using System.Xml.Linq;
@@ -33,18 +32,17 @@ public void ShouldTranslateWithWordprocessingTextDummyHandler()
3332
[InlineData("png", minimalPng)]
3433
[InlineData("bmp", minimalBmp)]
3534
[InlineData("jpeg", minimalJpg)]
36-
public void ShouldTranslateWithDefaultImageHandler(string imageType, string minimalImage)
35+
public async void ShouldTranslateWithDefaultImageHandler(string imageType, string minimalImage)
3736
{
38-
AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
3937
var expectedStart = $"<img src=\"data:image/{imageType};base64,";
4038
var expectedEnd = "\" xmlns=\"http://www.w3.org/1999/xhtml\" />";
4139
var binaryBitmap = Convert.FromBase64String(minimalImage);
4240

43-
using var memeoryStream = new MemoryStream(binaryBitmap);
44-
var input = new Bitmap(memeoryStream);
41+
using var expectedImage = new MemoryStream(binaryBitmap);
42+
4543
var imageInfo = new ImageInfo
4644
{
47-
Bitmap = input
45+
Image = expectedImage
4846
};
4947

5048
var defaultImageHandler = new ImageHandler();
@@ -56,10 +54,12 @@ public void ShouldTranslateWithDefaultImageHandler(string imageType, string mini
5654

5755
var actualBase64Part = actual.Substring(expectedStart.Length, actual.Length - expectedEnd.Length - expectedStart.Length);
5856
var binaryActualBitmap = Convert.FromBase64String(actualBase64Part);
59-
using var memeoryStreamBinaryBitmap = new MemoryStream(binaryActualBitmap);
60-
var actualBitmap = new Bitmap(memeoryStreamBinaryBitmap);
57+
using var actualImage = new MemoryStream(binaryActualBitmap);
58+
59+
expectedImage.Position = 0;
60+
actualImage.Position = 0;
6161

62-
Assert.True(Compare.ImageAreEqual(input, input));
62+
Assert.True(ImageSharpCompare.ImageAreEqual(expectedImage, actualImage));
6363
}
6464

6565
[Fact]

OpenXmlPowerTools.Tests/OpenXmlPowerTools.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT' ">net48;net6.0;netcoreapp3.1</TargetFrameworks>
4+
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT' ">net48;net6.0</TargetFrameworks>
55
<TargetFrameworks Condition="'$(OS)' != 'Windows_NT' ">net6.0</TargetFrameworks>
66
<LangVersion>8.0</LangVersion>
77
<EnableNETAnalyzers>true</EnableNETAnalyzers>
@@ -10,7 +10,7 @@
1010
<PackageReference Include="System.IO.Packaging" Version="6.0.0" />
1111
</ItemGroup>
1212
<ItemGroup>
13-
<PackageReference Include="BitmapCompare" Version="1.0.8" />
13+
<PackageReference Include="ImageSharpCompare" Version="1.1.98" />
1414
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
1515
<PackageReference Include="xunit" Version="2.4.1" />
1616
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">

OpenXmlPowerTools.Tests/WmlComparerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using DocumentFormat.OpenXml.Validation;
33
using OpenXmlPowerTools;
44
using OpenXmlPowerTools.Tests;
5+
using SixLabors.ImageSharp;
56
using System;
67
using System.Collections.Generic;
7-
using System.Drawing;
88
using System.IO;
99
using System.Linq;
1010
using System.Text;

OpenXmlPowerTools.Tests/runtimeconfig.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

OpenXmlPowerTools.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
7878
.editorconfig = .editorconfig
7979
appveyor.yml = appveyor.yml
8080
.github\dependabot.yml = .github\dependabot.yml
81+
.github\workflows\dotnet.yml = .github\workflows\dotnet.yml
8182
LICENSE.md = LICENSE.md
8283
README.md = README.md
8384
EndProjectSection

OpenXmlPowerTools/ColorParser.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
using System.Drawing;
1+
using SixLabors.ImageSharp;
22

33
namespace OpenXmlPowerTools
44
{
55
public static class ColorParser
66
{
77
public static Color FromName(string name)
88
{
9-
return Color.FromName(name);
9+
return Color.Parse(name);
1010
}
1111

1212
public static bool TryFromName(string name, out Color color)
1313
{
1414
try
1515
{
16-
color = Color.FromName(name);
16+
color = Color.Parse(name);
1717

18-
return color.IsNamedColor;
18+
return true;
1919
}
2020
catch
2121
{

0 commit comments

Comments
 (0)