summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-26 23:25:42 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-26 23:25:42 +0100
commit789ac98fa258692a25eaf5f380088479caa389ac (patch)
tree521883878eea53f5b3967912b92a86ae441ae6cf
parent0e1dd2bfb5f2a346caf66aad8bccf0a69caac760 (diff)
Add runtime classes so that PathRelativeFileReader works on .NET
-rw-r--r--couscous.json1
-rw-r--r--dotnet/Mammoth.Tests/DocumentConverterTests.cs7
-rw-r--r--dotnet/Mammoth/Couscous/java/net/URI.cs42
-rw-r--r--dotnet/Mammoth/Couscous/java/net/URISyntaxException.cs6
-rw-r--r--dotnet/Mammoth/Couscous/java/net/URL.cs26
-rw-r--r--dotnet/Mammoth/Couscous/java/nio/file/Path.cs6
-rw-r--r--dotnet/Mammoth/Couscous/mammoth/internal/docx/PathRelativeFileReader.cs17
-rw-r--r--dotnet/Mammoth/Mammoth.csproj4
8 files changed, 89 insertions, 20 deletions
diff --git a/couscous.json b/couscous.json
index 7c78642..f62504a 100644
--- a/couscous.json
+++ b/couscous.json
@@ -8,7 +8,6 @@
"!src/main/java/org/zwobble/mammoth/DocumentConverter.java",
"!src/main/java/org/zwobble/mammoth/internal/docx/ZippedDocxFile.java",
"!src/main/java/org/zwobble/mammoth/internal/docx/InMemoryDocxFile.java",
- "!src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java",
"!src/main/java/org/zwobble/mammoth/internal/styles/parsing",
"!src/main/java/org/zwobble/mammoth/internal/util",
"src/main/java/org/zwobble/mammoth/internal/util/InputStreamSupplier.java",
diff --git a/dotnet/Mammoth.Tests/DocumentConverterTests.cs b/dotnet/Mammoth.Tests/DocumentConverterTests.cs
index 30b7646..1e07f99 100644
--- a/dotnet/Mammoth.Tests/DocumentConverterTests.cs
+++ b/dotnet/Mammoth.Tests/DocumentConverterTests.cs
@@ -54,6 +54,13 @@ namespace Mammoth.Tests {
"<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABNJREFUKFNj/M+ADzDhlWUYqdIAQSwBE8U+X40AAAAASUVORK5CYII=\" /></p>");
}
+ [Fact]
+ public void ImagesStoredOutsideOfDocumentAreIncludedInOutput() {
+ assertSuccessfulConversion(
+ ConvertToHtml("external-picture.docx"),
+ "<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABNJREFUKFNj/M+ADzDhlWUYqdIAQSwBE8U+X40AAAAASUVORK5CYII=\" /></p>");
+ }
+
private void assertSuccessfulConversion(IResult<string> result, string expectedValue) {
if (result.Warnings.Count > 0) {
throw new XunitException("Unexpected warnings: " + string.Join(", ", result.Warnings));
diff --git a/dotnet/Mammoth/Couscous/java/net/URI.cs b/dotnet/Mammoth/Couscous/java/net/URI.cs
new file mode 100644
index 0000000..818d694
--- /dev/null
+++ b/dotnet/Mammoth/Couscous/java/net/URI.cs
@@ -0,0 +1,42 @@
+using System;
+
+namespace Mammoth.Couscous.java.net {
+ internal class URI {
+ private readonly Uri _uri;
+
+ internal URI(string uri) {
+ try {
+ _uri = new Uri(uri, UriKind.RelativeOrAbsolute);
+ } catch (UriFormatException exception) {
+ throw new URISyntaxException(exception.Message);
+ }
+ }
+
+ internal URI(Uri uri) {
+ _uri = uri;
+ }
+
+ internal bool isAbsolute() {
+ return _uri.IsAbsoluteUri;
+ }
+
+ internal URL toURL() {
+ return new URL(_uri.ToString());
+ }
+
+ internal URI resolve(string relativeUri) {
+ if (new URI(relativeUri).isAbsolute()) {
+ return new URI(relativeUri);
+ } else if (_uri.IsAbsoluteUri) {
+ return new URI(new Uri(_uri, relativeUri));
+ } else {
+ var path = _uri.ToString();
+ var lastSlashIndex = path.LastIndexOf("/");
+ var basePath = lastSlashIndex == -1
+ ? "."
+ : path.Substring(0, lastSlashIndex + 1);
+ return new URI(basePath + relativeUri);
+ }
+ }
+ }
+}
diff --git a/dotnet/Mammoth/Couscous/java/net/URISyntaxException.cs b/dotnet/Mammoth/Couscous/java/net/URISyntaxException.cs
new file mode 100644
index 0000000..7380ff6
--- /dev/null
+++ b/dotnet/Mammoth/Couscous/java/net/URISyntaxException.cs
@@ -0,0 +1,6 @@
+namespace Mammoth.Couscous.java.net {
+ internal class URISyntaxException : System.Exception {
+ internal URISyntaxException(string message) : base(message) {
+ }
+ }
+}
diff --git a/dotnet/Mammoth/Couscous/java/net/URL.cs b/dotnet/Mammoth/Couscous/java/net/URL.cs
new file mode 100644
index 0000000..af6e021
--- /dev/null
+++ b/dotnet/Mammoth/Couscous/java/net/URL.cs
@@ -0,0 +1,26 @@
+using System.Net;
+using Mammoth.Couscous.java.io;
+
+namespace Mammoth.Couscous.java.net {
+ internal class URL {
+ private readonly string _url;
+
+ internal URL(string url) {
+ _url = url;
+ }
+
+ internal InputStream openStream() {
+ try {
+ var response = WebRequest.Create(_url).GetResponse();
+ try {
+ return ToJava.StreamToInputStream(response.GetResponseStream());
+ } catch {
+ response.Close();
+ throw;
+ }
+ } catch (System.UriFormatException) {
+ return ToJava.StreamToInputStream(System.IO.File.OpenRead(_url));
+ }
+ }
+ }
+}
diff --git a/dotnet/Mammoth/Couscous/java/nio/file/Path.cs b/dotnet/Mammoth/Couscous/java/nio/file/Path.cs
index 032b4bb..030f757 100644
--- a/dotnet/Mammoth/Couscous/java/nio/file/Path.cs
+++ b/dotnet/Mammoth/Couscous/java/nio/file/Path.cs
@@ -1,4 +1,4 @@
-using System;
+using Mammoth.Couscous.java.net;
namespace Mammoth.Couscous.java.nio.file {
internal class Path {
@@ -7,6 +7,10 @@ namespace Mammoth.Couscous.java.nio.file {
internal Path(string path) {
_path = path;
}
+
+ internal URI toUri() {
+ return new URI(_path);
+ }
}
}
diff --git a/dotnet/Mammoth/Couscous/mammoth/internal/docx/PathRelativeFileReader.cs b/dotnet/Mammoth/Couscous/mammoth/internal/docx/PathRelativeFileReader.cs
deleted file mode 100644
index b581e9d..0000000
--- a/dotnet/Mammoth/Couscous/mammoth/internal/docx/PathRelativeFileReader.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Mammoth.Couscous.java.util;
-using Mammoth.Couscous.java.io;
-using Mammoth.Couscous.java.nio.file;
-
-namespace Mammoth.Couscous.org.zwobble.mammoth.@internal.docx {
- internal class PathRelativeFileReader : FileReader {
- private readonly Optional<Path> _path;
-
- internal PathRelativeFileReader(Optional<Path> path) {
- _path = path;
- }
-
- public InputStream getInputStream(string uri) {
- throw new System.NotImplementedException();
- }
- }
-}
diff --git a/dotnet/Mammoth/Mammoth.csproj b/dotnet/Mammoth/Mammoth.csproj
index a49035c..68e7d70 100644
--- a/dotnet/Mammoth/Mammoth.csproj
+++ b/dotnet/Mammoth/Mammoth.csproj
@@ -54,6 +54,9 @@
<Compile Include="Couscous\java\lang\String.cs" />
<Compile Include="Couscous\java\lang\StringBuilder.cs" />
<Compile Include="Couscous\java\lang\UnsupportedOperationException.cs" />
+ <Compile Include="Couscous\java\net\URI.cs" />
+ <Compile Include="Couscous\java\net\URISyntaxException.cs" />
+ <Compile Include="Couscous\java\net\URL.cs" />
<Compile Include="Couscous\java\util\function\BiFunction.cs" />
<Compile Include="Couscous\java\util\function\BiPredicate.cs" />
<Compile Include="Couscous\java\util\function\Consumer.cs" />
@@ -73,7 +76,6 @@
<Compile Include="Couscous\java\util\Optional.cs" />
<Compile Include="Couscous\java\util\Set.cs" />
<Compile Include="Couscous\mammoth\internal\docx\InMemoryDocxFile.cs" />
- <Compile Include="Couscous\mammoth\internal\docx\PathRelativeFileReader.cs" />
<Compile Include="Couscous\mammoth\internal\docx\ZippedDocxFile.cs" />
<Compile Include="Couscous\mammoth\internal\styles\parsing\StyleMapParser.cs" />
<Compile Include="Couscous\mammoth\internal\util\Base64Encoding.cs" />