Add support for date ranges for BibLaTeX Date#14289
Add support for date ranges for BibLaTeX Date#14289Alex1034 wants to merge 27 commits intoJabRef:mainfrom
Conversation
Hey @Alex1034!Thank you for contributing to JabRef! Your help is truly appreciated ❤️. We have automatic checks in place, based on which you will soon get automated feedback if any of them are failing. We also use TragBot with custom rules that scans your changes and provides some preliminary comments, before a maintainer takes a look. TragBot is still learning, and may not always be accurate. In the "Files changed" tab, you can go through its comments and just click on "Resolve conversation" if you are sure that it is incorrect, or comment on the conversation if you are doubtful. Please re-check our contribution guide in case of any other doubts related to our contribution workflow. |
| @Override | ||
| public TemporalAccessor fromString(String string) { | ||
| if (StringUtil.isNotBlank(string)) { | ||
| // ✅ Sanitize incomplete ranges (e.g., "2010/" → "2010") |
koppor
left a comment
There was a problem hiding this comment.
- Tests are missing
- CHANGELOG.md entry missing
| private String sanitizeIncompleteRange(String dateString) { | ||
| String trimmed = dateString.trim(); | ||
|
|
||
| if (trimmed.endsWith("/") && !trimmed.matches(".*\\d+/\\d+.*")) { | ||
| LOGGER.debug("Sanitizing incomplete range (trailing slash): {}", trimmed); | ||
| return trimmed.substring(0, trimmed.length() - 1).trim(); | ||
| } | ||
|
|
||
| if (trimmed.startsWith("/") && !trimmed.matches(".*\\d+/\\d+.*")) { | ||
| LOGGER.debug("Sanitizing incomplete range (leading slash): {}", trimmed); | ||
| return trimmed.substring(1).trim(); | ||
| } | ||
|
|
||
| return dateString; |
There was a problem hiding this comment.
This is more a logic part, not a gui part. Please search for an appropriate place in the logic package.
I would assume near org.jabref.model.entry.Date
| private DateEditorViewModel viewModel; | ||
| private StringConverter<TemporalAccessor> dateToStringConverter; | ||
|
|
||
| private TemporalAccessor sentinel() { |
There was a problem hiding this comment.
This is more a constant. Also needs to have a comment.
|
Your pull request conflicts with the target branch. Please merge with your code. |
|
@Alex1034 Please check the license checkbox in the mandatory checks section in the PR description. Otherwise this PR will be closed. |
|
Your code currently does not meet JabRef's code guidelines. We use Checkstyle to identify issues. You can see which checks are failing by locating the box "Some checks were not successful" on the pull request page. To see the test output, locate "Source Code Tests / Checkstyle (pull_request)" and click on it. In case of issues with the import order, double check that you activated Auto Import. You can trigger fixing imports by pressing Ctrl+Alt+O to trigger Optimize Imports. Please carefully follow the setup guide for the codestyle. Afterwards, please run checkstyle locally and fix the issues, commit, and push. |
| - We separated the "Clean up entries" dialog into three tabs for clarity. [#13819](https://github.com/JabRef/jabref/issues/13819) | ||
| - `JabKit`: `--porcelain` does not output any logs to the console anymore. [#14244](https://github.com/JabRef/jabref/pull/14244) | ||
| - <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>L</kbd> now opens the terminal in the active library directory. [#14130](https://github.com/JabRef/jabref/issues/14130) | ||
| - We improved handling of dates. [#14289](https://github.com/JabRef/jabref/pull/14289) |
| private static final Logger LOGGER = LoggerFactory.getLogger(DateEditorViewModel.class); | ||
|
|
||
| private final DateTimeFormatter dateFormatter; | ||
| private static final TemporalAccessor RANGE_SENTINEL = LocalDate.of(1, 1, 1); |
There was a problem hiding this comment.
Comment missing - why this is used, which hese numbers chosen.
| return dateFormatter.parse(text); | ||
| } catch (DateTimeException e) { | ||
| LOGGER.error("Error while parsing date {}", text, e); | ||
| return RANGE_SENTINEL; |
There was a problem hiding this comment.
Whenever the user has an invalid date., the 1.1.1970 is now returned which is wrong
Errors should stay errors. Invalid dates are invalid dates and not suddenly another
|
@Alex1034 You even did not add a test case for the original issue - WHY?
|
|
/block |
|
PR |
|
This pull requests was closed without merging. You have been unassigned from the respective issue #8902. In case you closed the PR for yourself, you can re-open it. Please also check After submission of a pull request in CONTRIBUTING.md. |
Closes #8902
Summary
This pull request adds support for date ranges in BibLaTeX date fields.
Previously, JabRef only supported single dates (e.g.,
2021-05-03).With this change, JabRef now correctly parses and formats date ranges (e.g.,
2020/2021,2015-01-01/2016-12-31) in compliance with ISO 690 and BibLaTeX standards.Steps to test
2020/20212021-05-01/2021-06-30date = {2020/2021}.Additional details
Date.javato normalize and handle start/end dates.DateEditorViewModel.javato correctly format and display date ranges."2010/" → "2010").CHANGELOG.mdunder the [Unreleased] section.Changelog
CHANGELOG.mdappropriately.PR Checklist
Mandatory checks
CHANGELOG.mdin a way that is understandable for the average user (if change is visible to the user)