diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-26 23:25:42 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-26 23:25:42 +0100 |
| commit | 789ac98fa258692a25eaf5f380088479caa389ac (patch) | |
| tree | 521883878eea53f5b3967912b92a86ae441ae6cf /dotnet | |
| parent | 0e1dd2bfb5f2a346caf66aad8bccf0a69caac760 (diff) | |
Add runtime classes so that PathRelativeFileReader works on .NET
Diffstat (limited to 'dotnet')
| -rw-r--r-- | dotnet/Mammoth.Tests/DocumentConverterTests.cs | 7 | ||||
| -rw-r--r-- | dotnet/Mammoth/Couscous/java/net/URI.cs | 42 | ||||
| -rw-r--r-- | dotnet/Mammoth/Couscous/java/net/URISyntaxException.cs | 6 | ||||
| -rw-r--r-- | dotnet/Mammoth/Couscous/java/net/URL.cs | 26 | ||||
| -rw-r--r-- | dotnet/Mammoth/Couscous/java/nio/file/Path.cs | 6 | ||||
| -rw-r--r-- | dotnet/Mammoth/Couscous/mammoth/internal/docx/PathRelativeFileReader.cs | 17 | ||||
| -rw-r--r-- | dotnet/Mammoth/Mammoth.csproj | 4 |
7 files changed, 89 insertions, 19 deletions
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" /> |
