-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Added a custom Export for academicpages.github.io #14463
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Hey @GreLucie!Thank you for contributing to JabRef! Your help is truly appreciated ❤️ We have automated checks in place, based on which you will soon get feedback if any of them are failing. In a while, maintainers will also review your contribution. Once that happens, you can go through their comments in the "Files changed" tab and act on them, or reply to the conversation if you have further inputs. Please re-check our contribution guide in case of any other doubts related to our contribution workflow. |
jablib/src/main/java/org/jabref/logic/exporter/AcademicPagesExporter.java
Show resolved
Hide resolved
|
|
||
| String content = Files.readString(expectedFile); | ||
|
|
||
| // Verify YAML front matter fields |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please follow the pattern of other tests in that directory, do a full comparison. of the content
CHANGELOG.md
Outdated
| ### Removed | ||
|
|
||
| ## [6.0-alpha.3] – 2025-10-30 | ||
| ## [6.0-alpha.3] – 2025-11-29 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please revert this change
…uits avec le format exigé de academic pages
…r-issue-12727 # Conflicts: # jablib/src/main/java/org/jabref/logic/exporter/AcademicPagesExporter.java
| import org.jabref.model.entry.BibEntry; | ||
| import org.jabref.model.metadata.SelfContainedSaveOrder; | ||
|
|
||
| import org.jetbrains.annotations.NotNull; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use jspecify nonnull
| ### Removed | ||
|
|
||
| ## [6.0-alpha.3] – 2025-11-29 | ||
| ## [6.0-alpha.3] – 2025-10-30 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this some automatic tool that always changes the date?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello, you told me to revert this change so I went back to the unmodified CHANGELOG for now. I know we have to change it eventually but while this PR is just a draft we decided to change it once all the issues have been fixed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can change it at any time - the earlier the better :) -- BUT - do NOT CHANGE RELEASE DATES
Add your change to the "Unreleased" section.
Note: Current diff shows CHANGELOG.md unmodified: https://github.com/JabRef/jabref/pull/14463/files (which is OK at this stage).
| /** | ||
| * Initialize another export format based on templates stored in dir with layoutFile lfFilename. | ||
| * | ||
| */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comment is strange. What is lfFilename? Where does it come from? I think, this is not something a user of the class should know. You can just delete whole JavaDoc comment.
|
|
||
| private static final Logger LOGGER = LoggerFactory.getLogger(AcademicPagesExporter.class); | ||
|
|
||
| private final String lfFileName; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do not abbreviate. Use layoutFileFileName or short layoutFile (because you don't have layoutFileContent.
| */ | ||
| @Override | ||
| public void export(@NonNull final BibDatabaseContext databaseContext, | ||
| final Path file, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are you sure that Path may be null?
Annoate all or nothing.
Proposal: Add @NullMarked to the class and mark only things which might be null - I think, there aren't any
| Files.createDirectories(exportDirectory); | ||
|
|
||
| for (BibEntry entry : entries) { | ||
| if (entry.getType() == null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wait, what? When can this happen?
| List<BibEntry> individual_entry = new ArrayList<>(); | ||
| individual_entry.add(entry); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wait, what? Use List.of(entry) directly as parameter in the next line.
| } | ||
|
|
||
| private static @NonNull Path getPath(BibEntry entry, Path exportDirectory) { | ||
| Replace replace_formatter = new Replace(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why underscores in varable names? In Java, it is camel case.
|
|
||
| private static @NonNull Path getPath(BibEntry entry, Path exportDirectory) { | ||
| Replace replace_formatter = new Replace(); | ||
| replace_formatter.setArgument(" ,-"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thsi is a magic constant - please add a comment why this strange argument.
| Replace replace_formatter = new Replace(); | ||
| replace_formatter.setArgument(" ,-"); | ||
| RemoveLatexCommandsFormatter commands_formatter = new RemoveLatexCommandsFormatter(); | ||
| HTMLChars html_formatter = new HTMLChars(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add all formatters as class variable
| HTMLChars html_formatter = new HTMLChars(); | ||
| String title = entry.getTitle().get(); | ||
| String formatted_title = commands_formatter.format(html_formatter.format(replace_formatter.format(title))); | ||
| SafeFileName safe_formatter = new SafeFileName(); // added custom formatter to remove all characters that are not allowed in filenames |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why? It is obvious - then remove the comment.
| Optional<Month> month = Month.parse(fieldText); | ||
| return month.map(Month::getTwoDigitNumber).orElse("01"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merge this into one line plese.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we adressed all of the requested changes in our last commit. More tests were also added by one of our team members.
…porter.java Co-authored-by: Oliver Kopp <kopp.dev@gmail.com>
koppor
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The exporter should be "intelligent"
Currently, if no PDF exists, it exports
paperurl: 'https://[insert username].github.io/files/[insert filename].pdf'This is wrong - it has to omit paperurl if there is no PDF.
slidesurl has to be omitted in all cases, because there is "no standard" in JabRef for this.
bibtexurl can always be provided. -- Write the BibEntry to a file.
Use following method:
| public @NonNull String getStringRepresentation( |
For InProceedings, the venue has to be read from booktitle. That means: If journal (getFieldOrAlias) is empty, use Booktitleas venue. DO NOT use Unknownleave it empty.
category should also be mapped: InProceedings is conferences, Article is journals, all other can go into manuscripts.
citation needs to be generaed out of the entry preview
Right part at
paperurl is a file next to the markdown file - just copy the first attached file next to it and link it.
--
insert username is not acceptable. Two options:
- Use
userfromorg.jabref.logic.preferences.JabRefCliPreferences#getUserHostInfo- make this method public - Make it configurable in the preferences (for the export for acamdemic pages)
- Ask at each export using a dialog
I think, the first option is best.
you can try out the export for yourself using https://github.com/JabRef/jabref-demonstration-libraries/blob/main/chocolate/Chocolate.bib - it has even attached files.
jablib/src/main/java/org/jabref/logic/exporter/AcademicPagesExporter.java
Outdated
Show resolved
Hide resolved
| * @param databaseContext the database to export from | ||
| * @param file the directory to write to | ||
| * @param entries a list containing all entries that should be exported | ||
| * @param abbreviationRepository the built-in repository |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure why not all comments start at the same column
jablib/src/main/java/org/jabref/logic/exporter/AcademicPagesExporter.java
Outdated
Show resolved
Hide resolved
jablib/src/main/java/org/jabref/logic/exporter/AcademicPagesExporter.java
Outdated
Show resolved
Hide resolved
| } | ||
| } | ||
|
|
||
| private @NonNull Path getPath(BibEntry entry, Path exportDirectory) throws SaveException { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can the other parameters be null? I don't think so.
Just remove @NonNull and annotate the whole class as @NullMarked. - I assume, no parameter maybe null or is there one?
| /** | ||
| * Convert the month name into the corresponding number and return 01 by default | ||
| */ | ||
| public class NumberMonthFormatter implements LayoutFormatter { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think, it should be called MonthNumberFormatter
|
|
||
| @Override | ||
| public String format(String fieldText) { | ||
| return fieldText.replaceAll("[\\\\/:*?\"<>|]", ""); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use org.jabref.logic.util.io.FileUtil#getValidFileName
…porter.java Co-authored-by: Oliver Kopp <kopp.dev@gmail.com>
…porter.java Co-authored-by: Oliver Kopp <kopp.dev@gmail.com>
…porter.java Co-authored-by: Oliver Kopp <kopp.dev@gmail.com>
|
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. |
Closes #12727
This PR is to add a custom exporter for academicpages.github.io by adding the corresponding layouts.
It also implements a way to export multiple files to this format.
Steps to test
When jabref is running, go to file->Export->Export selected entries ( or all entries) and choose "Academic Pages Markdowns" for the export type.
You can then add the markdown file(s) to your academic page to see it on your own page.

More information about academic pages on the page : https://academicpages.github.io/
Mandatory checks
CHANGELOG.mdin a way that is understandable for the average user (if change is visible to the user)