diff --git a/CHANGELOG.md b/CHANGELOG.md index 369d29a3f24..478f98277fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - Added ISBN integrity checker - Added filter to not show selected integrity checks - Enhance the entry customization dialog to give better visual feedback +- It is now possible to generate a new BIB database from the citations in an OpenOffice/LibreOffice document - The arXiv fetcher now also supports free-text search queries - [#1345](https://github.com/JabRef/jabref/issues/1345) Cleanup ISSN diff --git a/src/main/java/net/sf/jabref/gui/JabRefFrame.java b/src/main/java/net/sf/jabref/gui/JabRefFrame.java index 2de64c99ae2..07d430643bc 100644 --- a/src/main/java/net/sf/jabref/gui/JabRefFrame.java +++ b/src/main/java/net/sf/jabref/gui/JabRefFrame.java @@ -982,7 +982,7 @@ public BasePanel getBasePanelAt(int i) { * */ public List getBasePanelList() { - List returnList = new ArrayList<>(getBasePanelCount()); + List returnList = new ArrayList<>(); for (int i=0; i< getBasePanelCount(); i++) { returnList.add((BasePanel) tabbedPane.getComponentAt(i)); } diff --git a/src/main/java/net/sf/jabref/gui/openoffice/CreationException.java b/src/main/java/net/sf/jabref/gui/openoffice/CreationException.java new file mode 100644 index 00000000000..d92e8b11869 --- /dev/null +++ b/src/main/java/net/sf/jabref/gui/openoffice/CreationException.java @@ -0,0 +1,28 @@ +/* Copyright (C) 2016 JabRef contributors. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +package net.sf.jabref.gui.openoffice; + +/** + * Exception used to indicate that the plugin attempted to set a character format that is + * not defined in the current OpenOffice document. + */ +class CreationException extends Exception { + + public CreationException(String message) { + super(message); + } + +} diff --git a/src/main/java/net/sf/jabref/gui/openoffice/OOBibBase.java b/src/main/java/net/sf/jabref/gui/openoffice/OOBibBase.java index 3ec5e3d9cc6..37138f706a4 100644 --- a/src/main/java/net/sf/jabref/gui/openoffice/OOBibBase.java +++ b/src/main/java/net/sf/jabref/gui/openoffice/OOBibBase.java @@ -17,6 +17,7 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; @@ -57,6 +58,7 @@ import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.entry.BibEntry; import net.sf.jabref.model.entry.FieldName; +import net.sf.jabref.model.entry.IdGenerator; import com.sun.star.awt.Point; import com.sun.star.beans.IllegalTypeException; @@ -67,6 +69,7 @@ import com.sun.star.beans.XPropertyContainer; import com.sun.star.beans.XPropertySet; import com.sun.star.comp.helper.Bootstrap; +import com.sun.star.comp.helper.BootstrapException; import com.sun.star.container.NoSuchElementException; import com.sun.star.container.XEnumeration; import com.sun.star.container.XEnumerationAccess; @@ -149,7 +152,9 @@ class OOBibBase { private static final Log LOGGER = LogFactory.getLog(OOBibBase.class); - public OOBibBase(String pathToOO, boolean atEnd) throws Exception { + public OOBibBase(String pathToOO, boolean atEnd) throws IOException, IllegalAccessException, + InvocationTargetException, BootstrapException, CreationException, UnknownPropertyException, + WrappedTargetException, IndexOutOfBoundsException, NoSuchElementException, NoDocumentException { authorYearTitleList.add(authComp); authorYearTitleList.add(yearComp); authorYearTitleList.add(titleComp); @@ -223,7 +228,9 @@ public void selectDocument() throws UnknownPropertyException, WrappedTargetExcep } - private XDesktop simpleBootstrap(String pathToExecutable) throws Exception { + private XDesktop simpleBootstrap(String pathToExecutable) + throws IOException, IllegalAccessException, InvocationTargetException, BootstrapException, + CreationException { ClassLoader loader = ClassLoader.getSystemClassLoader(); if (loader instanceof URLClassLoader) { @@ -249,13 +256,17 @@ private XDesktop simpleBootstrap(String pathToExecutable) throws Exception { XMultiComponentFactory xServiceManager = xContext.getServiceManager(); //Create the desktop, which is the root frame of the //hierarchy of frames that contain viewable components: - Object desktop = xServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); + Object desktop; + try { + desktop = xServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); + } catch (Exception e) { + throw new CreationException(e.getMessage()); + } XDesktop xD = UnoRuntime.queryInterface(XDesktop.class, desktop); UnoRuntime.queryInterface(XComponentLoader.class, desktop); return xD; - } private List getTextDocuments() throws NoSuchElementException, WrappedTargetException { @@ -311,11 +322,25 @@ public void updateSortedReferenceMarks() throws WrappedTargetException, NoSuchEl * @param withText Indicates whether this should be a normal citation (true) or an empty * (invisible) citation (false). * @param sync Indicates whether the reference list should be refreshed. - * @throws Exception + * @throws IllegalTypeException + * @throws PropertyExistException + * @throws NotRemoveableException + * @throws UnknownPropertyException + * @throws UndefinedCharacterFormatException + * @throws NoSuchElementException + * @throws WrappedTargetException + * @throws IOException + * @throws PropertyVetoException + * @throws CreationException + * @throws BibEntryNotFoundException + * @throws UndefinedParagraphFormatException */ public void insertEntry(List entries, BibDatabase database, List allBases, OOBibStyle style, - boolean inParenthesis, boolean withText, String pageInfo, boolean sync) throws Exception { + boolean inParenthesis, boolean withText, String pageInfo, boolean sync) throws IllegalArgumentException, + UnknownPropertyException, NotRemoveableException, PropertyExistException, IllegalTypeException, + UndefinedCharacterFormatException, WrappedTargetException, NoSuchElementException, PropertyVetoException, + IOException, CreationException, BibEntryNotFoundException, UndefinedParagraphFormatException { try { @@ -395,9 +420,20 @@ public void insertEntry(List entries, BibDatabase database, * @param databases The databases to get entries from. * @param style The bibliography style to use. * @return A list of those referenced BibTeX keys that could not be resolved. - * @throws Exception + * @throws UndefinedCharacterFormatException + * @throws NoSuchElementException + * @throws IllegalArgumentException + * @throws WrappedTargetException + * @throws BibEntryNotFoundException + * @throws CreationException + * @throws IOException + * @throws PropertyVetoException + * @throws UnknownPropertyException */ - public List refreshCiteMarkers(List databases, OOBibStyle style) throws Exception { + public List refreshCiteMarkers(List databases, OOBibStyle style) + throws WrappedTargetException, IllegalArgumentException, NoSuchElementException, + UndefinedCharacterFormatException, UnknownPropertyException, PropertyVetoException, IOException, + CreationException, BibEntryNotFoundException { try { return refreshCiteMarkersInternal(databases, style); } catch (DisposedException ex) { @@ -427,7 +463,10 @@ public List getJabRefReferenceMarks(XNameAccess nameAccess) { return res; } - private List refreshCiteMarkersInternal(List databases, OOBibStyle style) throws Exception { + private List refreshCiteMarkersInternal(List databases, OOBibStyle style) + throws WrappedTargetException, IllegalArgumentException, NoSuchElementException, + UndefinedCharacterFormatException, UnknownPropertyException, PropertyVetoException, IOException, + CreationException, BibEntryNotFoundException { List cited = findCitedKeys(); Map linkSourceBase = new HashMap<>(); @@ -764,7 +803,9 @@ private List getSortedReferenceMarks(final XNameAccess nameAccess) return result; } - public void rebuildBibTextSection(List databases, OOBibStyle style) throws Exception { + public void rebuildBibTextSection(List databases, OOBibStyle style) + throws IOException, NoSuchElementException, WrappedTargetException, IllegalArgumentException, + CreationException, PropertyVetoException, UnknownPropertyException, UndefinedParagraphFormatException { List cited = findCitedKeys(); Map linkSourceBase = new HashMap<>(); Map entries = findCitedEntries(databases, cited, linkSourceBase); // Although entries are redefined without use, this also updates linkSourceBase @@ -995,7 +1036,8 @@ private void insertFullReferenceAtCursor(XTextCursor cursor, Map entries, OOBibStyle style) throws Exception { + private void populateBibTextSection(Map entries, OOBibStyle style) + throws IOException, NoSuchElementException, WrappedTargetException, PropertyVetoException, + UnknownPropertyException, UndefinedParagraphFormatException, IllegalArgumentException, CreationException { XTextSectionsSupplier supp = UnoRuntime.queryInterface(XTextSectionsSupplier.class, mxDoc); XTextSection section = (XTextSection) ((Any) supp.getTextSections().getByName(OOBibBase.BIB_SECTION_NAME)) .getObject(); @@ -1041,8 +1091,14 @@ private void populateBibTextSection(Map entries, OOBibSty insertBookMark(OOBibBase.BIB_SECTION_END_NAME, cursor); } - private XTextContent insertBookMark(String name, XTextCursor position) throws Exception { - Object bookmark = mxDocFactory.createInstance("com.sun.star.text.Bookmark"); + private XTextContent insertBookMark(String name, XTextCursor position) + throws IllegalArgumentException, CreationException { + Object bookmark; + try { + bookmark = mxDocFactory.createInstance("com.sun.star.text.Bookmark"); + } catch (Exception e) { + throw new CreationException(e.getMessage()); + } // name the bookmark XNamed xNamed = UnoRuntime.queryInterface(XNamed.class, bookmark); xNamed.setName(name); @@ -1056,7 +1112,8 @@ private XTextContent insertBookMark(String name, XTextCursor position) throws Ex } private void insertReferenceMark(String name, String citationText, XTextCursor position, boolean withText, - OOBibStyle style) throws Exception { + OOBibStyle style) throws IOException, UnknownPropertyException, WrappedTargetException, + PropertyVetoException, IllegalArgumentException, UndefinedCharacterFormatException, CreationException { // Check if there is "page info" stored for this citation. If so, insert it into // the citation text before inserting the citation: @@ -1068,7 +1125,12 @@ private void insertReferenceMark(String name, String citationText, XTextCursor p citText = citationText; } - Object bookmark = mxDocFactory.createInstance("com.sun.star.text.ReferenceMark"); + Object bookmark; + try { + bookmark = mxDocFactory.createInstance("com.sun.star.text.ReferenceMark"); + } catch (Exception e) { + throw new CreationException(e.getMessage()); + } // Name the reference XNamed xNamed = UnoRuntime.queryInterface(XNamed.class, bookmark); xNamed.setName(name); @@ -1111,7 +1173,8 @@ private void insertReferenceMark(String name, String citationText, XTextCursor p } - private void italicizeOrBold(XTextCursor position, boolean italicize, int start, int end) throws Exception { + private void italicizeOrBold(XTextCursor position, boolean italicize, int start, int end) + throws UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException { XTextRange rng = position.getStart(); XTextCursor cursor = position.getText().createTextCursorByRange(rng); cursor.goRight((short) start, false); @@ -1139,7 +1202,6 @@ private void removeReferenceMark(String name) throws NoSuchElementException, Wra * @return The XTextRange for the bookmark. * @throws WrappedTargetException * @throws NoSuchElementException - * @throws Exception */ private XTextRange getBookmarkRange(String name) throws NoSuchElementException, WrappedTargetException { // query XBookmarksSupplier from document model and get bookmarks collection @@ -1155,7 +1217,10 @@ private XTextRange getBookmarkRange(String name) throws NoSuchElementException, return xFoundBookmark.getAnchor(); } - public void combineCiteMarkers(List databases, OOBibStyle style) throws Exception { + public void combineCiteMarkers(List databases, OOBibStyle style) + throws IOException, WrappedTargetException, NoSuchElementException, IllegalArgumentException, + UndefinedCharacterFormatException, UnknownPropertyException, PropertyVetoException, CreationException, + BibEntryNotFoundException { XReferenceMarksSupplier supplier = UnoRuntime.queryInterface(XReferenceMarksSupplier.class, xCurrentComponent); XNameAccess nameAccess = supplier.getReferenceMarks(); // TODO: doesn't work for citations in footnotes/tables @@ -1296,4 +1361,39 @@ public int hashCode() { } + + public BibDatabase generateDatabase(List databases) + throws NoSuchElementException, WrappedTargetException { + BibDatabase resultDatabase = new BibDatabase(); + List cited = findCitedKeys(); + + // For each cited key + for (String key : cited) { + // Loop through the available databases + for (BibDatabase loopDatabase : databases) { + Optional entry = loopDatabase.getEntryByKey(key); + // If entry found + if (entry.isPresent()) { + BibEntry clonedEntry = (BibEntry) entry.get().clone(); + clonedEntry.setId(IdGenerator.next()); + // Insert a copy of the entry + resultDatabase.insertEntry(clonedEntry); + // Check if the cloned entry has a crossref field + clonedEntry.getFieldOptional(FieldName.CROSSREF).ifPresent(crossref -> { + // If the crossref entry is not already in the database + if (!resultDatabase.getEntryByKey(crossref).isPresent()) { + // Add it if it is in the current database + loopDatabase.getEntryByKey(crossref).ifPresent(resultDatabase::insertEntry); + } + }); + + // Be happy with the first found BibEntry and move on to next key + break; + } + } + } + + return resultDatabase; + } + } diff --git a/src/main/java/net/sf/jabref/gui/openoffice/OpenOfficePanel.java b/src/main/java/net/sf/jabref/gui/openoffice/OpenOfficePanel.java index 7b6a1cfd44e..40df28cb36a 100644 --- a/src/main/java/net/sf/jabref/gui/openoffice/OpenOfficePanel.java +++ b/src/main/java/net/sf/jabref/gui/openoffice/OpenOfficePanel.java @@ -45,6 +45,8 @@ import javax.swing.JRadioButtonMenuItem; import javax.swing.JTextField; +import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.Defaults; import net.sf.jabref.Globals; import net.sf.jabref.gui.BasePanel; import net.sf.jabref.gui.IconTheme; @@ -64,12 +66,19 @@ import net.sf.jabref.logic.openoffice.UndefinedParagraphFormatException; import net.sf.jabref.logic.util.OS; import net.sf.jabref.model.database.BibDatabase; +import net.sf.jabref.model.database.BibDatabaseMode; import net.sf.jabref.model.entry.BibEntry; +import net.sf.jabref.preferences.JabRefPreferences; import com.jgoodies.forms.builder.ButtonBarBuilder; import com.jgoodies.forms.builder.FormBuilder; import com.jgoodies.forms.layout.FormLayout; +import com.sun.star.beans.IllegalTypeException; +import com.sun.star.beans.NotRemoveableException; +import com.sun.star.beans.PropertyExistException; +import com.sun.star.beans.PropertyVetoException; import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.comp.helper.BootstrapException; import com.sun.star.container.NoSuchElementException; import com.sun.star.lang.WrappedTargetException; import org.apache.commons.logging.Log; @@ -97,6 +106,7 @@ public class OpenOfficePanel extends AbstractWorker { private final JButton update; private final JButton merge = new JButton(Localization.lang("Merge citations")); private final JButton manageCitations = new JButton(Localization.lang("Manage citations")); + private final JButton exportCitations = new JButton(Localization.lang("Generate new BIB database")); private final JButton settingsB = new JButton(Localization.lang("Settings")); private final JButton help = new HelpAction(Localization.lang("OpenOffice/LibreOffice integration"), HelpFile.OPENOFFICE_LIBREOFFICE).getHelpButton(); @@ -253,7 +263,8 @@ public void actionPerformed(ActionEvent e) { ex.getBibtexKey()), Localization.lang("Unable to synchronize bibliography"), JOptionPane.ERROR_MESSAGE); LOGGER.debug("BibEntry not found", ex); - } catch (Exception ex) { + } catch (com.sun.star.lang.IllegalArgumentException | PropertyVetoException | UnknownPropertyException | WrappedTargetException | NoSuchElementException | + CreationException ex) { LOGGER.warn("Could not update bibliography", ex); } } @@ -266,7 +277,9 @@ public void actionPerformed(ActionEvent e) { ooBase.combineCiteMarkers(getBaseList(), style); } catch (UndefinedCharacterFormatException ex) { reportUndefinedCharacterFormat(ex); - } catch (Exception ex) { + } catch (com.sun.star.lang.IllegalArgumentException | UnknownPropertyException | PropertyVetoException | + CreationException | NoSuchElementException | WrappedTargetException | IOException | + BibEntryNotFoundException ex) { LOGGER.warn("Problem combining cite markers", ex); } @@ -281,6 +294,8 @@ public void actionPerformed(ActionEvent e) { } }); + exportCitations.addActionListener(event -> exportEntries()); + selectDocument.setEnabled(false); pushEntries.setEnabled(false); pushEntriesInt.setEnabled(false); @@ -289,9 +304,11 @@ public void actionPerformed(ActionEvent e) { update.setEnabled(false); merge.setEnabled(false); manageCitations.setEnabled(false); + exportCitations.setEnabled(false); diag = new JDialog((JFrame) null, "OpenOffice/LibreOffice panel", false); - FormBuilder mainBuilder = FormBuilder.create().layout(new FormLayout("fill:pref:grow", "p,p,p,p,p,p,p,p,p,p")); + FormBuilder mainBuilder = FormBuilder.create() + .layout(new FormLayout("fill:pref:grow", "p,p,p,p,p,p,p,p,p,p,p")); FormBuilder topRowBuilder = FormBuilder.create() .layout(new FormLayout("fill:pref:grow, 1dlu, fill:pref:grow, 1dlu, fill:pref:grow, " @@ -309,7 +326,8 @@ public void actionPerformed(ActionEvent e) { mainBuilder.add(pushEntriesEmpty).xy(1, 6); mainBuilder.add(merge).xy(1, 7); mainBuilder.add(manageCitations).xy(1, 8); - mainBuilder.add(settingsB).xy(1, 9); + mainBuilder.add(exportCitations).xy(1, 9); + mainBuilder.add(settingsB).xy(1, 10); JPanel content = new JPanel(); comp.setContentContainer(content); @@ -322,6 +340,48 @@ public void actionPerformed(ActionEvent e) { } + private void exportEntries() { + try { + if (style == null) { + style = loader.getUsedStyle(); + } else { + style.ensureUpToDate(); + } + + ooBase.updateSortedReferenceMarks(); + + List databases = getBaseList(); + List unresolvedKeys = ooBase.refreshCiteMarkers(databases, style); + BibDatabase newDatabase = ooBase.generateDatabase(databases); + if (!unresolvedKeys.isEmpty()) { + JOptionPane.showMessageDialog(frame, + Localization.lang( + "Your OpenOffice/LibreOffice document references the BibTeX key '%0', which could not be found in your current database.", + unresolvedKeys.get(0)), + Localization.lang("Unable to generate new database"), JOptionPane.ERROR_MESSAGE); + } + + Defaults defaults = new Defaults( + BibDatabaseMode.fromPreference(Globals.prefs.getBoolean(JabRefPreferences.BIBLATEX_DEFAULT_MODE))); + + BibDatabaseContext databaseContext = new BibDatabaseContext(newDatabase, defaults); + this.frame.addTab(databaseContext, true); + + } catch (BibEntryNotFoundException ex) { + JOptionPane.showMessageDialog(frame, + Localization.lang( + "Your OpenOffice/LibreOffice document references the BibTeX key '%0', which could not be found in your current database.", + ex.getBibtexKey()), + Localization.lang("Unable to synchronize bibliography"), JOptionPane.ERROR_MESSAGE); + LOGGER.debug("BibEntry not found", ex); + } catch (com.sun.star.lang.IllegalArgumentException | UnknownPropertyException | PropertyVetoException | + UndefinedCharacterFormatException | NoSuchElementException | WrappedTargetException | IOException | + CreationException e) { + LOGGER.warn("Problem generating new database.", e); + } + + } + private List getBaseList() { List databases = new ArrayList<>(); if (preferences.useAllDatabases()) { @@ -418,6 +478,7 @@ private void connect(boolean auto) { update.setEnabled(true); merge.setEnabled(true); manageCitations.setEnabled(true); + exportCitations.setEnabled(true); } catch (UnsatisfiedLinkError e) { LOGGER.warn("Could not connect to running OpenOffice/LibreOffice", e); @@ -439,7 +500,9 @@ public void run() { try { // Connect: ooBase = new OOBibBase(sOffice, true); - } catch (Exception e) { + } catch (UnknownPropertyException | + CreationException | NoSuchElementException | WrappedTargetException | IOException | + NoDocumentException | BootstrapException | InvocationTargetException | IllegalAccessException e) { ooBase = null; connectException = new IOException(e.getMessage()); } @@ -587,7 +650,10 @@ private void pushEntries(boolean inParenthesisIn, boolean withText, boolean addP reportUndefinedCharacterFormat(ex); } catch (UndefinedParagraphFormatException ex) { reportUndefinedParagraphFormat(ex); - } catch (Exception ex) { + } catch (com.sun.star.lang.IllegalArgumentException | UnknownPropertyException | PropertyVetoException | + CreationException | NoSuchElementException | WrappedTargetException | IOException | + BibEntryNotFoundException | IllegalTypeException | PropertyExistException | + NotRemoveableException ex) { LOGGER.warn("Could not insert entry", ex); } } diff --git a/src/main/java/net/sf/jabref/logic/exporter/OpenDocumentSpreadsheetCreator.java b/src/main/java/net/sf/jabref/logic/exporter/OpenDocumentSpreadsheetCreator.java index 62e4a25df21..08e7a05c6e6 100644 --- a/src/main/java/net/sf/jabref/logic/exporter/OpenDocumentSpreadsheetCreator.java +++ b/src/main/java/net/sf/jabref/logic/exporter/OpenDocumentSpreadsheetCreator.java @@ -65,7 +65,7 @@ public OpenDocumentSpreadsheetCreator() { @Override public void performExport(final BibDatabaseContext databaseContext, final String file, - final Charset encoding, List entries) throws Exception { + final Charset encoding, List entries) throws IOException { Objects.requireNonNull(databaseContext); Objects.requireNonNull(entries); if (!entries.isEmpty()) { // Only export if entries exists @@ -73,7 +73,7 @@ public void performExport(final BibDatabaseContext databaseContext, final String } } - private static void storeOpenDocumentSpreadsheetFile(File file, InputStream source) throws Exception { + private static void storeOpenDocumentSpreadsheetFile(File file, InputStream source) throws IOException { try (ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)))) { @@ -109,7 +109,7 @@ private static void storeOpenDocumentSpreadsheetFile(File file, InputStream sour } private static void exportOpenDocumentSpreadsheet(File file, BibDatabase database, List entries) - throws Exception { + throws IOException { // First store the xml formatted content to a temporary file. File tmpFile = File.createTempFile("opendocument", null); diff --git a/src/main/java/net/sf/jabref/logic/openoffice/OOUtil.java b/src/main/java/net/sf/jabref/logic/openoffice/OOUtil.java index bd1cf7b0735..fc004f05911 100644 --- a/src/main/java/net/sf/jabref/logic/openoffice/OOUtil.java +++ b/src/main/java/net/sf/jabref/logic/openoffice/OOUtil.java @@ -80,7 +80,6 @@ private OOUtil() { * @param entry The entry to insert. * @param database The database the entry belongs to. * @param uniquefier Uniqiefier letter, if any, to append to the entry's year. - * @throws Exception */ public static void insertFullReferenceAtCurrentLocation(XText text, XTextCursor cursor, Layout layout, String parStyle, BibEntry entry, BibDatabase database, String uniquefier) diff --git a/src/main/resources/l10n/JabRef_da.properties b/src/main/resources/l10n/JabRef_da.properties index d70e4edfe93..148a4913f33 100644 --- a/src/main/resources/l10n/JabRef_da.properties +++ b/src/main/resources/l10n/JabRef_da.properties @@ -1714,3 +1714,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_de.properties b/src/main/resources/l10n/JabRef_de.properties index 2ac911b35b3..fde262fd28d 100644 --- a/src/main/resources/l10n/JabRef_de.properties +++ b/src/main/resources/l10n/JabRef_de.properties @@ -2433,3 +2433,6 @@ Error_occured_while_executing_the_command_\"%0\".=Während_der_Ausführung_des_B Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index b5138fe4b53..675679a810d 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2273,6 +2273,9 @@ Latest_version=Latest_version Online_help_forum=Online_help_forum Custom=Custom +Generate_new_BIB_database=Generate_new_BIB_database +Unable_to_generate_new_database=Unable_to_generate_new_database + Open_console=Open_console Use_default_terminal_emulator=Use_default_terminal_emulator Execute_command=Execute_command diff --git a/src/main/resources/l10n/JabRef_es.properties b/src/main/resources/l10n/JabRef_es.properties index 92ae1e93eb9..850379c8b97 100644 --- a/src/main/resources/l10n/JabRef_es.properties +++ b/src/main/resources/l10n/JabRef_es.properties @@ -1616,3 +1616,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_fa.properties b/src/main/resources/l10n/JabRef_fa.properties index ad4dab3ea1e..0375d0eff52 100644 --- a/src/main/resources/l10n/JabRef_fa.properties +++ b/src/main/resources/l10n/JabRef_fa.properties @@ -2402,3 +2402,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_fr.properties b/src/main/resources/l10n/JabRef_fr.properties index 6ba80289a3e..9b7e8c2b4d5 100644 --- a/src/main/resources/l10n/JabRef_fr.properties +++ b/src/main/resources/l10n/JabRef_fr.properties @@ -1660,3 +1660,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_in.properties b/src/main/resources/l10n/JabRef_in.properties index d2fe693ef80..7c958611dff 100644 --- a/src/main/resources/l10n/JabRef_in.properties +++ b/src/main/resources/l10n/JabRef_in.properties @@ -1635,3 +1635,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_it.properties b/src/main/resources/l10n/JabRef_it.properties index 09e11ff9ab6..30eb2afa91b 100644 --- a/src/main/resources/l10n/JabRef_it.properties +++ b/src/main/resources/l10n/JabRef_it.properties @@ -1735,3 +1735,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_ja.properties b/src/main/resources/l10n/JabRef_ja.properties index 9a04234b800..552230c3369 100644 --- a/src/main/resources/l10n/JabRef_ja.properties +++ b/src/main/resources/l10n/JabRef_ja.properties @@ -2380,3 +2380,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_nl.properties b/src/main/resources/l10n/JabRef_nl.properties index 29a7ebc15fd..aac259c5dab 100644 --- a/src/main/resources/l10n/JabRef_nl.properties +++ b/src/main/resources/l10n/JabRef_nl.properties @@ -2411,3 +2411,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_no.properties b/src/main/resources/l10n/JabRef_no.properties index 6bb2693fbfd..fba991dd43b 100644 --- a/src/main/resources/l10n/JabRef_no.properties +++ b/src/main/resources/l10n/JabRef_no.properties @@ -2807,3 +2807,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_pt_BR.properties b/src/main/resources/l10n/JabRef_pt_BR.properties index 8e2d9de052e..6a37e2519fe 100644 --- a/src/main/resources/l10n/JabRef_pt_BR.properties +++ b/src/main/resources/l10n/JabRef_pt_BR.properties @@ -1629,3 +1629,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_ru.properties b/src/main/resources/l10n/JabRef_ru.properties index edfdc07b6d9..a873af5a349 100644 --- a/src/main/resources/l10n/JabRef_ru.properties +++ b/src/main/resources/l10n/JabRef_ru.properties @@ -2379,3 +2379,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_sv.properties b/src/main/resources/l10n/JabRef_sv.properties index 6f02c2e9313..48bb5e6a5cf 100644 --- a/src/main/resources/l10n/JabRef_sv.properties +++ b/src/main/resources/l10n/JabRef_sv.properties @@ -1572,3 +1572,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_tr.properties b/src/main/resources/l10n/JabRef_tr.properties index 4d7fb068b00..46c6a23b39a 100644 --- a/src/main/resources/l10n/JabRef_tr.properties +++ b/src/main/resources/l10n/JabRef_tr.properties @@ -1648,3 +1648,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_vi.properties b/src/main/resources/l10n/JabRef_vi.properties index 56648ee1c6a..2382684e550 100644 --- a/src/main/resources/l10n/JabRef_vi.properties +++ b/src/main/resources/l10n/JabRef_vi.properties @@ -2403,3 +2403,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database= diff --git a/src/main/resources/l10n/JabRef_zh.properties b/src/main/resources/l10n/JabRef_zh.properties index d88f6075e35..9715b5c7079 100644 --- a/src/main/resources/l10n/JabRef_zh.properties +++ b/src/main/resources/l10n/JabRef_zh.properties @@ -1642,3 +1642,6 @@ Executing_command_\"%0\"...= Error_occured_while_executing_the_command_\"%0\".= Reformat_ISSN= + +Generate_new_BIB_database= +Unable_to_generate_new_database=