From b9ab28764dac646de7e61cd71356510488d84f49 Mon Sep 17 00:00:00 2001 From: Tushar Date: Sat, 21 Jun 2025 18:02:39 +0530 Subject: [PATCH 1/4] fix:Added copy Markdown to copy citation #12552. --- .../main/java/org/jabref/gui/actions/StandardActions.java | 1 + .../java/org/jabref/gui/maintable/RightClickMenu.java | 3 ++- .../org/jabref/gui/preview/ClipboardContentGenerator.java | 8 ++++++++ .../logic/citationstyle/CitationStyleOutputFormat.java | 3 ++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/actions/StandardActions.java b/jabgui/src/main/java/org/jabref/gui/actions/StandardActions.java index 446511c7857..edb65d7a27a 100644 --- a/jabgui/src/main/java/org/jabref/gui/actions/StandardActions.java +++ b/jabgui/src/main/java/org/jabref/gui/actions/StandardActions.java @@ -19,6 +19,7 @@ public enum StandardActions implements Action { COPY_KEY_AND_LINK(Localization.lang("Copy citation key and link"), KeyBinding.COPY_CITATION_KEY_AND_LINK), COPY_CITATION_HTML(Localization.lang("Copy citation (html)"), KeyBinding.COPY_PREVIEW), COPY_CITATION_TEXT(Localization.lang("Copy citation (text)")), + COPY_CITATION_MARKDOWN(Localization.lang("Copy citation (markdown)")), COPY_CITATION_PREVIEW(Localization.lang("Copy preview"), KeyBinding.COPY_PREVIEW), EXPORT_TO_CLIPBOARD(Localization.lang("Export to clipboard"), IconTheme.JabRefIcons.EXPORT_TO_CLIPBOARD), EXPORT_SELECTED_TO_CLIPBOARD(Localization.lang("Export selected entries to clipboard"), IconTheme.JabRefIcons.EXPORT_TO_CLIPBOARD), diff --git a/jabgui/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/jabgui/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index 5a9c93e6cac..5fbee9fa50a 100644 --- a/jabgui/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/jabgui/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -192,7 +192,8 @@ private static Menu createCopySubMenu(ActionFactory factory, if (previewPreferences.getSelectedPreviewLayout() instanceof CitationStylePreviewLayout) { copySpecialMenu.getItems().addAll( factory.createMenuItem(StandardActions.COPY_CITATION_HTML, new CopyCitationAction(CitationStyleOutputFormat.HTML, dialogService, stateManager, clipBoardManager, taskExecutor, preferences, abbreviationRepository)), - factory.createMenuItem(StandardActions.COPY_CITATION_TEXT, new CopyCitationAction(CitationStyleOutputFormat.TEXT, dialogService, stateManager, clipBoardManager, taskExecutor, preferences, abbreviationRepository))); + factory.createMenuItem(StandardActions.COPY_CITATION_TEXT, new CopyCitationAction(CitationStyleOutputFormat.TEXT, dialogService, stateManager, clipBoardManager, taskExecutor, preferences, abbreviationRepository)), + factory.createMenuItem(StandardActions.COPY_CITATION_MARKDOWN, new CopyCitationAction(CitationStyleOutputFormat.MARKDOWN, dialogService, stateManager, clipBoardManager, taskExecutor, preferences, abbreviationRepository))); } else { copySpecialMenu.getItems().add(factory.createMenuItem(StandardActions.COPY_CITATION_PREVIEW, new CopyCitationAction(CitationStyleOutputFormat.HTML, dialogService, stateManager, clipBoardManager, taskExecutor, preferences, abbreviationRepository))); } diff --git a/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java b/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java index f49382d61a4..4249a47e1c3 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java @@ -45,6 +45,7 @@ public ClipboardContent generate(List selectedEntries, CitationStyleOu return switch (outputFormat) { case HTML -> processHtml(citations); case TEXT -> processText(citations); + case MARKDOWN -> processMarkdown(citations); }; } else { // if it is not a citation style take care of the preview @@ -120,6 +121,13 @@ static ClipboardContent processHtml(List citations) { return content; } + static ClipboardContent processMarkdown(List citations) { + String result = String.join(CitationStyleOutputFormat.MARKDOWN.getLineSeparator(), citations); + ClipboardContent content = new ClipboardContent(); + content.putString(result); + return content; + } + private List generateTextBasedPreviewLayoutCitations(List selectedEntries, BibDatabaseContext bibDatabaseContext) throws IOException { TextBasedPreviewLayout customPreviewLayout = previewPreferences.getCustomPreviewLayout(); Reader customLayoutReader = Reader.of(customPreviewLayout.getText().replace("__NEWLINE__", "\n")); diff --git a/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java b/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java index 2c11793df42..dfb4a2f5963 100644 --- a/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java +++ b/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java @@ -5,7 +5,8 @@ public enum CitationStyleOutputFormat { HTML("html", OS.NEWLINE + "
" + OS.NEWLINE), - TEXT("text", ""); + TEXT("text", ""), + MARKDOWN("markdown", OS.NEWLINE + "
" + OS.NEWLINE); private final String format; private final String lineSeparator; From 49b035b8083674ca6efb3cbd3166e567366a485c Mon Sep 17 00:00:00 2001 From: Tushar Date: Mon, 23 Jun 2025 20:46:35 +0530 Subject: [PATCH 2/4] fix:Added copy Markdown to copy citation #12552. --- jabgui/src/main/java/module-info.java | 2 ++ .../preview/ClipboardContentGenerator.java | 19 +++++++++++++++++-- .../CitationStyleOutputFormat.java | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/jabgui/src/main/java/module-info.java b/jabgui/src/main/java/module-info.java index 0a529f52082..aeb0e131036 100644 --- a/jabgui/src/main/java/module-info.java +++ b/jabgui/src/main/java/module-info.java @@ -188,5 +188,7 @@ requires org.antlr.antlr4.runtime; requires org.libreoffice.uno; requires com.dlsc.pdfviewfx; + requires flexmark; + requires flexmark.util.ast; // endregion } diff --git a/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java b/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java index 4249a47e1c3..d0a8036a4d9 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java @@ -23,6 +23,7 @@ import com.airhacks.afterburner.injection.Injector; import com.google.common.annotations.VisibleForTesting; +import com.vladsch.flexmark.html2md.converter.FlexmarkHtmlConverter; public class ClipboardContentGenerator { @@ -122,9 +123,23 @@ static ClipboardContent processHtml(List citations) { } static ClipboardContent processMarkdown(List citations) { - String result = String.join(CitationStyleOutputFormat.MARKDOWN.getLineSeparator(), citations); + String result = "" + OS.NEWLINE + + "" + OS.NEWLINE + + " " + OS.NEWLINE + + " " + OS.NEWLINE + + " " + OS.NEWLINE + + " " + OS.NEWLINE + OS.NEWLINE; + + result += String.join(CitationStyleOutputFormat.HTML.getLineSeparator(), citations); + result += OS.NEWLINE + + " " + OS.NEWLINE + + "" + OS.NEWLINE; + + FlexmarkHtmlConverter converter = FlexmarkHtmlConverter.builder().build(); + String markdown = converter.convert(result); + ClipboardContent content = new ClipboardContent(); - content.putString(result); + content.putString(markdown); return content; } diff --git a/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java b/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java index dfb4a2f5963..3a2edf12063 100644 --- a/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java +++ b/jablib/src/main/java/org/jabref/logic/citationstyle/CitationStyleOutputFormat.java @@ -6,7 +6,7 @@ public enum CitationStyleOutputFormat { HTML("html", OS.NEWLINE + "
" + OS.NEWLINE), TEXT("text", ""), - MARKDOWN("markdown", OS.NEWLINE + "
" + OS.NEWLINE); + MARKDOWN("markdown", ""); private final String format; private final String lineSeparator; From d582566562a7e9f256fba9577c2fff647eb59bb1 Mon Sep 17 00:00:00 2001 From: Tushar Date: Tue, 24 Jun 2025 17:35:31 +0530 Subject: [PATCH 3/4] fix:Added copy Markdown to copy citation #12552. --- jabgui/src/main/java/module-info.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jabgui/src/main/java/module-info.java b/jabgui/src/main/java/module-info.java index aeb0e131036..899000bc7ba 100644 --- a/jabgui/src/main/java/module-info.java +++ b/jabgui/src/main/java/module-info.java @@ -188,7 +188,7 @@ requires org.antlr.antlr4.runtime; requires org.libreoffice.uno; requires com.dlsc.pdfviewfx; - requires flexmark; - requires flexmark.util.ast; +// requires flexmark; +// requires flexmark.util.ast; // endregion } From 508b93d1708a441cf74df9ebfdba537436ae677c Mon Sep 17 00:00:00 2001 From: Tushar Date: Fri, 27 Jun 2025 10:32:52 +0530 Subject: [PATCH 4/4] fix:Added @visibleForTesting in method processMarkdown #12552. --- .../org/jabref/gui/preview/ClipboardContentGenerator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java b/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java index d0a8036a4d9..ce5a61f5def 100644 --- a/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java +++ b/jabgui/src/main/java/org/jabref/gui/preview/ClipboardContentGenerator.java @@ -122,6 +122,11 @@ static ClipboardContent processHtml(List citations) { return content; } + /** + * Insert each citation into HTML. + * convert HTML to markdown using flexmark. + */ + @VisibleForTesting static ClipboardContent processMarkdown(List citations) { String result = "" + OS.NEWLINE + "" + OS.NEWLINE +