diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index ba15d402c02..65f4a3aad87 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -36,7 +36,6 @@
-
@@ -47,6 +46,7 @@
+
diff --git a/jablib/src/main/abbrv.jabref.org b/jablib/src/main/abbrv.jabref.org
index 91f15ce2f88..171229c9761 160000
--- a/jablib/src/main/abbrv.jabref.org
+++ b/jablib/src/main/abbrv.jabref.org
@@ -1 +1 @@
-Subproject commit 91f15ce2f885b735149fd65bdfcc869b1ea22fa1
+Subproject commit 171229c9761f9c1e36f7d4f8cd40445a6356e73f
diff --git a/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/EntryTypePlausibilityComparator.java b/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/EntryTypePlausibilityComparator.java
index 2974d0fee86..ded7ab73859 100644
--- a/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/EntryTypePlausibilityComparator.java
+++ b/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/EntryTypePlausibilityComparator.java
@@ -3,7 +3,8 @@
import org.jabref.logic.bibtex.comparator.ComparisonResult;
import org.jabref.model.entry.types.StandardEntryType;
-/// If the left entry type is misc then prefer the the right value
+// If the left entry type is misc then prefer the right value
+
public class EntryTypePlausibilityComparator implements FieldValuePlausibilityComparator {
// Only the factory may instantiate this
diff --git a/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/MonthPlausibilityComparator.java b/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/MonthPlausibilityComparator.java
new file mode 100644
index 00000000000..9404cfce089
--- /dev/null
+++ b/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/MonthPlausibilityComparator.java
@@ -0,0 +1,79 @@
+package org.jabref.logic.bibtex.comparator.plausibility;
+
+import java.util.Optional;
+
+import org.jabref.logic.bibtex.comparator.ComparisonResult;
+import org.jabref.model.entry.Month;
+
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+public class MonthPlausibilityComparator implements FieldValuePlausibilityComparator {
+
+ @Override
+ public ComparisonResult compare(String left, String right) {
+ Optional leftM = Month.parse(left);
+ Optional rightM = Month.parse(right);
+
+ if (leftM.isPresent() && rightM.isEmpty()) {
+ return ComparisonResult.LEFT_BETTER;
+ }
+ if (rightM.isPresent() && leftM.isEmpty()) {
+ return ComparisonResult.RIGHT_BETTER;
+ }
+ if (leftM.isEmpty() && rightM.isEmpty()) {
+ return ComparisonResult.UNDETERMINED;
+ }
+ if (!leftM.equals(rightM)) {
+ return ComparisonResult.UNDETERMINED;
+ }
+
+ Month leftMonth = leftM.get();
+ Month rightMonth = rightM.get();
+
+ boolean leftIsJabRef = left.equals(leftMonth.getJabRefFormat());
+ boolean rightIsJabRef = right.equals(rightMonth.getJabRefFormat());
+ if (leftIsJabRef && !rightIsJabRef) {
+ return ComparisonResult.LEFT_BETTER;
+ }
+ if (rightIsJabRef && !leftIsJabRef) {
+ return ComparisonResult.RIGHT_BETTER;
+ }
+
+ boolean leftIsShort = left.equalsIgnoreCase(leftMonth.getShortName());
+ boolean rightIsShort = right.equalsIgnoreCase(rightMonth.getShortName());
+ if (leftIsShort && !rightIsShort) {
+ return ComparisonResult.LEFT_BETTER;
+ }
+ if (rightIsShort && !leftIsShort) {
+ return ComparisonResult.RIGHT_BETTER;
+ }
+
+ boolean leftIsSimpleNum;
+ try {
+ leftIsSimpleNum = Integer.parseInt(left) == leftM.get().getNumber();
+ } catch (NumberFormatException e) {
+ leftIsSimpleNum = false;
+ }
+ boolean rightIsSimpleNum;
+ try {
+ rightIsSimpleNum = Integer.parseInt(right) == rightM.get().getNumber();
+ } catch (NumberFormatException e) {
+ rightIsSimpleNum = false;
+ }
+ if (leftIsSimpleNum && !rightIsSimpleNum) {
+ return ComparisonResult.LEFT_BETTER;
+ }
+ if (rightIsSimpleNum && !leftIsSimpleNum) {
+ return ComparisonResult.RIGHT_BETTER;
+ }
+ if (left.length() < right.length()) {
+ return ComparisonResult.LEFT_BETTER;
+ }
+ if (right.length() < left.length()) {
+ return ComparisonResult.RIGHT_BETTER;
+ }
+
+ return ComparisonResult.UNDETERMINED;
+ }
+}
diff --git a/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/PlausibilityComparatorFactory.java b/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/PlausibilityComparatorFactory.java
index 6e643b7f09a..b097031c62c 100644
--- a/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/PlausibilityComparatorFactory.java
+++ b/jablib/src/main/java/org/jabref/logic/bibtex/comparator/plausibility/PlausibilityComparatorFactory.java
@@ -19,6 +19,9 @@ public Optional getPlausibilityComparator(Fiel
if (field.getProperties().contains(FieldProperty.YEAR)) {
return Optional.of(new YearFieldValuePlausibilityComparator());
}
+ if (field.getProperties().contains(FieldProperty.MONTH)) {
+ return Optional.of(new MonthPlausibilityComparator());
+ }
if (InternalField.TYPE_HEADER == field) {
return Optional.of(new EntryTypePlausibilityComparator());
}
diff --git a/jablib/src/main/resources/csl-locales b/jablib/src/main/resources/csl-locales
index 50e46eb99b4..92e9e22ecdd 160000
--- a/jablib/src/main/resources/csl-locales
+++ b/jablib/src/main/resources/csl-locales
@@ -1 +1 @@
-Subproject commit 50e46eb99b4f0b0a77b48e9a5604624247b46379
+Subproject commit 92e9e22ecdd041703401ee9e5f0d5bbf63bdbb68
diff --git a/jablib/src/main/resources/csl-styles b/jablib/src/main/resources/csl-styles
index f345aa8691b..909f1d8241e 160000
--- a/jablib/src/main/resources/csl-styles
+++ b/jablib/src/main/resources/csl-styles
@@ -1 +1 @@
-Subproject commit f345aa8691bb46c92325c9a24e8ff8836923b346
+Subproject commit 909f1d8241e3053ef4909a0b7bcb250b4dadc5ea
diff --git a/jablib/src/test/java/org/jabref/logic/bibtex/comparator/plausibility/MonthPlausibilityComparatorTest.java b/jablib/src/test/java/org/jabref/logic/bibtex/comparator/plausibility/MonthPlausibilityComparatorTest.java
new file mode 100644
index 00000000000..dde0e794858
--- /dev/null
+++ b/jablib/src/test/java/org/jabref/logic/bibtex/comparator/plausibility/MonthPlausibilityComparatorTest.java
@@ -0,0 +1,18 @@
+package org.jabref.logic.bibtex.comparator.plausibility;
+
+import org.jabref.logic.bibtex.comparator.ComparisonResult;
+
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class MonthPlausibilityComparatorTest {
+ private final MonthPlausibilityComparator comparator = new MonthPlausibilityComparator();
+
+ @ParameterizedTest
+ @CsvSource(value = {"{Jun}, jun, RIGHT_BETTER", "Jun, #jun#, RIGHT_BETTER", "June, #jun#, RIGHT_BETTER", "June, 6, RIGHT_BETTER", "June, July, UNDETERMINED", "#jun#, #jul#, UNDETERMINED", "6, #jun#, RIGHT_BETTER", "June, #Apr#, UNDETERMINED", "June, July, UNDETERMINED", "NotAMonth, #jun#, RIGHT_BETTER", "NotAMonth, June, RIGHT_BETTER", ", #jun#, RIGHT_BETTER", "#jun#, , LEFT_BETTER", "06, 6, RIGHT_BETTER", "jan, jan, UNDETERMINED", "#JAN#, #jan#, RIGHT_BETTER"}, nullValues = {"null", "N/A", "EMPTY"})
+ void compare(String left, String right, ComparisonResult expected) {
+ assertEquals(expected, comparator.compare(left, right));
+ }
+}