+2.11 beta 2
+ - Feature: Option to clean URLs generated by Google (patch #204)
+ - Fix for bug #1272: JabRef now launches on Mac OS X
+ - Updated DBLPfetcher to new DBLP functionality
+ - Feature: Ability to reorder the panels in the side pane
+ - Feature: Option to save selected entries as plain BibTex without JabRef metadata
2.11 beta
- Some UI updates (mainly removing unnecessary boundaries)
- Feature: Gridlines are now optional (and disabled by default)
## Understanding the basics
Not sure what a pull request is, or how to submit one? Take a look at GitHub's excellent [help documentation] first.
+We also have [guidelines for setting up a local workspace](https://github.com/JabRef/jabref/wiki/Guidelines-for-setting-up-a-local-workspace).
+
## Add your change to the CHANGELOG
You should edit the [CHANGELOG](CHANGELOG) located in the root directory of the JabRef source.
-# JabRef version 2.11 beta
+# JabRef version 2.11 beta 2
This version is a beta version. Features may not work as expected.
## Release Process
-Requires [NSIS](http://nsis.sourceforge.net) with the [WinShell plug-in](http://nsis.sourceforge.net/WinShell_plug-in).
+Requires
+ * [launch4j](http://launch4j.sourceforge.net/)
+ * [NSIS](http://nsis.sourceforge.net) with the [WinShell plug-in](http://nsis.sourceforge.net/WinShell_plug-in).
Replace `ANY_ANT_TARGET` with the Ant Target of your choice, and the system will build your binaries.
To get a list of all targets, use `gradlew tasks`.
}
}
-version = "2.11b"
+version = "2.11b2"
repositories {
mavenCentral()
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<!-- some version information -->
- <property name="jabref.version" value="2.11b" />
- <property name="jabref.version.full" value="2.11.1.0" /> <!-- a version number with 4 places. Required by launch4j -->
+ <property name="jabref.version" value="2.11b2" />
+ <property name="jabref.version.full" value="2.11.2.0" /> <!-- a version number with 4 places. Required by launch4j -->
<property name="jabref.year" value="2015" />
<property name="jabref.placeholder.version" value="@version@" />
<property name="jabref.placeholder.year" value="@year@" />
import net.sf.jabref.export.SaveDatabaseAction;
import net.sf.jabref.export.SaveException;
import net.sf.jabref.export.SaveSession;
+import net.sf.jabref.export.FileActions.DatabaseSaveType;
import net.sf.jabref.export.layout.Layout;
import net.sf.jabref.export.layout.LayoutHelper;
import net.sf.jabref.external.AttachFileAction;
}
});
- actions.put("saveSelectedAs", new BaseAction () {
- public void action() throws Throwable {
-
- String chosenFile = FileDialogs.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
- JFileChooser.SAVE_DIALOG, false);
- if (chosenFile != null) {
- File expFile = new File(chosenFile);
- if (!expFile.exists() ||
- (JOptionPane.showConfirmDialog
- (frame, "'"+expFile.getName()+"' "+
- Globals.lang("exists. Overwrite file?"),
- Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
- == JOptionPane.OK_OPTION)) {
-
- saveDatabase(expFile, true, Globals.prefs.get("defaultEncoding"));
- //runCommand("save");
- frame.getFileHistory().newFile(expFile.getPath());
- frame.output(Globals.lang("Saved selected to")+" '"
- +expFile.getPath()+"'.");
- }
- }
- }
- });
-
+ actions.put("saveSelectedAs", new SaveSelectedAction(FileActions.DatabaseSaveType.DEFAULT));
+
+ actions.put("saveSelectedAsPlain", new SaveSelectedAction(FileActions.DatabaseSaveType.PLAIN_BIBTEX));
+
// The action for copying selected entries.
actions.put("copy", new BaseAction() {
public void action() {
//}).start();
}
- private boolean saveDatabase(File file, boolean selectedOnly, String encoding) throws SaveException {
+ private boolean saveDatabase(File file, boolean selectedOnly, String encoding, FileActions.DatabaseSaveType saveType) throws SaveException {
SaveSession session;
frame.block();
try {
Globals.prefs, false, false, encoding, false);
else
session = FileActions.savePartOfDatabase(database, metaData, file,
- Globals.prefs, mainTable.getSelectedEntries(), encoding);
+ Globals.prefs, mainTable.getSelectedEntries(), encoding, saveType);
} catch (UnsupportedCharsetException ex2) {
JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file. "
JOptionPane.QUESTION_MESSAGE, null, Globals.ENCODINGS, encoding);
if (choice != null) {
String newEncoding = (String)choice;
- return saveDatabase(file, selectedOnly, newEncoding);
+ return saveDatabase(file, selectedOnly, newEncoding, saveType);
} else
commit = false;
} else if (answer == JOptionPane.CANCEL_OPTION)
frame.forward.setEnabled(nextEntries.size() > 0);
}
-
+ private class SaveSelectedAction extends BaseAction {
+
+ private DatabaseSaveType saveType;
+
+ public SaveSelectedAction(DatabaseSaveType saveType) {
+ this.saveType = saveType;
+ }
+
+ public void action() throws Throwable {
+
+ String chosenFile = FileDialogs.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
+ JFileChooser.SAVE_DIALOG, false);
+ if (chosenFile != null) {
+ File expFile = new File(chosenFile);
+ if (!expFile.exists() ||
+ (JOptionPane.showConfirmDialog
+ (frame, "'"+expFile.getName()+"' "+
+ Globals.lang("exists. Overwrite file?"),
+ Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
+ == JOptionPane.OK_OPTION)) {
+
+ saveDatabase(expFile, true, Globals.prefs.get("defaultEncoding"), saveType);
+ //runCommand("save");
+ frame.getFileHistory().newFile(expFile.getPath());
+ frame.output(Globals.lang("Saved selected to")+" '"
+ +expFile.getPath()+"'.");
+ }
+ }
+ }
+ }
}
import net.sf.jabref.util.CaseChangeMenu;
import net.sf.jabref.util.NameListNormalizer;
+import net.sf.jabref.util.GoogleUrlCleaner;
public class FieldTextMenu implements MouseListener
{
inputMenu.add( copyAct ) ;
inputMenu.addSeparator();
inputMenu.add(new ReplaceAction());
+ inputMenu.add(new UrlAction());
+
if (myFieldName.getTextComponent() instanceof JTextComponent)
inputMenu.add(new CaseChangeMenu((JTextComponent) myFieldName.getTextComponent()));
}
}
}
+ class UrlAction extends BasicAction{
+ public UrlAction(){
+ super("Clean Google URL");
+ putValue(SHORT_DESCRIPTION, Globals.lang("If possible, clean URL that Google search returned"));
+ }
+ public void actionPerformed(ActionEvent evt){
+ if (myFieldName.getText().equals("")){
+ return;
+ }
+ String input = myFieldName.getText();
+ myFieldName.setText(GoogleUrlCleaner.cleanUrl(input));
+ }
+ }
}
Globals.NEWLINE = Globals.prefs.get(JabRefPreferences.NEWLINE);
Globals.NEWLINE_LENGTH = Globals.NEWLINE.length();
-
- // Set application user model id so that pinning JabRef to the Win7/8 taskbar works
- // Based on http://stackoverflow.com/a/1928830
- setCurrentProcessExplicitAppUserModelID("JabRef."+Globals.VERSION);
- //System.out.println(getCurrentProcessExplicitAppUserModelID());
-
+ if (Globals.ON_WIN) {
+ // Set application user model id so that pinning JabRef to the Win7/8 taskbar works
+ // Based on http://stackoverflow.com/a/1928830
+ setCurrentProcessExplicitAppUserModelID("JabRef." + Globals.VERSION);
+ //System.out.println(getCurrentProcessExplicitAppUserModelID());
+ }
+
openWindow(processArguments(args, true));
}
static
{
- Native.register("shell32");
+ if (Globals.ON_WIN) {
+ Native.register("shell32");
+ }
}
"Save selected as ...",
Globals.lang("Save selected as ..."),
GUIGlobals.getIconUrl("saveAs")),
+ saveSelectedAsPlain = new GeneralAction("saveSelectedAsPlain",
+ "Save selected as plain BibTeX ...",
+ Globals.lang("Save selected as plain BibTeX ..."),
+ GUIGlobals.getIconUrl("saveAs")),
exportAll = ExportFormats.getExportAction(this, false),
exportSelected = ExportFormats.getExportAction(this, true),
importCurrent = ImportFormats.getImportAction(this, false),
file.add(saveAs);
file.add(saveAll);
file.add(saveSelectedAs);
+ file.add(saveSelectedAsPlain);
file.addSeparator();
//file.add(importMenu);
//file.add(importNewMenu);
-/* Copyright (C) 2003-2012 JabRef contributors.
+/* Copyright (C) 2003-2015 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
defaults.put(NEWLINE, System.getProperty("line.separator"));
+ defaults.put("sidePaneComponentNames", "");
+ defaults.put("sidePaneComponentPreferredPositions", "");
+
defaults.put("columnNames", "entrytype;author;title;year;journal;owner;timestamp;bibtexkey");
defaults.put("columnWidths", "75;280;400;60;100;100;100;100");
defaults.put(PersistenceTableColumnListener.ACTIVATE_PREF_KEY,
-/* Copyright (C) 2003-2011 JabRef contributors.
+/* Copyright (C) 2003-2015 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
public abstract class SidePaneComponent extends SimpleInternalFrame {
protected JButton close = new JButton(GUIGlobals.getImage("close"));
+ protected JButton up = new JButton(GUIGlobals.getImage("up"));
+ protected JButton down = new JButton(GUIGlobals.getImage("down"));
protected boolean visible = false;
close.setMargin(new Insets(0, 0, 0, 0));
// tlb.setOpaque(false);
close.setBorder(null);
+ up.setMargin(new Insets(0, 0, 0, 0));
+ down.setMargin(new Insets(0, 0, 0, 0));
+ up.setBorder(null);
+ down.setBorder(null);
+ up.addActionListener(new UpButtonListener());
+ down.addActionListener(new DownButtonListener());
tlb.setFloatable(false);
+ tlb.add(up);
+ tlb.add(down);
tlb.add(close);
close.addActionListener(new CloseButtonListener());
setToolBar(tlb);
public void hideAway() {
manager.hideComponent(this);
}
+
+ public void moveUp() {
+ manager.moveUp(this);
+ }
+
+ public void moveDown() {
+ manager.moveDown(this);
+ }
/**
* Used by SidePaneManager only, to keep track of visibility.
hideAway();
}
}
+
+ class UpButtonListener implements ActionListener {
+ public void actionPerformed(ActionEvent e) {
+ moveUp();
+ }
+ }
+
+ class DownButtonListener implements ActionListener {
+ public void actionPerformed(ActionEvent e) {
+ moveDown();
+ }
+ }
}
-/* Copyright (C) 2003-2011 JabRef contributors.
+/* Copyright (C) 2003-2015 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
SidePane sidep;
Map<String, SidePaneComponent> components = new LinkedHashMap<String, SidePaneComponent>();
+ Map<SidePaneComponent, String> componentNames = new HashMap<SidePaneComponent, String>();
List<SidePaneComponent> visible = new LinkedList<SidePaneComponent>();
public synchronized void register(String name, SidePaneComponent comp) {
components.put(name, comp);
+ componentNames.put(comp, name);
}
public synchronized void registerAndShow(String name, SidePaneComponent comp) {
if (!visible.contains(component)) {
// Put the new component at the top of the group
visible.add(0, component);
+
+ // Sort the visible components by their preferred position
+ Collections.sort(visible, new PreferredIndexSort());
+
updateView();
component.componentOpening();
}
public SidePaneComponent getComponent(String name) {
return components.get(name);
}
+
+ public String getComponentName(SidePaneComponent comp) {
+ return componentNames.get(comp);
+ }
public synchronized void hideComponent(SidePaneComponent comp) {
if (visible.contains(comp)) {
}
}
+ private Map<String, Integer> getPreferredPositions() {
+ Map<String, Integer> preferredPositions = new HashMap<String, Integer>();
+
+ String[] componentNames = Globals.prefs.getStringArray("sidePaneComponentNames");
+ String[] componentPositions = Globals.prefs.getStringArray("sidePaneComponentPreferredPositions");
+
+ for (int i = 0; i < componentNames.length; ++i) {
+ try {
+ preferredPositions.put(componentNames[i], Integer.parseInt(componentPositions[i]));
+ }
+ catch (NumberFormatException e) {
+ // Invalid integer format, ignore
+ }
+ }
+
+ return preferredPositions;
+ }
+
+ private void updatePreferredPositions() {
+ Map<String, Integer> preferredPositions = getPreferredPositions();
+
+ // Update the preferred positions of all visible components
+ int index = 0;
+ for (SidePaneComponent comp : visible) {
+ String componentName = getComponentName(comp);
+ preferredPositions.put(componentName, index++);
+ }
+
+ // Split the map into a pair of parallel String arrays suitable for storage
+ String[] componentNames = preferredPositions.keySet().toArray(new String[0]);
+ String[] componentPositions = new String[preferredPositions.size()];
+
+ for (int i = 0; i < componentNames.length; ++i) {
+ componentPositions[i] = preferredPositions.get(componentNames[i]).toString();
+ }
+
+ Globals.prefs.putStringArray("sidePaneComponentNames", componentNames);
+ Globals.prefs.putStringArray("sidePaneComponentPreferredPositions", componentPositions);
+ }
+
+ // Helper class for sorting visible componenys based on their preferred position
+ private class PreferredIndexSort implements Comparator<SidePaneComponent> {
+ private Map<String, Integer> preferredPositions;
+
+ public PreferredIndexSort() {
+ preferredPositions = getPreferredPositions();
+ }
+
+ @Override
+ public int compare(SidePaneComponent comp1, SidePaneComponent comp2) {
+ String comp1Name = getComponentName(comp1);
+ String comp2Name = getComponentName(comp2);
+
+ // Manually provide default values, since getOrDefault() doesn't exist prior to Java 8
+ int pos1 = (preferredPositions.containsKey(comp1Name) ? preferredPositions.get(comp1Name) : 0);
+ int pos2 = (preferredPositions.containsKey(comp2Name) ? preferredPositions.get(comp2Name) : 0);
+
+ return Integer.compare(pos1, pos2);
+ }
+ }
+
+ public synchronized void moveUp(SidePaneComponent comp) {
+ if (visible.contains(comp)) {
+ int currIndex = visible.indexOf(comp);
+ if (currIndex > 0) {
+ int newIndex = currIndex - 1;
+ visible.remove(currIndex);
+ visible.add(newIndex, comp);
+
+ updatePreferredPositions();
+ updateView();
+ }
+ }
+ }
+
+ public synchronized void moveDown(SidePaneComponent comp) {
+ if (visible.contains(comp)) {
+ int currIndex = visible.indexOf(comp);
+ if (currIndex < (visible.size() - 1)) {
+ int newIndex = currIndex + 1;
+ visible.remove(currIndex);
+ visible.add(newIndex, comp);
+
+ updatePreferredPositions();
+ updateView();
+ }
+ }
+ }
+
public synchronized void unregisterComponent(String name) {
+ componentNames.remove(components.get(name));
components.remove(name);
}
import ca.odell.glazedlists.SortedList;
public class FileActions {
-
+
+ public enum DatabaseSaveType {
+ DEFAULT, PLAIN_BIBTEX
+ }
+
private static Pattern refPat = Pattern.compile("(#[A-Za-z]+#)"); // Used to detect string references in strings
private static BibtexString.Type previousStringType;
* @return A List containing warnings, if any.
*/
public static SaveSession savePartOfDatabase(BibtexDatabase database, MetaData metaData,
- File file, JabRefPreferences prefs, BibtexEntry[] bes, String encoding) throws SaveException {
+ File file, JabRefPreferences prefs, BibtexEntry[] bes, String encoding, DatabaseSaveType saveType) throws SaveException {
TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>(); // Map
// to
// Define our data stream.
VerifyingWriter fw = session.getWriter();
- // Write signature.
- writeBibFileHeader(fw, encoding);
-
+ if (saveType != DatabaseSaveType.PLAIN_BIBTEX) {
+ // Write signature.
+ writeBibFileHeader(fw, encoding);
+ }
+
// Write preamble if there is one.
writePreamble(fw, database.getPreamble());
}
// Write meta data.
- if (metaData != null) {
+ if (saveType != DatabaseSaveType.PLAIN_BIBTEX && metaData != null) {
metaData.writeMetaData(fw);
}
Globals.prefs, false, false, encoding, false);
else
session = FileActions.savePartOfDatabase(panel.database(), panel.metaData(), file,
- Globals.prefs, panel.getSelectedEntries(), encoding);
+ Globals.prefs, panel.getSelectedEntries(), encoding, FileActions.DatabaseSaveType.DEFAULT);
} catch (UnsupportedCharsetException ex2) {
JOptionPane.showMessageDialog(frame, Globals.lang("Could not save file. "
JPanel message = new JPanel();
DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout("left:pref", ""), message);
- b.append(new JLabel("<html>" + Globals.lang("This database was written using an older version of JabRef.") + "<br>" + Globals.lang("The current version features a new way of handling links to external files.<br>"
- + "To take advantage of this, your links must be changed into the new format, and<br>"
- + "JabRef must be configured to show the new links.") + "<p>" + Globals.lang("Do you want JabRef to do the following operations?") + "</html>"));
+ // Keep the formatting of these lines. Otherwise, strings have to be translated again.
+ // See updated JabRef_en.properties modifications by python syncLang.py -s -u
+ b.append(new JLabel("<html>" + Globals.lang("This database was written using an older version of JabRef.") + "<br>"
+ + Globals.lang("The current version features a new way of handling links to external files.<br>To take advantage of this, your links must be changed into the new format, and<br>JabRef must be configured to show the new links.") + "<p>"
+ + Globals.lang("Do you want JabRef to do the following operations?") + "</html>"));
b.nextLine();
if (offerChangeSettings) {
b.append(changeSettings);
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
import javax.swing.JPanel;
import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.DuplicateCheck;
import net.sf.jabref.GUIGlobals;
import net.sf.jabref.OutputPrinter;
public boolean processQuery(String query, ImportInspector inspector,
OutputPrinter status) {
+ final HashMap<String, Boolean> bibentryKnown = new HashMap<String, Boolean>();
+
boolean res = false;
this.query = query;
//System.out.println(page);
String[] lines = page.split("\n");
List<String> bibtexUrlList = new ArrayList<String>();
- for(String line : lines) {
+ for(final String line : lines) {
if( line.startsWith("\"url\"") ) {
String addr = line.replace("\"url\":\"", "");
addr = addr.substring(0, addr.length()-2);
}
+ // we save the duplicate check threshold
+ // we need to overcome the "smart" approach of this heuristic
+ // and we will set it back afterwards, so maybe someone is happy again
+ double saveThreshold = DuplicateCheck.duplicateThreshold;
+ DuplicateCheck.duplicateThreshold = Double.MAX_VALUE;
+
+ // 2014-11-08
+ // DBLP now shows the BibTeX entry using ugly HTML entities
+ // but they also offer the download of a bib file
+ // we find this in the page which we get from "url"
+ // and this bib file is then in "biburl"
+
int count = 1;
for(String urlStr : bibtexUrlList) {
if( ! shouldContinue ) {
}
final URL bibUrl = new URL(urlStr);
- String bibtexPage = readFromURL(bibUrl);
- //System.out.println(bibtexPage);
- List<BibtexEntry> bibtexList = helper.getBibTexFromPage(bibtexPage);
+ final String bibtexHTMLPage = readFromURL(bibUrl);
+
+ final String[] htmlLines = bibtexHTMLPage.split("\n");
+
+
+ for(final String line : htmlLines) {
+ if( line.contains("biburl") ) {
+ int sidx = line.indexOf("{");
+ int eidx = line.indexOf("}");
+ // now we take everything within the curley braces
+ String bibtexUrl = line.substring(sidx+1, eidx);
+
+ // we do not access dblp.uni-trier.de as they will complain
+ bibtexUrl = bibtexUrl.replace("dblp.uni-trier.de", "www.dblp.org");
- for(BibtexEntry bibtexEntry : bibtexList ) {
- inspector.addEntry(bibtexEntry);
- if( ! shouldContinue ) {
- break;
+ final URL bibFileURL = new URL(bibtexUrl);
+ //System.out.println("URL:|"+bibtexUrl+"|");
+ final String bibtexPage = readFromURL(bibFileURL);
+
+ Collection<BibtexEntry> bibtexEntries = BibtexParser.fromString(bibtexPage);
+
+ for(BibtexEntry be : bibtexEntries) {
+
+ if( ! bibentryKnown.containsKey( be.getCiteKey() ) ) {
+
+ inspector.addEntry(be);
+ bibentryKnown.put(be.getCiteKey(), true);
+ }
+
+ }
}
}
- inspector.setProgress(count, bibtexUrlList.size());
+
+ inspector.setProgress(count, bibtexUrlList.size());
count++;
}
+ DuplicateCheck.duplicateThreshold = saveThreshold;
+
// everything went smooth
res = true;
endIdx);
entry1 = cleanEntry(entry1);
bibtexList.add(BibtexParser.singleFromString(entry1));
- //System.out.println("'" + entry1 + "'");
+ // System.out.println("'" + entry1 + "'");
// let's see whether there is another entry (crossref)
tmpStr = tmpStr
return bibtexList;
}
+
+
private String cleanEntry(final String bibEntry) {
- return bibEntry.replaceFirst("<a href=\".*\">DBLP</a>", "DBLP");
+ return bibEntry.replaceFirst("<a href=\".*\">DBLP</a>", "DBLP");
}
}
--- /dev/null
+/* Copyright (C) 2003-2013 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.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLDecoder;
+
+/**
+ * Class containing method(s) for cleaning URL returned by Google search.
+ * E.g. If you search for the "The String-to-String Correction Problem", Google
+ * will return a list of web pages associated with that text. If you copy any
+ * link that search returned, you will have access to the link "enriched"
+ * with many meta data.
+ * E.g. instead link http://dl.acm.org/citation.cfm?id=321811
+ * in your clipboard you will have this link:
+ * https://www.google.hr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC8QFjAA&url=http%3A%2F%2Fdl.acm.org%2Fcitation.cfm%3Fid%3D321811&ei=L2_RUcj6HsfEswa7joGwBw&usg=AFQjCNEBJPUimu-bAns6lSLe-kszz4AiGA&sig2=tj9c5x62ioFHkQTKfwkj0g&bvm=bv.48572450,d.Yms
+ *
+ * Using methods of this class, "dirty" link will be cleaned.
+ *
+ * Created by Krunoslav Zubrinic, July 2013.
+ */
+public class GoogleUrlCleaner {
+
+/*
+ public static void main(String[] args) {
+ System.out.println(cleanUrl("https://www.google.hr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC0QFjAA&url=http%3A%2F%2Fdl.acm.org%2Fcitation.cfm%3Fid%3D321811&ei=gHDRUa-IKobotQbMy4GAAg&usg=AFQjCNEBJPUimu-bAns6lSLe-kszz4AiGA&sig2=DotF0pIZD8OhjDcSHPlBbQ"));
+ System.out.println(cleanUrl("http://dl.acm.org/citation.cfm?id=321811"));
+ System.out.println(cleanUrl("test text"));
+ System.out.println(cleanUrl(" "));
+ System.out.println(cleanUrl(""));
+ System.out.println(cleanUrl(null));
+ }
+*/
+
+ // clean Google URL
+ public static String cleanUrl(String dirty) {
+ if (dirty==null || dirty.length()==0)
+ return dirty;
+ try{
+ URL u = new URL(dirty);
+ // read URL parameters
+ String query = u.getQuery();
+ // if there is no parameters
+ if (query==null)
+ return dirty;
+ // split parameters
+ String[] pairs = query.split("&");
+ if (pairs==null)
+ return dirty;
+ for (String pair : pairs) {
+ int idx = pair.indexOf("=");
+ // "clean" url is decoded value of "url" parameter
+ if (pair.substring(0, idx).equals("url"))
+ return URLDecoder.decode(pair.substring(idx + 1), "UTF-8");
+ }
+ }
+ catch(MalformedURLException e){
+ return dirty;
+ }
+ catch(UnsupportedEncodingException e){
+ return dirty;
+ }
+ return dirty;
+ }
+
+}
Nathan Dunn,
E. Hakan Duran,
Brian Van Essen,
+ Michael Falkenthal,
Alexis Gallagher,
David Gleich,
Eduardo Roberto Greco,
Ambrogio Oliva,
Brian Quistorff,
Stephan Rave,
+ Adam Rehn,
John Relph,
Hannes Restel,
Moritz Ringler,
Mattias Ulbrich,
David Weitzman,
Seb Wills,
- John Zedlewski</p>
+ John Zedlewski,
+ Krunoslav Zubrinic</p>
<h2>Thanks to:</h2>
Nathan Dunn,
E. Hakan Duran,
Brian Van Essen,
+ Michael Falkenthal,
Alexis Gallagher,
David Gleich,
Eduardo Roberto Greco,
Ambrogio Oliva,
Brian Quistorff,
Stephan Rave,
+ Adam Rehn,
John Relph,
Hannes Restel,
Moritz Ringler,
Mattias Ulbrich,
David Weitzman,
Seb Wills,
- John Zedlewski</p>
+ John Zedlewski,
+ Krunoslav Zubrinic</p>
<h2>Tak til:</h2>
Nathan Dunn,
E. Hakan Duran,
Brian Van Essen,
+ Michael Falkenthal,
Alexis Gallagher,
David Gleich,
Eduardo Roberto Greco,
Ambrogio Oliva,
Brian Quistorff,
Stephan Rave,
+ Adam Rehn,
John Relph,
Hannes Restel,
Moritz Ringler,
Mattias Ulbrich,
David Weitzman,
Seb Wills,
- John Zedlewski</p>
+ John Zedlewski,
+ Krunoslav Zubrinic</p>
<h2>Dank an:</h2>
Nathan Dunn,
E. Hakan Duran,
Brian Van Essen,
+ Michael Falkenthal,
Alexis Gallagher,
David Gleich,
Eduardo Roberto Greco,
Ambrogio Oliva,
Brian Quistorff,
Stephan Rave,
+ Adam Rehn,
John Relph,
Hannes Restel,
Moritz Ringler,
Mattias Ulbrich,
David Weitzman,
Seb Wills,
- John Zedlewski</p>
+ John Zedlewski,
+ Krunoslav Zubrinic</p>
<h2>Remerciements à :</h2>
Nathan Dunn,
E. Hakan Duran,
Brian Van Essen,
+ Michael Falkenthal,
Alexis Gallagher,
David Gleich,
Eduardo Roberto Greco,
Ambrogio Oliva,
Brian Quistorff,
Stephan Rave,
+ Adam Rehn,
John Relph,
Hannes Restel,
Moritz Ringler,
Nathan Dunn,
E. Hakan Duran,
Brian Van Essen,
+ Michael Falkenthal,
Alexis Gallagher,
David Gleich,
Eduardo Roberto Greco,
Ambrogio Oliva,
Brian Quistorff,
Stephan Rave,
+ Adam Rehn,
John Relph,
Hannes Restel,
Moritz Ringler,
Mattias Ulbrich,
David Weitzman,
Seb Wills,
- John Zedlewski</p>
+ John Zedlewski,
+ Krunoslav Zubrinic</p>
<h2>以下の方々に感謝します:</h2>
<ul>
<li><strong>urldate<br /></strong> 最後にページを訪れた日付。</li>
</ul><br />
- *) は、JabRefによって直接サポートされていません。<br />
+ * のついたフィールドは、JabRefは直接サポートしていません。<br />
<br />
+
+ <h2>フィールドに関するヒント</h2>
+ <p>
+ 組織名は、<code>{}</code>括弧の中に置きます。組織名に省略表記がある場合、その省略表記も<code>{}</code>括弧の中に置きます。例:<code>{The Attributed Graph Grammar System ({AGG})}</code>.</p>
+
+ <h2>さらに詳しい情報</h2>
+ <ul>
+ <li>
+ BibTeXに関するヒント: <a href="http://sandilands.info/sgordon/node/488">Recommended BibTeX Format</a>
+ </li>
+ </ul>
+
</body>
</html>
<li><a href="StringEditorHelp.html">文字列エディタ</a></li>
<li><a href="DatabaseProperties.html">データベース特性ウィンドウ</a></li>
<li><a href="PreviewHelp.html">項目プレビューの設定</a></li>
- <li><a href="LabelPatterns.html">BibTeXé\8dµç\94\9fæ\88\90æ©\9fæ§\8bã\81®è\87ªä½\9c</a></li>
+ <li><a href="LabelPatterns.html">BibTeXé\8dµç\94\9fæ\88\90æ\96¹æ³\95ã\81®èª¿æ\95´</a></li>
<li><a href="CustomEntriesHelp.html">項目型の自作</a></li>
<li><a href="GeneralFields.html">汎用フィールドの個人設定</a></li>
<li><a href="Plugin.html">プラグインを使用してJabRefを拡張する</a></li>
<body>
- <h1>BibTeX<ruby><rb>é\8dµ</rb><rp>(</rp><rt>ã\82ã\83¼</rt><rp>)</rp></ruby>ç\94\9fæ\88\90æ©\9fæ§\8bã\81®è\87ªä½\9c</h1>
+ <h1>BibTeX<ruby><rb>é\8dµ</rb><rp>(</rp><rt>ã\82ã\83¼</rt><rp>)</rp></ruby>ç\94\9fæ\88\90æ\96¹æ³\95ã\81®èª¿æ\95´</h1>
<p>JabRef設定の「BibTeX鍵の生成」タブでは、BibTeXラベルの自動生成に使用されるフィールドを設定することができます。パターンは、標準的な項目型それぞれに対して設定することができます。</p>
<li><b>[<code>auth.etal</code>]</b>: 第1著者の姓の後に、著者が2名の時は第2著者の姓、著者が3名以上の時は「.etal」。<br /></li>
+ <li><b>[<code>authEtAl</code>]</b>: 第1著者の姓の後に、著者が2名の時は第2著者の姓、著者が3名以上の時は「EtAl」。これは、<code>auth.etal</code>に近いですが、著者同士が「.」によって区切られないことと、著者が3名以上の時に「.etal」ではなく「Etal」が付け加えられるところが違います。<br /></li>
+
<li><b>[<code>authshort</code>]</b>: 著者1名の時はその姓、著者2名以上の時は、3名までの著者の姓の最初の文字。4名以上の著者がいる時には、その後に+文字。<br /></li>
+ <li><b>[<code>authForeIni</code>]</b>: 第1著者の名のイニシャル。<br /></li>
+
+ <li><b>[<code>authorLastForeIni</code>]</b>: 最後の著者の名のイニシャル。<br /></li>
+
</ul>
<p><b>《註》</b>(編集書籍など)著者がいない場合には、上記の<b><code>[auth...]</code></b>マーカーはすべて、編者を(ある場合には)代わりに使用します。したがって、著者のいない書籍の編者は、ラベル生成用には著者として取り扱われます。この挙動を望まない、即ち著者がいない場合は何も出力しないマーカーが必要な場合には、上記のコードにおいて<b><code>auth</code></b>の代わりに<b><code>pureauth</code></b>を使用してください。例:<b><code>[pureauth]</code></b>や<b><code>[pureauthors3]</code></b>など。</p>
<li><b>[<code>edtrshort</code>]</b>: 編者1名の時はその姓、編者2名以上の時は、3名までの編者の姓の最初の文字。4名以上の編者がいる時には、その後に+文字。<br /></li>
+ <li><b>[<code>edtrForeIni</code>]</b>: 第1編者の名のイニシャル。<br /></li>
+
+ <li><b>[<code>editorLastForeIni</code>]</b>: 最後の編者の名のイニシャル。<br /></li>
+
<li><b>[<code>firstpage</code>]</b>: 発行物の最初のページ番号(注意:bibtexは<code>7,41,73--97</code>あるいは<code>43+</code>という表記をするので、pagesフィールド中の最小のページ番号を返します)<br /></li>
<li><b>[<code>keywordN</code>]</b>: "keywords"フィールドのN番目のキーワード。キーワードがコンマかセミコロンで区切られていると仮定します。<br /></li>
inkscape:export-xdpi="90.000000"
inkscape:export-filename="splash.png"
sodipodi:docname="splash-beta.svg"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.91 r13725"
sodipodi:version="0.32"
id="svg2138"
height="432"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<sodipodi:namedview
- inkscape:window-y="-3"
- inkscape:window-x="33"
- inkscape:window-height="880"
- inkscape:window-width="1512"
- inkscape:current-layer="layer2"
+ inkscape:window-y="0"
+ inkscape:window-x="0"
+ inkscape:window-height="1155"
+ inkscape:window-width="1920"
+ inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="225.8697"
inkscape:cx="105.10531"
style="display:inline">
<image
xlink:href="splash-release.svg"
- style="display:inline"
- y="-0.86970043"
- x="-0.89468384"
- id="image3653"
+ width="576"
height="432"
- width="576" />
+ id="image3653"
+ x="-0.89468384"
+ y="-0.86970043"
+ style="display:inline" />
</g>
<g
transform="translate(-77.5,-170.36218)"
- inkscape:label="beta"
+ inkscape:label="beta 2"
inkscape:groupmode="layer"
id="layer1"
style="display:inline">
inkscape:export-ydpi="75"
inkscape:export-xdpi="75"
inkscape:export-filename="/home/alver/jabref/jabref/src/images/splash.png"
- transform="matrix(0.9688007,-0.2478411,0.2478411,0.9688007,-87.20276,118.59483)"
- style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
+ transform="matrix(0.9688007,-0.2478411,0.2478411,0.9688007,-139.20276,134.59483)"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:56px;line-height:100%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;stroke:none"
id="flowRoot2745"
xml:space="preserve"><flowRegion
id="flowRegion2747"><rect
- style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:56px;line-height:100%;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472"
y="470.36218"
x="482"
- height="68"
- width="164"
+ height="99.498024"
+ width="246.77605"
id="rect2749" /></flowRegion><flowPara
- id="flowPara2751">beta</flowPara></flowRoot> </g>
+ id="flowPara2751">beta 2</flowPara></flowRoot> </g>
</svg>
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=Move_to_group
Journal_file_not_found=Journal_file_not_found
+
+Show_gridlines=Show_gridlines
+Table_row_height_padding=Table_row_height_padding
+Marked_entries_as_printed=Marked_entries_as_printed
+Could_not_apply_changes.=Could_not_apply_changes.
+Deprecated_fields=Deprecated_fields
+Show_deprecated_bibtex_fields=Show_deprecated_bibtex_fields
+If_possible,_clean_URL_that_Google_search_returned=If_possible,_clean_URL_that_Google_search_returned
+Save_selected_as_plain_BibTeX_...=Save_selected_as_plain_BibTeX_...
+Hide/show_toolbar=Hide/show_toolbar
+Show_printed_status=Show_printed_status
+Show_read_status=Show_read_status
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')
+Toogle_print_status=Toogle_print_status
+Printed=Printed
+Clear_read_status=Clear_read_status
+No_read_status_information=No_read_status_information
+Set_read_status_to_read=Set_read_status_to_read
+Read_status_read=Read_status_read
+Set_read_status_to_skimmed=Set_read_status_to_skimmed
+Read_status_skimmed=Read_status_skimmed
+Read_status=Read_status
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=D\u00e9plac\u00e9_vers_le_groupe
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=переместить_в_группу
Journal_file_not_found=Файл_журнала_не_найден
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=gruba_ta\u015f\u0131
Journal_file_not_found=G\u00fcnl\u00fck_dosyas\u0131_bulunamad\u0131
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=
Move_to_group=
Journal_file_not_found=
+
+Clear_read_status=
+Convert_to_BibLatex_format_(for_example,_move_the_value_of_the_'journal'_field_to_'journaltitle')=
+Could_not_apply_changes.=
+Deprecated_fields=
+Hide/show_toolbar=
+If_possible,_clean_URL_that_Google_search_returned=
+Marked_entries_as_printed=
+No_read_status_information=
+Printed=
+Read_status=
+Read_status_read=
+Read_status_skimmed=
+Save_selected_as_plain_BibTeX_...=
+Set_read_status_to_read=
+Set_read_status_to_skimmed=
+Show_deprecated_bibtex_fields=
+Show_gridlines=
+Show_printed_status=
+Show_read_status=
+Table_row_height_padding=
+Toogle_print_status=