diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/entry/EntryTab.java b/jabgui/src/main/java/org/jabref/gui/preferences/entry/EntryTab.java index 072d2e6e27b..319ad380df0 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/entry/EntryTab.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/entry/EntryTab.java @@ -1,7 +1,5 @@ package org.jabref.gui.preferences.entry; -import java.util.function.UnaryOperator; - import javafx.css.PseudoClass; import javafx.fxml.FXML; import javafx.scene.Node; @@ -10,7 +8,6 @@ import javafx.scene.control.ContentDisplay; import javafx.scene.control.Label; import javafx.scene.control.TextField; -import javafx.scene.control.TextFormatter; import javafx.scene.input.KeyCode; import org.jabref.gui.actions.ActionFactory; @@ -57,15 +54,15 @@ public void initialize() { keywordSeparator.textProperty().bindBidirectional(viewModel.keywordSeparatorProperty()); // Use TextFormatter to limit the length of the Input of keywordSeparator to 1 character only. - UnaryOperator singleCharacterFilter = change -> { - if (change.getControlNewText().length() <= 1) { - return change; - } - return null; // null means the change is rejected - }; - TextFormatter formatter = new TextFormatter<>(singleCharacterFilter); - - keywordSeparator.setTextFormatter(formatter); +// UnaryOperator singleCharacterFilter = change -> { +// if (change.getControlNewText().length() <= 1) { +// return change; +// } +// return null; // null means the change is rejected +// }; +// TextFormatter formatter = new TextFormatter<>(singleCharacterFilter); + +// keywordSeparator.setTextFormatter(formatter); resolveStrings.selectedProperty().bindBidirectional(viewModel.resolveStringsProperty()); diff --git a/jablib/src/main/java/org/jabref/model/entry/KeywordList.java b/jablib/src/main/java/org/jabref/model/entry/KeywordList.java index 76adb9add8d..cd6b08031ed 100644 --- a/jablib/src/main/java/org/jabref/model/entry/KeywordList.java +++ b/jablib/src/main/java/org/jabref/model/entry/KeywordList.java @@ -62,6 +62,27 @@ public static KeywordList parse(String keywordString, Character delimiter, Chara return keywordList; } + public static KeywordList parseMultipleDelimiter(String keywordString, String delimiter, Character hierarchicalDelimiter) { + if (StringUtil.isBlank(keywordString)) { + return new KeywordList(); + } + + Objects.requireNonNull(delimiter); + Objects.requireNonNull(hierarchicalDelimiter); + + KeywordList keywordList = new KeywordList(); + for (char d:delimiter.toCharArray()) { + keywordString = keywordString.replace(d, ','); + } + StringTokenizer tok = new StringTokenizer(keywordString, ","); + while (tok.hasMoreTokens()) { + String chain = tok.nextToken(); + Keyword chainRoot = Keyword.of(chain.split(hierarchicalDelimiter.toString())); + keywordList.add(chainRoot); + } + return keywordList; + } + /** * Parses the keyword list and uses {@link Keyword#DEFAULT_HIERARCHICAL_DELIMITER} as hierarchical delimiter. * @@ -73,6 +94,10 @@ public static KeywordList parse(String keywordString, Character delimiter) { return parse(keywordString, delimiter, Keyword.DEFAULT_HIERARCHICAL_DELIMITER); } + public static KeywordList parseMultipleDelimeter(String keywordString, String delimiter) { + return parseMultipleDelimiter(keywordString, delimiter, Keyword.DEFAULT_HIERARCHICAL_DELIMITER); + } + public static String serialize(List keywords, Character delimiter) { return keywords.stream().map(Keyword::get).collect(Collectors.joining(delimiter.toString())); } diff --git a/jablib/src/test/java/org/jabref/model/entry/KeywordListTest.java b/jablib/src/test/java/org/jabref/model/entry/KeywordListTest.java index 033d2c26615..b4bd78bb1d1 100644 --- a/jablib/src/test/java/org/jabref/model/entry/KeywordListTest.java +++ b/jablib/src/test/java/org/jabref/model/entry/KeywordListTest.java @@ -115,4 +115,10 @@ void mergeTwoDistinctKeywordsShouldReturnTheTwoKeywordsMerged() { void mergeTwoListsOfKeywordsShouldReturnTheKeywordsMerged() { assertEquals(new KeywordList("Figma", "Adobe", "JabRef", "Eclipse", "JetBrains"), KeywordList.merge("Figma, Adobe, JetBrains, Eclipse", "Adobe, JabRef", ',')); } + + @Test + void parseMultipleDelimiter() { + assertEquals(new KeywordList("keywordOne", "keywordTwo", "keywordThree"), + KeywordList.parseMultipleDelimeter("keywordOne; keywordTwo: keywordThree", ";:")); + } }