diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java index 074c226fea641779eee55dc056671f9453d86c82..5273da376784ad394b91bd8b8527f125573edd83 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java @@ -24,39 +24,32 @@ public record Osi2HtmlDocument(String html) { } static final List<SpanRendering> SPAN_RENDERINGS = List.of( + SpanRendering.of("a", anchor -> "[" + anchor.text() + "](" + anchor.attr("href") + ")"), + SpanRendering.of("img", image -> " + ")"), + SpanRendering.of("i", italic -> "_" + italic.text() + "_"), + SpanRendering.of("em", italic -> "_" + italic.text() + "_"), + SpanRendering.of("b", bold -> "__" + bold.text() + "__"), + SpanRendering.of("strong", bold -> "__" + bold.text() + "__"), SpanRendering.of("h1", heading -> "# " + heading.text()), SpanRendering.of("h2", heading -> "## " + heading.text()), SpanRendering.of("h3", heading -> "### " + heading.text()), - SpanRendering.of("i", italic -> "*" + italic.text() + "*"), - SpanRendering.of("em", italic -> "*" + italic.text() + "*"), - SpanRendering.of("b", bold -> "**" + bold.text() + "**"), - SpanRendering.of("strong", bold -> "**" + bold.text() + "**"), - SpanRendering.of("img", image -> " + ")"), - SpanRendering.of("a", anchor -> "[" + anchor.text() + "](" + anchor.attr("href") + ")"), - SpanRendering.of("blockquote", bold -> "> " + bold.wholeText()) + SpanRendering.of("blockquote", bold -> "> " + bold.text()) ); - public String renderHTMLToPlainText() { + public String renderToPlainText() { var document = Jsoup.parse(html); - addNewlinesForSubsequentParagraphs(document); - replaceElementsWithMarkdownSpansIn(document); + applySpanRenderings(document); return document.wholeText(); } - private void addNewlinesForSubsequentParagraphs(Document document) { - document.body() - .select("p + p") - .prepend("\n"); - } - - private void replaceElementsWithMarkdownSpansIn(Document document) { + private void applySpanRenderings(Document document) { for (var entry : SPAN_RENDERINGS) { entry.replaceElementsWithMarkdownSpansIn(document); } } - public static String renderPlainText(String html) { - return new Osi2HtmlDocument(html).renderHTMLToPlainText(); + public static String renderToPlainText(String html) { + return new Osi2HtmlDocument(html).renderToPlainText(); } } diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java index d11c556369fb8c3a892d1be7c46476c0b7298ca6..b4012fd71ce827623b2204ac56a62ab82ca530bf 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java @@ -49,6 +49,5 @@ public class PostfachApiFacadeService { public void deleteMessage(final String messageId) { messageExchangeApi.deleteMessage(UUID.fromString(messageId)); - } } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java index 59708385ef4d0656c559ef8b8325f468e1cd239a..fd8dc9e24763910bd3ea8d5abff8cd893cc2bf58 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java @@ -71,9 +71,9 @@ class Osi2HtmlDocumentTest { @DisplayName("should render blockquote") @Test void shouldRenderBlockquote() { - var plainText = renderPlainText("<blockquote><p>Example</p><p>Example2</p></blockquote>"); + var plainText = renderPlainText("<blockquote><p>Example</p>\n<p>Example2</p></blockquote>"); - assertThat(plainText).isEqualTo("> Example\nExample2"); + assertThat(plainText).isEqualTo("> Example Example2"); } @DisplayName("should render html") @@ -85,6 +85,6 @@ class Osi2HtmlDocumentTest { } private String renderPlainText(String html) { - return new Osi2HtmlDocument(html).renderHTMLToPlainText(); + return new Osi2HtmlDocument(html).renderToPlainText(); } } \ No newline at end of file