diff --git a/CHANGELOG.md b/CHANGELOG.md index a60c25b248a..24732f17f0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,10 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We improved the Drag and Drop behavior in the "Customize Entry Types" Dialog [#6338](https://github.com/JabRef/jabref/issues/6338) - When determining the URL of an ArXiV eprint, the URL now points to the version [#8149](https://github.com/JabRef/jabref/pull/8149) - We Included all standard fields with citation key when exporting to Old OpenOffice/LibreOffice Calc Format [#8176](https://github.com/JabRef/jabref/pull/8176) +- In case the database is encoded with `UTF8`, the `% Encoding` marker is not written anymore +- The written `.bib` file has the same line endings [#390](https://github.com/koppor/jabref/issues/390) +- The written `.bib` file always has a final line break +- The written `.bib` file keeps the newline separator of the loaded `.bib` file - We present options to manually enter an article or return to the New Entry menu when the fetcher DOI fails to find an entry for an ID [#7870](https://github.com/JabRef/jabref/issues/7870) ### Fixed diff --git a/src/jmh/java/org/jabref/benchmarks/Benchmarks.java b/src/jmh/java/org/jabref/benchmarks/Benchmarks.java index 46ba83b2f89..b0073114ac5 100644 --- a/src/jmh/java/org/jabref/benchmarks/Benchmarks.java +++ b/src/jmh/java/org/jabref/benchmarks/Benchmarks.java @@ -9,6 +9,7 @@ import java.util.stream.Collectors; import org.jabref.gui.Globals; +import org.jabref.logic.exporter.BibWriter; import org.jabref.logic.exporter.BibtexDatabaseWriter; import org.jabref.logic.exporter.SavePreferences; import org.jabref.logic.formatter.bibtexfields.HtmlToLatexFormatter; @@ -17,6 +18,7 @@ import org.jabref.logic.layout.format.HTMLChars; import org.jabref.logic.layout.format.LatexToUnicodeFormatter; import org.jabref.logic.search.SearchQuery; +import org.jabref.logic.util.OS; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; @@ -77,7 +79,8 @@ public void init() throws Exception { private StringWriter getOutputWriter() throws IOException { StringWriter outputWriter = new StringWriter(); - BibtexDatabaseWriter databaseWriter = new BibtexDatabaseWriter(outputWriter, mock(GeneralPreferences.class), mock(SavePreferences.class), new BibEntryTypesManager()); + BibWriter bibWriter = new BibWriter(outputWriter, OS.NEWLINE); + BibtexDatabaseWriter databaseWriter = new BibtexDatabaseWriter(bibWriter, mock(GeneralPreferences.class), mock(SavePreferences.class), new BibEntryTypesManager()); databaseWriter.savePartOfDatabase(new BibDatabaseContext(database, new MetaData()), database.getEntries()); return outputWriter; } diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index 5cfc3e81cf0..74b9c84d3c2 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -22,6 +22,7 @@ import org.jabref.logic.citationkeypattern.CitationKeyGenerator; import org.jabref.logic.exporter.AtomicFileWriter; import org.jabref.logic.exporter.BibDatabaseWriter; +import org.jabref.logic.exporter.BibWriter; import org.jabref.logic.exporter.BibtexDatabaseWriter; import org.jabref.logic.exporter.EmbeddedBibFilePdfExporter; import org.jabref.logic.exporter.Exporter; @@ -531,7 +532,8 @@ private void saveDatabase(BibDatabase newBase, String subName) { GeneralPreferences generalPreferences = preferencesService.getGeneralPreferences(); SavePreferences savePreferences = preferencesService.getSavePreferences(); AtomicFileWriter fileWriter = new AtomicFileWriter(Path.of(subName), generalPreferences.getDefaultEncoding()); - BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter(fileWriter, generalPreferences, savePreferences, Globals.entryTypesManager); + BibWriter bibWriter = new BibWriter(fileWriter, OS.NEWLINE); + BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter(bibWriter, generalPreferences, savePreferences, Globals.entryTypesManager); databaseWriter.saveDatabase(new BibDatabaseContext(newBase)); // Show just a warning message if encoding did not work for all characters: diff --git a/src/main/java/org/jabref/gui/JabRefMain.java b/src/main/java/org/jabref/gui/JabRefMain.java index 6b3090829c9..084356f5fe3 100644 --- a/src/main/java/org/jabref/gui/JabRefMain.java +++ b/src/main/java/org/jabref/gui/JabRefMain.java @@ -25,7 +25,6 @@ import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.remote.client.RemoteClient; -import org.jabref.logic.util.OS; import org.jabref.migrations.PreferencesMigrations; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; @@ -141,10 +140,6 @@ private static void applyPreferences(PreferencesService preferences) { // Initialize protected terms loader Globals.protectedTermsLoader = new ProtectedTermsLoader(preferences.getProtectedTermsPreferences()); - - // Override used newline character with the one stored in the preferences. - // The preferences return the system newline character sequence as default. - OS.NEWLINE = preferences.getNewLineSeparator().toString(); } private static void configureProxy(ProxyPreferences proxyPreferences) { diff --git a/src/main/java/org/jabref/gui/SendAsEMailAction.java b/src/main/java/org/jabref/gui/SendAsEMailAction.java index 7ea52d621f9..6ef1150cbe6 100644 --- a/src/main/java/org/jabref/gui/SendAsEMailAction.java +++ b/src/main/java/org/jabref/gui/SendAsEMailAction.java @@ -15,7 +15,9 @@ import org.jabref.gui.util.BackgroundTask; import org.jabref.logic.bibtex.BibEntryWriter; import org.jabref.logic.bibtex.FieldWriter; +import org.jabref.logic.exporter.BibWriter; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.util.OS; import org.jabref.logic.util.io.FileUtil; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -72,6 +74,7 @@ private String sendEmail() throws Exception { } StringWriter rawEntries = new StringWriter(); + BibWriter bibWriter = new BibWriter(rawEntries, OS.NEWLINE); BibDatabaseContext databaseContext = stateManager.getActiveDatabase().get(); List entries = stateManager.getSelectedEntries(); @@ -80,7 +83,7 @@ private String sendEmail() throws Exception { for (BibEntry entry : entries) { try { - bibtexEntryWriter.write(entry, rawEntries, databaseContext.getMode()); + bibtexEntryWriter.write(entry, bibWriter, databaseContext.getMode()); } catch (IOException e) { LOGGER.warn("Problem creating BibTeX file for mailing.", e); } @@ -104,7 +107,7 @@ private String sendEmail() throws Exception { } } - String mailTo = "?Body=".concat(rawEntries.getBuffer().toString()); + String mailTo = "?Body=".concat(rawEntries.toString()); mailTo = mailTo.concat("&Subject="); mailTo = mailTo.concat(preferencesService.getExternalApplicationsPreferences().getEmailSubject()); for (String path : attachments) { diff --git a/src/main/java/org/jabref/gui/entryeditor/SourceTab.java b/src/main/java/org/jabref/gui/entryeditor/SourceTab.java index 4f8e4d7fcc9..71b742190bf 100644 --- a/src/main/java/org/jabref/gui/entryeditor/SourceTab.java +++ b/src/main/java/org/jabref/gui/entryeditor/SourceTab.java @@ -38,11 +38,13 @@ import org.jabref.logic.bibtex.FieldWriter; import org.jabref.logic.bibtex.FieldWriterPreferences; import org.jabref.logic.bibtex.InvalidFieldValueException; +import org.jabref.logic.exporter.BibWriter; import org.jabref.logic.importer.ImportFormatPreferences; import org.jabref.logic.importer.ParserResult; import org.jabref.logic.importer.fileformat.BibtexParser; import org.jabref.logic.l10n.Localization; import org.jabref.logic.search.SearchQuery; +import org.jabref.logic.util.OS; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; @@ -128,11 +130,11 @@ private void highlightSearchPattern() { } private String getSourceString(BibEntry entry, BibDatabaseMode type, FieldWriterPreferences fieldWriterPreferences) throws IOException { - StringWriter stringWriter = new StringWriter(200); + StringWriter writer = new StringWriter(); + BibWriter bibWriter = new BibWriter(writer, OS.NEWLINE); FieldWriter fieldWriter = FieldWriter.buildIgnoreHashes(fieldWriterPreferences); - new BibEntryWriter(fieldWriter, Globals.entryTypesManager).writeWithoutPrependedNewlines(entry, stringWriter, type); - - return stringWriter.getBuffer().toString(); + new BibEntryWriter(fieldWriter, Globals.entryTypesManager).write(entry, bibWriter, type); + return writer.toString(); } /* Work around for different input methods. diff --git a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java index a85f5acfd66..9757b885615 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java @@ -24,6 +24,7 @@ import org.jabref.logic.autosaveandbackup.AutosaveManager; import org.jabref.logic.autosaveandbackup.BackupManager; import org.jabref.logic.exporter.AtomicFileWriter; +import org.jabref.logic.exporter.BibWriter; import org.jabref.logic.exporter.BibtexDatabaseWriter; import org.jabref.logic.exporter.SaveException; import org.jabref.logic.exporter.SavePreferences; @@ -229,12 +230,14 @@ private boolean saveDatabase(Path file, boolean selectedOnly, Charset encoding, SavePreferences savePreferences = this.preferences.getSavePreferences() .withSaveType(saveType); try (AtomicFileWriter fileWriter = new AtomicFileWriter(file, encoding, savePreferences.shouldMakeBackup())) { - BibtexDatabaseWriter databaseWriter = new BibtexDatabaseWriter(fileWriter, generalPreferences, savePreferences, entryTypesManager); + BibDatabaseContext bibDatabaseContext = libraryTab.getBibDatabaseContext(); + BibWriter bibWriter = new BibWriter(fileWriter, bibDatabaseContext.getDatabase().getNewLineSeparator()); + BibtexDatabaseWriter databaseWriter = new BibtexDatabaseWriter(bibWriter, generalPreferences, savePreferences, entryTypesManager); if (selectedOnly) { - databaseWriter.savePartOfDatabase(libraryTab.getBibDatabaseContext(), libraryTab.getSelectedEntries()); + databaseWriter.savePartOfDatabase(bibDatabaseContext, libraryTab.getSelectedEntries()); } else { - databaseWriter.saveDatabase(libraryTab.getBibDatabaseContext()); + databaseWriter.saveDatabase(bibDatabaseContext); } libraryTab.registerUndoableChanges(databaseWriter.getSaveActionsFieldChanges()); diff --git a/src/main/java/org/jabref/gui/preferences/file/FileTab.fxml b/src/main/java/org/jabref/gui/preferences/file/FileTab.fxml index 742560fb2d3..8cc56872d65 100644 --- a/src/main/java/org/jabref/gui/preferences/file/FileTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/file/FileTab.fxml @@ -31,10 +31,6 @@ toggleGroup="$stringsResolveToggleGroup"/> - -