diff --git a/.gitattributes b/.gitattributes
index 64cd3f1e..b785a74c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,6 +2,7 @@
*.snk binary
*.bin binary
*.png binary
+*.docx binary
src/Verify/EmptyFiles/* binary
diff --git a/docs/diff-tool.md b/docs/diff-tool.md
index 31a631b2..cca9f83a 100644
--- a/docs/diff-tool.md
+++ b/docs/diff-tool.md
@@ -146,6 +146,7 @@ Non-MDI tools are preferred since it allows [DiffEngineTray](tray.md) to track a
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_BeyondCompare`
* Supported binaries: .7z, .bcpkg, .bin, .bmp, .bz, .bz2, .cab, .chm, .deb, .ear, .gif, .gz, .ico, .img, .iso, .iso, .jar, .jpeg, .jpg, .kmz, .nupkg, .pdf, .png, .rar, .rpm, .rtf, .svg, .swm, .tar, .tbz, .tbz2, .tbz2, .tgz, .tif, .tiff, .war, .webp, .wim, .xlsx, .xz, .zip, .zipx
@@ -216,6 +217,7 @@ DiffTools.UseOrder(DiffTool.BeyondCompare);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_DeltaWalker`
* Supported binaries: .bmp, .bz2, .doc, .docx, .ear, .gif, .gz, .htm, .html, .ico, .j2k, .jar, .jp2, .jpg, .pbm, .pct, .pdf, .pgm, .pic, .pict, .png, .pnm, .ppm, .ppt, .psd, .rtf, .svg, .tar, .tbz2, .tgz, .tif, .xls, .xlsx, .zip
@@ -268,6 +270,7 @@ DiffTools.UseOrder(DiffTool.DeltaWalker);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Diffinity`
* Supported binaries: .svg
@@ -302,6 +305,7 @@ DiffTools.UseOrder(DiffTool.Diffinity);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_ExamDiff`
* Supported binaries: .bin, .svg
@@ -342,6 +346,7 @@ DiffTools.UseOrder(DiffTool.ExamDiff);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Guiffy`
* Supported binaries: .bmp, .gif, .jpeg, .jpg, .png, .svg, .wbmp
@@ -397,6 +402,7 @@ DiffTools.UseOrder(DiffTool.Guiffy);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Kaleidoscope`
* Supported binaries: .bin, .bmp, .gif, .ico, .jpeg, .jpg, .png, .svg, .tif, .tiff
@@ -428,6 +434,7 @@ DiffTools.UseOrder(DiffTool.Kaleidoscope);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_KDiff3`
* Supported binaries: .svg
@@ -476,6 +483,45 @@ DiffTools.UseOrder(DiffTool.KDiff3);
* `/Applications/kdiff3.app/Contents/MacOS/kdiff3`
* `%PATH%kdiff3`
+### [MsWordDiff](https://github.com/SimonCropp/MsWordDiff)
+
+ * Cost: Free
+ * Is MDI: False
+ * Supports auto-refresh: False
+ * Supports text files: False
+ * Use shell execute: False
+ * Create no window: True
+ * Environment variable for custom install location: `DiffEngine_MsWordDiff`
+ * Supported binaries: .doc, .docx
+
+#### Tool order:
+
+Use [tool order](diff-tool.order.md) to prioritise MsWordDiff over other tools.
+
+```
+DiffTools.UseOrder(DiffTool.MsWordDiff);
+```
+
+#### Notes:
+
+ * Install via `dotnet tool install -g MsWordDiff`
+ * Requires Microsoft Word to be installed
+ * Uses Word's built-in document comparison feature
+
+#### Windows settings:
+
+ * Example target on left arguments:
+ ```
+ "targetFile.txt" "tempFile.txt"
+ ```
+ * Example target on right arguments:
+ ```
+ "tempFile.txt" "targetFile.txt"
+ ```
+ * Scanned paths:
+ * `%USERPROFILE%\.dotnet\tools\diffword.exe`
+ * `%PATH%diffword.exe`
+
### [Neovim](https://neovim.io/)
* Cost: Free with option to sponsor
@@ -483,6 +529,7 @@ DiffTools.UseOrder(DiffTool.KDiff3);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Neovim`
* Supported binaries: .svg
@@ -545,6 +592,7 @@ DiffTools.UseOrder(DiffTool.Neovim);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_P4Merge`
* Supported binaries: .bmp, .gif, .jpeg, .jpg, .pbm, .pgm, .png, .ppm, .svg, .tif, .tiff, .xbm, .xpm
@@ -630,6 +678,7 @@ DiffTools.UseOrder(DiffTool.P4Merge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Rider`
* Supported binaries: .svg
@@ -698,6 +747,7 @@ DiffTools.UseOrder(DiffTool.Rider);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TkDiff`
* Supported binaries: .svg
@@ -730,6 +780,7 @@ DiffTools.UseOrder(DiffTool.TkDiff);
* Supports auto-refresh: False
* Supports text files: False
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseGitIDiff`
* Supported binaries: .bmp, .gif, .ico, .jpeg, .jpg, .png, .tif, .tiff
@@ -764,6 +815,7 @@ DiffTools.UseOrder(DiffTool.TortoiseGitIDiff);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseGitMerge`
* Supported binaries: .bin, .svg
@@ -798,6 +850,7 @@ DiffTools.UseOrder(DiffTool.TortoiseGitMerge);
* Supports auto-refresh: False
* Supports text files: False
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseIDiff`
* Supported binaries: .bmp, .gif, .ico, .jpeg, .jpg, .png, .tif, .tiff
@@ -832,6 +885,7 @@ DiffTools.UseOrder(DiffTool.TortoiseIDiff);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseMerge`
* Supported binaries: .svg
@@ -866,6 +920,7 @@ DiffTools.UseOrder(DiffTool.TortoiseMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Vim`
* Supported binaries: .svg
@@ -922,6 +977,7 @@ DiffTools.UseOrder(DiffTool.Vim);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_WinMerge`
* Supported binaries: .bin, .bmp, .bw, .cut, .dds, .exr, .g3, .gif, .hdp, .hdr, .ico, .iff, .j2c, .j2k, .jif, .jng, .jp2, .jpe, .jpeg, .jpg, .jxr, .koa, .lbm, .mng, .pbm, .pcd, .pct, .pcx, .pfm, .pgm, .pic, .pict, .png, .ppm, .psd, .ras, .rgb, .rgba, .sgi, .svg, .targa, .tga, .tif, .tiff, .wap, .wbm, .wbmp, .wdp, .webp, .xbm, .xpm
@@ -969,6 +1025,7 @@ DiffTools.UseOrder(DiffTool.WinMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_AraxisMerge`
* Supported binaries: .bmp, .dib, .emf, .gif, .j2c, .j2k, .jif, .jp2, .jpc, .jpeg, .jpg, .jpx, .pbm, .pcx, .pgm, .png, .ppm, .ras, .svg, .tga, .tif, .tiff, .wmf
@@ -1024,6 +1081,7 @@ DiffTools.UseOrder(DiffTool.AraxisMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: False
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Cursor`
* Supported binaries: .bin, .svg
@@ -1089,6 +1147,7 @@ DiffTools.UseOrder(DiffTool.Cursor);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Meld`
* Supported binaries: .svg
@@ -1155,6 +1214,7 @@ DiffTools.UseOrder(DiffTool.Meld);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_SublimeMerge`
* Supported binaries: .svg
@@ -1220,6 +1280,7 @@ DiffTools.UseOrder(DiffTool.SublimeMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_VisualStudio`
* Supported binaries: .svg
@@ -1263,6 +1324,7 @@ DiffTools.UseOrder(DiffTool.VisualStudio);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: False
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_VisualStudioCode`
* Supported binaries: .bin, .svg
diff --git a/docs/diff-tool.order.md b/docs/diff-tool.order.md
index 1da3b73e..28dd9283 100644
--- a/docs/diff-tool.order.md
+++ b/docs/diff-tool.order.md
@@ -10,29 +10,30 @@ To change this file edit the source file and then run MarkdownSnippets.
## Default
- * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Win/OSX/Linux (Cost: Paid)
- * **[P4Merge](/docs/diff-tool.md#p4merge)** Win/OSX/Linux (Cost: Free)
+ * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Windows/OSX/Linux (Cost: Paid)
+ * **[P4Merge](/docs/diff-tool.md#p4merge)** Windows/OSX/Linux (Cost: Free)
* **[Kaleidoscope](/docs/diff-tool.md#kaleidoscope)** OSX (Cost: Paid)
- * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Win/OSX (Cost: Paid)
- * **[WinMerge](/docs/diff-tool.md#winmerge)** Win (Cost: Free with option to donate)
- * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Win (Cost: Free)
- * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Win (Cost: Free)
- * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Win (Cost: Free)
- * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Win (Cost: Free)
- * **[KDiff3](/docs/diff-tool.md#kdiff3)** Win/OSX (Cost: Free)
+ * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Windows/OSX (Cost: Paid)
+ * **[WinMerge](/docs/diff-tool.md#winmerge)** Windows (Cost: Free with option to donate)
+ * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Windows (Cost: Free)
+ * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Windows (Cost: Free)
+ * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Windows (Cost: Free)
+ * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Windows (Cost: Free)
+ * **[KDiff3](/docs/diff-tool.md#kdiff3)** Windows/OSX (Cost: Free)
* **[TkDiff](/docs/diff-tool.md#tkdiff)** OSX (Cost: Free)
- * **[Guiffy](/docs/diff-tool.md#guiffy)** Win/OSX (Cost: Paid)
- * **[ExamDiff](/docs/diff-tool.md#examdiff)** Win (Cost: Paid)
- * **[Diffinity](/docs/diff-tool.md#diffinity)** Win (Cost: Free with option to donate)
- * **[Rider](/docs/diff-tool.md#rider)** Win/OSX/Linux (Cost: Paid with free option for OSS)
- * **[Vim](/docs/diff-tool.md#vim)** Win/OSX (Cost: Free with option to donate)
- * **[Neovim](/docs/diff-tool.md#neovim)** Win/OSX/Linux (Cost: Free with option to sponsor)
- * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Win/OSX (Cost: Paid)
- * **[Meld](/docs/diff-tool.md#meld)** Win/OSX/Linux (Cost: Free)
- * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Win/OSX/Linux (Cost: Paid)
- * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Win/OSX/Linux (Cost: Free)
- * **[Cursor](/docs/diff-tool.md#cursor)** Win/OSX/Linux (Cost: Free and Paid)
- * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Win (Cost: Paid and free options)
+ * **[Guiffy](/docs/diff-tool.md#guiffy)** Windows/OSX (Cost: Paid)
+ * **[ExamDiff](/docs/diff-tool.md#examdiff)** Windows (Cost: Paid)
+ * **[Diffinity](/docs/diff-tool.md#diffinity)** Windows (Cost: Free with option to donate)
+ * **[Rider](/docs/diff-tool.md#rider)** Windows/OSX/Linux (Cost: Paid with free option for OSS)
+ * **[Vim](/docs/diff-tool.md#vim)** Windows/OSX (Cost: Free with option to donate)
+ * **[Neovim](/docs/diff-tool.md#neovim)** Windows/OSX/Linux (Cost: Free with option to sponsor)
+ * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Windows/OSX (Cost: Paid)
+ * **[Meld](/docs/diff-tool.md#meld)** Windows/OSX/Linux (Cost: Free)
+ * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Windows/OSX/Linux (Cost: Paid)
+ * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Windows/OSX/Linux (Cost: Free)
+ * **[Cursor](/docs/diff-tool.md#cursor)** Windows/OSX/Linux (Cost: Free and Paid)
+ * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Windows (Cost: Paid and free options)
+ * **[MsWordDiff](/docs/diff-tool.md#msworddiff)** Windows (Cost: Free)
## Custom order
@@ -52,5 +53,5 @@ For example `VisualStudio,Meld` will result in VisualStudio then Meld then all o
```cs
DiffTools.UseOrder(DiffTool.VisualStudio, DiffTool.AraxisMerge);
```
-snippet source | anchor
+snippet source | anchor
diff --git a/readme.md b/readme.md
index 7a6a4ce9..0d4f1b8c 100644
--- a/readme.md
+++ b/readme.md
@@ -63,29 +63,30 @@ DiffEngine manages launching and cleanup of diff tools. It is designed to be use
## [Supported Tools](/docs/diff-tool.md#supported-tools)
- * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Win/OSX/Linux (Cost: Paid)
- * **[P4Merge](/docs/diff-tool.md#p4merge)** Win/OSX/Linux (Cost: Free)
+ * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Windows/OSX/Linux (Cost: Paid)
+ * **[P4Merge](/docs/diff-tool.md#p4merge)** Windows/OSX/Linux (Cost: Free)
* **[Kaleidoscope](/docs/diff-tool.md#kaleidoscope)** OSX (Cost: Paid)
- * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Win/OSX (Cost: Paid)
- * **[WinMerge](/docs/diff-tool.md#winmerge)** Win (Cost: Free with option to donate)
- * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Win (Cost: Free)
- * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Win (Cost: Free)
- * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Win (Cost: Free)
- * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Win (Cost: Free)
- * **[KDiff3](/docs/diff-tool.md#kdiff3)** Win/OSX (Cost: Free)
+ * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Windows/OSX (Cost: Paid)
+ * **[WinMerge](/docs/diff-tool.md#winmerge)** Windows (Cost: Free with option to donate)
+ * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Windows (Cost: Free)
+ * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Windows (Cost: Free)
+ * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Windows (Cost: Free)
+ * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Windows (Cost: Free)
+ * **[KDiff3](/docs/diff-tool.md#kdiff3)** Windows/OSX (Cost: Free)
* **[TkDiff](/docs/diff-tool.md#tkdiff)** OSX (Cost: Free)
- * **[Guiffy](/docs/diff-tool.md#guiffy)** Win/OSX (Cost: Paid)
- * **[ExamDiff](/docs/diff-tool.md#examdiff)** Win (Cost: Paid)
- * **[Diffinity](/docs/diff-tool.md#diffinity)** Win (Cost: Free with option to donate)
- * **[Rider](/docs/diff-tool.md#rider)** Win/OSX/Linux (Cost: Paid with free option for OSS)
- * **[Vim](/docs/diff-tool.md#vim)** Win/OSX (Cost: Free with option to donate)
- * **[Neovim](/docs/diff-tool.md#neovim)** Win/OSX/Linux (Cost: Free with option to sponsor)
- * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Win/OSX (Cost: Paid)
- * **[Meld](/docs/diff-tool.md#meld)** Win/OSX/Linux (Cost: Free)
- * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Win/OSX/Linux (Cost: Paid)
- * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Win/OSX/Linux (Cost: Free)
- * **[Cursor](/docs/diff-tool.md#cursor)** Win/OSX/Linux (Cost: Free and Paid)
- * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Win (Cost: Paid and free options)
+ * **[Guiffy](/docs/diff-tool.md#guiffy)** Windows/OSX (Cost: Paid)
+ * **[ExamDiff](/docs/diff-tool.md#examdiff)** Windows (Cost: Paid)
+ * **[Diffinity](/docs/diff-tool.md#diffinity)** Windows (Cost: Free with option to donate)
+ * **[Rider](/docs/diff-tool.md#rider)** Windows/OSX/Linux (Cost: Paid with free option for OSS)
+ * **[Vim](/docs/diff-tool.md#vim)** Windows/OSX (Cost: Free with option to donate)
+ * **[Neovim](/docs/diff-tool.md#neovim)** Windows/OSX/Linux (Cost: Free with option to sponsor)
+ * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Windows/OSX (Cost: Paid)
+ * **[Meld](/docs/diff-tool.md#meld)** Windows/OSX/Linux (Cost: Free)
+ * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Windows/OSX/Linux (Cost: Paid)
+ * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Windows/OSX/Linux (Cost: Free)
+ * **[Cursor](/docs/diff-tool.md#cursor)** Windows/OSX/Linux (Cost: Free and Paid)
+ * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Windows (Cost: Paid and free options)
+ * **[MsWordDiff](/docs/diff-tool.md#msworddiff)** Windows (Cost: Free)
## Launching a tool
diff --git a/src/DiffEngine.Tests/DefinitionsTest.cs b/src/DiffEngine.Tests/DefinitionsTest.cs
index 17299cd0..2eb9a7d0 100644
--- a/src/DiffEngine.Tests/DefinitionsTest.cs
+++ b/src/DiffEngine.Tests/DefinitionsTest.cs
@@ -46,7 +46,7 @@ static string GetOsSupport(OsSupport osSupport)
var builder = new StringBuilder();
if (osSupport.Windows != null)
{
- builder.Append("Win/");
+ builder.Append("Windows/");
}
if (osSupport.Osx != null)
@@ -125,6 +125,7 @@ static void AddTool(StreamWriter writer, Definition tool)
* Supports auto-refresh: {tool.AutoRefresh}
* Supports text files: {tool.SupportsText}
* Use shell execute: {tool.UseShellExecute}
+ * Create no window: {tool.CreateNoWindow}
* Environment variable for custom install location: `DiffEngine_{tool.Tool}`
""");
diff --git a/src/DiffEngine.Tests/DiffToolsTest.cs b/src/DiffEngine.Tests/DiffToolsTest.cs
index d69997be..da3589f4 100644
--- a/src/DiffEngine.Tests/DiffToolsTest.cs
+++ b/src/DiffEngine.Tests/DiffToolsTest.cs
@@ -112,6 +112,12 @@ static async Task AddToolAndLaunch()
}
/**
+ [Fact]
+ public Task LaunchSpecificDocxDiff() =>
+ DiffRunner.LaunchAsync(DiffTool.MsWordDiff,
+ Path.Combine(SourceDirectory, "input.temp.docx"),
+ Path.Combine(SourceDirectory, "input.target.docx"));
+
[Fact]
public Task LaunchSpecificBinaryDiff() =>
DiffRunner.LaunchAsync(DiffTool.VisualStudioCode,
diff --git a/src/DiffEngine.Tests/defaultOrder.include.md b/src/DiffEngine.Tests/defaultOrder.include.md
index f2656296..aa79ab74 100644
--- a/src/DiffEngine.Tests/defaultOrder.include.md
+++ b/src/DiffEngine.Tests/defaultOrder.include.md
@@ -1,23 +1,24 @@
- * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Win/OSX/Linux (Cost: Paid)
- * **[P4Merge](/docs/diff-tool.md#p4merge)** Win/OSX/Linux (Cost: Free)
+ * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Windows/OSX/Linux (Cost: Paid)
+ * **[P4Merge](/docs/diff-tool.md#p4merge)** Windows/OSX/Linux (Cost: Free)
* **[Kaleidoscope](/docs/diff-tool.md#kaleidoscope)** OSX (Cost: Paid)
- * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Win/OSX (Cost: Paid)
- * **[WinMerge](/docs/diff-tool.md#winmerge)** Win (Cost: Free with option to donate)
- * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Win (Cost: Free)
- * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Win (Cost: Free)
- * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Win (Cost: Free)
- * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Win (Cost: Free)
- * **[KDiff3](/docs/diff-tool.md#kdiff3)** Win/OSX (Cost: Free)
+ * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Windows/OSX (Cost: Paid)
+ * **[WinMerge](/docs/diff-tool.md#winmerge)** Windows (Cost: Free with option to donate)
+ * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Windows (Cost: Free)
+ * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Windows (Cost: Free)
+ * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Windows (Cost: Free)
+ * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Windows (Cost: Free)
+ * **[KDiff3](/docs/diff-tool.md#kdiff3)** Windows/OSX (Cost: Free)
* **[TkDiff](/docs/diff-tool.md#tkdiff)** OSX (Cost: Free)
- * **[Guiffy](/docs/diff-tool.md#guiffy)** Win/OSX (Cost: Paid)
- * **[ExamDiff](/docs/diff-tool.md#examdiff)** Win (Cost: Paid)
- * **[Diffinity](/docs/diff-tool.md#diffinity)** Win (Cost: Free with option to donate)
- * **[Rider](/docs/diff-tool.md#rider)** Win/OSX/Linux (Cost: Paid with free option for OSS)
- * **[Vim](/docs/diff-tool.md#vim)** Win/OSX (Cost: Free with option to donate)
- * **[Neovim](/docs/diff-tool.md#neovim)** Win/OSX/Linux (Cost: Free with option to sponsor)
- * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Win/OSX (Cost: Paid)
- * **[Meld](/docs/diff-tool.md#meld)** Win/OSX/Linux (Cost: Free)
- * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Win/OSX/Linux (Cost: Paid)
- * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Win/OSX/Linux (Cost: Free)
- * **[Cursor](/docs/diff-tool.md#cursor)** Win/OSX/Linux (Cost: Free and Paid)
- * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Win (Cost: Paid and free options)
+ * **[Guiffy](/docs/diff-tool.md#guiffy)** Windows/OSX (Cost: Paid)
+ * **[ExamDiff](/docs/diff-tool.md#examdiff)** Windows (Cost: Paid)
+ * **[Diffinity](/docs/diff-tool.md#diffinity)** Windows (Cost: Free with option to donate)
+ * **[Rider](/docs/diff-tool.md#rider)** Windows/OSX/Linux (Cost: Paid with free option for OSS)
+ * **[Vim](/docs/diff-tool.md#vim)** Windows/OSX (Cost: Free with option to donate)
+ * **[Neovim](/docs/diff-tool.md#neovim)** Windows/OSX/Linux (Cost: Free with option to sponsor)
+ * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Windows/OSX (Cost: Paid)
+ * **[Meld](/docs/diff-tool.md#meld)** Windows/OSX/Linux (Cost: Free)
+ * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Windows/OSX/Linux (Cost: Paid)
+ * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Windows/OSX/Linux (Cost: Free)
+ * **[Cursor](/docs/diff-tool.md#cursor)** Windows/OSX/Linux (Cost: Free and Paid)
+ * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Windows (Cost: Paid and free options)
+ * **[MsWordDiff](/docs/diff-tool.md#msworddiff)** Windows (Cost: Free)
diff --git a/src/DiffEngine.Tests/diffToolList.include.md b/src/DiffEngine.Tests/diffToolList.include.md
index f2656296..aa79ab74 100644
--- a/src/DiffEngine.Tests/diffToolList.include.md
+++ b/src/DiffEngine.Tests/diffToolList.include.md
@@ -1,23 +1,24 @@
- * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Win/OSX/Linux (Cost: Paid)
- * **[P4Merge](/docs/diff-tool.md#p4merge)** Win/OSX/Linux (Cost: Free)
+ * **[BeyondCompare](/docs/diff-tool.md#beyondcompare)** Windows/OSX/Linux (Cost: Paid)
+ * **[P4Merge](/docs/diff-tool.md#p4merge)** Windows/OSX/Linux (Cost: Free)
* **[Kaleidoscope](/docs/diff-tool.md#kaleidoscope)** OSX (Cost: Paid)
- * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Win/OSX (Cost: Paid)
- * **[WinMerge](/docs/diff-tool.md#winmerge)** Win (Cost: Free with option to donate)
- * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Win (Cost: Free)
- * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Win (Cost: Free)
- * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Win (Cost: Free)
- * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Win (Cost: Free)
- * **[KDiff3](/docs/diff-tool.md#kdiff3)** Win/OSX (Cost: Free)
+ * **[DeltaWalker](/docs/diff-tool.md#deltawalker)** Windows/OSX (Cost: Paid)
+ * **[WinMerge](/docs/diff-tool.md#winmerge)** Windows (Cost: Free with option to donate)
+ * **[TortoiseGitMerge](/docs/diff-tool.md#tortoisegitmerge)** Windows (Cost: Free)
+ * **[TortoiseGitIDiff](/docs/diff-tool.md#tortoisegitidiff)** Windows (Cost: Free)
+ * **[TortoiseMerge](/docs/diff-tool.md#tortoisemerge)** Windows (Cost: Free)
+ * **[TortoiseIDiff](/docs/diff-tool.md#tortoiseidiff)** Windows (Cost: Free)
+ * **[KDiff3](/docs/diff-tool.md#kdiff3)** Windows/OSX (Cost: Free)
* **[TkDiff](/docs/diff-tool.md#tkdiff)** OSX (Cost: Free)
- * **[Guiffy](/docs/diff-tool.md#guiffy)** Win/OSX (Cost: Paid)
- * **[ExamDiff](/docs/diff-tool.md#examdiff)** Win (Cost: Paid)
- * **[Diffinity](/docs/diff-tool.md#diffinity)** Win (Cost: Free with option to donate)
- * **[Rider](/docs/diff-tool.md#rider)** Win/OSX/Linux (Cost: Paid with free option for OSS)
- * **[Vim](/docs/diff-tool.md#vim)** Win/OSX (Cost: Free with option to donate)
- * **[Neovim](/docs/diff-tool.md#neovim)** Win/OSX/Linux (Cost: Free with option to sponsor)
- * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Win/OSX (Cost: Paid)
- * **[Meld](/docs/diff-tool.md#meld)** Win/OSX/Linux (Cost: Free)
- * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Win/OSX/Linux (Cost: Paid)
- * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Win/OSX/Linux (Cost: Free)
- * **[Cursor](/docs/diff-tool.md#cursor)** Win/OSX/Linux (Cost: Free and Paid)
- * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Win (Cost: Paid and free options)
+ * **[Guiffy](/docs/diff-tool.md#guiffy)** Windows/OSX (Cost: Paid)
+ * **[ExamDiff](/docs/diff-tool.md#examdiff)** Windows (Cost: Paid)
+ * **[Diffinity](/docs/diff-tool.md#diffinity)** Windows (Cost: Free with option to donate)
+ * **[Rider](/docs/diff-tool.md#rider)** Windows/OSX/Linux (Cost: Paid with free option for OSS)
+ * **[Vim](/docs/diff-tool.md#vim)** Windows/OSX (Cost: Free with option to donate)
+ * **[Neovim](/docs/diff-tool.md#neovim)** Windows/OSX/Linux (Cost: Free with option to sponsor)
+ * **[AraxisMerge](/docs/diff-tool.md#araxismerge)** Windows/OSX (Cost: Paid)
+ * **[Meld](/docs/diff-tool.md#meld)** Windows/OSX/Linux (Cost: Free)
+ * **[SublimeMerge](/docs/diff-tool.md#sublimemerge)** Windows/OSX/Linux (Cost: Paid)
+ * **[VisualStudioCode](/docs/diff-tool.md#visualstudiocode)** Windows/OSX/Linux (Cost: Free)
+ * **[Cursor](/docs/diff-tool.md#cursor)** Windows/OSX/Linux (Cost: Free and Paid)
+ * **[VisualStudio](/docs/diff-tool.md#visualstudio)** Windows (Cost: Paid and free options)
+ * **[MsWordDiff](/docs/diff-tool.md#msworddiff)** Windows (Cost: Free)
diff --git a/src/DiffEngine.Tests/diffTools.include.md b/src/DiffEngine.Tests/diffTools.include.md
index bde50656..14a8d20f 100644
--- a/src/DiffEngine.Tests/diffTools.include.md
+++ b/src/DiffEngine.Tests/diffTools.include.md
@@ -11,6 +11,7 @@ Non-MDI tools are preferred since it allows [DiffEngineTray](tray.md) to track a
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_BeyondCompare`
* Supported binaries: .7z, .bcpkg, .bin, .bmp, .bz, .bz2, .cab, .chm, .deb, .ear, .gif, .gz, .ico, .img, .iso, .iso, .jar, .jpeg, .jpg, .kmz, .nupkg, .pdf, .png, .rar, .rpm, .rtf, .svg, .swm, .tar, .tbz, .tbz2, .tbz2, .tgz, .tif, .tiff, .war, .webp, .wim, .xlsx, .xz, .zip, .zipx
@@ -81,6 +82,7 @@ DiffTools.UseOrder(DiffTool.BeyondCompare);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_DeltaWalker`
* Supported binaries: .bmp, .bz2, .doc, .docx, .ear, .gif, .gz, .htm, .html, .ico, .j2k, .jar, .jp2, .jpg, .pbm, .pct, .pdf, .pgm, .pic, .pict, .png, .pnm, .ppm, .ppt, .psd, .rtf, .svg, .tar, .tbz2, .tgz, .tif, .xls, .xlsx, .zip
@@ -133,6 +135,7 @@ DiffTools.UseOrder(DiffTool.DeltaWalker);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Diffinity`
* Supported binaries: .svg
@@ -167,6 +170,7 @@ DiffTools.UseOrder(DiffTool.Diffinity);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_ExamDiff`
* Supported binaries: .bin, .svg
@@ -207,6 +211,7 @@ DiffTools.UseOrder(DiffTool.ExamDiff);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Guiffy`
* Supported binaries: .bmp, .gif, .jpeg, .jpg, .png, .svg, .wbmp
@@ -262,6 +267,7 @@ DiffTools.UseOrder(DiffTool.Guiffy);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Kaleidoscope`
* Supported binaries: .bin, .bmp, .gif, .ico, .jpeg, .jpg, .png, .svg, .tif, .tiff
@@ -293,6 +299,7 @@ DiffTools.UseOrder(DiffTool.Kaleidoscope);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_KDiff3`
* Supported binaries: .svg
@@ -341,6 +348,45 @@ DiffTools.UseOrder(DiffTool.KDiff3);
* `/Applications/kdiff3.app/Contents/MacOS/kdiff3`
* `%PATH%kdiff3`
+### [MsWordDiff](https://github.com/SimonCropp/MsWordDiff)
+
+ * Cost: Free
+ * Is MDI: False
+ * Supports auto-refresh: False
+ * Supports text files: False
+ * Use shell execute: False
+ * Create no window: True
+ * Environment variable for custom install location: `DiffEngine_MsWordDiff`
+ * Supported binaries: .doc, .docx
+
+#### Tool order:
+
+Use [tool order](diff-tool.order.md) to prioritise MsWordDiff over other tools.
+
+```
+DiffTools.UseOrder(DiffTool.MsWordDiff);
+```
+
+#### Notes:
+
+ * Install via `dotnet tool install -g MsWordDiff`
+ * Requires Microsoft Word to be installed
+ * Uses Word's built-in document comparison feature
+
+#### Windows settings:
+
+ * Example target on left arguments:
+ ```
+ "targetFile.txt" "tempFile.txt"
+ ```
+ * Example target on right arguments:
+ ```
+ "tempFile.txt" "targetFile.txt"
+ ```
+ * Scanned paths:
+ * `%USERPROFILE%\.dotnet\tools\diffword.exe`
+ * `%PATH%diffword.exe`
+
### [Neovim](https://neovim.io/)
* Cost: Free with option to sponsor
@@ -348,6 +394,7 @@ DiffTools.UseOrder(DiffTool.KDiff3);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Neovim`
* Supported binaries: .svg
@@ -410,6 +457,7 @@ DiffTools.UseOrder(DiffTool.Neovim);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_P4Merge`
* Supported binaries: .bmp, .gif, .jpeg, .jpg, .pbm, .pgm, .png, .ppm, .svg, .tif, .tiff, .xbm, .xpm
@@ -495,6 +543,7 @@ DiffTools.UseOrder(DiffTool.P4Merge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Rider`
* Supported binaries: .svg
@@ -563,6 +612,7 @@ DiffTools.UseOrder(DiffTool.Rider);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TkDiff`
* Supported binaries: .svg
@@ -595,6 +645,7 @@ DiffTools.UseOrder(DiffTool.TkDiff);
* Supports auto-refresh: False
* Supports text files: False
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseGitIDiff`
* Supported binaries: .bmp, .gif, .ico, .jpeg, .jpg, .png, .tif, .tiff
@@ -629,6 +680,7 @@ DiffTools.UseOrder(DiffTool.TortoiseGitIDiff);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseGitMerge`
* Supported binaries: .bin, .svg
@@ -663,6 +715,7 @@ DiffTools.UseOrder(DiffTool.TortoiseGitMerge);
* Supports auto-refresh: False
* Supports text files: False
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseIDiff`
* Supported binaries: .bmp, .gif, .ico, .jpeg, .jpg, .png, .tif, .tiff
@@ -697,6 +750,7 @@ DiffTools.UseOrder(DiffTool.TortoiseIDiff);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_TortoiseMerge`
* Supported binaries: .svg
@@ -731,6 +785,7 @@ DiffTools.UseOrder(DiffTool.TortoiseMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Vim`
* Supported binaries: .svg
@@ -787,6 +842,7 @@ DiffTools.UseOrder(DiffTool.Vim);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_WinMerge`
* Supported binaries: .bin, .bmp, .bw, .cut, .dds, .exr, .g3, .gif, .hdp, .hdr, .ico, .iff, .j2c, .j2k, .jif, .jng, .jp2, .jpe, .jpeg, .jpg, .jxr, .koa, .lbm, .mng, .pbm, .pcd, .pct, .pcx, .pfm, .pgm, .pic, .pict, .png, .ppm, .psd, .ras, .rgb, .rgba, .sgi, .svg, .targa, .tga, .tif, .tiff, .wap, .wbm, .wbmp, .wdp, .webp, .xbm, .xpm
@@ -834,6 +890,7 @@ DiffTools.UseOrder(DiffTool.WinMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_AraxisMerge`
* Supported binaries: .bmp, .dib, .emf, .gif, .j2c, .j2k, .jif, .jp2, .jpc, .jpeg, .jpg, .jpx, .pbm, .pcx, .pgm, .png, .ppm, .ras, .svg, .tga, .tif, .tiff, .wmf
@@ -889,6 +946,7 @@ DiffTools.UseOrder(DiffTool.AraxisMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: False
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Cursor`
* Supported binaries: .bin, .svg
@@ -954,6 +1012,7 @@ DiffTools.UseOrder(DiffTool.Cursor);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_Meld`
* Supported binaries: .svg
@@ -1020,6 +1079,7 @@ DiffTools.UseOrder(DiffTool.Meld);
* Supports auto-refresh: False
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_SublimeMerge`
* Supported binaries: .svg
@@ -1085,6 +1145,7 @@ DiffTools.UseOrder(DiffTool.SublimeMerge);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: True
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_VisualStudio`
* Supported binaries: .svg
@@ -1128,6 +1189,7 @@ DiffTools.UseOrder(DiffTool.VisualStudio);
* Supports auto-refresh: True
* Supports text files: True
* Use shell execute: False
+ * Create no window: False
* Environment variable for custom install location: `DiffEngine_VisualStudioCode`
* Supported binaries: .bin, .svg
diff --git a/src/DiffEngine.Tests/input.target.docx b/src/DiffEngine.Tests/input.target.docx
new file mode 100644
index 00000000..ebc44358
Binary files /dev/null and b/src/DiffEngine.Tests/input.target.docx differ
diff --git a/src/DiffEngine.Tests/input.temp.docx b/src/DiffEngine.Tests/input.temp.docx
new file mode 100644
index 00000000..0e1d74a6
Binary files /dev/null and b/src/DiffEngine.Tests/input.temp.docx differ
diff --git a/src/DiffEngine/Definition.cs b/src/DiffEngine/Definition.cs
index f05ebf1d..f0c617b1 100644
--- a/src/DiffEngine/Definition.cs
+++ b/src/DiffEngine/Definition.cs
@@ -11,4 +11,5 @@ public record Definition(
string Cost,
OsSupport OsSupport,
bool UseShellExecute = true,
+ bool CreateNoWindow = false,
string? Notes = null);
\ No newline at end of file
diff --git a/src/DiffEngine/Definitions.cs b/src/DiffEngine/Definitions.cs
index 5127fb74..0bf37d99 100644
--- a/src/DiffEngine/Definitions.cs
+++ b/src/DiffEngine/Definitions.cs
@@ -29,6 +29,7 @@ static Definitions() =>
Implementation.SublimeMerge(),
Implementation.VisualStudioCode(),
Implementation.Cursor(),
- Implementation.VisualStudio()
+ Implementation.VisualStudio(),
+ Implementation.MsWordDiff()
];
}
\ No newline at end of file
diff --git a/src/DiffEngine/DiffRunner.cs b/src/DiffEngine/DiffRunner.cs
index d3621de9..082e1d84 100644
--- a/src/DiffEngine/DiffRunner.cs
+++ b/src/DiffEngine/DiffRunner.cs
@@ -244,7 +244,8 @@ static int LaunchProcess(ResolvedTool tool, string arguments)
// Given the full exe path is known we dont need UseShellExecute https://stackoverflow.com/a/5255335
// however UseShellExecute allows the test running to not block when the difftool is launched
// https://github.com/VerifyTests/Verify/issues/1229
- UseShellExecute = tool.UseShellExecute
+ UseShellExecute = tool.UseShellExecute,
+ CreateNoWindow = tool.CreateNoWindow
};
try
{
diff --git a/src/DiffEngine/DiffTool.cs b/src/DiffEngine/DiffTool.cs
index 13301ec0..322a1b57 100644
--- a/src/DiffEngine/DiffTool.cs
+++ b/src/DiffEngine/DiffTool.cs
@@ -24,5 +24,6 @@ public enum DiffTool
SublimeMerge,
VisualStudioCode,
VisualStudio,
- Cursor
+ Cursor,
+ MsWordDiff
}
\ No newline at end of file
diff --git a/src/DiffEngine/DiffTools_Add.cs b/src/DiffEngine/DiffTools_Add.cs
index d06a8066..2b7f2474 100644
--- a/src/DiffEngine/DiffTools_Add.cs
+++ b/src/DiffEngine/DiffTools_Add.cs
@@ -9,6 +9,7 @@ public static partial class DiffTools
bool? supportsText = null,
bool? requiresTarget = null,
bool? useShellExecute = true,
+ bool? createNoWindow = null,
LaunchArguments? launchArguments = null,
string? exePath = null,
IEnumerable? binaryExtensions = null)
@@ -28,26 +29,27 @@ public static partial class DiffTools
useShellExecute ?? existing.UseShellExecute,
launchArguments ?? existing.LaunchArguments,
exePath ?? existing.ExePath,
- binaryExtensions ?? existing.BinaryExtensions);
+ binaryExtensions ?? existing.BinaryExtensions,
+ createNoWindow ?? existing.CreateNoWindow);
}
public static ResolvedTool? AddTool(string name, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, bool useShellExecute, IEnumerable binaryExtensions, OsSupport osSupport) =>
- AddTool(name, null, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, osSupport, useShellExecute);
+ AddTool(name, null, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, osSupport, useShellExecute, createNoWindow: false);
- public static ResolvedTool? AddTool(string name, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, bool useShellExecute, LaunchArguments launchArguments, string exePath, IEnumerable binaryExtensions) =>
- AddInner(name, null, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, exePath, launchArguments, useShellExecute);
+ public static ResolvedTool? AddTool(string name, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, bool useShellExecute, LaunchArguments launchArguments, string exePath, IEnumerable binaryExtensions, bool createNoWindow = false) =>
+ AddInner(name, null, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, exePath, launchArguments, useShellExecute, createNoWindow);
- static ResolvedTool? AddTool(string name, DiffTool? diffTool, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, IEnumerable binaryExtensions, OsSupport osSupport, bool useShellExecute)
+ static ResolvedTool? AddTool(string name, DiffTool? diffTool, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, IEnumerable binaryExtensions, OsSupport osSupport, bool useShellExecute, bool createNoWindow)
{
if (!OsSettingsResolver.Resolve(name, osSupport, out var exePath, out var launchArguments))
{
return null;
}
- return AddInner(name, diffTool, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, exePath, launchArguments, useShellExecute);
+ return AddInner(name, diffTool, autoRefresh, isMdi, supportsText, requiresTarget, binaryExtensions, exePath, launchArguments, useShellExecute, createNoWindow);
}
- static ResolvedTool? AddInner(string name, DiffTool? diffTool, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, IEnumerable binaries, string exePath, LaunchArguments launchArguments, bool useShellExecute)
+ static ResolvedTool? AddInner(string name, DiffTool? diffTool, bool autoRefresh, bool isMdi, bool supportsText, bool requiresTarget, IEnumerable binaries, string exePath, LaunchArguments launchArguments, bool useShellExecute, bool createNoWindow)
{
Guard.AgainstEmpty(name, nameof(name));
if (resolved.Any(_ => _.Name == name))
@@ -70,7 +72,8 @@ public static partial class DiffTools
binaries.ToList(),
requiresTarget,
supportsText,
- useShellExecute);
+ useShellExecute,
+ createNoWindow);
AddResolvedToolAtStart(tool);
@@ -107,7 +110,8 @@ static void InitTools(bool throwForNoTool, IEnumerable order)
definition.RequiresTarget,
definition.BinaryExtensions,
definition.OsSupport,
- definition.UseShellExecute);
+ definition.UseShellExecute,
+ definition.CreateNoWindow);
}
custom.Reverse();
diff --git a/src/DiffEngine/Implementation/MsWordDiff.cs b/src/DiffEngine/Implementation/MsWordDiff.cs
new file mode 100644
index 00000000..58951630
--- /dev/null
+++ b/src/DiffEngine/Implementation/MsWordDiff.cs
@@ -0,0 +1,35 @@
+static partial class Implementation
+{
+ public static Definition MsWordDiff()
+ {
+ var launchArguments = new LaunchArguments(
+ Left: (temp, target) => $"\"{target}\" \"{temp}\"",
+ Right: (temp, target) => $"\"{temp}\" \"{target}\"");
+
+ return new(
+ Tool: DiffTool.MsWordDiff,
+ Url: "https://github.com/SimonCropp/MsWordDiff",
+ AutoRefresh: false,
+ IsMdi: false,
+ SupportsText: false,
+ RequiresTarget: true,
+ BinaryExtensions:
+ [
+ ".docx",
+ ".doc"
+ ],
+ Cost: "Free",
+ OsSupport: new(
+ Windows: new(
+ "diffword.exe",
+ launchArguments,
+ @"%USERPROFILE%\.dotnet\tools\")),
+ UseShellExecute: false,
+ CreateNoWindow: true,
+ Notes: """
+ * Install via `dotnet tool install -g MsWordDiff`
+ * Requires Microsoft Word to be installed
+ * Uses Word's built-in document comparison feature
+ """);
+ }
+}
diff --git a/src/DiffEngine/ResolvedTool.cs b/src/DiffEngine/ResolvedTool.cs
index ca67d9eb..535b1d65 100644
--- a/src/DiffEngine/ResolvedTool.cs
+++ b/src/DiffEngine/ResolvedTool.cs
@@ -23,8 +23,8 @@ public string GetArguments(string tempFile, string targetFile)
return LaunchArguments.Right(tempFile, targetFile);
}
- public ResolvedTool(string name, string exePath, LaunchArguments launchArguments, bool isMdi, bool autoRefresh, IReadOnlyCollection binaryExtensions, bool requiresTarget, bool supportsText, bool useShellExecute) :
- this(name, null, exePath, launchArguments, isMdi, autoRefresh, binaryExtensions, requiresTarget, supportsText, useShellExecute)
+ public ResolvedTool(string name, string exePath, LaunchArguments launchArguments, bool isMdi, bool autoRefresh, IReadOnlyCollection binaryExtensions, bool requiresTarget, bool supportsText, bool useShellExecute, bool createNoWindow = false) :
+ this(name, null, exePath, launchArguments, isMdi, autoRefresh, binaryExtensions, requiresTarget, supportsText, useShellExecute, createNoWindow)
{
}
@@ -38,7 +38,8 @@ public ResolvedTool(
IReadOnlyCollection binaryExtensions,
bool requiresTarget,
bool supportsText,
- bool useShellExecute)
+ bool useShellExecute,
+ bool createNoWindow = false)
{
Guard.FileExists(exePath, nameof(exePath));
Guard.AgainstEmpty(name, nameof(name));
@@ -61,6 +62,7 @@ Extensions must begin with a period.
RequiresTarget = requiresTarget;
SupportsText = supportsText;
UseShellExecute = useShellExecute;
+ CreateNoWindow = createNoWindow;
}
public string Name { get; init; }
@@ -73,4 +75,5 @@ Extensions must begin with a period.
public bool RequiresTarget { get; init; }
public bool SupportsText { get; init; }
public bool UseShellExecute { get; init; }
+ public bool CreateNoWindow { get; init; }
}
\ No newline at end of file
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index d4d6bec0..bae85037 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -2,7 +2,7 @@
CS1591;CS0649;NU1608;NU1109
- 17.0.2
+ 18.0.0
1.0.0
Testing, Snapshot, Diff, Compare
Launches diff tools based on file extensions. Designed to be consumed by snapshot testing libraries.