* New upstream release:
authorgregor herrmann <gregoa@debian.org>
Sun, 26 Nov 2006 20:58:28 +0000 (20:58 -0000)
committergregor herrmann <gregoa@debian.org>
Sun, 26 Nov 2006 20:58:28 +0000 (20:58 -0000)
  - remove j2re1.4 from Depends, JabRef now needs Java 1.5;
  - undistributable fonts no longer included (closes: #393676);
  - includes the patch to make Enter work in dialogs, therefore remove
    patch 02_button;
  - update patch 01_free_javac;
  - update debian/copyright (new contributors);
  - update debian/rules (icon file name changed).

277 files changed:
.classpath [deleted file]
.cvsignore [deleted file]
build.number
build.xml
debian/changelog
debian/control
debian/copyright
debian/patches/00list
debian/patches/01_free_javac.dpatch
debian/patches/02_button.dpatch [deleted file]
debian/patches/02_libs.dpatch [new file with mode: 0755]
debian/patches/03_libs.dpatch [deleted file]
debian/rules
lib/JempBox-0.1.0-dev.jar [new file with mode: 0644]
lib/PDFBox-0.7.3-dev-reduced.jar [new file with mode: 0644]
lib/antlr-3.0b5.jar [new file with mode: 0644]
lib/glazedlists-1.5.0_java14.jar [deleted file]
lib/glazedlists-1.7.0_java14.jar [new file with mode: 0644]
lib/spin-1.4.jar [deleted file]
lib/spin.jar [new file with mode: 0644]
src/help/About.html
src/help/CiteSeerHelp.html
src/help/Contents.html
src/help/CustomExports.html
src/help/ExternalFiles.html
src/help/PreviewHelp.html
src/help/SearchHelp.html
src/help/XMPHelp.html [new file with mode: 0644]
src/help/credits.txt
src/help/de/About.html
src/help/de/PreviewHelp.html
src/help/fr/About.html
src/help/fr/BaseFrameHelp.html
src/help/fr/Contents.html
src/help/fr/CustomExports.html
src/help/fr/ExternalFiles.html
src/help/fr/PreviewHelp.html
src/help/fr/XMPHelp.html [new file with mode: 0644]
src/images/JabRef-Logo.icns
src/images/JabRef-icon.png [deleted file]
src/images/JabRef-icon.svg [deleted file]
src/images/JabRef.ico [new file with mode: 0644]
src/images/font/ACTIVA.TTF [deleted file]
src/images/font/ASTROLYT.TTF [deleted file]
src/images/font/AUGIE.TTF [deleted file]
src/images/secondary_sorted_reverse.png [new file with mode: 0644]
src/images/splash-2.1.png [deleted file]
src/images/splash-2.1.svg [deleted file]
src/images/splash.png [new file with mode: 0644]
src/images/splash.svg [deleted file]
src/java/net/sf/jabref/AuthorList.java
src/java/net/sf/jabref/BasePanel.java
src/java/net/sf/jabref/BibtexEntry.java
src/java/net/sf/jabref/EntryComparator.java
src/java/net/sf/jabref/EntryEditor.java
src/java/net/sf/jabref/EntryEditorTab.java
src/java/net/sf/jabref/ExternalTab.java
src/java/net/sf/jabref/FieldComparator.java
src/java/net/sf/jabref/FieldContentSelector.java
src/java/net/sf/jabref/FieldEditor.java
src/java/net/sf/jabref/FieldNameLabel.java
src/java/net/sf/jabref/FieldTextArea.java
src/java/net/sf/jabref/FieldTextField.java
src/java/net/sf/jabref/GUIGlobals.java
src/java/net/sf/jabref/Globals.java
src/java/net/sf/jabref/HelpAction.java
src/java/net/sf/jabref/HelpContent.java
src/java/net/sf/jabref/HelpDialog.java
src/java/net/sf/jabref/JabRef.java
src/java/net/sf/jabref/JabRefFrame.java
src/java/net/sf/jabref/JabRefPreferences.java
src/java/net/sf/jabref/MetaData.java
src/java/net/sf/jabref/NameFormatterTab.java [new file with mode: 0644]
src/java/net/sf/jabref/PrefsDialog2.java
src/java/net/sf/jabref/PrefsDialog3.java
src/java/net/sf/jabref/PreviewPanel.java
src/java/net/sf/jabref/PreviewPrefsTab.java
src/java/net/sf/jabref/ReplaceStringDialog.java
src/java/net/sf/jabref/SearchManager2.java
src/java/net/sf/jabref/SidePane.java
src/java/net/sf/jabref/SidePaneComponent.java
src/java/net/sf/jabref/SidePaneManager.java
src/java/net/sf/jabref/SplashScreen.java
src/java/net/sf/jabref/StringDialog.java
src/java/net/sf/jabref/TablePrefsTab.java
src/java/net/sf/jabref/Util.java
src/java/net/sf/jabref/bst/BibtexCaseChanger.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/BibtexNameFormatter.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/BibtexPurify.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/BibtexTextPrefix.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/BibtexWidth.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/Bst.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/BstLexer.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/BstParser.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/ChangeCaseFunction.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/FormatNameFunction.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/PurifyFunction.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/TextPrefixFunction.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/VM.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/VMException.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/Warn.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/WidthFunction.java [new file with mode: 0644]
src/java/net/sf/jabref/bst/bst.g [new file with mode: 0644]
src/java/net/sf/jabref/collab/ChangeScanner.java
src/java/net/sf/jabref/collab/FileUpdatePanel.java
src/java/net/sf/jabref/export/CustomExportList.java
src/java/net/sf/jabref/export/ExportCustomizationDialog.java
src/java/net/sf/jabref/export/ExportFileFilter.java [new file with mode: 0644]
src/java/net/sf/jabref/export/ExportFormat.java [new file with mode: 0644]
src/java/net/sf/jabref/export/ExportFormats.java [new file with mode: 0644]
src/java/net/sf/jabref/export/FieldFormatter.java
src/java/net/sf/jabref/export/FileActions.java
src/java/net/sf/jabref/export/ModsExportFormat.java [new file with mode: 0644]
src/java/net/sf/jabref/export/OOCalcDatabase.java
src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
src/java/net/sf/jabref/export/OpenDocumentSpreadsheetCreator.java
src/java/net/sf/jabref/export/OpenOfficeDocumentCreator.java
src/java/net/sf/jabref/export/SaveException.java
src/java/net/sf/jabref/export/layout/LayoutEntry.java
src/java/net/sf/jabref/export/layout/LayoutFormatter.java
src/java/net/sf/jabref/export/layout/LayoutHelper.java
src/java/net/sf/jabref/export/layout/format/AuthorAbbreviator.java
src/java/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacer.java
src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommas.java
src/java/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommas.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/AuthorFirstFirst.java
src/java/net/sf/jabref/export/layout/format/AuthorFirstLastCommas.java
src/java/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommas.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/AuthorLastFirst.java
src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommas.java
src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommas.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviator.java
src/java/net/sf/jabref/export/layout/format/AuthorLastFirstCommas.java
src/java/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommas.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/AuthorOrgSci.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/CompositeFormat.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/DOICheck.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/HTMLParagraphs.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/NameFormat.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviations.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/RTFChars.java
src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
src/java/net/sf/jabref/export/layout/format/ToLowerCase.java
src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
src/java/net/sf/jabref/external/DroppedFileHandler.java [new file with mode: 0644]
src/java/net/sf/jabref/external/ExternalFilePanel.java
src/java/net/sf/jabref/external/ExternalFileType.java
src/java/net/sf/jabref/external/PushToApplication.java
src/java/net/sf/jabref/external/PushToApplicationAction.java
src/java/net/sf/jabref/external/PushToApplicationButton.java [new file with mode: 0644]
src/java/net/sf/jabref/external/PushToEmacs.java
src/java/net/sf/jabref/external/PushToLatexEditor.java
src/java/net/sf/jabref/external/PushToLyx.java
src/java/net/sf/jabref/external/PushToWinEdt.java
src/java/net/sf/jabref/external/WriteXMPAction.java [new file with mode: 0644]
src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
src/java/net/sf/jabref/groups/GroupDialog.java
src/java/net/sf/jabref/groups/GroupSelector.java
src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
src/java/net/sf/jabref/gui/ImportInspectionDialog.java
src/java/net/sf/jabref/gui/MainTable.java
src/java/net/sf/jabref/gui/MainTableFormat.java
src/java/net/sf/jabref/gui/MainTableSelectionListener.java
src/java/net/sf/jabref/gui/date/DatePickerButton.java
src/java/net/sf/jabref/imports/BibtexParser.java
src/java/net/sf/jabref/imports/CiteSeerFetcher.java
src/java/net/sf/jabref/imports/CiteSeerFetcherPanel.java
src/java/net/sf/jabref/imports/GeneralFetcher.java
src/java/net/sf/jabref/imports/ImportFileFilter.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/ImportFormatReader.java
src/java/net/sf/jabref/imports/ImportFormats.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/ImportMenuItem.java
src/java/net/sf/jabref/imports/IsiImporter.java
src/java/net/sf/jabref/imports/OAI2Fetcher.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/OAI2Handler.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/OpenDatabaseAction.java
src/java/net/sf/jabref/imports/PdfXmpImporter.java [new file with mode: 0644]
src/java/net/sf/jabref/mods/MODSDatabase.java
src/java/net/sf/jabref/search/BasicSearch.java [new file with mode: 0644]
src/java/net/sf/jabref/search/SearchExpressionParser.java
src/java/net/sf/jabref/undo/CountingUndoManager.java
src/java/net/sf/jabref/util/CaseChanger.java
src/java/net/sf/jabref/util/EncryptionNotSupportedException.java [new file with mode: 0644]
src/java/net/sf/jabref/util/ErrorConsole.java
src/java/net/sf/jabref/util/MassSetFieldAction.java [new file with mode: 0644]
src/java/net/sf/jabref/util/XMPSchemaBibtex.java [new file with mode: 0644]
src/java/net/sf/jabref/util/XMPUtil.java [new file with mode: 0644]
src/java/net/sf/jabref/wizard/integrity/IntegrityCheck.java
src/java/tests/net/sf/jabref/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/AuthorListTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/FileBasedTestCase.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/JabRefTestCase.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/UtilFindFileTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/UtilTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/BibtexCaseChangerTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/BibtexNameFormatterTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/BibtexPurifyTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/BibtexWidthTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/TestVM.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/bst/TextPrefixFunctionTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/LayoutTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/RTFCharsTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorAbbreviatorTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsCommaReplacerTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorAndsReplacerTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstAbbrLastOxfordCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstFirstTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorFirstLastOxfordCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbrOxfordCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstAbbreviatorTester.java
src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstOxfordCommasTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorLastFirstTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/AuthorOrgSciTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/CompositeFormatTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/DOICheckTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/HTMLParagraphsTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/NoSpaceBetweenAbbreviationsTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/export/layout/format/ResolvePDFTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/AutoImportTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/BibtexParserTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IEEEImport1.txt [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IsiImporterTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IsiImporterTest1.isi [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IsiImporterTestInspec.isi [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IsiImporterTestMedline.isi [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IsiImporterTestWOS.isi [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/RisTest.ris [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/oai2.xml [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/oai22.xml [new file with mode: 0644]
src/java/tests/net/sf/jabref/search/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/search/BasicSearchTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/util/AllTests.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/util/CaseChangerTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/util/XMPUtilTest.java [new file with mode: 0644]
src/resource/IntegrityMessage_du.properties [new file with mode: 0644]
src/resource/JabRef_de.properties
src/resource/JabRef_du.properties [new file with mode: 0644]
src/resource/JabRef_en.properties
src/resource/JabRef_fr.properties
src/resource/JabRef_it.properties
src/resource/JabRef_no.properties
src/resource/Menu_de.properties
src/resource/Menu_du.properties [new file with mode: 0644]
src/resource/Menu_en.properties
src/resource/Menu_fr.properties
src/resource/Menu_it.properties
src/resource/Menu_no.properties
src/resource/build.properties
src/resource/fields/.cvsignore [new file with mode: 0644]
src/resource/journalList.txt [new file with mode: 0644]
src/resource/layout/tablerefs/tablerefs.begin.layout [new file with mode: 0644]
src/resource/layout/tablerefs/tablerefs.end.layout [new file with mode: 0644]
src/resource/layout/tablerefs/tablerefs.layout [new file with mode: 0644]
src/resource/layout/tablerefsabsbib/tablerefsabsbib.begin.layout [new file with mode: 0644]
src/resource/layout/tablerefsabsbib/tablerefsabsbib.end.layout [new file with mode: 0644]
src/resource/layout/tablerefsabsbib/tablerefsabsbib.layout [new file with mode: 0644]
src/resource/log4j.properties [new file with mode: 0644]
src/tests/encrypted.pdf [new file with mode: 0644]
src/tests/net/sf/jabref/bst/abbrv.bst [new file with mode: 0644]
src/txt/README
src/txt/TODO [new file with mode: 0644]
src/windows/nsis/.cvsignore [new file with mode: 0644]
src/windows/nsis/README.txt [new file with mode: 0644]
src/windows/nsis/fileassoc.nsh [new file with mode: 0644]
src/windows/nsis/launcher.nsi [new file with mode: 0644]
src/windows/nsis/setup.nsi [new file with mode: 0644]

diff --git a/.classpath b/.classpath
deleted file mode 100644 (file)
index a0c016f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-       <classpathentry kind="src" path="src/java"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-       <classpathentry kind="lib" path="lib/aelfred-1.2.jar"/>
-       <classpathentry kind="lib" path="lib/antlr.jar"/>
-       <classpathentry kind="lib" path="lib/ccl.jar"/>
-       <classpathentry kind="lib" path="lib/jalopy-1.0b10.jar"/>
-       <classpathentry kind="lib" path="lib/jalopy-ant-0.6.1.jar"/>
-       <classpathentry kind="lib" path="lib/javancss.jar"/>
-       <classpathentry kind="lib" path="lib/jaxen-core-1.0-fcs.jar"/>
-       <classpathentry kind="lib" path="lib/jaxp-1.2.jar"/>
-       <classpathentry kind="lib" path="lib/jdom-1.0b8.jar"/>
-       <classpathentry kind="lib" path="lib/log4j-1.2.6.jar"/>
-       <classpathentry kind="lib" path="lib/looks-1.2.2.jar"/>
-       <classpathentry kind="lib" path="lib/oro-2.0.6.jar"/>
-       <classpathentry kind="lib" path="lib/plastic-1.2.1.jar"/>
-       <classpathentry kind="lib" path="lib/sax-2.0.1.jar"/>
-       <classpathentry kind="lib" path="lib/saxpath-1.0-fcs.jar"/>
-       <classpathentry kind="lib" path="lib/vizant.jar"/>
-       <classpathentry kind="lib" path="lib/spin.jar"/>
-       <classpathentry kind="var" path="JUNIT_HOME/junit.jar"/>
-       <classpathentry kind="lib" path="lib/pmd-2.0.jar"/>
-       <classpathentry kind="lib" path="lib/forms-1.0.4.jar"/>
-       <classpathentry kind="lib" path="lib/junit.jar"/>
-       <classpathentry kind="lib" path="lib/log4j-1.2.9.jar"/>
-       <classpathentry kind="output" path="build"/>
-</classpath>
diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644 (file)
index 0a53838..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-bak
-build
-.classpath
-.project
-work.jpx
-work.refactor
-.#build.xml.1.38
-.#jabref.log.1.2
-ini
-jabref.log
-jabref.log.lck
-build.number
-classes
-jabref.jpx
-jabref.oif
index bf7054b..135abb0 100644 (file)
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Fri Sep 29 12:09:19 CEST 2006
-build.number=571
+#Sun Nov 26 20:22:40 CET 2006
+build.number=341
index 36b8b76..0b8e3a2 100644 (file)
--- a/build.xml
+++ b/build.xml
    Compiler: Ant
    Authors:  Joerg K. Wegner, wegnerj@informatik.uni-tuebingen.de
              Morten O. Alver
-   Version:  $Revision: 1.62 $
-             $Date: 2006/07/25 19:56:36 $
-             $Author: mortenalver $
+   Version:  $Revision: 1.77 $
+             $Date: 2006/11/23 22:37:19 $
+             $Author: coezbek $
 
    modified:
+             23.11.2006 c.oezbek
+             - tried to fix classpath issues
              28.07.2005 r.nagel
              - insert dynamic build info generation (resource/build.properties)
              - copy fonts directory, used by the new about dialog
 
 <project name="JabRef" default="jars" basedir=".">
 
-        <!-- ==========================================================================================
+       <!-- ==========================================================================================
         PROPERTY SETUP
      ========================================================================================== -->
 
-        <!-- some version information -->
-        <property name="jabref.bin" value="jabref" />
-        <property name="jabref.version" value="2.1" />
-        <property name="jabref.placeholder.version" value="@version@" /> <!-- used by replace task -->
-
-
-        <!-- Set the properties for intermediate directory -->
-        <property name="build.dir" value="build" />
-        <property name="build.classes" value="${build.dir}/classes" />
-        <property name="build.tmp" value="${build.dir}/tmp" />
-        <property name="build.osx" value="${build.dir}/classes/osxadapter" />
-        <property name="build.lib" value="${build.dir}/lib" />
-        <property name="build.bin" value="${build.dir}/bin" />
-        <property name="build.win" value="${build.dir}/windows" />
-        <property name="build.images" value="${build.dir}/images" />
-        <property name="build.fonts" value="${build.dir}/images/font" />
-        <property name="build.resource" value="${build.dir}/resource" />
-        <property name="build.help" value="${build.dir}/help" />
-        <property name="build.javadocs" value="${build.dir}/docs/API" />
-        <property name="build.extensions" value="${build.dir}/extensions" />
-        <property name="build.extension-javadocs" value="${build.extensions}/API" />
-        <property name="build.extension-layout" value="${build.extensions}/layout" />
-        <property name="build.openoffice.meta" value="${build.resource}/openoffice"/>
-
-        <!-- Set the properties for source directories -->
-        <property name="src.dir" value="src" />
-        <property name="src.tests" value="src/java/tests" />
-        <property name="txt.dir" value="src/txt" />
-        <property name="java.dir" value="${src.dir}/java" />
-        <property name="osx.dir" value="${src.dir}/osx" />
-        <property name="win.dir" value="${src.dir}/windows" />
-        <property name="resource.dir" value="${src.dir}/resource" />
-        <property name="bin.dir" value="${src.dir}/scripts" />
-        <property name="images.dir" value="${src.dir}/images" />
-        <property name="fonts.dir" value="${src.dir}/images/font" />
-        <property name="help.dir" value="${src.dir}/help" />
-        <property name="extensions.dir" value="${src.dir}/extensions" />
-        <property name="layout.dir" value="${src.dir}/resource/layout" />
-
-
-        <!-- Set the properties for library directories -->
-        <property name="library.directory" value="lib" />
-
-
-    <taskdef name="jarbundler"
-                  classpath="${library.directory}/jarbundler-1.4.jar"
-                  classname="com.loomcom.ant.tasks.jarbundler.JarBundler" />
-
-
-        <!-- Build classpath -->
-        <path id="classpath">
-                <pathelement path="${build.classes}" />
-                <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                <pathelement location="${library.directory}/commons-logging.jar" />-->
-                <fileset dir="${library.directory}">
-                        <include name="*.jar" />
-                </fileset>
-        </path>
-
-    <!-- Runs project (e.g. in NetBeans 4) -->
-    <target name="run" depends="jars">
-        <java classname="net.sf.jabref.JabRef" fork="true">
-        <classpath>
-            <pathelement location="${build.lib}/jabref.jar"/>
-            <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-            <pathelement location="${library.directory}/commons-logging.jar" />-->
-            <pathelement location="${library.directory}/antlr.jar" />
-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
-            <pathelement location="${library.directory}/spin-1.4.jar" />
-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-            <pathelement location="${library.directory}/microba.jar" />
-        </classpath>
-         </java>
-    </target>
-
-    <!-- Target used for profiling with the Netbeans profiler. -->
-    <!--<target name="profile" depends="jars">
-        <nbprofile classname="net.sf.jabref.JabRef">
-        <classpath>
-            <pathelement location="${build.lib}/jabref.jar"/>
-            <pathelement location="${library.directory}/antlr.jar" />
-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
-            <pathelement location="${library.directory}/spin.jar" />
-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-        </classpath>
-         </nbprofile>
-    </target>-->
-    <target name="profile" depends="jars" description="Profile JabRef">
-      <fail unless="netbeans.home">This target can only run inside the NetBeans IDE.</fail>
-
-      <nbprofiledirect>
-          <classpath>
-            <pathelement location="${build.lib}/jabref.jar"/>
-            <pathelement location="${library.directory}/antlr.jar" />
-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
-            <pathelement location="${library.directory}/spin-1.4.jar" />
-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-        </classpath>
-      </nbprofiledirect>
-
-      <property environment="env"/>
-      <java fork="true" classname="net.sf.jabref.JabRef" dir="${build.dir}"
-                  jvm="${profiler.info.jvm}">
-          <jvmarg value="${profiler.info.jvmargs.agent}"/>
-          <jvmarg line="${profiler.info.jvmargs}"/>
-          <env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}"/>
-          <classpath>
-            <pathelement location="${build.lib}/jabref.jar"/>
-            <pathelement location="${library.directory}/antlr.jar" />
-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
-            <pathelement location="${library.directory}/spin-1.4.jar" />
-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-
-        </classpath>
-      </java>
-    </target>
-        <!-- Compiles project -->
-        <target name="compile">
-                <mkdir dir="${build.classes}" />
-                <!--deprecation="on"-->
-                <javac debug="off" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
-                        <src path="${java.dir}"/>
-                        <exclude name="tests/**"/>
-                        <classpath>
-                                <pathelement path="${build.classes}" />
-                                <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                                <pathelement location="${library.directory}/commons-logging.jar" />-->
-                                <pathelement location="${library.directory}/antlr.jar" />
-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
-                                <pathelement location="${library.directory}/forms-1.0.4.jar" />
-                                <pathelement location="${library.directory}/spin-1.4.jar" />
-                                <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-                                <pathelement location="${library.directory}/microba.jar" />
-                        </classpath>
-                </javac>
-        </target>
-
-        <!-- Compiles only the tests -->
-        <target name="compiletest">
-                <mkdir dir="${build.classes}" />
-                <!--deprecation="on"-->
-                <javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.4" target="1.4">
-                        <classpath>
-                                <pathelement path="${build.classes}" />
-                                <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                                <pathelement location="${library.directory}/commons-logging.jar" />-->
-                                <pathelement location="${library.directory}/antlr.jar" />
-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
-                                <pathelement location="${library.directory}/spin-1.4.jar" />
-                        </classpath>
-                </javac>
-
-        </target>
-        <!-- Builds the OSXAdapter -->
-        <target name="osx">
-                <mkdir dir="${build.classes}" />
-
-                <javac srcdir="${osx.dir}" debug="off" destdir="${build.classes}" target="1.4">
-                </javac>
-        </target>
-
-        <!-- Copies in the OSXAdapter class, which is compilable only on Mac  -->
-        <target name="non_osx">
-                <mkdir dir="${build.osx}" />
-                <copy file="${library.directory}/OSXAdapter.class" todir="${build.osx}" />
-        </target>
-
-
-        <!-- Jars up project -->
-        <target name="jars" depends="build">
-                <mkdir dir="${build.lib}" />
-                <mkdir dir="${build.tmp}" />
-                <jar destfile="${build.lib}/jabref.jar">
-                        <fileset dir="${build.classes}" />
-                        <fileset dir="${build.tmp}" />
-                        <fileset dir="${build.dir}">
-                                <include name="images/**" />
-                                <include name="help/**" />
-                                <include name="help/de/**" />
-                                <include name="help/no/**" />
-                                <include name="resource/**" />
-                        </fileset>
-                        <fileset dir="${library.directory}">
-                            <include name="EndNote.zip" />
-                        </fileset>
-
-                        <fileset dir="${txt.dir}">
-                                <include name="gpl.txt" />
-                                <include name="lesser.txt" />
-                                <include name="apache-license.txt" />
-                                <include name="jgoodies.txt" />
-                                <include name="README" />
-                        </fileset>
-                        <manifest>
-                            <attribute name="Main-Class" value="net.sf.jabref.JabRef" /> 
-<!--                            <attribute name="Main-Class" value="net.sf.jabref.gui.FieldWeightDialog" /> -->
-                        </manifest>
-                </jar>
-
-        </target>
-
-        <!-- copy all necessary files and insert version informations -->
-        <target name="build" depends="compile, buildinfos" description="Build project">
-                <mkdir dir="${build.bin}" />
-
-                <mkdir dir="${build.resource}" />
-                <copy todir="${build.resource}">
-                        <fileset dir="${resource.dir}">
-                                <include name="**" />
-                        </fileset>
-                </copy>
-                <mkdir dir="${build.images}" />
-                <copy todir="${build.images}">
-                        <fileset dir="${images.dir}">
-                                <include name="**" />
-                        </fileset>
-                </copy>
-
-                <!-- the fonts are used by the new about dialog -->
-                <mkdir dir="${build.fonts}" />
-                <copy todir="${build.fonts}">
-                        <fileset dir="${fonts.dir}">
-                                <include name="*" />
-                        </fileset>
-                </copy>
-
-                <mkdir dir="${build.help}" />
-                <copy todir="${build.help}">
-                        <fileset dir="${help.dir}">
-                                <!--<include name="*" />-->
-                        </fileset>
-                </copy>
-
-                <!-- Insert version informations -->
-                <replace dir="${build.help}"
-                         token="${jabref.placeholder.version}"
-                         value="${jabref.version}">
-                   <include name="**/About.html"/>
-                </replace>
-                <replace dir="${build.openoffice.meta}"
-                         token="${jabref.placeholder.version}"
-                         value="${jabref.version}">
-                   <include name="meta.xml"/>
-                </replace>
-
-<!-- WHY ???
-                <mkdir dir="${build.win}" />
-                <copy file="${build.lib}/${jabref.bin}.jar" todir="${build.win}" />
-                <copy todir="${build.win}">
-                        <fileset dir="${win.dir}">
-                                <include name="*" />
-                        </fileset>
-                </copy>
--->
-        </target>
-
-<!-- generate and save some build infos !!! necessary for dynamic build infos !!! -->
-<!-- todo : replace it by the replace task :-),
+       <!-- some version information -->
+       <property name="jabref.bin" value="JabRef-2.2" />
+       <property name="jabref.version" value="2.2b2" />
+       <property name="jabref.placeholder.version" value="@version@" />
+       <!-- used by replace task -->
+
+
+       <!-- Set the properties for intermediate directory -->
+       <property name="build.dir" value="build" />
+       <property name="build.classes" value="${build.dir}/classes" />
+       <property name="build.tmp" value="${build.dir}/tmp" />
+       <property name="build.osx" value="${build.dir}/classes/osxadapter" />
+       <property name="build.lib" value="${build.dir}/lib" />
+       <property name="build.win" value="${build.dir}/windows" />
+       <property name="build.images" value="${build.dir}/images" />
+       <property name="build.fonts" value="${build.dir}/images/font" />
+       <property name="build.resource" value="${build.dir}/resource" />
+       <property name="build.help" value="${build.dir}/help" />
+       <property name="build.javadocs" value="${build.dir}/docs/API" />
+       <property name="build.extensions" value="${build.dir}/extensions" />
+       <property name="build.extension-javadocs" value="${build.extensions}/API" />
+       <property name="build.extension-layout" value="${build.extensions}/layout" />
+       <property name="build.openoffice.meta" value="${build.resource}/openoffice" />
+
+       <!-- Set the properties for source directories -->
+       <property name="src.dir" value="src" />
+       <property name="src.tests" value="src/java/tests" />
+       <property name="txt.dir" value="src/txt" />
+       <property name="java.dir" value="${src.dir}/java" />
+       <property name="osx.dir" value="${src.dir}/osx" />
+       <property name="win.installer.dir" value="${src.dir}/windows/nsis" />
+       <property name="resource.dir" value="${src.dir}/resource" />
+       <property name="bin.dir" value="${src.dir}/scripts" />
+       <property name="images.dir" value="${src.dir}/images" />
+       <property name="fonts.dir" value="${src.dir}/images/font" />
+       <property name="help.dir" value="${src.dir}/help" />
+       <property name="extensions.dir" value="${src.dir}/extensions" />
+       <property name="layout.dir" value="${src.dir}/resource/layout" />
+
+       <!-- Set the properties for library directories -->
+       <property name="library.directory" value="lib" />
+
+       <!-- Load user dependent properties -->
+       <property file="build.properties" />
+       <!-- 
+           * For instance define the NSIS-compiler:
+           *   nsis.executable="d:\prog\dev\NSIS\makensis.exe" 
+           *-->
+
+       <!-- win.installer can only be build under Windows -->
+       <condition property="is.windows">
+               <and>
+                       <os family="windows" />
+                       <isset property="nsis.executable" />
+               </and>
+       </condition>
+
+       <taskdef name="jarbundler" classpath="${library.directory}/jarbundler-1.4.jar" classname="com.loomcom.ant.tasks.jarbundler.JarBundler" />
+
+
+       <!-- Build classpath -->
+       <path id="classpath">
+               <pathelement path="${build.classes}" />
+               <pathelement path="${build.dir}" />
+               <pathelement location="${library.directory}/antlr.jar" />
+               <pathelement location="${library.directory}/antlr-3.0b5.jar" />
+               <pathelement location="${library.directory}/looks-2.0.4.jar" />
+               <pathelement location="${library.directory}/forms-1.0.4.jar" />
+               <pathelement location="${library.directory}/spin.jar" />
+               <pathelement location="${library.directory}/glazedlists-1.7.0_java14.jar" />
+               <pathelement location="${library.directory}/microba.jar" />
+        <pathelement location="${library.directory}/PDFBox-0.7.3-dev-reduced.jar" />
+        <pathelement location="${library.directory}/JempBox-0.1.0-dev.jar" />
+       </path>
+       
+       <target name="run" depends="build">
+               <java classname="net.sf.jabref.JabRef" fork="true">
+                       <classpath refid="classpath"/>
+               </java>
+       </target>
+       
+       <!-- Runs project -->
+       <target name="runFromJar" depends="jars">
+               <java classname="net.sf.jabref.JabRef" fork="true">
+                       <classpath>
+                               <pathelement location="${build.lib}/jabref.jar" />
+                       </classpath>
+               </java>
+       </target>
+
+       <target name="profile" depends="jars" description="Profile JabRef">
+               <fail unless="netbeans.home">This target can only run inside the NetBeans IDE.</fail>
+
+               <nbprofiledirect>
+                       <classpath refid="classpath"/>
+               </nbprofiledirect>
+
+               <property environment="env" />
+               <java fork="true" classname="net.sf.jabref.JabRef" dir="${build.dir}" jvm="${profiler.info.jvm}">
+                       <jvmarg value="${profiler.info.jvmargs.agent}" />
+                       <jvmarg line="${profiler.info.jvmargs}" />
+                       <env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}" />
+                       <classpath refid="classpath"/>
+               </java>
+       </target>
+
+       <!-- Compiles project -->
+       <target name="compile">
+               <mkdir dir="${build.classes}" />
+               <javac debug="on" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
+                       <src path="${java.dir}" />
+                       <exclude name="tests/**" />
+                       <classpath refid="classpath"/>
+               </javac>
+       </target>
+
+       <!-- Compiles only the tests -->
+       <target name="compiletest">
+               <mkdir dir="${build.classes}" />
+               <!--deprecation="on"-->
+               <javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.4" target="1.4">
+                       <classpath refid="classpath"/>
+               </javac>
+       </target>
+
+       <!-- Builds the OSXAdapter -->
+       <target name="osx">
+               <mkdir dir="${build.classes}" />
+
+               <javac srcdir="${osx.dir}" debug="on" destdir="${build.classes}" target="1.4">
+               </javac>
+       </target>
+
+       <!-- Copies in the OSXAdapter class, which is compilable only on Mac  -->
+       <target name="non_osx">
+               <mkdir dir="${build.osx}" />
+               <copy file="${library.directory}/OSXAdapter.class" todir="${build.osx}" />
+       </target>
+
+       <!-- Jars up project -->
+       <target name="jars" depends="build, unjarlib">
+               <mkdir dir="${build.lib}" />
+               <mkdir dir="${build.tmp}" />
+               <jar destfile="${build.lib}/jabref.jar">
+
+                       <fileset dir="${build.classes}" />
+                       <fileset dir="${build.tmp}" />
+                       <fileset dir="${build.dir}">
+                               <include name="images/**" />
+                               <include name="help/**" />
+                               <include name="help/de/**" />
+                               <include name="help/no/**" />
+                               <include name="resource/**" />
+                       </fileset>
+                       <fileset dir="${library.directory}">
+                               <include name="EndNote.zip" />
+                       </fileset>
+                       <fileset dir="${txt.dir}">
+                               <include name="gpl.txt" />
+                               <include name="lesser.txt" />
+                               <include name="jgoodies.txt" />
+                               <include name="README" />
+                       </fileset>
+                       <manifest>
+                               <attribute name="Main-Class" value="net.sf.jabref.JabRef" />
+                       </manifest>
+               </jar>
+
+       </target>
+
+       <!-- copy all necessary files and insert version informations -->
+       <target name="build" depends="compile, buildinfos" description="Build project">
+
+               <mkdir dir="${build.resource}" />
+
+               <copy todir="${build.resource}">
+                       <fileset dir="${resource.dir}">
+                               <include name="**" />
+                       </fileset>
+               </copy>
+               <mkdir dir="${build.images}" />
+               <copy todir="${build.images}">
+                       <fileset dir="${images.dir}">
+                               <include name="**" />
+                       </fileset>
+               </copy>
+
+               <!-- the fonts are used by the new about dialog
+               <mkdir dir="${build.fonts}" />
+               <copy todir="${build.fonts}">
+                       <fileset dir="${fonts.dir}">
+                               <include name="*" />
+                       </fileset>
+               </copy> -->
+
+               <mkdir dir="${build.help}" />
+               <copy todir="${build.help}">
+                       <fileset dir="${help.dir}">
+                               <!--<include name="*" />-->
+                       </fileset>
+               </copy>
+
+               <!-- Insert version informations -->
+               <replace dir="${build.help}" token="${jabref.placeholder.version}" value="${jabref.version}">
+                       <include name="**/About.html" />
+               </replace>
+               <replace dir="${build.openoffice.meta}" token="${jabref.placeholder.version}" value="${jabref.version}">
+                       <include name="meta.xml" />
+               </replace>
+
+       </target>
+
+       <!-- generate and save some build infos !!! necessary for dynamic build infos !!! -->
+       <!-- todo : replace it by the replace task :-),
           src/resource/build.properties = template
           build/resource/build.properties = real info file
--->
-        <target name="buildinfos">
-                 <tstamp/>        <!-- get date -->
-                 <buildnumber/>   <!-- generate new build number -> build.number -->
-                 <echo message="build number = ${build.number}"/>
-                 <!-- write the file, please do not edit this lines -->
-                 <echo file="${resource.dir}/build.properties">builddate=${TODAY}
+       -->
+       <target name="buildinfos">
+               <tstamp />
+               <!-- get date -->
+               <buildnumber />
+               <!-- generate new build number -> build.number -->
+               <echo message="build number = ${build.number}" />
+               <!-- write the file, please do not edit this lines -->
+               <echo file="${resource.dir}/build.properties">builddate=${TODAY}
 build=${build.number}
 version=${jabref.version}</echo>
-        </target>
-
-
-        <!-- Creates all docs -->
-        <target name="docs" depends="javadocs" description="Generates all the documentation" />
-
-        <!-- Creates javadocs -->
-        <target name="javadocs" depends="compile" description="Generates the javadocs">
-                <mkdir dir="${build.javadocs}" />
-                <javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://java.sun.com/j2se/1.4.1/docs/api/">
-
-                        <fileset dir="${java.dir}" defaultexcludes="yes">
-                                <include name="**/*.java" />
-                        </fileset>
-
-                        <classpath refid="classpath" />
-                </javadoc>
-        </target>
-
-        <!-- Creates javadocs for the extensions -->
-        <target name="extension-javadocs" depends="build" description="Generates the javadocs for the extensions archive">
-                <mkdir dir="${build.extension-javadocs}" />
-                <copy todir="${build.extension-javadocs}">
-                    <fileset dir="${help.dir}" defaultexcludes="yes">
-                        <include name="CustomExports.html" />
-                        <include name="CustomImports.html" />
-                    </fileset>
-                </copy>
-                
-                <javadoc sourcepath="${java.dir}" 
-                         destdir="${build.extension-javadocs}" 
-                         author="true" 
-                         version="true" 
-                         windowtitle="JabRef-Extensions API" 
-                         link="http://java.sun.com/j2se/1.4.1/docs/api/"
-                         Overview="${extensions.dir}/API/overview.html"
-                         access="protected"
-                >
-                        <!-- 
-                          create javadoc only selectively for classes that 
-                          users extending JabRef are likely to use
-                        -->
-                        <fileset dir="${java.dir}" defaultexcludes="yes">
-                            <include name="net/sf/jabref/imports/ImportFormat.java" />
-                            <include name="net/sf/jabref/imports/ImportFormatReader.java" />
-                            <include name="net/sf/jabref/BibtexEntry.java" />
-                            <include name="net/sf/jabref/BibtexEntryType.java" />
-                            <include name="net/sf/jabref/AuthorList.java" />
-                            <include name="net/sf/jabref/AuthorList.java" />                        
-                            <include name="net/sf/jabref/export/layout/LayoutFormatter.java" />
-                        </fileset>
-
-                        <classpath refid="classpath" />
-                </javadoc>
-        </target>
-        
-        <!-- Creates javadocs for the extensions -->
-        <target name="extensions" depends="extension-javadocs" description="Generates the extensions archive">
-            <!-- copy examples -->
-            <copy todir="${build.extensions}">
-                          <fileset dir="${java.dir}">
-                             <include name="net/sf/jabref/export/layout/format/CurrentDate.java"/>
-                             <include name="net/sf/jabref/export/layout/format/ToLowerCase.java"/>
-                             <include name="net/sf/jabref/export/layout/format/HTMLChars.java"/>
-                             <include name="net/sf/jabref/imports/*Importer.java"/>
-                           </fileset>
-            </copy>
-            <mkdir dir="${build.extension-layout}" />
-            <copy todir="${build.extension-layout}">
-                          <fileset dir="${layout.dir}" />
-            </copy>
-            <copy todir="${build.extensions}">
-                          <fileset dir="${extensions.dir}" />
-                          <filterset>
-                             <filter token="version" value="${jabref.version}"/>
-                          </filterset>
-            </copy>
-            <!-- create extensions-zip file -->
-                   <zip destfile="${build.dir}/jabref-extensions.zip">
-                       <zipfileset dir="${build.extensions}" prefix="jabref-extensions"/>
-                   </zip>        
-               </target>
-        
-        <target name="clean" description="Clean project">
-                <delete dir="${build.dir}" />
-        </target>
-
-        <!-- Unpacks jar needed jar files from lib directory into temp directory. -->
-        <target name="unjarlib" description="Unpacks jars from library">
-                <mkdir dir="${build.tmp}"/>
-                <!--<unjar src="${library.directory}/commons-httpclient-2.0.jar" dest="${build.tmp}" />
-                <unjar src="${library.directory}/commons-logging.jar" dest="${build.tmp}" />-->
-                <unjar src="${library.directory}/antlr.jar" dest="${build.tmp}" />
-                <!--                <unjar src="${library.directory}/plastic-1.2.1.jar" dest="${build.classes}" />-->
-                <unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
-                <unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
-                <unjar src="${library.directory}/spin-1.4.jar" dest="${build.tmp}" />
-                <unjar src="${library.directory}/glazedlists-1.5.0_java14.jar" dest="${build.tmp}" />
-                <unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
-            <delete dir="${build.tmp}/META-INF"/>
-           <!-- rename the microba license file -->
-           <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt"/>
-        </target>
-
-
-        <target name="osxjar">
-        <jarbundler dir="${build.lib}"
-                    name="JabRef"
-                    mainclass="net.sf.jabref.JabRef"
-                    jars="${build.lib}/${jabref.bin}.jar"
-                    icon="${images.dir}/JabRef-Logo.icns"
-                    version="${jabref.version}"
-                    jvmversion="1.4+"
-                  stubfile="${library.directory}/JavaApplicationStub" />
-
-        </target>
-
-
-        <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+       </target>
+
+
+       <!-- Creates all docs -->
+       <target name="docs" depends="javadocs" description="Generates all the documentation" />
+
+       <!-- Creates javadocs -->
+       <target name="javadocs" depends="compile" description="Generates the javadocs">
+               <mkdir dir="${build.javadocs}" />
+               <javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://java.sun.com/j2se/1.4.1/docs/api/">
+
+                       <fileset dir="${java.dir}" defaultexcludes="yes">
+                               <include name="**/*.java" />
+                       </fileset>
+
+                       <classpath refid="classpath" />
+               </javadoc>
+       </target>
+
+       <!-- Creates javadocs for the extensions -->
+       <target name="extension-javadocs" depends="build" description="Generates the javadocs for the extensions archive">
+               <mkdir dir="${build.extension-javadocs}" />
+               <copy todir="${build.extension-javadocs}">
+                       <fileset dir="${help.dir}" defaultexcludes="yes">
+                               <include name="CustomExports.html" />
+                               <include name="CustomImports.html" />
+                       </fileset>
+               </copy>
+
+               <javadoc sourcepath="${java.dir}" destdir="${build.extension-javadocs}" author="true" version="true" windowtitle="JabRef-Extensions API" link="http://java.sun.com/j2se/1.4.1/docs/api/" Overview="${extensions.dir}/API/overview.html" access="protected">
+                       <!-- 
+                 create javadoc only selectively for classes that 
+                 users extending JabRef are likely to use
+              -->
+                       <fileset dir="${java.dir}" defaultexcludes="yes">
+                               <include name="net/sf/jabref/imports/ImportFormat.java" />
+                               <include name="net/sf/jabref/imports/ImportFormatReader.java" />
+                               <include name="net/sf/jabref/BibtexEntry.java" />
+                               <include name="net/sf/jabref/BibtexEntryType.java" />
+                               <include name="net/sf/jabref/AuthorList.java" />
+                               <include name="net/sf/jabref/AuthorList.java" />
+                               <include name="net/sf/jabref/export/layout/LayoutFormatter.java" />
+                       </fileset>
+
+                       <classpath refid="classpath" />
+               </javadoc>
+       </target>
+
+       <!-- Creates javadocs for the extensions -->
+       <target name="extensions" depends="extension-javadocs" description="Generates the extensions archive">
+               <!-- copy examples -->
+               <copy todir="${build.extensions}">
+                       <fileset dir="${java.dir}">
+                               <include name="net/sf/jabref/export/layout/format/CurrentDate.java" />
+                               <include name="net/sf/jabref/export/layout/format/ToLowerCase.java" />
+                               <include name="net/sf/jabref/export/layout/format/HTMLChars.java" />
+                               <include name="net/sf/jabref/imports/*Importer.java" />
+                       </fileset>
+               </copy>
+               <mkdir dir="${build.extension-layout}" />
+               <copy todir="${build.extension-layout}">
+                       <fileset dir="${layout.dir}" />
+               </copy>
+               <copy todir="${build.extensions}">
+                       <fileset dir="${extensions.dir}" />
+                       <filterset>
+                               <filter token="version" value="${jabref.version}" />
+                       </filterset>
+               </copy>
+               <!-- create extensions-zip file -->
+               <zip destfile="${build.dir}/jabref-extensions.zip">
+                       <zipfileset dir="${build.extensions}" prefix="jabref-extensions" />
+               </zip>
+       </target>
+
+       <target name="clean" depends="win.installer.clean" description="Clean project">
+               <delete dir="${build.dir}" />
+       </target>
+
+       <!-- Unpacks jar needed jar files from lib directory into temp directory. -->
+       <target name="unjarlib" description="Unpacks jars from library">
+               <mkdir dir="${build.tmp}" />
+               <unjar src="${library.directory}/antlr.jar" dest="${build.tmp}" />
+               <unjar src="${library.directory}/antlr-3.0b5.jar" dest="${build.tmp}" />
+               <unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
+               <unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
+               <unjar src="${library.directory}/spin.jar" dest="${build.tmp}" />
+               <unjar src="${library.directory}/glazedlists-1.7.0_java14.jar" dest="${build.tmp}" />
+               <unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
+        <unjar src="${library.directory}/PDFBox-0.7.3-dev-reduced.jar" dest="${build.tmp}" />
+        <unjar src="${library.directory}/JempBox-0.1.0-dev.jar" dest="${build.tmp}" />
+        <delete dir="${build.tmp}/META-INF" />
+               <!-- rename the microba license file -->
+               <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt" />
+       </target>
+
+
+       <target name="osxjar">
+               <jarbundler dir="${build.lib}" name="JabRef" mainclass="net.sf.jabref.JabRef" jars="${build.lib}/jabref.jar" icon="${images.dir}/JabRef-Logo.icns" version="${jabref.version}" jvmversion="1.4+" stubfile="${library.directory}/JavaApplicationStub" />
+       </target>
+
+
+       <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+       <!-- Build Windows Installer                                                    -->
+       <!--                                                                            -->
+       <!-- Don't forget to set nsis.executable property                               -->
+       <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+       <target name="win.installer.clean" description="Delete Installer and Exe-Wrapper + Temp-files">
+               <delete dir="${win.installer.dir}/dist" />
+               <delete file="${win.installer.dir}/JabRefSetup.exe" />
+       </target>
+
+       <target name="win.installer.prepare" depends="jars" if="is.windows" description="Copy files in place to be used by the installer">
+               <!-- Gather everything that will go into the installer in dist -->
+               <mkdir dir="${win.installer.dir}/dist" />
+               <!--            <copy file="${build.lib}/${jabref.bin}.jar" 
+               todir="${win.installer.dir}/dist" /> -->
+               <copy todir="${win.installer.dir}/dist">
+                       <fileset dir="${txt.dir}">
+                               <include name="gpl.txt" />
+                               <include name="lesser.txt" />
+                               <include name="README" />
+                       </fileset>
+               </copy>
+       </target>
+
+       <target name="win.installer.exewrapper" depends="win.installer.prepare" if="is.windows" description="Create Exe-Wrapper">
+               <exec dir="." executable="${nsis.executable}" failonerror="true">
+                       <arg line="'/DJARFILE=${jabref.bin}.jar' '/DVERSION=${jabref.version}' '/DAPPICON=../../../${images.dir}/JabRef.ico' ${win.installer.dir}/launcher.nsi" />
+               </exec>
+       </target>
+
+       <target name="win.installer.build" depends="win.installer.exewrapper" if="is.windows" description="Create Windows-Installer.">
+               <exec dir="." executable="${nsis.executable}" failonerror="true">
+                       <arg line="'/DVERSION=${jabref.version}' ${win.installer.dir}/setup.nsi" />
+               </exec>
+       </target>
+
+       <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         What's about the software design ?!;-)
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-        <target name="pmd" description="SOFTWAREDESIGN: Project Mess Detector !;-)">
-                <echo>Checking Project Mess Detection (PMD) rulesets.</echo>
-                <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask">
-                        <classpath>
-                                <pathelement path="${classpath}" />
-                                <fileset dir="${library.directory}">
-                                        <include name="*.jar" />
-                                </fileset>
-                        </classpath>
-                </taskdef>
-                <!-- allowed Pretty Much Done rulsets -->
-                <!-- rulesets/basic.xml -->
-                <!-- rulesets/braces.xml -->
-                <!-- rulesets/codesize.xml-->
-                <!-- rulesets/controversial.xml-->
-                <!-- rulesets/coupling.xml-->
-                <!-- rulesets/design.xml -->
-                <!-- rulesets/experimental.xml -->
-                <!-- rulesets/favorites.xml -->
-                <!-- rulesets/imports.xml -->
-                <!-- rulesets/naming.xml -->
-                <!-- rulesets/javabean.xml -->
-                <!-- rulesets/junit.xml -->
-                <!-- rulesets/scratchpad.xml -->
-                <!-- rulesets/strictexception.xml -->
-                <!-- rulesets/strings.xml -->
-                <!-- rulesets/unusedcode.xml -->
-
-                <pmd rulesetfiles="rulesets/unusedcode.xml,rulesets/basic.xml" failonerror="no">
-                        <formatter type="html" toFile="${build.dir}/pmd_report.html" />
-                        <fileset dir="${src.dir}">
-                                <include name="**/*.java" />
-                        </fileset>
-                </pmd>
-
-                <!-- check for duplicated code -->
-                <echo>WARNING: use environment variable: ANT_OPTS=-Xmx512m or this task will fail.</echo>
-                <echo>Checking for duplicated code using the Copy/Paste Detector (CPD).</echo>
-                <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask">
-                        <classpath>
-                                <pathelement path="${classpath}" />
-                                <fileset dir="${library.directory}">
-                                        <include name="*.jar" />
-                                </fileset>
-                        </classpath>
-                </taskdef>
-                <cpd format="text" minimumTokenCount="100" outputFile="${build.dir}/duplicated_code_report.txt">
-                        <fileset dir="${src.dir}">
-                                <include name="**/*.java" />
-                        </fileset>
-                </cpd>
-        </target>
-
-
-        <target name="javancss" description="SOFTWAREDESIGN: Determining the NCSS and CCN code metrics for JOELib.">
-                <taskdef name="javancss" classname="javancss.JavancssAntTask">
-                        <classpath>
-                                <pathelement path="${classpath}" />
-                                <fileset dir="${library.directory}">
-                                        <include name="*.jar" />
-                                </fileset>
-                        </classpath>
-                </taskdef>
-                <echo>Cyclomatic
+    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
+
+       <target name="pmd" description="SOFTWAREDESIGN: Project Mess Detector !;-)">
+               <echo>Checking Project Mess Detection (PMD) rulesets.</echo>
+               <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask">
+                       <classpath>
+                               <pathelement path="${classpath}" />
+                               <fileset dir="${library.directory}">
+                                       <include name="*.jar" />
+                               </fileset>
+                       </classpath>
+               </taskdef>
+               <!-- allowed Pretty Much Done rulsets -->
+               <!-- rulesets/basic.xml -->
+               <!-- rulesets/braces.xml -->
+               <!-- rulesets/codesize.xml-->
+               <!-- rulesets/controversial.xml-->
+               <!-- rulesets/coupling.xml-->
+               <!-- rulesets/design.xml -->
+               <!-- rulesets/experimental.xml -->
+               <!-- rulesets/favorites.xml -->
+               <!-- rulesets/imports.xml -->
+               <!-- rulesets/naming.xml -->
+               <!-- rulesets/javabean.xml -->
+               <!-- rulesets/junit.xml -->
+               <!-- rulesets/scratchpad.xml -->
+               <!-- rulesets/strictexception.xml -->
+               <!-- rulesets/strings.xml -->
+               <!-- rulesets/unusedcode.xml -->
+
+               <pmd rulesetfiles="rulesets/unusedcode.xml,rulesets/basic.xml" failonerror="no">
+                       <formatter type="html" toFile="${build.dir}/pmd_report.html" />
+                       <fileset dir="${src.dir}">
+                               <include name="**/*.java" />
+                       </fileset>
+               </pmd>
+
+               <!-- check for duplicated code -->
+               <echo>WARNING: use environment variable: ANT_OPTS=-Xmx512m or this task will fail.</echo>
+               <echo>Checking for duplicated code using the Copy/Paste Detector (CPD).</echo>
+               <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask">
+                       <classpath>
+                               <pathelement path="${classpath}" />
+                               <fileset dir="${library.directory}">
+                                       <include name="*.jar" />
+                               </fileset>
+                       </classpath>
+               </taskdef>
+               <cpd format="text" minimumTokenCount="100" outputFile="${build.dir}/duplicated_code_report.txt">
+                       <fileset dir="${src.dir}">
+                               <include name="**/*.java" />
+                       </fileset>
+               </cpd>
+       </target>
+
+
+       <target name="javancss" description="SOFTWAREDESIGN: Determining the NCSS and CCN code metrics for JOELib.">
+               <taskdef name="javancss" classname="javancss.JavancssAntTask">
+                       <classpath>
+                               <pathelement path="${classpath}" />
+                               <fileset dir="${library.directory}">
+                                       <include name="*.jar" />
+                               </fileset>
+                       </classpath>
+               </taskdef>
+               <echo>Cyclomatic
 Complexity             Ease of       Risk
 Number (CCN)           maintenance
 (McCabe metric)
@@ -513,46 +490,35 @@ Number (CCN)           maintenance
 >50, unstable          very hard     very high
 
 </echo>
-                <javancss srcdir="${src.dir}" includes="**/*.java" excludes="jama/**/*.java, jmat/**/*.java, cformat/**/*.java" abortOnFail="false" ccnPerFuncMax="30" generateReport="true" outputfile="${build.dir}/javancss_report.plain" format="plain" packageMetrics="true" classMetrics="false" functionMetrics="false" />
-        </target>
-
-        <target name="jalopy" description="SOFTWAREDESIGN: source code formatter using the JOELib convention.">
-                <taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
-                        <classpath>
-                                <pathelement path="${classpath}" />
-                                <fileset dir="${library.directory}">
-                                        <include name="*.jar" />
-                                </fileset>
-                        </classpath>
-                </taskdef>
-                <jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
-                        <fileset dir="${src.dir}">
-                                <include name="java/net/sf/jabref/**/*.java" />
-                        </fileset>
-                </jalopy>
-        </target>
-
-        <target name="test">
-                <junit printsummary="yes" fork="yes" haltonfailure="no">
-                        <batchtest fork="yes" todir="/tmp/testres">
-                                <fileset dir="${build.classes}">
-                                        <include name="**/*Tester.class" />
-                                        <include name="**/*Test.class" />
-                                </fileset>
-                        </batchtest>
-
-                        <classpath>
-                                <pathelement location="${build.lib}/jabref.jar" />
-                                <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                                <pathelement location="${library.directory}/commons-logging.jar" />-->
-                                <pathelement location="${library.directory}/antlr.jar" />
-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
-                                <pathelement location="${library.directory}/spin-1.4.jar" />
-                        </classpath>
-
-                        <!--<test name="tests.net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviatorTester"/>-->
-                </junit>
-        </target>
-
+               <javancss srcdir="${src.dir}" includes="**/*.java" excludes="jama/**/*.java, jmat/**/*.java, cformat/**/*.java" abortOnFail="false" ccnPerFuncMax="30" generateReport="true" outputfile="${build.dir}/javancss_report.plain" format="plain" packageMetrics="true" classMetrics="false" functionMetrics="false" />
+       </target>
+
+       <target name="jalopy" description="SOFTWAREDESIGN: source code formatter using the JOELib convention.">
+               <taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
+                       <classpath>
+                               <pathelement path="${classpath}" />
+                               <fileset dir="${library.directory}">
+                                       <include name="*.jar" />
+                               </fileset>
+                       </classpath>
+               </taskdef>
+               <jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
+                       <fileset dir="${src.dir}">
+                               <include name="java/net/sf/jabref/**/*.java" />
+                       </fileset>
+               </jalopy>
+       </target>
+
+       <target name="test">
+               <junit printsummary="yes" fork="yes" haltonfailure="no">
+                       <batchtest fork="yes" todir="/tmp/testres">
+                               <fileset dir="${build.classes}">
+                                       <include name="**/*Tester.class" />
+                                       <include name="**/*Test.class" />
+                               </fileset>
+                       </batchtest>
+                       <classpath refid="classpath"/>
+               </junit>
+       </target>
 </project>
index 766d77c..a410c7f 100644 (file)
@@ -1,11 +1,16 @@
-jabref (2.1-5) unstable; urgency=low
+jabref (2.2~b2-1) UNRELEASED; urgency=low
 
   * Fix typo in long description.
-  * Remove j2re1.4 from Depends, JabRef now needs Java 1.5.
-  * Build against Debian packages of libraries instead of pre-built jar files
-    (closes: #389068).
-
- -- gregor herrmann <gregor+debian@comodo.priv.at>  Fri, 29 Sep 2006 23:29:17 +0200
+  * New upstream release:
+    - remove j2re1.4 from Depends, JabRef now needs Java 1.5;
+    - undistributable fonts no longer included (closes: #393676);
+    - includes the patch to make Enter work in dialogs, therefore remove
+      patch 02_button;
+    - update patch 01_free_javac;
+    - update debian/copyright (new contributors);
+    - update debian/rules (icon file name changed).
+
+ -- gregor herrmann <gregor+debian@comodo.priv.at>  Sun, 26 Nov 2006 21:50:54 +0100
 
 jabref (2.1-4) unstable; urgency=low
 
index 653f8a3..59a31d4 100644 (file)
@@ -4,7 +4,7 @@ Priority: optional
 Maintainer: gregor herrmann <gregor+debian@comodo.priv.at>
 Uploaders: tony mancill <tmancill@debian.org>
 Build-Depends: debhelper (>= 5.0.0), dpatch
-Build-Depends-Indep: java-gcj-compat-dev, ant, imagemagick, libjgoodies-forms-java, libjgoodies-looks-java, libmicroba-java, libglazedlists-java, libspin-java
+Build-Depends-Indep: java-gcj-compat-dev, ant, imagemagick
 Standards-Version: 3.7.2
 XS-Vcs-Svn: http://svn.toastfreeware.priv.at/debian/jabref/trunk/
 
index 82da132..0c80300 100644 (file)
@@ -34,7 +34,9 @@ Michel Baylac
 Guillaume Gardey 
 Cyrille d'Haese 
 Raik Nagel 
+Christopher Oezbek
 Ellen Reitmayr 
+Gert Renckens
 Andreas Rudert 
 Michael Spiegel 
 Ulrik Stervbo 
@@ -55,16 +57,18 @@ Sascha Hunold
 Bernd Kalbfuss 
 Martin Kähmer 
 Ervin Kolenovic
-Krzysztof A. Kociuszkiewicz
+Krzysztof A. Kosciuszkiewicz
+Christian Kopf
 Jeffrey Kuhn
 Alex Montgomery
-Christopher Oezbek
 John Relph
 Moritz Ringler
 Andreas Rudert
+Mark Schenk
 Rudolf Seemann
 Toralf Senger
 Mike Smoot
+Ulrich Stärk
 Martin Stolle
 David Weitzman
 Seb Wills
@@ -81,8 +85,7 @@ JGoodies (http://www.jgoodies.com) under the terms of the BSD License (see
 http://www.opensource.org/licenses/bsd-license.html for details).
 
 Also included are two additional classes (SimpleInternalFrame and
-UIFSplitPane) by Karsten Lentzsch, which are distributed under these terms.
-[0]
+UIFSplitPane) by Karsten Lentzsch, which are distributed under these terms. [0]
 
 Command line options are parsed using RitOpt
 (http://ritopt.sourceforge.net). RitOpt is distributed under the terms of
index 4a17e3a..2a20555 100644 (file)
@@ -1,3 +1 @@
 01_free_javac
-02_button
-03_libs
index f5cb953..e24e785 100755 (executable)
@@ -6,10 +6,10 @@
 ##     Thanks to Matthias Klose, cf. #383006
 
 @DPATCH@
-diff -urNad jabref~/src/java/net/sf/jabref/JabRef.java jabref/src/java/net/sf/jabref/JabRef.java
---- jabref~/src/java/net/sf/jabref/JabRef.java 2006-08-10 21:38:43.000000000 +0200
-+++ jabref/src/java/net/sf/jabref/JabRef.java  2006-09-24 01:22:03.000000000 +0200
-@@ -43,7 +43,6 @@
+diff -urNad jabref-2.2~b2~/src/java/net/sf/jabref/JabRef.java jabref-2.2~b2/src/java/net/sf/jabref/JabRef.java
+--- jabref-2.2~b2~/src/java/net/sf/jabref/JabRef.java  2006-11-26 21:10:32.000000000 +0100
++++ jabref-2.2~b2/src/java/net/sf/jabref/JabRef.java   2006-11-26 21:17:14.000000000 +0100
+@@ -46,7 +46,6 @@
  
  import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
  import com.jgoodies.looks.plastic.PlasticLookAndFeel;
@@ -17,7 +17,7 @@ diff -urNad jabref~/src/java/net/sf/jabref/JabRef.java jabref/src/java/net/sf/ja
  import com.jgoodies.looks.FontSet;
  import com.jgoodies.looks.FontSets;
  import com.jgoodies.looks.FontPolicy;
-@@ -624,27 +623,6 @@
+@@ -578,27 +577,6 @@
  
                      //Plastic3DLookAndFeel plLnf = (Plastic3DLookAndFeel) lnf;
                  }
@@ -39,15 +39,15 @@ diff -urNad jabref~/src/java/net/sf/jabref/JabRef.java jabref/src/java/net/sf/ja
 -                        FontPolicy fixedPolicy = FontPolicies.createFixedPolicy(fontSet);
 -                        WindowsLookAndFeel.setFontPolicy(fixedPolicy);
 -                    }
--                    
+-
 -                    //WindowsLookAndFeel plLnf = (WindowsLookAndFeel) lnf;
 -                }
  
                  if (lnf != null) {
                      try {
-diff -urNad jabref~/src/java/net/sf/jabref/export/VerifyingWriter.java jabref/src/java/net/sf/jabref/export/VerifyingWriter.java
---- jabref~/src/java/net/sf/jabref/export/VerifyingWriter.java 2006-02-25 18:58:27.000000000 +0100
-+++ jabref/src/java/net/sf/jabref/export/VerifyingWriter.java  2006-09-24 01:22:03.000000000 +0200
+diff -urNad jabref-2.2~b2~/src/java/net/sf/jabref/export/VerifyingWriter.java jabref-2.2~b2/src/java/net/sf/jabref/export/VerifyingWriter.java
+--- jabref-2.2~b2~/src/java/net/sf/jabref/export/VerifyingWriter.java  2006-11-26 21:10:32.000000000 +0100
++++ jabref-2.2~b2/src/java/net/sf/jabref/export/VerifyingWriter.java   2006-11-26 21:14:29.000000000 +0100
 @@ -1,7 +1,5 @@
  package net.sf.jabref.export;
  
diff --git a/debian/patches/02_button.dpatch b/debian/patches/02_button.dpatch
deleted file mode 100755 (executable)
index 6dc2d53..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /bin/sh /usr/share/dpatch/dpatch-run
-## 02_button.dpatch by  <gregor+debian@comodo.priv.at>
-##
-## All lines beginning with `## DP:' are a description of the patch.
-## DP: Make buttons react to 'enter'.
-##     Patch by Morten Omholt Alver (upstream author)
-
-@DPATCH@
-diff -urNad jabref~/src/java/net/sf/jabref/JabRef.java jabref/src/java/net/sf/jabref/JabRef.java
---- jabref~/src/java/net/sf/jabref/JabRef.java 2006-09-25 00:43:59.000000000 +0200
-+++ jabref/src/java/net/sf/jabref/JabRef.java  2006-09-25 00:44:19.000000000 +0200
-@@ -31,6 +31,7 @@
- import gnu.dtools.ritopt.*;
- import java.awt.*;
-+import java.awt.event.* ;
- import java.io.*;
- import java.io.File;
-@@ -632,6 +633,15 @@
-                             UIManager.put("SimpleInternalFrame.activeTitleBackground", GUIGlobals.gradientBlue);
-                             //UIManager.put("TabbedPane.selected", Color.red);
-                         }
-+
-+                      if (!Globals.ON_WIN && !Globals.ON_MAC) {
-+                            // For Linux, add Enter as button click key:
-+                            UIDefaults def = UIManager.getDefaults();
-+                            InputMap im = (InputMap)def.get("Button.focusInputMap");
-+                            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), "pressed");
-+                            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true), "released");
-+                        }
-+
-                     } catch (Throwable ex) {
-                         ex.printStackTrace();
-                         System.err.println("Trying to set system default Look&Feel...");
diff --git a/debian/patches/02_libs.dpatch b/debian/patches/02_libs.dpatch
new file mode 100755 (executable)
index 0000000..f9c6cd2
--- /dev/null
@@ -0,0 +1,192 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 03_libs.dpatch by  <gregor+debian@comodo.priv.at>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Replace pre-compiled libs by Debian packages
+
+@DPATCH@
+diff -urNad jabref~/build.xml jabref/build.xml
+--- jabref~/build.xml  2006-09-30 11:57:24.000000000 +0200
++++ jabref/build.xml   2006-10-15 18:19:19.000000000 +0200
+@@ -86,6 +86,7 @@
+         <!-- Set the properties for library directories -->
+         <property name="library.directory" value="lib" />
++        <property name="library.directory.debian" value="/usr/share/java" />
+     <taskdef name="jarbundler"
+@@ -101,6 +102,9 @@
+                 <fileset dir="${library.directory}">
+                         <include name="*.jar" />
+                 </fileset>
++                <fileset dir="${library.directory.debian}">
++                        <include name="*.jar" />
++                </fileset>
+         </path>
+     <!-- Runs project (e.g. in NetBeans 4) -->
+@@ -110,12 +114,12 @@
+             <pathelement location="${build.lib}/jabref.jar"/>
+             <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
+             <pathelement location="${library.directory}/commons-logging.jar" />-->
+-            <pathelement location="${library.directory}/antlr.jar" />
+-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
+-            <pathelement location="${library.directory}/spin-1.4.jar" />
+-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
+-            <pathelement location="${library.directory}/microba.jar" />
++            <pathelement location="${library.directory.debian}/antlr.jar" />
++            <pathelement location="${library.directory.debian}/looks.jar" />
++            <pathelement location="${library.directory.debian}/forms.jar" />
++            <pathelement location="${library.directory.debian}/spin.jar" />
++            <pathelement location="${library.directory.debian}/glazedlists.jar" />
++            <pathelement location="${library.directory.debian}/microba.jar" />
+         </classpath>
+          </java>
+     </target>
+@@ -139,11 +143,11 @@
+       <nbprofiledirect>
+           <classpath>
+             <pathelement location="${build.lib}/jabref.jar"/>
+-            <pathelement location="${library.directory}/antlr.jar" />
+-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
+-            <pathelement location="${library.directory}/spin-1.4.jar" />
+-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
++            <pathelement location="${library.directory.debian}/antlr.jar" />
++            <pathelement location="${library.directory.debian}/looks.jar" />
++            <pathelement location="${library.directory.debian}/forms.jar" />
++            <pathelement location="${library.directory.debian}/spin.jar" />
++            <pathelement location="${library.directory.debian}/glazedlists.jar" />
+         </classpath>
+       </nbprofiledirect>
+@@ -155,11 +159,11 @@
+           <env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}"/>
+           <classpath>
+             <pathelement location="${build.lib}/jabref.jar"/>
+-            <pathelement location="${library.directory}/antlr.jar" />
+-            <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-            <pathelement location="${library.directory}/forms-1.0.4.jar" />
+-            <pathelement location="${library.directory}/spin-1.4.jar" />
+-            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
++            <pathelement location="${library.directory.debian}/antlr.jar" />
++            <pathelement location="${library.directory.debian}/looks.jar" />
++            <pathelement location="${library.directory.debian}/forms.jar" />
++            <pathelement location="${library.directory.debian}/spin.jar" />
++            <pathelement location="${library.directory.debian}/glazedlists.jar" />
+         </classpath>
+       </java>
+@@ -175,12 +179,12 @@
+                                 <pathelement path="${build.classes}" />
+                                 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
+                                 <pathelement location="${library.directory}/commons-logging.jar" />-->
+-                                <pathelement location="${library.directory}/antlr.jar" />
+-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-                                <pathelement location="${library.directory}/forms-1.0.4.jar" />
+-                                <pathelement location="${library.directory}/spin-1.4.jar" />
+-                                <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
+-                                <pathelement location="${library.directory}/microba.jar" />
++                                <pathelement location="${library.directory.debian}/antlr.jar" />
++                                <pathelement location="${library.directory.debian}/looks.jar" />
++                                <pathelement location="${library.directory.debian}/forms.jar" />
++                                <pathelement location="${library.directory.debian}/spin.jar" />
++                                <pathelement location="${library.directory.debian}/glazedlists.jar" />
++                                <pathelement location="${library.directory.debian}/microba.jar" />
+                         </classpath>
+                 </javac>
+         </target>
+@@ -194,9 +198,9 @@
+                                 <pathelement path="${build.classes}" />
+                                 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
+                                 <pathelement location="${library.directory}/commons-logging.jar" />-->
+-                                <pathelement location="${library.directory}/antlr.jar" />
+-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-                                <pathelement location="${library.directory}/spin-1.4.jar" />
++                                <pathelement location="${library.directory.debian}/antlr.jar" />
++                                <pathelement location="${library.directory.debian}/looks.jar" />
++                                <pathelement location="${library.directory.debian}/spin.jar" />
+                         </classpath>
+                 </javac>
+@@ -409,16 +413,16 @@
+                 <mkdir dir="${build.tmp}"/>
+                 <!--<unjar src="${library.directory}/commons-httpclient-2.0.jar" dest="${build.tmp}" />
+                 <unjar src="${library.directory}/commons-logging.jar" dest="${build.tmp}" />-->
+-                <unjar src="${library.directory}/antlr.jar" dest="${build.tmp}" />
++                <unjar src="${library.directory.debian}/antlr.jar" dest="${build.tmp}" />
+                 <!--                <unjar src="${library.directory}/plastic-1.2.1.jar" dest="${build.classes}" />-->
+-                <unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
+-                <unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
+-                <unjar src="${library.directory}/spin-1.4.jar" dest="${build.tmp}" />
+-                <unjar src="${library.directory}/glazedlists-1.5.0_java14.jar" dest="${build.tmp}" />
+-                <unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
++                <unjar src="${library.directory.debian}/looks.jar" dest="${build.tmp}" />
++                <unjar src="${library.directory.debian}/forms.jar" dest="${build.tmp}" />
++                <unjar src="${library.directory.debian}/spin.jar" dest="${build.tmp}" />
++                <unjar src="${library.directory.debian}/glazedlists.jar" dest="${build.tmp}" />
++                <unjar src="${library.directory.debian}/microba.jar" dest="${build.tmp}" />
+             <delete dir="${build.tmp}/META-INF"/>
+           <!-- rename the microba license file -->
+-          <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt"/>
++          <!-- <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt"/> -->
+         </target>
+@@ -447,6 +451,9 @@
+                                 <fileset dir="${library.directory}">
+                                         <include name="*.jar" />
+                                 </fileset>
++                                <fileset dir="${library.directory.debian}">
++                                        <include name="*.jar" />
++                                </fileset>
+                         </classpath>
+                 </taskdef>
+                 <!-- allowed Pretty Much Done rulsets -->
+@@ -483,6 +490,9 @@
+                                 <fileset dir="${library.directory}">
+                                         <include name="*.jar" />
+                                 </fileset>
++                                <fileset dir="${library.directory.debian}">
++                                        <include name="*.jar" />
++                                </fileset>
+                         </classpath>
+                 </taskdef>
+                 <cpd format="text" minimumTokenCount="100" outputFile="${build.dir}/duplicated_code_report.txt">
+@@ -500,6 +510,9 @@
+                                 <fileset dir="${library.directory}">
+                                         <include name="*.jar" />
+                                 </fileset>
++                                <fileset dir="${library.directory.debian}">
++                                        <include name="*.jar" />
++                                </fileset>
+                         </classpath>
+                 </taskdef>
+                 <echo>Cyclomatic
+@@ -523,6 +536,9 @@
+                                 <fileset dir="${library.directory}">
+                                         <include name="*.jar" />
+                                 </fileset>
++                                <fileset dir="${library.directory.debian}">
++                                        <include name="*.jar" />
++                                </fileset>
+                         </classpath>
+                 </taskdef>
+                 <jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
+@@ -545,10 +561,10 @@
+                                 <pathelement location="${build.lib}/jabref.jar" />
+                                 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
+                                 <pathelement location="${library.directory}/commons-logging.jar" />-->
+-                                <pathelement location="${library.directory}/antlr.jar" />
+-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
+-                                <pathelement location="${library.directory}/spin-1.4.jar" />
++                                <pathelement location="${library.directory.debian}/antlr.jar" />
++                                <pathelement location="${library.directory.debian}/looks.jar" />
++                                <pathelement location="${library.directory.debian}/forms.jar" />
++                                <pathelement location="${library.directory.debian}/spin.jar" />
+                         </classpath>
+                         <!--<test name="tests.net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviatorTester"/>-->
diff --git a/debian/patches/03_libs.dpatch b/debian/patches/03_libs.dpatch
deleted file mode 100755 (executable)
index f9c6cd2..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-#! /bin/sh /usr/share/dpatch/dpatch-run
-## 03_libs.dpatch by  <gregor+debian@comodo.priv.at>
-##
-## All lines beginning with `## DP:' are a description of the patch.
-## DP: Replace pre-compiled libs by Debian packages
-
-@DPATCH@
-diff -urNad jabref~/build.xml jabref/build.xml
---- jabref~/build.xml  2006-09-30 11:57:24.000000000 +0200
-+++ jabref/build.xml   2006-10-15 18:19:19.000000000 +0200
-@@ -86,6 +86,7 @@
-         <!-- Set the properties for library directories -->
-         <property name="library.directory" value="lib" />
-+        <property name="library.directory.debian" value="/usr/share/java" />
-     <taskdef name="jarbundler"
-@@ -101,6 +102,9 @@
-                 <fileset dir="${library.directory}">
-                         <include name="*.jar" />
-                 </fileset>
-+                <fileset dir="${library.directory.debian}">
-+                        <include name="*.jar" />
-+                </fileset>
-         </path>
-     <!-- Runs project (e.g. in NetBeans 4) -->
-@@ -110,12 +114,12 @@
-             <pathelement location="${build.lib}/jabref.jar"/>
-             <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-             <pathelement location="${library.directory}/commons-logging.jar" />-->
--            <pathelement location="${library.directory}/antlr.jar" />
--            <pathelement location="${library.directory}/looks-2.0.4.jar" />
--            <pathelement location="${library.directory}/forms-1.0.4.jar" />
--            <pathelement location="${library.directory}/spin-1.4.jar" />
--            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
--            <pathelement location="${library.directory}/microba.jar" />
-+            <pathelement location="${library.directory.debian}/antlr.jar" />
-+            <pathelement location="${library.directory.debian}/looks.jar" />
-+            <pathelement location="${library.directory.debian}/forms.jar" />
-+            <pathelement location="${library.directory.debian}/spin.jar" />
-+            <pathelement location="${library.directory.debian}/glazedlists.jar" />
-+            <pathelement location="${library.directory.debian}/microba.jar" />
-         </classpath>
-          </java>
-     </target>
-@@ -139,11 +143,11 @@
-       <nbprofiledirect>
-           <classpath>
-             <pathelement location="${build.lib}/jabref.jar"/>
--            <pathelement location="${library.directory}/antlr.jar" />
--            <pathelement location="${library.directory}/looks-2.0.4.jar" />
--            <pathelement location="${library.directory}/forms-1.0.4.jar" />
--            <pathelement location="${library.directory}/spin-1.4.jar" />
--            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-+            <pathelement location="${library.directory.debian}/antlr.jar" />
-+            <pathelement location="${library.directory.debian}/looks.jar" />
-+            <pathelement location="${library.directory.debian}/forms.jar" />
-+            <pathelement location="${library.directory.debian}/spin.jar" />
-+            <pathelement location="${library.directory.debian}/glazedlists.jar" />
-         </classpath>
-       </nbprofiledirect>
-@@ -155,11 +159,11 @@
-           <env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}"/>
-           <classpath>
-             <pathelement location="${build.lib}/jabref.jar"/>
--            <pathelement location="${library.directory}/antlr.jar" />
--            <pathelement location="${library.directory}/looks-2.0.4.jar" />
--            <pathelement location="${library.directory}/forms-1.0.4.jar" />
--            <pathelement location="${library.directory}/spin-1.4.jar" />
--            <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
-+            <pathelement location="${library.directory.debian}/antlr.jar" />
-+            <pathelement location="${library.directory.debian}/looks.jar" />
-+            <pathelement location="${library.directory.debian}/forms.jar" />
-+            <pathelement location="${library.directory.debian}/spin.jar" />
-+            <pathelement location="${library.directory.debian}/glazedlists.jar" />
-         </classpath>
-       </java>
-@@ -175,12 +179,12 @@
-                                 <pathelement path="${build.classes}" />
-                                 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                                 <pathelement location="${library.directory}/commons-logging.jar" />-->
--                                <pathelement location="${library.directory}/antlr.jar" />
--                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
--                                <pathelement location="${library.directory}/forms-1.0.4.jar" />
--                                <pathelement location="${library.directory}/spin-1.4.jar" />
--                                <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
--                                <pathelement location="${library.directory}/microba.jar" />
-+                                <pathelement location="${library.directory.debian}/antlr.jar" />
-+                                <pathelement location="${library.directory.debian}/looks.jar" />
-+                                <pathelement location="${library.directory.debian}/forms.jar" />
-+                                <pathelement location="${library.directory.debian}/spin.jar" />
-+                                <pathelement location="${library.directory.debian}/glazedlists.jar" />
-+                                <pathelement location="${library.directory.debian}/microba.jar" />
-                         </classpath>
-                 </javac>
-         </target>
-@@ -194,9 +198,9 @@
-                                 <pathelement path="${build.classes}" />
-                                 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                                 <pathelement location="${library.directory}/commons-logging.jar" />-->
--                                <pathelement location="${library.directory}/antlr.jar" />
--                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
--                                <pathelement location="${library.directory}/spin-1.4.jar" />
-+                                <pathelement location="${library.directory.debian}/antlr.jar" />
-+                                <pathelement location="${library.directory.debian}/looks.jar" />
-+                                <pathelement location="${library.directory.debian}/spin.jar" />
-                         </classpath>
-                 </javac>
-@@ -409,16 +413,16 @@
-                 <mkdir dir="${build.tmp}"/>
-                 <!--<unjar src="${library.directory}/commons-httpclient-2.0.jar" dest="${build.tmp}" />
-                 <unjar src="${library.directory}/commons-logging.jar" dest="${build.tmp}" />-->
--                <unjar src="${library.directory}/antlr.jar" dest="${build.tmp}" />
-+                <unjar src="${library.directory.debian}/antlr.jar" dest="${build.tmp}" />
-                 <!--                <unjar src="${library.directory}/plastic-1.2.1.jar" dest="${build.classes}" />-->
--                <unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
--                <unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
--                <unjar src="${library.directory}/spin-1.4.jar" dest="${build.tmp}" />
--                <unjar src="${library.directory}/glazedlists-1.5.0_java14.jar" dest="${build.tmp}" />
--                <unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
-+                <unjar src="${library.directory.debian}/looks.jar" dest="${build.tmp}" />
-+                <unjar src="${library.directory.debian}/forms.jar" dest="${build.tmp}" />
-+                <unjar src="${library.directory.debian}/spin.jar" dest="${build.tmp}" />
-+                <unjar src="${library.directory.debian}/glazedlists.jar" dest="${build.tmp}" />
-+                <unjar src="${library.directory.debian}/microba.jar" dest="${build.tmp}" />
-             <delete dir="${build.tmp}/META-INF"/>
-           <!-- rename the microba license file -->
--          <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt"/>
-+          <!-- <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt"/> -->
-         </target>
-@@ -447,6 +451,9 @@
-                                 <fileset dir="${library.directory}">
-                                         <include name="*.jar" />
-                                 </fileset>
-+                                <fileset dir="${library.directory.debian}">
-+                                        <include name="*.jar" />
-+                                </fileset>
-                         </classpath>
-                 </taskdef>
-                 <!-- allowed Pretty Much Done rulsets -->
-@@ -483,6 +490,9 @@
-                                 <fileset dir="${library.directory}">
-                                         <include name="*.jar" />
-                                 </fileset>
-+                                <fileset dir="${library.directory.debian}">
-+                                        <include name="*.jar" />
-+                                </fileset>
-                         </classpath>
-                 </taskdef>
-                 <cpd format="text" minimumTokenCount="100" outputFile="${build.dir}/duplicated_code_report.txt">
-@@ -500,6 +510,9 @@
-                                 <fileset dir="${library.directory}">
-                                         <include name="*.jar" />
-                                 </fileset>
-+                                <fileset dir="${library.directory.debian}">
-+                                        <include name="*.jar" />
-+                                </fileset>
-                         </classpath>
-                 </taskdef>
-                 <echo>Cyclomatic
-@@ -523,6 +536,9 @@
-                                 <fileset dir="${library.directory}">
-                                         <include name="*.jar" />
-                                 </fileset>
-+                                <fileset dir="${library.directory.debian}">
-+                                        <include name="*.jar" />
-+                                </fileset>
-                         </classpath>
-                 </taskdef>
-                 <jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
-@@ -545,10 +561,10 @@
-                                 <pathelement location="${build.lib}/jabref.jar" />
-                                 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
-                                 <pathelement location="${library.directory}/commons-logging.jar" />-->
--                                <pathelement location="${library.directory}/antlr.jar" />
--                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
--                                <pathelement location="${library.directory}/looks-2.0.4.jar" />
--                                <pathelement location="${library.directory}/spin-1.4.jar" />
-+                                <pathelement location="${library.directory.debian}/antlr.jar" />
-+                                <pathelement location="${library.directory.debian}/looks.jar" />
-+                                <pathelement location="${library.directory.debian}/forms.jar" />
-+                                <pathelement location="${library.directory.debian}/spin.jar" />
-                         </classpath>
-                         <!--<test name="tests.net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviatorTester"/>-->
index b0d93d1..864618b 100755 (executable)
@@ -19,7 +19,7 @@ configure-stamp:
 build: build-stamp patch
        ant compile unjarlib jars
        convert -geometry 32x32 src/images/JabRef-icon-48.png build/jabref32.xpm
-       convert -geometry 16x16 src/images/JabRef-icon.png build/jabref16.xpm
+       convert -geometry 16x16 src/images/JabRef-icon-48.png build/jabref16.xpm
 
 build-stamp: configure-stamp 
        dh_testdir
diff --git a/lib/JempBox-0.1.0-dev.jar b/lib/JempBox-0.1.0-dev.jar
new file mode 100644 (file)
index 0000000..735639d
Binary files /dev/null and b/lib/JempBox-0.1.0-dev.jar differ
diff --git a/lib/PDFBox-0.7.3-dev-reduced.jar b/lib/PDFBox-0.7.3-dev-reduced.jar
new file mode 100644 (file)
index 0000000..ffb9019
Binary files /dev/null and b/lib/PDFBox-0.7.3-dev-reduced.jar differ
diff --git a/lib/antlr-3.0b5.jar b/lib/antlr-3.0b5.jar
new file mode 100644 (file)
index 0000000..5449eb2
Binary files /dev/null and b/lib/antlr-3.0b5.jar differ
diff --git a/lib/glazedlists-1.5.0_java14.jar b/lib/glazedlists-1.5.0_java14.jar
deleted file mode 100644 (file)
index 8af40f5..0000000
Binary files a/lib/glazedlists-1.5.0_java14.jar and /dev/null differ
diff --git a/lib/glazedlists-1.7.0_java14.jar b/lib/glazedlists-1.7.0_java14.jar
new file mode 100644 (file)
index 0000000..1d2611b
Binary files /dev/null and b/lib/glazedlists-1.7.0_java14.jar differ
diff --git a/lib/spin-1.4.jar b/lib/spin-1.4.jar
deleted file mode 100644 (file)
index a683361..0000000
Binary files a/lib/spin-1.4.jar and /dev/null differ
diff --git a/lib/spin.jar b/lib/spin.jar
new file mode 100644 (file)
index 0000000..9d7f0e4
Binary files /dev/null and b/lib/spin.jar differ
index 9a88101..67e2be5 100755 (executable)
@@ -21,7 +21,9 @@ Michel Baylac,
 Guillaume Gardey,
 Cyrille d'Haese,
 Raik Nagel,
+Christopher Oezbek,
 Ellen Reitmayr,
+Gert Renckens,
 Andreas Rudert,
 Michael Spiegel,
 Ulrik Stervbo,
@@ -43,15 +45,17 @@ Bernd Kalbfuss,
 Martin K&auml;hmer,
 Ervin Kolenovic,
 Krzysztof A. Ko&#347;ciuszkiewicz,
+Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
-Christopher Oezbek,
 John Relph,
 Moritz Ringler,
 Andreas Rudert,
+Mark Schenk,
 Rudolf Seemann,
 Toralf Senger,
 Mike Smoot,
+Ulrich St&auml;rk,
 Martin Stolle,
 David Weitzman,
 Seb Wills,
index 4c33cb1..cda4f08 100644 (file)
@@ -46,4 +46,5 @@ at <p> http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html
 
 <p>&nbsp;
 
-</HTML>
+</body>
+</html>
index b503538..e2ae5b8 100755 (executable)
     <a href="CustomEntriesHelp.html">Customizing entry types</a><br>
     <a href="GeneralFields.html">Customizing general fields</a><br>
     <a href="EndNoteFilters.html">The EndNote import/export filter set</a><br>
-    <a href="OpenOfficeHelp.html">Using JabRef bibliographies in OpenOffice.org</a><br>
     <a href="EntryEditorHelp.html">Entry editor</a><br>
+    <a href="TimeStampHelp.html">Entry time stamps</a><br>
     <a href="CiteSeerHelp.html">Fetching entries from <em>CiteSeer</em></a><br>
     <a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a><br>
     <a href="IEEEXploreHelp.html">Fetching entries from <em>IEEExplore</em></a><br>
     <a href="ContentSelectorHelp.html">Field content selector</a><br>
-    <a href="JournalAbbreviations.html">Journal abbreviations</a><br>
     <a href="GroupsHelp.html">Help on using <em>Groups</em></a><br>
+    <a href="ImportInspectionDialog.html">Import inspection window</a><br>
+    <a href="JournalAbbreviations.html">Journal abbreviations</a><br>
     <a href="BaseFrameHelp.html">The JabRef main window</a><br>
-    <a href="MarkingHelp.html">Marking entries</a><br>
     <a href="OwnerHelp.html">The 'owner' field</a><br>
+    <a href="MarkingHelp.html">Marking entries</a><br>
+    <a href="OpenOfficeHelp.html">Using JabRef bibliographies in OpenOffice.org</a><br>
     <a href="ExternalFiles.html">PDF/PS/URL/DOI links in JabRef</a><br>
     <a href="SearchHelp.html">Searching in JabRef</a><br>
     <a href="StringEditorHelp.html">String editor</a><br>
-    <a href="TimeStampHelp.html">Entry time stamps</a><br>
-    <a href="ImportInspectionDialog.html">Import inspection window</a><br>
-
-
-
-
-
-
-
-
-
+    <a href="PreviewHelp.html">Entry preview setup</a><br>
+    <a href="XMPHelp.html">XMP metadata support in JabRef</a>
 
 </HTML>
index 07d468d..29d4f69 100644 (file)
@@ -99,9 +99,13 @@ This can be useful for some fomatters, e.g. the CurrentDate formatter (described
 <ul>
 <li><code>HTMLChars</code> : replaces TeX-specific special characters (e.g. {\^a} or {\"{o}})
   with their HTML representations.
+<li><code>HTMLParagraphs</code> : interprets two consecutive newlines (e.g. \n   \n) as the beginning of a new paragraph and creates paragraph-html-tags accordingly.
 <li><code>XMLChars</code> : replaces TeX-specific special characters (e.g. {\^a} or {\"{o}})
   with their XML representations.
+
 <li><code>CreateDocBookAuthors</code> : formats the author field in DocBook style.
+<li><code>CreateDocBookEditors</code> : to be documented.
+
 <li><code>CurrentDate</code> : outputs the current date. With no argument, this formatter outputs the
     current date and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time and time zone). By giving a
     different format string as argument, the date format can be customized. E.g.
@@ -109,17 +113,39 @@ This can be useful for some fomatters, e.g. the CurrentDate formatter (described
 
 <li><code>AuthorFirstFirst</code> : formats author/editor fields with the first names first.
 <li><code>AuthorFirstFirstCommas</code> : formats author/editor fields with the first names first, and deliminated by commas.
+<li><code>AuthorFirstAbbrLastCommas</code> : to be documented.
+<li><code>AuthorFirstAbbrLastOxfordCommas</code> : to be documented.
+<li><code>AuthorFirstLastOxfordCommas </code> : to be documented.
+
 <li><code>AuthorLastFirst</code> : formats author/editor fields with the last names first.
 <li><code>AuthorLastFirstAbbreviator</code> : abbreviates first and middle names of all authors. This formatter requires AuthorLastFirst
 to have been run earlier.
-<li><code>AuthorAndsReplacer</code> : replaces "and" between names with ";", and "&" between the last two. 
+<li><code>AuthorLastFirstCommas</code> : to be documented.
+<li><code>AuthorLastFirstOxfordCommas</code> : to be documented.
+<li><code>AuthorLastFirstAbbrCommas</code> : to be documented.
+<li><code>AuthorLastFirstAbbrOxfordCommas</code> : to be documented.
+
+<li><code>AuthorAndsReplacer</code> : replaces "and" between names with ";", and "&" between the last two.
 <li><code>AuthorAndsCommaReplacer</code> : replaces "and" between names with ",", and "&" between the last two.
+<li><code>AuthorOrgSci</code> : first author is in "last, first" all others in "first last". First names are abbreviated.
+<li><code>AuthorAbbreviator : to be documented.
+
+<li><code>NoSpaceBetweenAbbreviations</code> : spaces between multiple abbreviated first names are removed.
 <li><code>FormatPagesForHTML</code> : replaces "--" with "-".
   <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.
+
 <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".
+<li><code>RemoveBracketsAddComma</code> : to be documented.
+<li><code>RemoveWhitespace</code> : to be documented.
 <li><code>RemoveLatexCommands</code> : removes LaTeX commands like <code>\em</code>, <code>\textbf</code>, etc. If
   used together with <code>HTMLChars</code> or <code>XMLChars</code>, this formatter should be called last.
 <li><code>ToLowerCase</code> : turns all characters into lower case.
+
+<li><code>CompositeFormat</code> : to be documented.
+<li><code>GetOpenOfficeType</code> : to be documented.
+<li><code>RTFChars</code> : to be documented.
+<li><code>ResolvePDF</code> : to be documented.
+
 </ul>
 
 <p>If none of the available formatters can do what you want to achieve, you can add your own by implementing
@@ -127,7 +153,67 @@ to have been run earlier.
   into the <code>net.sf.jabref.export.layout.format</code> package, you can call the formatter by its
   class name only, like with the standard formatters. Otherwise, you must call the formatter by its fully
   qualified name (including package name). In any case, the formatter must be in your classpath when running
-  JabRef.
+  JabRef.</p>
+  
+<a name="NameFormatter">
+<H2>Using Custom Name Formatters</H2>
+
+<p>With JabRef 2.2 it is now possible to define custom name formatters using the bibtex-sty-file syntax. 
+This allows ultimate flexibility, but is a cumbersome to write</p>
+<p>You can define your own formatter in the preference tab "Name Formatter" using the following format
+and then use it with the name given to it as any other name formatter</p>
+
+<code>
+  &lt;case1&gt;@&lt;range11&gt;@&lt;format&gt;@&lt;range12&gt;@&lt;format&gt;@&lt;range13&gt;...@@<br>
+  &lt;case2&gt;@&lt;range21&gt;@... and so on.
+</code>
+
+<p>This format first splits the task to format a list of author into cases depending on
+how many authors there are (this is since some formats differ depending on how many authors there are). 
+Each individual case is separated by @@ and contains instructions on how to format each author in the case.
+These instructions are separated by a @.</p>
+<p>Cases are identified using integers (1,2,3,etc.) or the character * (matches any number of authors) and will tell 
+the formatter to apply the following instructions if there are a number of less or equal of authors given.
+</p>
+<p>
+  Ranges are either <code>&lt;integer&gt;..&lt;integer&gt;</code>, <code>&lt;integer&gt;</code> or the character <code>*</code> using a 1 based index for indexing 
+  authors from the given list of authors. Integer indexes can be negative to denote them to start from 
+  the end of the list where -1 is the last author.
+</p>
+
+<p>For instance with an authorlist of "Joe Doe and Mary Jane and Bruce Bar and Arthur Kay":</p>
+<ul>
+  <li> 1..3 will affect Joe, Mary and Bruce</li>
+  <li> 4..4 will affect Arthur </li>
+  <li> * will affect all of them</li>
+  <li> 2..-1 will affect Mary, Bruce and Arthur</li>
+</ul>
+
+<p>The <code>&lt;format&gt;</code>-strings use the Bibtex formatter format:</p>
+<p> 
+  The four letter v, f, l, j indicate the name parts von, first, last, jr which 
+  are used within curly braces. A single letter v, f, l, j indicates that the name should be abbreviated.
+  If one of these letters or letter pairs is encountered JabRef will output all the respective names 
+  (possibly abbreviated), but the whole expression in curly braces is only printed if the name part exists.</p>
+
+<p>For instance if the format is "{ll} {vv {von Part}} {ff}" and the names are "Mary Kay and John von Neumann",
+  then JabRef will output "Kay  Mary" (with two space between last and first) and "Neuman von von Part John".</p>
+  
+<p>I give two examples but would rather point you to the bibtex documentation.</p>
+
+<p>Small example: <code>"{ll}, {f.}"</code> will turn <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>
+
+<p>Large example:</p>
+<blockquote>
+<p> To turn: </p>
+<p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur Kay"</code></p>
+<p>into</p>
+<p><code>"Doe, J., Jane, M., Bar, B. and Kay, A."</code></p>
+<p>you would use</p>
+<p><code>1@*@{ll}, {f}.@@2@1@{ll}, {f}.@2@ and {ll}, {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}.@-1@ and {ll}, {f}.</code></p>
+</blockquote>
+<p>If somebody would like to write a better tutorial about this: Write a mail to one of the JabRef mailinglists!</p>
 
 <H3>Conditional output</H3>
 
@@ -159,7 +245,7 @@ field referred in the curly braces has changed value.
 your entries based on keyword.  Now use the following commands to group by keyword:
 
 <p><code>\begingroup{keywords}New Category: \format[HTMLChars]{\keywords}
-<br>   \endgroup{keywords}</code>
+<br>    \endgroup{keywords}</code>
 
 <H2>Sharing your work</H2>
 
index 91448bf..61ea300 100644 (file)
@@ -49,5 +49,37 @@ You can set PDF and PS directories specific to a database (<b>File -> Database p
 These directories will supersede the main directories.
 </P>
 
-
-</HTML>
+<a name="RegularExpressionSearch">
+<H2>Using Regular Expression Search for Auto-Linking</H2>
+</a>
+<p>
+In the previous sections JabRef's auto-linking feature was described: If you choose names for your files
+corresponding to the bibtex-key + plus the extension, JabRef will automatically be able to find it.
+</p><p>
+Since JabRef 2.2 it is now possible to have greater flexibility in the naming scheme by using
+regular expression for the search. In most cases it should not be necessary though to adapt the given default.
+</p><p>
+If you open the external preferences
+(Options -> Preferences -> External Programs) you will find an option called "Use Regular Expression Search".
+Checking this option will allow you to enter your own regular expression for search in the PDF directories.
+</p><p>
+The following syntax is understood:
+</p>
+<ul>
+  <li><code>*</code> - Search in all immediate all subdirectories excluding the current
+      and any deeper subdirectories.</li>
+  <li><code>**</code> - Search in all subdirectories recursively AND the current directory.</li>
+  <li><code>.</code> and <code>..</code> - The current directory and the parent directory.</li>
+  <li><code>[title]</code> - All expressions in square brackets are replace by the corresponding field in the current
+  entry</li>
+  <li><code>[extension]</code> - Is replaced by the file-extension of the field you are using.</li>
+  <li>All other text is interpreted as a regular expression. But caution: You need to escape backslashes by putting
+      two backslashes after each other to not confuse them with the path-separator.</li>
+</ul>
+<p>
+The default for searches is <code>**/.*[bibtexkey].*\\.[extension]</code>. As you can see this will
+search in all subdirectories of the extension-based directory (for instance in the PDF directory) for any file that has the correct extension and
+contains the Bibtex-key somewhere.
+</p>
+</body>
+</html>
index 491dd20..39b6b15 100644 (file)
@@ -8,7 +8,7 @@
 The entry preview is created using the same mechanism as used by the
 <a href="CustomExports.html">Custom export filter</a> facility. When previewed,
 an entry is processed using one of the two alternative layouts (you can switch between
-the two layouts by pressing CTRL-F9) to produce HTML code which is displayed by the
+the two layouts by pressing F9) to produce HTML code which is displayed by the
 preview panel.
 
 To modify the appearance and contents of the preview you need to edit the preview layouts
index 6503489..f9ca60d 100644 (file)
@@ -33,8 +33,12 @@ search".
 
 <H2>Normal</H2>
 
-In a normal search, the program searches your database for all occurences of your
-search string, once you press ENTER. All entries that don't match are hidden, leaving for display the matching entries only (filter mode), or are grayed-out (float mode).
+In a normal search, the program searches your database for all occurences of the words in your
+search string, once you press ENTER. Only entries containing all words will be considered matches.
+To search for sequences of words, enclose the sequences in double quotes. For instance, the query
+<b>progress "marine aquaculture"</b> will match entries containing both the word "progress" and the
+phrase "marine aquaculture". All entries that don't match are hidden, leaving for display the
+matching entries only (filter mode), or are grayed-out (float mode).
 To stop displaying the search results, press ESC or click "Clear search".
 
 <a name="advanced"><H2>Field specification, logical operators</H2>
diff --git a/src/help/XMPHelp.html b/src/help/XMPHelp.html
new file mode 100644 (file)
index 0000000..d8d937f
--- /dev/null
@@ -0,0 +1,114 @@
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>XMP metadata support in JabRef</H1>
+<p>
+XMP is a standard created by Adobe Systems for storing metadata (data about data) in files.
+An well known example for metadata are MP3 tags, which can be used to describe artist, album and song name
+of a MP3 file. Adding metadata to MP3 helps other people to identify the songs correctly independent of file-name
+and can provide means for software (MP3 players for instance) to sort and group songs.
+</p>
+<p>
+With XMP-support the JabRef team tries to bring the advantages of metadata to the world of reference managers.
+You can now choose to "Write XMP" metadata in the General Tab of JabRef, which will put all the Bibtex information
+into the PDF. If you then email this PDF to a collegue she can just drag the file into JabRef and all information
+that you entered will be available to her.
+</p>
+
+<H2>Usage</H2>
+
+To use the XMP-feature in JabRef you can do the following:
+
+<ul>
+  <li>To <b>import a single annotated PDF-file</b> that contains XMP you can select "File -> Import into... -> XMP-annotated PDF" or drag the file into the main view.</li>
+  <li>To <b>write the bibliographic information to the associated PDF</b> do the following: Double click the entry in the main view, go to the "General" tab and click on "Write XMP".</li>
+  <li>If you want <b>to annotate all the PDFs in a given database</b> you can select "Tools -> Write XMP for database"</li>
+  <li>To verify if it worked you can open the PDF in Adobe Acrobat and select
+  "File -> Document Properties -> Additional Metadata -> Advanced". In the tree to the right you should see an entry called "http://purl.org/net/bibteXMP"
+<ul>
+
+<h2>BibteXmp Fileformat</h2>
+
+<p>
+XMP uses a subset of the Resource Description Framework (RDF) to store data. For JabRef a new metadata
+format is used which maps very closely to BibTeX. Basically all fields and values are turned into
+nodes of an XML document. Only authors and editors are stored as rdf:Seq-structures, so users
+of the data can skip the splitting on 'and's. All strings and crossrefs will be resolved in the data.
+</p>
+<p>
+The following easy minimal schema is used:
+</p>
+<p>
+<ul>
+  <li>The BibTeX-key is stored as <code>bibtexkey</code>.</li>
+  <li>The type of the BibTeX-entry is stored as <code>entrytype</code>.</li>
+  <li><code>author</code> and <code>editor</code> are encoding as <code>rdf:Seq</code>s where the
+  individual authors are represented as <code>rdf:li</code>s.</li>
+  <li>All other fields are saved using their field-name as is.</li>
+</ul>
+</p>
+<p>
+The following is an example of the mapping
+</p>
+<pre>
+@INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+</pre>
+
+will be transformed into
+
+<pre>
+&lt;rdf:Description xmlns:bibtex=&quot;http://jabref.sourceforge.net/bibteXMP/&quot;
+    bibtex:bibtexkey=&quot;CroAnnHow05&quot;
+    bibtex:year=&quot;2005&quot;
+    bibtex:title=&quot;Effective work practices for floss development: A model and propositions&quot;
+    bibtex:owner=&quot;oezbek&quot;
+    bibtex:url=&quot;http://james.howison.name/publications.html&quot;
+    bibtex:booktitle=&quot;Hawaii International Conference On System Sciences (HICSS)&quot;
+    bibtex:timestamp=&quot;2006.05.29&quot;&gt;
+        &lt;bibtex:author&gt;
+            &lt;rdf:Seq&gt;
+                &lt;rdf:li&gt;K. Crowston&lt;/rdf:li&gt;
+                &lt;rdf:li&gt;H. Annabi&lt;/rdf:li&gt;
+                &lt;rdf:li&gt;J. Howison&lt;/rdf:li&gt;
+                &lt;rdf:li&gt;C. Masango&lt;/rdf:li&gt;
+            &lt;/rdf:Seq&gt;
+        &lt;/bibtex:author&gt;
+    &lt;bibtex:entrytype&gt;Inproceedings&lt;/bibtex:entrytype&gt;
+&lt;/rdf:Description&gt;
+</pre></td></tr>
+</table>
+
+<p>
+Beware of the following caveats if you trying to parse bibteXMP:
+</p>
+<p>
+<ul>
+  <li>In RDF attribute-value pairs can also be expressed as nodes and vice versa.</li>
+</ul>
+</p>
+<H2>Related Links:</H2>
+<p>
+Some links about XMP and annotating PDFs:
+</p>
+<p>
+<ul>
+  <li><a href="http://freelancepropaganda.com/themp/">James Howison's blog "Themp---Managing Academic Papers like MP3s"</a></li>
+  <li><a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">XML.com article about XMP</a></li>
+  <li><a href="http://jempbox.org">JempBox</a> and <a href="http://pdfbox.org">PDFBox</a> by Ben Litchfield are the Jaba libraries
+  used to access the PDFs and the metadata stream.</a></li>
+  <li><a href="http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/8300945231/m/377001889631">Good thread on ArsTechnica discussing the management of PDFs.</a></li>
+  <li><a href="http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf">Adobe XMP Specification</a></li>
+</ul>
+</p>
+</body>
+</HTML>
\ No newline at end of file
index 62fd992..f60fac9 100644 (file)
@@ -5,6 +5,7 @@ Michel Baylac
 Guillaume Gardey
 Cyrille d'Haese
 Raik Nagel
+Christopher Oezbek
 Ellen Reitmayr
 Michael Spiegel
 Ulrik Stervbo
@@ -24,11 +25,13 @@ Alexis Gallagher
 Sascha Hunold
 Bernd Kalbfuss
 Martin Kähmer
+Christian Kopf
 Alex Montgomery
 John Relph
 Moritz Ringler
 Rudolf Seemann
 Mike Smoot
+Ulrich Stärk
 Martin Stolle
 David Weitzman
 Seb Wills
index 2bfe7ed..0f2f79a 100644 (file)
@@ -23,6 +23,7 @@ Guillaume Gardey,
 Cyrille d'Haese,
 Raik Nagel,
 Ellen Reitmayr,
+Gert Renckens,
 Andreas Rudert,
 Michael Spiegel,
 Ulrik Stervbo,
@@ -49,6 +50,7 @@ Alex Montgomery,
 Christopher Oezbek,
 John Relph,
 Moritz Ringler,
+Mark Schenk,
 Rudolf Seemann,
 Toralf Senger,
 Mike Smoot,
index 3515df0..7f3535d 100644 (file)
@@ -5,7 +5,7 @@
 
 <H1>Eintragsvorschau einstellen</H1>
 
-Die Eintragsvorschau wird mit denselben Mechanismen erstellt, die auch bei den <a href="CustomExports.html">Exportfiltern</a> angewendet werden. Bei der Vorschau durchl&auml;uft ein Eintrag eins von zwei m&ouml;glichen Layouts (die sie mit STRG-F9 wechseln k&ouml;nnen) und erstellt HTML-Code, der im Vorschaudialog angezeigt wird.
+Die Eintragsvorschau wird mit denselben Mechanismen erstellt, die auch bei den <a href="CustomExports.html">Exportfiltern</a> angewendet werden. Bei der Vorschau durchl&auml;uft ein Eintrag eins von zwei m&ouml;glichen Layouts (die sie mit F9 wechseln k&ouml;nnen) und erstellt HTML-Code, der im Vorschaudialog angezeigt wird.
 
 Aussehen und Inhalt der Vorschau k&ouml;nnen mit derselben Syntax ver&auml;ndert werden, die in der Hilfe zur Anpassung der <a href="CustomExports.html">Exportfilter</a> beschrieben wird.
 
index b891a34..6479a3c 100644 (file)
@@ -22,6 +22,7 @@ Guillaume Gardey,
 Cyrille d'Haese,
 Raik Nagel,
 Ellen Reitmayr,
+Gert Renckens,
 Andreas Rudert,
 Michael Spiegel,
 Ulrik Stervbo,
@@ -48,6 +49,7 @@ Alex Montgomery,
 Christopher Oezbek,
 John Relph,
 Moritz Ringler,
+Mark Schenk,
 Rudolf Seemann,
 Toralf Senger,
 Mike Smoot,
index a3cf5ce..1d7b662 100644 (file)
@@ -22,7 +22,14 @@ donn&eacute;es, ainsi qu'une s&eacute;lection configurable de leurs champs.
 <li>Vous d&eacute;cidez des champs affich&eacute;s dans ce tableau en cochant les
 champs que vous voulez voir dans la fen&ecirc;tre de dialogue <strong>Pr&eacute;f&eacute;rences</strong>.</li>
 <li>Pour &eacute;dit&eacute;r la valeur d'un champ, double-cliquez sur la ligne que vous voulez modifiez. Vous pouvez naviguer dans le tableau en utilisant les fl&egrave;ches du clavier.</li>
-<li>Le tableau est tri&eacute; selon une s&eacute;rie de champs de votre choix. L'ordre de tri par d&eacute;faut est configur&eacute; dans <strong>Options -> Pr&eacute;f&eacute;rences -> Table des entr&eacute;es</strong> mais vous pouvez changer rapidement et simplement cet ordre en double-cliquant sur le titre d'une colonne pour d&eacute;finir le crit&egrave;re de tri principal et en simple-cliquant sur le titre pour ajouter un nouveau sous-crit&egrave;re de tri. Si vous cliquez sur le titre d'une colonne qui est d&eacute;j&agrave; s&eacute;lectionn&eacute;e comme crit&egrave;re de tri, le sens de tri est invers&eacute;.
+<li>Le tableau est tri&eacute; selon une s&eacute;rie de champs de votre choix.
+L'ordre de tri par d&eacute;faut est configur&eacute; dans <strong>Options -> Pr&eacute;f&eacute;rences -> Table des entr&eacute;es</strong>
+mais pour changer rapidement cet ordre,
+    cliquez l'ent&ecirc;te d'une colonne pour la d&eacute;finir comme crit&egrave;re de tri principal, ou
+    inverser l'ordre du tri s'il est d&eacute;jà d&eacute;fini. Un clic suppl&eacute;mentaire d&eacute;s&eacute;lectionnera la colonne
+    comme crit&egrave;re de tri. Maintenez la touche <b>CONTROL</b> enfonc&eacute;e et cliquez sur un autre ent&ecirc;te de colonne pour l'ajouter, l'inverser
+    ou l'enlever comme crit&egrave;re de tri auxiliaire. Vous pouvez ajouter un nombre arbitraire
+    de crit&egrave;res auxiliaires.
 <li>Vous pouvez ajuster la largeur des colonnes en faisant glisser les limites
 entre les ent&ecirc;tes.</li>
 <li>Dans la fen&ecirc;tre de dialogue <strong>Pr&eacute;f&eacute;rences</strong>, choisissez si le tableau
@@ -66,7 +73,7 @@ tel que CTRL-SHIFT-A pour l'ajout d'une entr&eacute;e <em>article</em>.
 
 <H2>Editer une entr&eacute;e</H2> Pour ouvrir la <a
 href="EntryEditorHelp.html">fen&ecirc;tre d'&eacute;dition</a> sur une entr&eacute;e existante,
-double-cliquez simplement sur la ligne correspondant &agrave; l'entr&eacute;e (ou appuyez sur ENTREE après avoir s&eacute;lectionner l'entr&eacute;e).
+double-cliquez simplement sur la ligne correspondant &agrave; l'entr&eacute;e (ou appuyez sur ENTREE apr&egrave;s avoir s&eacute;lectionner l'entr&eacute;e).
 
 <H2>R&eacute;f&eacute;rencer une cha&icirc;ne <em>BibTeX</em> dans un champ</H2>
 Dans JabRef vous &eacute;crivez le contenu de tous les champs de la m&ecirc;me
index 5f97116..451c0ae 100644 (file)
     <a href="CustomEntriesHelp.html">Personnalisation des types d'entr&eacute;es</a><br>
     <a href="GeneralFields.html">Personnalisation des champs g&eacute;n&eacute;raux</a><br>
     <a href="EndNoteFilters.html">Filtres d'importation/exportation d'EndNote</a><br>
-    <a href="OpenOfficeHelp.html">Utiliser les bibliographies JabRef dans OpenOffice.org</a><br>
     <a href="EntryEditorHelp.html">Éditeur d'entr&eacute;es</a><br>
+    <a href="TimeStampHelp.html">Horodatage des entr&eacute;es</a><br>
     <a href="CiteSeerHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis <em>CiteSeer</em></a><br>
     <a href="MedlineHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis <em>Medline</em></a><br>
     <a href="IEEEXploreHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis <em>IEEExplore</em></a><br>
     <a href="ContentSelectorHelp.html">S&eacute;lecteur de contenu de champ</a><br>
-    <a href="JournalAbbreviations.html">Abr&eacute;viations de journaux</a><br>
     <a href="GroupsHelp.html">Utilisation des <em>Groupes</em></a><br>
+    <a href="ImportInspectionDialog.html">Fen&ecirc;tre de v&eacute;rification des importations</a><br>
+    <a href="JournalAbbreviations.html">Abr&eacute;viations de journaux</a><br>
     <a href="BaseFrameHelp.html">La fen&ecirc;tre principale de JabRef</a><br>
-    <a href="MarkingHelp.html">Étiqueter des entr&eacute;es</a><br>
     <a href="OwnerHelp.html">Le champ 'owner' (propri&eacute;taire)</a><br>
+    <a href="MarkingHelp.html">Étiqueter des entr&eacute;es</a><br>
+    <a href="OpenOfficeHelp.html">Utiliser les bibliographies JabRef dans OpenOffice.org</a><br>
     <a href="ExternalFiles.html">Liens PDF/PS/URL/DOI dans JabRef</a><br>
     <a href="SearchHelp.html">Recherche dans JabRef</a><br>
     <a href="StringEditorHelp.html">Éditeur de cha&icirc;nes</a><br>
-        <a href="TimeStampHelp.html">Horodatage des entr&eacute;es</a><br>
-    <a href="ImportInspectionDialog.html">Fen&ecirc;tre de v&eacute;rification des importations</a><br>
     <a href="PreviewHelp.html">Configuration de l'aper&ccedil;u des entr&eacute;es</a><br>
+    <a href="XMPHelp.html">Support des metadonnées XMP dans JabRef</a>
 
 
 
index eafd922..68ae7a9 100644 (file)
@@ -36,7 +36,7 @@ Il faut noter que ces fichiers doivent &ecirc;tre dans le m&ecirc;me r&eacute;pe
 </p>
 
 <p>
-Dans notre exemple de fichier d'exportation, cela pourrait ressembler &agrave; 
+Dans notre exemple de fichier d'exportation, cela pourrait ressembler &agrave;
 </p>
 
 <p>
@@ -89,7 +89,7 @@ Le formateur est utilis&eacute; en ins&eacute;rant la commande <code>\format</co
 </p>
 
 <p>
-Vous pouvez aussi indiquer plusieurs formateurs s&eacute;par&eacute;s par des virgules. Ils seront alors appel&eacute;s s&eacute;quentiellement de la gauche vers la droite, par exemple&nbsp;: 
+Vous pouvez aussi indiquer plusieurs formateurs s&eacute;par&eacute;s par des virgules. Ils seront alors appel&eacute;s s&eacute;quentiellement de la gauche vers la droite, par exemple&nbsp;:
 </p>
 <p>
 <code>\format[ToLowerCase,HTMLChars]{\author}</code>
@@ -109,14 +109,15 @@ JabRef fournit les formateurs suivants, certains d'entre eux d&eacute;pendant d'
 <li><code>HTMLChars</code>&nbsp;: remplace les caract&egrave;res sp&eacute;ciaux sp&eacute;cifiques &agrave; TeX  (par exemple&nbsp;: {\^a} ou {\"{o}}) par leur repr&eacute;sentation HTML.
 <li><code>XMLChars</code>&nbsp;: remplace les caract&egrave;res sp&eacute;ciaux sp&eacute;cifiques &agrave; TeX  (par exemple&nbsp;: {\^a} ou {\"{o}}) par leur repr&eacute;sentation XML.
 <li><code>CreateDocBookAuthors</code>&nbsp;: formate le contenu du champ author selon le style DocBook.
-<li><code>CurrentDate</code>&nbsp;: renvoie la date actuelle. Sans argument, ce formateur renvoie la date et l'heure actuelle au format "yyyy.MM.dd hh:mm:ss z" (date, heure et fuseau horaire). En donnant une cha&icirc;ne de format diff&eacute;rent comme argument, le format de la date peut-&ecirc;tre adapt&eacute;. Par exemple, 
+<li><code>CurrentDate</code>&nbsp;: renvoie la date actuelle. Sans argument, ce formateur renvoie la date et l'heure actuelle au format "yyyy.MM.dd hh:mm:ss z" (date, heure et fuseau horaire). En donnant une cha&icirc;ne de format diff&eacute;rent comme argument, le format de la date peut-&ecirc;tre adapt&eacute;. Par exemple,
 <code>\format[CurrentDate]{yyyy.MM.dd}</code> renverra uniquement la date, comme par exemple 2005.11.30.
 <li><code>AuthorFirstFirst</code>&nbsp;: formate le contenu des champs author/editor en mettant les pr&eacute;noms en premier.
 <li><code>AuthorFirstFirstCommas</code>&nbsp;: formate le contenu des champs author/editor en mettant les pr&eacute;noms en premier et des virgules comme s&eacute;parateurs.
 <li><code>AuthorLastFirst</code>&nbsp;: formate le contenu des champs author/editor en mettant le nom de famille en premier.
 <li><code>AuthorLastFirstAbbreviator</code>&nbsp;: r&eacute;duit les pr&eacute;noms de tous les auteurs &agrave; leurs initiales. Ce formateur n&eacute;cessite d'avoir pr&eacute;alablement utilis&eacute; AuthorLastFirst.
-<li><code>AuthorAndsReplacer</code>&nbsp;: remplace "and" par ";" entre les premiers noms et par "&" entre les deux derniers. 
-<li><code>AuthorAndsCommaReplacer</code> : remplace "and" entre les noms par une virgule (",") et "&" entre les deux derniers.
+<li><code>AuthorAndsReplacer</code>&nbsp;: remplace "and" par ";" entre les premiers noms et par "&" entre les deux derniers.
+<li><code>AuthorAndsCommaReplacer</code>&nbsp;: remplace "and" entre les noms par une virgule (",") et "&" entre les deux derniers.
+<li><code>AuthorOrgSci</code>&nbsp;: premier auteur selon "nom, prénom" et tous les autres selon "prénom nom". Les prénoms sont abrégés.
 <li><code>FormatPagesForHTML</code>&nbsp;: remplace "--" par "-".
   <li><code>FormatPagesForXML</code>&nbsp;: remplace "--" par un tiret XML.
 <li><code>RemoveBrackets</code>&nbsp;: supprime toutes les accolades "{" ou "}".
@@ -164,7 +165,7 @@ Par exemple, on suppose que l'on d&eacute;sire faire des groupes &agrave; partir
 </p>
 <p>
 <code>\begingroup{keywords}New Category: \format[HTMLChars]{\keywords}
-<br>   \endgroup{keywords}</code>
+<br>    \endgroup{keywords}</code>
 </p>
 
 <h2>Partage de votre travail </h2>
index 1592cb1..d0896df 100644 (file)
@@ -75,5 +75,46 @@ Vous pouvez d&eacute;finir des r&eacute;pertoires PDF et PS sp&eacute;cifiques &
 Ces r&eacute;pertoires remplacent alors les r&eacute;pertoires principaux.
 </P>
 
-
-</HTML>
+<a name="RegularExpressionSearch">
+<H2>Utiliser la recherche d'expressions r&eacute;guli&egrave;res pour les liaisons automatiques</H2>
+</a>
+<p>
+Dans les sections pr&eacute;c&eacute;dentes, la fonction de liaison automatique de JabRef &eacute;tait d&eacute;crite&nbsp;: si vous
+choisissiez des noms de fichiers qui correspondaient &agrave; la clef BibTex suivi de l'extension,
+JabRef &eacute;tait capable de trouver les fichiers automatiquement.
+
+</p><p>
+A partir de JabRef 2.2, il est possible d'avoir une plus grande flexibilit&eacute; dans la forme du nom gr&acirc;ce &agrave; l'utilisation
+d'une expression r&eacute;guli&egrave;re pour la recherche. Dans la plupart des cas, adapter l'expression r&eacute;guli&egrave;re donn&eacute;e par d&eacute;faut devrait suffire.
+
+</p><p>
+Si vous ouvrez les pr&eacute;f&eacute;rences pour les programmes externes (Options -> Pr&eacute;f&eacute;rences -> Programmes externes),
+vous  y trouverez une option nomm&eacute;e "Rechercher l'expression r&eacute;guli&egrave;re".
+Cocher cette option vous permettra d'entrer votre propre expression r&eacute;guli&egrave;re pour la recherche dans les
+r&eacute;pertoires PDF.
+
+</p><p>
+Voici la syntaxe &agrave; utiliser&nbsp;:
+</p>
+<ul>
+  <li><code>*</code> - Rechercher dans tous les sous-r&eacute;pertoires directs en excluant le r&eacute;pertoire courant
+  et tout autre sous-r&eacute;pertoire.</li>
+  <li><code>**</code> - Rechercher r&eacute;cursivement dans tous les sous-r&eacute;pertoires ET dans le r&eacute;pertoire courant.</li>
+  <li><code>.</code> et <code>..</code> - Le r&eacute;pertoire courant et le r&eacute;pertoire parent.</li>
+  <li><code>[title]</code> - Toutes les expressions entre crochets sont remplac&eacute;es par le champ correspondant dans l'entr&eacute;e courante.</li>
+  <li><code>[extension]</code> - Remplacement par l'extension de fichier du champ que vous utilisez.</li>
+  <li>Tout autre texte est interpr&eacute;t&eacute; comme une expression r&eacute;guli&egrave;re. Mais attention&nbsp;: vous devez remplacer
+  chaque caract&egrave;re anti-slash (\) par deux anti-slashs (\\) afin d'&eacute;viter la confusion avec un s&eacute;parateur de r&eacute;pertoire .</li>
+</ul>
+<p>
+Par d&eacute;faut, l'expression r&eacute;guli&egrave;re de recherche est <code>**/.*[bibtexkey].*\\.[extension]</code>. Comme vous pouvez le voir cela effectuera
+la recherche dans tous les sous-r&eacute;pertoires du r&eacute;pertoire d&eacute;fini pour l'extension (par exemple dans le r&eacute;pertoire PDF) de tout nom de fichier qui poss&egrave;de la bonne extension et
+qui contient quelque part la clef BibTeX.
+
+
+
+
+
+</p>
+</body>
+</html>
index f396b63..2f261f6 100644 (file)
@@ -8,9 +8,9 @@
 L'aper&ccedil;u des entr&eacute;es est cr&eacute;&eacute; en utilisant le m&ecirc;me m&eacute;canisme que pour les
 <a href="CustomExports.html">filtres d'exportation personnalis&eacute;s</a>.
 En mode aper&ccedil;u, une entr&eacute;e est trait&eacute;e en utilisant l'une des deux mises en page disponibles
-(vous pouvez basculer entre les deux mises en page en pressant CTRL-F9) afin de produire du code HTML qui est affich&eacute; dans le panneau d'aper&ccedil;u.
+(vous pouvez basculer entre les deux mises en page en pressant F9) afin de produire du code HTML qui est affich&eacute; dans le panneau d'aper&ccedil;u.
 
-Pour modifier l'apparence et le contenu de l'aper&ccedil;u vous devez &eacute;diter les mises en page de l'aper&ccedil;u en utilisant la 
+Pour modifier l'apparence et le contenu de l'aper&ccedil;u vous devez &eacute;diter les mises en page de l'aper&ccedil;u en utilisant la
 syntaxe d&eacute;crite dans le fichier d'aide portant sur les
 <a href="CustomExports.html">filtres d'exportation personnalis&eacute;s</a>.
 
diff --git a/src/help/fr/XMPHelp.html b/src/help/fr/XMPHelp.html
new file mode 100644 (file)
index 0000000..e5bf6c1
--- /dev/null
@@ -0,0 +1,114 @@
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>Support des metadonn&eacute;es XMP dans JabRef</H1>
+
+NdT&nbsp;: Menus &agrave; v&eacute;rifier !!!
+
+<p>
+XMP est un standard cr&eacute;&eacute; par Adobe Systems pour stocker des m&eacute;tadonn&eacute;es (des donn&eacute;es sur les donn&eacute;es) dans des fichiers.
+A exemple bien connu de m&eacute;tadonn&eacute;es sont les balises MP3 qui peuvent &ecirc;tre utilis&eacute;es pour d&eacute;crire l'artiste, l'album et le nom de la chanson
+dans un fichier MP3. Ajouter des m&eacute;tadonn&eacute;es &agrave; des fichiers MP3 aide les autres utilisateurs &agrave; identifier correctement les chansons ind&eacute;pendamment du nom du fichier
+et permet aux logiciels (lecteurs MP3 par exemple) de trier et de grouper les chansons.
+</p>
+<p>
+Avec le support de XMP, l'&eacute;quipe de d&eacute;veloppement de JabRef introduit les avantages des m&eacute;tadonn&eacute;es au monde des gestionnaires de r&eacute;f&eacute;rences.
+Vous avez maintenant la possibilit&eacute; d'"&eacute;crire des m&eacute;tadonn&eacute;es XMP" dans l'onglet General de Jabref, ce qui mettra toutes les informations BibTex dans un fichier PDF. En transf&eacute;rant ce fichier &agrave; un coll&egrave;gue, il aura simplement &agrave; faire glisser le fichier dans JabRef pour que toutes les informations que vous y avez entr&eacute;es lui soient disponibles.
+</p>
+
+<H2>Utilisation</H2>
+
+Pour utiliser la fonction XMP dans JabRef, vous pouvez faire les choses suivantes&nbsp;:
+
+<ul>
+  <li><b>Importer un unique fichier PDF annot&eacute;</b> contenant les m&eacute;tadonn&eacute;es XMP. Vous pouvez s&eacute;lectionner "Fichier -> Importer dans... -> PDF avec annotations XMP" ou faire glisser le fichier dans la fen&ecirc;tre principale.</li>
+  <li><b>Ecrire les informations bibliographiques dans le fichier PDF associ&eacute;.</b> Pour cela, double-cliquez sur l'entr&eacute;e dans
+  la fen&ecirc;tre principale, allez dans l'onglet "General" et cliquer sur "Ecrire XMP".</li>
+  <li>Si vous voulez <b>annoter tous les PDFs dans une base de donn&eacute;es d&eacute;termin&eacute;e</b> vous pouvez s&eacute;lectionner "Outils -> Ecrire XMP pour la base de donn&eacute;es"</li>
+  <li>Pour v&eacute;rifier si cela a fonctionn&eacute;, vous pouvez ouvrir le PDF dans Adobe Acrobat et s&eacute;lectionner
+  "Fichier -> Propri&eacute;t&eacute;s du Document -> M&eacute;tadonn&eacute;es additionnelles -> Avanc&eacute;". Dans l'arborescence sur la droite vous devriez voir une entr&eacute;e nomm&eacute;e "http://purl.org/net/bibteXMP".
+</ul>
+
+<h2>Format de fichier BibteXmp</h2>
+
+<p>
+XMP utilise un sous-ensemble du Sch&eacute;ma de Description des Ressources (Resource Description Framework - RDF) pour stocker les donn&eacute;es. Pour JabRef, un nouveau format de m&eacute;tadonn&eacute;es
+est utilis&eacute;&nbsp;; il ressemble beaucoup au format BibTeX. Fondamentalement, tous les champs et valeurs sont transform&eacute;s en
+noeuds dans un document XML. Seuls les auteurs et les &eacute;diteurs sont stock&eacute;s comme des rdf:Seq-structures, aussi les utilisateurs
+des donn&eacute;es peuvent &eacute;viter la s&eacute;paration bas&eacute;es sur des 'and'. Toutes les cha&icirc;nes et les r&eacute;f&eacute;rences crois&eacute;es seront pr&eacute;sentes dans les donn&eacute;es.
+</p>
+<p>
+Le sch&eacute;ma suivant, facile et minimal, est utilis&eacute;&nbsp;:
+</p>
+<p>
+<ul>
+  <li>La clef BibTeX est stock&eacute;e comme une <code>bibtexkey</code>.</li>
+  <li>Le type d'entr&eacute;e BibTeX est stock&eacute; comme une <code>entrytype</code>.</li>
+  <li>les champs <code>author</code> et <code>editor</code> sont encod&eacute;s comme des <code>rdf:Seq</code>s o&ugrave; les auteurs individuels sont repr&eacute;sent&eacute;s par des <code>rdf:li</code>s.</li>
+  <li>Tous les autres champs sont sauv&eacute;s en utilisant directement le nom de leur champ.</li>
+</ul>
+</p>
+<p>
+Ci-dessous, un exemple de mise en correspondance
+</p>
+<pre>
+@INPROCEEDINGS{CroAnnHow05,
+  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
+  title = {Effective work practices for floss development: A model and propositions},
+  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
+  year = {2005},
+  owner = {oezbek},
+  timestamp = {2006.05.29},
+  url = {http://james.howison.name/publications.html}
+}
+</pre>
+
+sera transform&eacute; en
+<pre>
+&lt;rdf:Description xmlns:bibtex=&quot;http://jabref.sourceforge.net/bibteXMP/&quot;
+    bibtex:bibtexkey=&quot;CroAnnHow05&quot;
+    bibtex:year=&quot;2005&quot;
+    bibtex:title=&quot;Effective work practices for floss development: A model and propositions&quot;
+    bibtex:owner=&quot;oezbek&quot;
+    bibtex:url=&quot;http://james.howison.name/publications.html&quot;
+    bibtex:booktitle=&quot;Hawaii International Conference On System Sciences (HICSS)&quot;
+    bibtex:timestamp=&quot;2006.05.29&quot;&gt;
+        &lt;bibtex:author&gt;
+            &lt;rdf:Seq&gt;
+                &lt;rdf:li&gt;K. Crowston&lt;/rdf:li&gt;
+                &lt;rdf:li&gt;H. Annabi&lt;/rdf:li&gt;
+                &lt;rdf:li&gt;J. Howison&lt;/rdf:li&gt;
+                &lt;rdf:li&gt;C. Masango&lt;/rdf:li&gt;
+            &lt;/rdf:Seq&gt;
+        &lt;/bibtex:author&gt;
+    &lt;bibtex:entrytype&gt;Inproceedings&lt;/bibtex:entrytype&gt;
+&lt;/rdf:Description&gt;
+</pre></td></tr>
+</table>
+
+<p>
+Faites attention aux pièges suivants si vous essayer de traiter les métadonnées bibtexXMP&nbsp;:
+</p>
+<p>
+<ul>
+  <li>Selon RDF, les couples attribut-valeur peuvent aussi &ecirc;tre exprim&eacute;s comme des noeuds, et vice-versa.</li>
+</ul>
+</p>
+<H2>Liens&nbsp;:</H2>
+<p>
+Quelques liens (en anglais) &agrave; propos de XMP et de l'annotation des PDFs&nbsp;:
+</p>
+<p>
+<ul>
+  <li><a href="http://freelancepropaganda.com/themp/">James Howison's blog "Themp---Managing Academic Papers like MP3s"</a></li>
+  <li><a href="http://www.xml.com/pub/a/2004/09/22/xmp.html">XML.com article about XMP</a></li>
+  <li><a href="http://jempbox.org">JempBox</a> and <a href="http://pdfbox.org">PDFBox</a> by Ben Litchfield are the Jaba libraries
+  used to access the PDFs and the metadata stream.</a></li>
+  <li><a href="http://episteme.arstechnica.com/eve/ubb.x/a/tpc/f/8300945231/m/377001889631">Good thread on ArsTechnica discussing the management of PDFs.</a></li>
+  <li><a href="http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf">Adobe XMP Specification</a></li>
+</ul>
+</p>
+</body>
+</HTML>
index ff51d59..7f30a50 100644 (file)
Binary files a/src/images/JabRef-Logo.icns and b/src/images/JabRef-Logo.icns differ
diff --git a/src/images/JabRef-icon.png b/src/images/JabRef-icon.png
deleted file mode 100644 (file)
index ca11220..0000000
Binary files a/src/images/JabRef-icon.png and /dev/null differ
diff --git a/src/images/JabRef-icon.svg b/src/images/JabRef-icon.svg
deleted file mode 100644 (file)
index 1204858..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="744.09448819"
-   height="1052.3622047"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.44"
-   sodipodi:docbase="/home/alver/Documents"
-   sodipodi:docname="jabrefIkon.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient2915">
-      <stop
-         id="stop2917"
-         offset="0"
-         style="stop-color:white;stop-opacity:1;" />
-      <stop
-         id="stop2919"
-         offset="1"
-         style="stop-color:#dadce0;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2909">
-      <stop
-         id="stop2911"
-         offset="0"
-         style="stop-color:white;stop-opacity:1;" />
-      <stop
-         id="stop2913"
-         offset="1"
-         style="stop-color:#cfd1d7;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2897">
-      <stop
-         style="stop-color:#dadee7;stop-opacity:1;"
-         offset="0"
-         id="stop2899" />
-      <stop
-         style="stop-color:#1e68c6;stop-opacity:1;"
-         offset="1"
-         id="stop2901" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2889">
-      <stop
-         style="stop-color:#e0e4ee;stop-opacity:1;"
-         offset="0"
-         id="stop2891" />
-      <stop
-         style="stop-color:#e0e4ee;stop-opacity:0;"
-         offset="1"
-         id="stop2893" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2915"
-       id="linearGradient2971"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.115225,0,0,1,-1.889007,46.1244)"
-       x1="329.18756"
-       y1="289.87192"
-       x2="598.66205"
-       y2="548.62866" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2909"
-       id="linearGradient2974"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.082601,0,0,1,-1.374219,40)"
-       x1="145.45497"
-       y1="332.74286"
-       x2="326.12537"
-       y2="576.18854" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2909"
-       id="linearGradient2983"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,422.1323,954.272)"
-       x1="145.45497"
-       y1="332.74286"
-       x2="326.12537"
-       y2="576.18854" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2915"
-       id="linearGradient2985"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(8.119652e-2,0,0,7.966468e-2,424.2434,954.7598)"
-       x1="329.18756"
-       y1="289.87192"
-       x2="598.66205"
-       y2="548.62866" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2909"
-       id="linearGradient3878"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.824753e-2,0,0,3.538487e-2,403.2956,1005.814)"
-       x1="145.45497"
-       y1="332.74286"
-       x2="326.12537"
-       y2="576.18854" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2915"
-       id="linearGradient3880"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(3.863231e-2,4.140938e-3,-3.672702e-3,3.351102e-2,404.9189,1005.265)"
-       x1="329.18756"
-       y1="289.87192"
-       x2="598.66205"
-       y2="548.62866" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="50"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="21.286454"
-     inkscape:cx="416.46054"
-     inkscape:cy="31.511436"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:guide-bbox="false"
-     showguides="true"
-     inkscape:window-width="1118"
-     inkscape:window-height="944"
-     inkscape:window-x="0"
-     inkscape:window-y="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <rect
-       style="opacity:1;fill:#4f5f8f;fill-opacity:1"
-       id="rect2905"
-       width="716.55713"
-       height="730.3371"
-       x="10.717734"
-       y="89.297173" />
-    <path
-       style="fill:url(#linearGradient2974);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 122.04224,150.95548 C 208.65029,150.95548 286.97046,184.73542 286.97046,184.73542 C 286.97046,184.73542 372.48612,237.27117 327.52453,611.24332 C 314.57556,683.68157 250.81542,747.98797 172.90939,747.98797 C 95.003363,747.98797 50.24884,702.05483 50.24884,648.46615 C 119.867,694.3993 168.69957,681.54848 189.48514,672.96384 C 199.45516,668.84613 251.63441,636.1731 257.44572,548.94433 C 264.07602,449.42251 247.50026,297.84312 122.04224,150.95548 z "
-       id="path1972"
-       sodipodi:nodetypes="cccscssc" />
-    <path
-       style="fill:url(#linearGradient2971);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 322.49657,164.88378 C 533.15821,196.83799 712.94701,311.87314 516.81377,452.47165 C 462.33232,497.20754 627.59274,671.35798 692.97048,751.2435 C 544.0545,717.69157 402.40271,580.28849 400.58666,476.43731 C 398.77062,401.34492 516.81377,393.35637 516.81377,347.02276 C 516.81377,300.68916 344.28916,262.34411 322.49657,164.88378 z "
-       id="path1993"
-       sodipodi:nodetypes="cccc" />
-    <rect
-       style="opacity:1;fill:#4f5f8f;fill-opacity:1"
-       id="rect3872"
-       width="24.96747"
-       height="24.892717"
-       x="403.74191"
-       y="1008.134"
-       inkscape:export-xdpi="173.03"
-       inkscape:export-ydpi="173.03"
-       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png" />
-    <path
-       style="fill:url(#linearGradient3878);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 407.84626,1010.4236 C 410.90607,1010.4236 413.43489,1010.4972 413.43489,1010.4972 C 413.43489,1010.4972 416.50376,1012.7951 414.91528,1026.0281 C 414.45779,1028.5913 412.2052,1030.8669 409.45284,1030.8669 C 406.70046,1030.8669 405.11931,1029.2413 405.11931,1027.3453 C 407.95995,1028.6292 410.06622,1027.9794 410.80057,1027.6755 C 411.15281,1027.5298 412.46165,1026.9172 412.43944,1023.8236 C 412.38788,1016.6442 413.08837,1015.0847 407.84626,1010.4236 z "
-       id="path3874"
-       sodipodi:nodetypes="cccscssc"
-       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png"
-       inkscape:export-xdpi="173.03"
-       inkscape:export-ydpi="173.03" />
-    <path
-       style="fill:url(#linearGradient3880);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05348015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 415.71976,1010.449 C 423.13477,1010.8154 428.70544,1016.8245 421.39485,1020.8079 C 419.34326,1022.1048 424.42839,1028.5544 426.39975,1031.4741 C 421.3644,1029.7968 416.96212,1024.6664 417.28063,1021.1794 C 417.49352,1018.6562 421.61195,1018.8269 421.78212,1017.2742 C 421.95228,1015.7216 419.07637,1015.8865 415.71976,1010.449 z "
-       id="path3876"
-       sodipodi:nodetypes="ccccsc"
-       inkscape:export-filename="/home/alver/div/smalltheme/jabrefIkon-48.png"
-       inkscape:export-xdpi="173.03"
-       inkscape:export-ydpi="173.03" />
-  </g>
-</svg>
diff --git a/src/images/JabRef.ico b/src/images/JabRef.ico
new file mode 100644 (file)
index 0000000..21cb443
Binary files /dev/null and b/src/images/JabRef.ico differ
diff --git a/src/images/font/ACTIVA.TTF b/src/images/font/ACTIVA.TTF
deleted file mode 100644 (file)
index c973b2c..0000000
Binary files a/src/images/font/ACTIVA.TTF and /dev/null differ
diff --git a/src/images/font/ASTROLYT.TTF b/src/images/font/ASTROLYT.TTF
deleted file mode 100644 (file)
index 9a92497..0000000
Binary files a/src/images/font/ASTROLYT.TTF and /dev/null differ
diff --git a/src/images/font/AUGIE.TTF b/src/images/font/AUGIE.TTF
deleted file mode 100644 (file)
index 175d7ce..0000000
Binary files a/src/images/font/AUGIE.TTF and /dev/null differ
diff --git a/src/images/secondary_sorted_reverse.png b/src/images/secondary_sorted_reverse.png
new file mode 100644 (file)
index 0000000..b7fb00a
Binary files /dev/null and b/src/images/secondary_sorted_reverse.png differ
diff --git a/src/images/splash-2.1.png b/src/images/splash-2.1.png
deleted file mode 100644 (file)
index 1ddced9..0000000
Binary files a/src/images/splash-2.1.png and /dev/null differ
diff --git a/src/images/splash-2.1.svg b/src/images/splash-2.1.svg
deleted file mode 100644 (file)
index bf20ab2..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-   sodipodi:docname="splash-2.1.svg"
-   sodipodi:docbase="/home/alver/jabref/src/images"
-   inkscape:version="0.42+0.43pre1"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819">
-  <defs
-     id="defs2140">
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <linearGradient
-       id="linearGradient5361"
-       inkscape:collect="always">
-      <stop
-         id="stop5363"
-         offset="0"
-         style="stop-color:#000000;stop-opacity:1;" />
-      <stop
-         id="stop5365"
-         offset="1"
-         style="stop-color:#000000;stop-opacity:0;" />
-    </linearGradient>
-    <marker
-       style="overflow:visible;"
-       id="Arrow2Send"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow2Send">
-      <path
-         transform="scale(0.3) rotate(180) translate(-5,0)"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
-         id="path3046"
-         sodipodi:nodetypes="cccc" />
-    </marker>
-    <linearGradient
-       gradientUnits="userSpaceOnUse"
-       y2="300.91277"
-       x2="491.20592"
-       y1="300.91277"
-       x1="445.01770"
-       id="linearGradient5367"
-       xlink:href="#linearGradient5361"
-       inkscape:collect="always" />
-    <pattern
-       id="pattern9048"
-       patternTransform="translate(231.0000,284.3622)"
-       height="428.00000"
-       width="572.00000"
-       patternUnits="userSpaceOnUse">
-      <image
-         transform="translate(-231.0000,-284.3622)"
-         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
-         inkscape:export-ydpi="90.000000"
-         inkscape:export-xdpi="90.000000"
-         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
-         y="284.36218"
-         x="231.00000"
-         xlink:href="behandlet.png"
-         sodipodi:absref="/home/alver/Desktop/bilder/jabref/behandlet.png"
-         width="572.00000"
-         height="428.00000"
-         id="image9050" />
-    </pattern>
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="53"
-     inkscape:window-x="15"
-     inkscape:window-height="856"
-     inkscape:window-width="750"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="698.1925"
-     inkscape:cx="364.52617"
-     inkscape:zoom="1"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base" />
-  <metadata
-     id="metadata2143">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <rect
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       y="170.36218"
-       x="77.500000"
-       height="432.00000"
-       width="576.00000"
-       id="rect6833"
-       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
-    <image
-       id="image1821"
-       height="428"
-       width="572"
-       sodipodi:absref="/home/alver/jabref/src/images/splashBackground.png"
-       xlink:href="splashBackground.png"
-       x="79"
-       y="172.36218"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75" />
-    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
-       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
-       id="flowRoot2189"
-       xml:space="preserve">
-      <flowRegion
-   id="flowRegion2191">
-        <rect
-   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
-   y="199.10532"
-   x="128.49385"
-   height="127.49445"
-   width="283.51782"
-   id="rect2193" />
-      </flowRegion>
-      <flowPara
-   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
-   id="flowPara2201">JabRef</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#5cc757;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
-       transform="matrix(2.869197,-1.415830e-2,2.234317e-2,3.356271,-832.1435,-652.0185)"
-       id="flowRoot2203"
-       xml:space="preserve">
-      <flowRegion
-   style="stroke:url(#linearGradient5367);stroke-width:0.64448702;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091"
-   id="flowRegion2205">
-        <rect
-   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
-   y="286.45224"
-   x="443.95346"
-   height="119.83134"
-   width="173.972"
-   id="rect2207" />
-      </flowRegion>
-      <flowPara
-   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
-   id="flowPara2211">2.1</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       transform="matrix(0.972246,0.000000,0.000000,1.325301,6.054966,-126.1181)"
-       style="font-size:11.9999996;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;text-anchor:middle;writing-mode:lr;text-align:center;line-height:100%"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;font-weight:bold;font-style:oblique;font-stretch:normal;font-variant:normal;font-size:11.9999996;text-anchor:middle;text-align:center;writing-mode:lr;line-height:100%"
-   y="514.56494"
-   x="115.50008"
-   height="78.684433"
-   width="506.03476"
-   id="rect3080" />
-      </flowRegion><flowPara
-         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2006) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       transform="scale(0.853277,1.171952)"
-       sodipodi:linespacing="100%"
-       id="text1393"
-       y="315.20035"
-       x="163.38908"
-       style="font-size:183.29680;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#413b62;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr-tb"
-       xml:space="preserve"><tspan
-         y="315.20035"
-         x="163.38908"
-         id="tspan1395"
-         sodipodi:role="line">JabRef</tspan></text>
-    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="397.84811"
-       x="149.99753"
-       style="font-size:44.00000436;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#805b41;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr;text-align:start;line-height:100%"
-       xml:space="preserve"><tspan
-         y="397.84811"
-         x="149.99753"
-         id="tspan2181"
-         sodipodi:role="line">reference manager</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-size:68.76833344px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.66853937;fill:#cf5953;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Nimbus Sans L"
-       x="288.67255"
-       y="712.21191"
-       id="text1343"
-       sodipodi:linespacing="125%"
-       transform="matrix(0.950669,-0.326025,0.330198,0.938651,0.000000,0.000000)"
-       inkscape:export-filename="/home/alver/jabref-2.1b/src/images/splash-2.1beta.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><tspan
-         sodipodi:role="line"
-         id="tspan1345"
-         x="288.67255"
-         y="712.21191">beta</tspan></text>
-  </g>
-</svg>
diff --git a/src/images/splash.png b/src/images/splash.png
new file mode 100644 (file)
index 0000000..55bce92
Binary files /dev/null and b/src/images/splash.png differ
diff --git a/src/images/splash.svg b/src/images/splash.svg
deleted file mode 100644 (file)
index 628543b..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash6.png"
-   sodipodi:docname="splash.svg"
-   sodipodi:docbase="/home/alver/jabref_beta/jabref/src/images"
-   inkscape:version="0.42+0.43pre1"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819">
-  <defs
-     id="defs2140">
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <linearGradient
-       id="linearGradient5361"
-       inkscape:collect="always">
-      <stop
-         id="stop5363"
-         offset="0"
-         style="stop-color:#000000;stop-opacity:1;" />
-      <stop
-         id="stop5365"
-         offset="1"
-         style="stop-color:#000000;stop-opacity:0;" />
-    </linearGradient>
-    <marker
-       style="overflow:visible;"
-       id="Arrow2Send"
-       refX="0.0"
-       refY="0.0"
-       orient="auto"
-       inkscape:stockid="Arrow2Send">
-      <path
-         transform="scale(0.3) rotate(180) translate(-5,0)"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
-         id="path3046"
-         sodipodi:nodetypes="cccc" />
-    </marker>
-    <linearGradient
-       gradientUnits="userSpaceOnUse"
-       y2="300.91277"
-       x2="491.20592"
-       y1="300.91277"
-       x1="445.01770"
-       id="linearGradient5367"
-       xlink:href="#linearGradient5361"
-       inkscape:collect="always" />
-    <pattern
-       id="pattern9048"
-       patternTransform="translate(231.0000,284.3622)"
-       height="428.00000"
-       width="572.00000"
-       patternUnits="userSpaceOnUse">
-      <image
-         transform="translate(-231.0000,-284.3622)"
-         style="opacity:1.0000000;stroke:#000000;stroke-width:5.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
-         inkscape:export-ydpi="90.000000"
-         inkscape:export-xdpi="90.000000"
-         inkscape:export-filename="/home/alver/Desktop/bilder/jabref/splash4.png"
-         y="284.36218"
-         x="231.00000"
-         xlink:href="behandlet.png"
-         sodipodi:absref="/home/alver/Desktop/bilder/jabref/behandlet.png"
-         width="572.00000"
-         height="428.00000"
-         id="image9050" />
-    </pattern>
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="80"
-     inkscape:window-x="8"
-     inkscape:window-height="856"
-     inkscape:window-width="750"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="698.1925"
-     inkscape:cx="364.52617"
-     inkscape:zoom="1"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base" />
-  <metadata
-     id="metadata2143">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:groupmode="layer"
-     inkscape:label="Layer 1">
-    <rect
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       y="170.36218"
-       x="77.500000"
-       height="432.00000"
-       width="576.00000"
-       id="rect6833"
-       style="opacity:1.0000000;fill:#6b6b75;fill-opacity:1.0000000;stroke:none;stroke-width:5.0000000;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" />
-    <image
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       y="172.36218"
-       x="79.000000"
-       id="image1390"
-       height="428.00000"
-       width="572.00000"
-       sodipodi:absref="/home/alver/oldhome/bilder/bilder/jabref/behandlet.png"
-       xlink:href="/home/alver/oldhome/bilder/bilder/jabref/behandlet.png" />
-    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
-       transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
-       id="flowRoot2189"
-       xml:space="preserve">
-      <flowRegion
-   id="flowRegion2191">
-        <rect
-   style="fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-opacity:1.0000000;stroke-width:0.48137557;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-linejoin:bevel"
-   y="199.10532"
-   x="128.49385"
-   height="127.49445"
-   width="283.51782"
-   id="rect2193" />
-      </flowRegion>
-      <flowPara
-   style="font-size:90.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;font-family:AR PL KaitiM GB"
-   id="flowPara2201">JabRef</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#5cc757;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
-       transform="matrix(2.869197,-1.415830e-2,2.234317e-2,3.356271,-832.1435,-652.0185)"
-       id="flowRoot2203"
-       xml:space="preserve">
-      <flowRegion
-   style="stroke:url(#linearGradient5367);stroke-width:0.64448702;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091"
-   id="flowRegion2205">
-        <rect
-   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
-   y="286.45224"
-   x="443.95346"
-   height="119.83134"
-   width="173.972"
-   id="rect2207" />
-      </flowRegion>
-      <flowPara
-   style="font-size:34.96500015px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:104.16220427%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#322b5b;stroke-width:0.64448702;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:0.64448701 0.64448701 ;stroke-dashoffset:0.45114091;stroke-opacity:1;font-family:FreeSans"
-   id="flowPara2211">2.0</flowPara>
-    </flowRoot>    <flowRoot
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       transform="matrix(0.972246,0.000000,0.000000,1.325301,6.054966,-126.1181)"
-       style="font-size:11.9999996;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;text-anchor:middle;writing-mode:lr;text-align:center;line-height:100%"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="fill:#797580;fill-opacity:1.0000000;font-family:Bitstream Vera Sans;font-weight:bold;font-style:oblique;font-stretch:normal;font-variant:normal;font-size:11.9999996;text-anchor:middle;text-align:center;writing-mode:lr;line-height:100%"
-   y="514.56494"
-   x="115.50008"
-   height="78.684433"
-   width="506.03476"
-   id="rect3080" />
-      </flowRegion><flowPara
-         id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2006) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       transform="scale(0.853277,1.171952)"
-       sodipodi:linespacing="100%"
-       id="text1393"
-       y="315.20035"
-       x="163.38908"
-       style="font-size:183.29680;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#413b62;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Nimbus Roman No9 L;text-anchor:start;writing-mode:lr-tb"
-       xml:space="preserve"><tspan
-         y="315.20035"
-         x="163.38908"
-         id="tspan1395"
-         sodipodi:role="line">JabRef</tspan></text>
-    <text
-       inkscape:export-ydpi="75.000000"
-       inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_beta/jabref/jabref-2.0-splash.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="397.84811"
-       x="149.99753"
-       style="font-size:45.702374;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#805b41;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Times New Roman;text-anchor:start;writing-mode:lr-tb"
-       xml:space="preserve"><tspan
-         y="397.84811"
-         x="149.99753"
-         id="tspan2181"
-         sodipodi:role="line">reference manager</tspan></text>
-  </g>
-</svg>
index 571de46..fa5fd05 100644 (file)
@@ -4,819 +4,1064 @@ import java.util.Vector;
 import java.util.WeakHashMap;
 
 /**
- * This is an immutable class representing information of either
- * <CODE>author</CODE> or <CODE>editor</CODE> field in bibtex record.
+ * This is an immutable class representing information of either <CODE>author</CODE>
+ * or <CODE>editor</CODE> field in bibtex record.
  * <p>
  * Constructor performs parsing of raw field text and stores preformatted data.
  * Various accessor methods return author/editor field in different formats.
  * <p>
- * Parsing algorithm is designed to satisfy two requirements:
- * (a) when author's name is typed correctly, the result should
- *     coincide with the one of BiBTeX;
- * (b) for erroneous names, output should be reasonable (but may differ
- *     from BiBTeX output).
- * The following rules are used:
+ * Parsing algorithm is designed to satisfy two requirements: (a) when author's
+ * name is typed correctly, the result should coincide with the one of BiBTeX;
+ * (b) for erroneous names, output should be reasonable (but may differ from
+ * BiBTeX output). The following rules are used:
  * <ol>
  * <li> 'author field' is a sequence of tokens;
- *    <ul>
- *    <li> tokens are separated by sequences of whitespaces
- *         (<CODE>Character.isWhitespace(c)==true</CODE>), commas (,),
- *         dashes (-), and tildas (~);
- *    <li> every comma separates tokens, while sequences of other separators
- *         are equivalent to a single separator; for example:
- *         "a - b" consists of 2 tokens ("a" and "b"), while
- *         "a,-,b" consists of 3 tokens ("a", "", and "b")
- *    <li> anything enclosed in braces belonges to a single token; for example:
- *         "abc x{a,b,-~ c}x" consists of 2 tokens, while
- *         "abc xa,b,-~ cx" consists of 4 tokens ("abc", "xa","b", and "cx");
- *    <li> a token followed immediately by a dash is "dash-terminated" token,
- *         and all other tokens are "space-terminated" tokens; for example:
- *         in "a-b- c - d" tokens "a" and "b" are dash-terminated and
- *         "c" and "d" are space-terminated;
- *    <li> for the purposes of splitting of 'author name' into parts and
- *         construction of abbreviation of first name,
- *         one needs definitions of first latter of a token, case of a token,
- *         and abbreviation of a token:
- *         <ul>
- *         <li> 'first letter' of a token is the first letter character
- *              (<CODE>Character.isLetter(c)==true</CODE>) that does not
- *              belong to a sequence of letters that immediately follows
- *              "\" character, with one exception:
- *              if "\" is followed by "aa", "AA", "ae", "AE", "l", "L", "o", "O",
- *              "oe", "OE", "i", or "j" followed by non-letter, the 'first letter'
- *              of a token is a letter that follows "\"; for example:
- *              in "a{x}b" 'first letter' is "a",
- *              in "{\"{U}}bel" 'first letter' is "U",
- *              in "{\noopsort{\"o}}xyz" 'first letter' is "o",
- *              in "{\AE}x" 'first letter' is "A",
- *              in "\aex\ijk\Oe\j" 'first letter' is "j";
- *              if there is no letter satisfying the above rule, 'first letter'
- *              is undefined;
- *         <li> token is "lower-case" token, if its first letter id defined and
- *              is lower-case (<CODE>Character.isLowerCase(c)==true</CODE>),
- *              and token is "upper-case" token otherwise;
- *         <li> 'abbreviation' of a token is the shortest prefix of the token
- *              that (a) contains 'first letter' and (b) is braces-balanced;
- *              if 'first letter' is undefined, 'abbreviation' is the token
- *              itself; in the above examples, 'abbreviation's are
- *              "a", "{\"{U}}", "{\noopsort{\"o}}", "{\AE}", "\aex\ijk\Oe\j";
- *         </ul>
- *    <li> the behavior based on the above definitions will be erroneous only
- *         in one case: if the first-name-token is "{\noopsort{A}}john",
- *         we abbreviate it as "{\noopsort{A}}.", while BiBTeX produces "j.";
- *         fixing this problem, however, requires processing of the preabmle;
- *    </ul>
- * <li> 'author name's in 'author field' are subsequences of tokens separated
- *      by token "and" ("and" is case-insensitive); if 'author name' is an
- *      empty sequence of tokens, it is ignored; for examle, both
- *      "John Smith and Peter Black" and "and and John Smith and and Peter Black"
- *      consists of 2 'author name's "Johm Smith" and "Peter Black"
- *      (in erroneous situations, this is a bit different from BiBTeX behavior);
+ * <ul>
+ * <li> tokens are separated by sequences of whitespaces (<CODE>Character.isWhitespace(c)==true</CODE>),
+ * commas (,), dashes (-), and tildas (~);
+ * <li> every comma separates tokens, while sequences of other separators are
+ * equivalent to a single separator; for example: "a - b" consists of 2 tokens
+ * ("a" and "b"), while "a,-,b" consists of 3 tokens ("a", "", and "b")
+ * <li> anything enclosed in braces belonges to a single token; for example:
+ * "abc x{a,b,-~ c}x" consists of 2 tokens, while "abc xa,b,-~ cx" consists of 4
+ * tokens ("abc", "xa","b", and "cx");
+ * <li> a token followed immediately by a dash is "dash-terminated" token, and
+ * all other tokens are "space-terminated" tokens; for example: in "a-b- c - d"
+ * tokens "a" and "b" are dash-terminated and "c" and "d" are space-terminated;
+ * <li> for the purposes of splitting of 'author name' into parts and
+ * construction of abbreviation of first name, one needs definitions of first
+ * latter of a token, case of a token, and abbreviation of a token:
+ * <ul>
+ * <li> 'first letter' of a token is the first letter character (<CODE>Character.isLetter(c)==true</CODE>)
+ * that does not belong to a sequence of letters that immediately follows "\"
+ * character, with one exception: if "\" is followed by "aa", "AA", "ae", "AE",
+ * "l", "L", "o", "O", "oe", "OE", "i", or "j" followed by non-letter, the
+ * 'first letter' of a token is a letter that follows "\"; for example: in
+ * "a{x}b" 'first letter' is "a", in "{\"{U}}bel" 'first letter' is "U", in
+ * "{\noopsort{\"o}}xyz" 'first letter' is "o", in "{\AE}x" 'first letter' is
+ * "A", in "\aex\ijk\Oe\j" 'first letter' is "j"; if there is no letter
+ * satisfying the above rule, 'first letter' is undefined;
+ * <li> token is "lower-case" token, if its first letter id defined and is
+ * lower-case (<CODE>Character.isLowerCase(c)==true</CODE>), and token is
+ * "upper-case" token otherwise;
+ * <li> 'abbreviation' of a token is the shortest prefix of the token that (a)
+ * contains 'first letter' and (b) is braces-balanced; if 'first letter' is
+ * undefined, 'abbreviation' is the token itself; in the above examples,
+ * 'abbreviation's are "a", "{\"{U}}", "{\noopsort{\"o}}", "{\AE}",
+ * "\aex\ijk\Oe\j";
+ * </ul>
+ * <li> the behavior based on the above definitions will be erroneous only in
+ * one case: if the first-name-token is "{\noopsort{A}}john", we abbreviate it
+ * as "{\noopsort{A}}.", while BiBTeX produces "j."; fixing this problem,
+ * however, requires processing of the preabmle;
+ * </ul>
+ * <li> 'author name's in 'author field' are subsequences of tokens separated by
+ * token "and" ("and" is case-insensitive); if 'author name' is an empty
+ * sequence of tokens, it is ignored; for examle, both "John Smith and Peter
+ * Black" and "and and John Smith and and Peter Black" consists of 2 'author
+ * name's "Johm Smith" and "Peter Black" (in erroneous situations, this is a bit
+ * different from BiBTeX behavior);
  * <li> 'author name' consists of 'first-part', 'von-part', 'last-part', and
- *      'junior-part', each of which is a sequence of tokens;
- *      how a sequence of tokens has to be splitted into these parts, depends
- *      the number of commas:
- *     <ul>
- *     <li> no commas, all tokens are upper-case:
- *          'junior-part' and 'von-part' are empty, 'last-part' consist
- *          of the last token, 'first-part' consists of all other tokens
- *          ('first-part' is empty, if 'author name' consists of a single token);
- *          for example, in "John James Smith", 'last-part'="Smith" and
- *          'first-part'="John James";
- *     <li> no commas, there exists lower-case token:
- *          'junior-part' is empty, 'first-part' consists of all upper-case
- *          tokens before the first lower-case token, 'von-part' consists of
- *          lower-case tokens starting the first lower-case token and ending
- *          the lower-case token that is followed by upper-case token,
- *          'last-part' consists of the rest of tokens;
- *          note that both 'first-part' and 'latst-part' may be empty and
- *          'last-part' may contain lower-case tokens; for example:
- *          in "von der", 'first-part'='last-part'="", 'von-part'="von der";
- *          in "Charles Louis Xavier Joseph de la Vall{\'e}e la Poussin",
- *          'first-part'="Charles Louis Xavier Joseph", 'von-part'="de la",
- *          'last-part'="Vall{\'e}e la Poussin";
- *     <li> one comma:
- *          'junior-part' is empty, 'first-part' consists of all tokens after comma,
- *          'von-part' consists of the longest sequence of lower-case tokens
- *          in the very beginning, 'last-part' consists of all tokens after
- *          'von-part' and before comma; note that any part can be empty;
- *          for example: in "de la Vall{\'e}e la Poussin, Charles Louis Xavier Joseph",
- *          'first-part'="Charles Louis Xavier Joseph", 'von-part'="de la",
- *          'last-part'="Vall{\'e}e la Poussin";
- *          in "Joseph de la Vall{\'e}e la Poussin, Charles Louis Xavier",
- *          'first-part'="Charles Louis Xavier", 'von-part'="",
- *          'last-part'="Joseph de la Vall{\'e}e la Poussin";
- *     <li> two or more commas (any comma after the second one is ignored;
- *          it merely separates tokens):
- *          'junior-part' consists of all tokens between first and second commas,
- *          'first-part' consists of all tokens after the second comma,
- *          tokens before the first comma are splitted into 'von-part' and
- *          'last-part' similarly to the case of one comma; for example:
- *          in "de la Vall{\'e}e Poussin, Jr., Charles Louis Xavier Joseph",
- *          'first-part'="Charles Louis Xavier Joseph", 'von-part'="de la",
- *          'last-part'="Vall{\'e}e la Poussin", and 'junior-part'="Jr.";
- *     </ul>
- * <li> when 'first-part', 'last-part', 'von-part', or 'junior-part' is reconstructed
- *      from tokens, tokens in a part are separated either by space or by dash,
- *      depending on whether the token before the separator was space-terminated
- *      or dash-terminated; for the last token in a part it does not matter
- *      whether it was dash- or space-terminated;
- * <li> when 'first-part' is abbreviated, each token is replaced by its abbreviation
- *      followed by a period; separators are the same as in the case of non-abbreviated
- *      name; for example: in "Heinrich-{\"{U}}bel Kurt von Minich",
- *      'first-part'="Heinrich-{\"{U}}bel Kurt", and its abbreviation is
- *      "H.-{\"{U}}. K."
+ * 'junior-part', each of which is a sequence of tokens; how a sequence of
+ * tokens has to be splitted into these parts, depends the number of commas:
+ * <ul>
+ * <li> no commas, all tokens are upper-case: 'junior-part' and 'von-part' are
+ * empty, 'last-part' consist of the last token, 'first-part' consists of all
+ * other tokens ('first-part' is empty, if 'author name' consists of a single
+ * token); for example, in "John James Smith", 'last-part'="Smith" and
+ * 'first-part'="John James";
+ * <li> no commas, there exists lower-case token: 'junior-part' is empty,
+ * 'first-part' consists of all upper-case tokens before the first lower-case
+ * token, 'von-part' consists of lower-case tokens starting the first lower-case
+ * token and ending the lower-case token that is followed by upper-case token,
+ * 'last-part' consists of the rest of tokens; note that both 'first-part' and
+ * 'latst-part' may be empty and 'last-part' may contain lower-case tokens; for
+ * example: in "von der", 'first-part'='last-part'="", 'von-part'="von der"; in
+ * "Charles Louis Xavier Joseph de la Vall{\'e}e la Poussin",
+ * 'first-part'="Charles Louis Xavier Joseph", 'von-part'="de la",
+ * 'last-part'="Vall{\'e}e la Poussin";
+ * <li> one comma: 'junior-part' is empty, 'first-part' consists of all tokens
+ * after comma, 'von-part' consists of the longest sequence of lower-case tokens
+ * in the very beginning, 'last-part' consists of all tokens after 'von-part'
+ * and before comma; note that any part can be empty; for example: in "de la
+ * Vall{\'e}e la Poussin, Charles Louis Xavier Joseph", 'first-part'="Charles
+ * Louis Xavier Joseph", 'von-part'="de la", 'last-part'="Vall{\'e}e la
+ * Poussin"; in "Joseph de la Vall{\'e}e la Poussin, Charles Louis Xavier",
+ * 'first-part'="Charles Louis Xavier", 'von-part'="", 'last-part'="Joseph de la
+ * Vall{\'e}e la Poussin";
+ * <li> two or more commas (any comma after the second one is ignored; it merely
+ * separates tokens): 'junior-part' consists of all tokens between first and
+ * second commas, 'first-part' consists of all tokens after the second comma,
+ * tokens before the first comma are splitted into 'von-part' and 'last-part'
+ * similarly to the case of one comma; for example: in "de la Vall{\'e}e
+ * Poussin, Jr., Charles Louis Xavier Joseph", 'first-part'="Charles Louis
+ * Xavier Joseph", 'von-part'="de la", 'last-part'="Vall{\'e}e la Poussin", and
+ * 'junior-part'="Jr.";
+ * </ul>
+ * <li> when 'first-part', 'last-part', 'von-part', or 'junior-part' is
+ * reconstructed from tokens, tokens in a part are separated either by space or
+ * by dash, depending on whether the token before the separator was
+ * space-terminated or dash-terminated; for the last token in a part it does not
+ * matter whether it was dash- or space-terminated;
+ * <li> when 'first-part' is abbreviated, each token is replaced by its
+ * abbreviation followed by a period; separators are the same as in the case of
+ * non-abbreviated name; for example: in "Heinrich-{\"{U}}bel Kurt von Minich",
+ * 'first-part'="Heinrich-{\"{U}}bel Kurt", and its abbreviation is "H.-{\"{U}}.
+ * K."
  * </ol>
+ * 
+ * @see tests.net.sf.jabref.AuthorListTest Testcases for this class.
  */
 public class AuthorList {
 
-    private Vector authors;     // of Author
-
-    // Variables for storing computed strings, so they only need be created once:
-    private String authorsNatbib=null, authorsLastOnly=null, authorsLastFirst=null, authorLastFirstAnds=null,
-        authorsFirstFirst=null, authorsFirstFirstAnds=null, authorsAlph=null;
-
-
-    // The following variables are used only during parsing
-
-    private String orig;        // the raw bibtex author/editor field
-    // the following variables are updated by getToken procedure
-    private int token_start;    // index in orig
-    private int token_end;      // to point 'abc' in '  abc xyz', start=2 and end=5
-    // the following variables are valid only if getToken returns TOKEN_WORD
-    private int token_abbr;     // end of token abbreviation (always: token_start < token_abbr <= token_end)
-    private char token_term;    // either space or dash
-    private boolean token_case; // true if upper-case token, false if lower-case token
-
-    // Tokens of one author name.
-    // Each token occupies TGL consecutive entries in this vector (as described below)
-    private Vector tokens;
-    private static final int TOKEN_GROUP_LENGTH = 4;   // number of entries for a token
-    // the following are offsets of an entry in a group of entries for one token
-    private static final int OFFSET_TOKEN = 0;         // String -- token itself;
-    private static final int OFFSET_TOKEN_ABBR = 1;    // String -- token abbreviation;
-    private static final int OFFSET_TOKEN_TERM = 2;    // Character -- token terminator (either " " or "-")
-    //private static final int OFFSET_TOKEN_CASE = 3;    // Boolean -- true=uppercase, false=lowercase
-    // the following are indices in 'tokens' vector created during parsing of author name
-    // and later used to properly split author name into parts
-    int von_start,      // first lower-case token (-1 if all tokens upper-case)
-        last_start,     // first upper-case token after first lower-case token (-1 if does not exist)
-        comma_first,    // token after first comma (-1 if no commas)
-        comma_second;   // token after second comma (-1 if no commas or only one comma)
-
-    // Token types (returned by getToken procedure)
-    private static final int TOKEN_EOF = 0;
-    private static final int TOKEN_AND = 1;
-    private static final int TOKEN_COMMA = 2;
-    private static final int TOKEN_WORD = 3;
-
-    // Constant Hashtable containing names of TeX special characters
-    private static final java.util.Hashtable tex_names = new java.util.Hashtable();
-    // and static constructor to initialize it
-    static {
-        tex_names.put("aa","aa");   // only keys are important in this table
-        tex_names.put("ae","ae");
-        tex_names.put("l","l");
-        tex_names.put("o","o");
-        tex_names.put("oe","oe");
-        tex_names.put("i","i");
-        tex_names.put("AA","AA");
-        tex_names.put("AE","AE");
-        tex_names.put("L","L");
-        tex_names.put("O","O");
-        tex_names.put("OE","OE");
-        tex_names.put("j","j");
-    }
-
-    static WeakHashMap authorCache = new WeakHashMap();
-
-    /**
-     * Parses the parameter strings and stores preformatted author information.
-     * @param bibtex_authors contents of either <CODE>author</CODE> or
-     * <CODE>editor</CODE> bibtex field.
-     */
-    public AuthorList (String bibtex_authors) {
-        authors = new Vector(5);        // 5 seems to be reasonable initial size
-        orig = bibtex_authors;              // initialization
-        token_start = 0; token_end = 0;     // of parser
-        while (token_start < orig.length()) {
-            Author author = getAuthor();
-            if (author != null) authors.add(author);
-        }
-        // clean-up
-        orig = null; tokens = null;
-    }
-
-       public static String fixAuthor_Natbib(final String inOrig) {
-        AuthorList authors = new AuthorList(inOrig);
-        return authors.getAuthorsNatbib();
-    }
-
-    public static AuthorList getAuthorList(String inOrig) {
-        Object o = authorCache.get(inOrig);
-        if (o == null) {
-            AuthorList authors = new AuthorList(inOrig);
-            authorCache.put(inOrig, authors);
-            return authors;
-        } else
-            return (AuthorList)o;
-    }
-
-    public static String fixAuthor_firstNameFirstCommas(final String inOrig, final boolean abbr) {
-        AuthorList authors = getAuthorList(inOrig);
-        return authors.getAuthorsFirstFirst(abbr);
-    }
-
-    public static String fixAuthor_firstNameFirst(final String inOrig) {
-        AuthorList authors = getAuthorList(inOrig);
-        return authors.getAuthorsFirstFirstAnds();
-    }
-
-    public static String fixAuthor_lastNameFirstCommas(final String inOrig, final boolean abbr) {
-        AuthorList authors = getAuthorList(inOrig);
-        return authors.getAuthorsLastFirst(abbr);
-    }
-
-    public static String fixAuthor_lastNameFirst(final String inOrig) {
-        AuthorList authors = getAuthorList(inOrig);
-        return authors.getAuthorsLastFirstAnds();
-    }
-
-    public static String fixAuthor_lastNameOnlyCommas(final String inOrig) {
-        AuthorList authors = getAuthorList(inOrig);
-        return authors.getAuthorsLastOnly();
-    }
-
-    public static String fixAuthorForAlphabetization(final String inOrig) {
-        AuthorList authors = getAuthorList(inOrig);
-      return authors.getAuthorsForAlphabetization();
-
-    }
-
-
-    /**
-     * Parses one author name and returns preformatted information.
-     * @return Preformatted author name; <CODE>null</CODE> if author name is empty.
-     */
-    private Author getAuthor() {
-
-        tokens = new Vector();      // initialization
-        von_start = -1;  last_start = -1;  comma_first = -1;  comma_second = -1;
-
-        // First step: collect tokens in 'tokens' Vector and calculate indices
-    token_loop:
-        while (true) {
-            int token = getToken();
-    cases:    switch (token) {
-                case TOKEN_EOF : case TOKEN_AND : break token_loop;
-                case TOKEN_COMMA :
-                    if (comma_first < 0) comma_first = tokens.size();
-                    else if (comma_second < 0) comma_second = tokens.size();
-                    break cases;
-                case TOKEN_WORD :
-                    tokens.add(orig.substring(token_start, token_end));
-                    tokens.add(orig.substring(token_start, token_abbr));
-                    tokens.add(new Character(token_term));
-                    tokens.add(Boolean.valueOf(token_case));
-                    if (comma_first >= 0) break cases;
-                    if (last_start >= 0) break cases;
-                    if (von_start < 0) {
-                        if (!token_case) {
-                            von_start = tokens.size()-TOKEN_GROUP_LENGTH; break cases;
-                        }
-                    } else if (last_start < 0 && token_case) {
-                        last_start = tokens.size()-TOKEN_GROUP_LENGTH; break cases;
-                    }
-    }
-        }// end token_loop
-
-        // Second step: split name into parts (here: calculate indices
-        // of parts in 'tokens' Vector)
-        if (tokens.size()==0) return null;  // no author information
-
-        // the following negatives indicate absence of the corresponding part
-        int first_part_start=-1, von_part_start=-1, last_part_start=-1, jr_part_start=-1;
-        int first_part_end=0, von_part_end=0, last_part_end=0, jr_part_end=0;
-        if (comma_first<0) {            // no commas
-            if (von_start<0) {              // no 'von part'
-                last_part_end = tokens.size();
-                last_part_start = tokens.size() - TOKEN_GROUP_LENGTH;
-                first_part_end = last_part_start;
-                if (first_part_end>0) first_part_start = 0;
-            } else {                        // 'von part' is present
-                if (last_start>=0) {
-                    last_part_end = tokens.size();
-                    last_part_start = last_start;
-                    von_part_end = last_part_start;
-                } else {
-                    von_part_end = tokens.size();
-                }
-                von_part_start = von_start;
-                first_part_end = von_part_start;
-                if (first_part_end>0) first_part_start = 0;
-            }
-        } else {    // commas are present: it affects only 'first part' and 'junior part'
-            first_part_end = tokens.size();
-            if (comma_second<0) {    // one comma
-                if (comma_first < first_part_end) first_part_start = comma_first;
-            } else {                 // two or more commas
-                if (comma_second < first_part_end) first_part_start = comma_second;
-                jr_part_end = comma_second;
-                if (comma_first < jr_part_end) jr_part_start = comma_first;
-            }
-            if (von_start!=0) {     // no 'von part'
-                last_part_end = comma_first;
-                if (last_part_end>0) last_part_start = 0;
-            } else {                // 'von part' is present
-                if (last_start<0) {
-                    von_part_end = comma_first;
-                } else {
-                    last_part_end = comma_first;
-                    last_part_start = last_start;
-                    von_part_end = last_part_start;
-                }
-                von_part_start = 0;
-            }
-        }
-
-        // Third step: do actual splitting, construct Author object
-        return new Author(
-          (first_part_start<0 ? null : concatTokens(first_part_start,first_part_end,OFFSET_TOKEN,false)),
-          (first_part_start<0 ? null : concatTokens(first_part_start,first_part_end,OFFSET_TOKEN_ABBR,true)),
-          (  von_part_start<0 ? null : concatTokens(  von_part_start,  von_part_end,OFFSET_TOKEN,false)),
-          ( last_part_start<0 ? null : concatTokens( last_part_start, last_part_end,OFFSET_TOKEN,false)),
-          (   jr_part_start<0 ? null : concatTokens(   jr_part_start,   jr_part_end,OFFSET_TOKEN,false))
-        );
-    }
-
-    /**
-     * Concatenates list of tokens from 'tokens' Vector.
-     * Tokens are separated by spaces or dashes, dependeing on stored in 'tokens'.
-     * Callers always ensure that start < end; thus, there exists at least
-     * one token to be concatenated.
-     * @param start index of the first token to be concatenated in 'tokens' Vector
-     * (always divisible by TOKEN_GROUP_LENGTH).
-     * @param end index of the first token not to be concatenated in 'tokens' Vector
-     * (always divisible by TOKEN_GROUP_LENGTH).
-     * @param offset offset within token group (used to request concatenation of
-     * either full tokens or abbreviation).
-     * @param dot_after <CODE>true</CODE> -- add period after each token,
-     * <CODE>false</CODE> -- do not add.
-     * @return the result of concatenation.
-     */
-    private String concatTokens(int start, int end, int offset, boolean dot_after) {
-        StringBuffer res = new StringBuffer();
-        // Here we always have start < end
-        res.append((String) tokens.get(start+offset));
-        if (dot_after) res.append('.');
-        start += TOKEN_GROUP_LENGTH;
-        while (start < end) {
-            res.append(tokens.get(start-TOKEN_GROUP_LENGTH+OFFSET_TOKEN_TERM));
-            res.append((String) tokens.get(start+offset));
-            if (dot_after) res.append('.');
-            start += TOKEN_GROUP_LENGTH;
-        }
-        return res.toString();
-    }
-
-    /**
-     * Parses the next token.
-     * <p>
-     * The string being parsed is stored in global variable <CODE>orig</CODE>,
-     * and position which parsing has to start from is stored in global
-     * variable <CODE>token_end</CODE>; thus, <CODE>token_end</CODE> has to be
-     * set to 0 before the first invocation. Procedure updates <CODE>token_end</CODE>;
-     * thus, subsequent invocations do not require any additional variable settings.
-     * <p>
-     * The type of the token is returned; if it is <CODE>TOKEN_WORD</CODE>, additional
-     * information is given  in global variables <CODE>token_start</CODE>, <CODE>token_end</CODE>,
-     * <CODE>token_abbr</CODE>, <CODE>token_term</CODE>, and <CODE>token_case</CODE>;
-     * namely: <CODE>orig.substring(token_start,token_end)</CODE> is the thext of the token,
-     * <CODE>orig.substring(token_start,token_abbr)</CODE> is the token abbreviation,
-     * <CODE>token_term</CODE> contains token terminator (space or dash),
-     * and <CODE>token_case</CODE> is <CODE>true</CODE>, if token is upper-case
-     * and <CODE>false</CODE> if token is lower-case.
-     * @return <CODE>TOKEN_EOF</CODE> -- no more tokens,
-     * <CODE>TOKEN_COMMA</CODE> -- token is comma,
-     * <CODE>TOKEN_AND</CODE> -- token is the word "and" (or "And", or "aND", etc.),
-     * <CODE>TOKEN_WORD</CODE> -- token is a word; additional information is given
-     * in global variables <CODE>token_start</CODE>, <CODE>token_end</CODE>,
-     * <CODE>token_abbr</CODE>, <CODE>token_term</CODE>, and <CODE>token_case</CODE>.
-     */
-    private int getToken() {
-        token_start = token_end;
-        while (token_start < orig.length()) {
-            char c = orig.charAt(token_start);
-            if ( !(c=='~' || c=='-' || Character.isWhitespace(c)) ) break;
-            token_start++;
-        }
-        token_end = token_start;
-        if (token_start >= orig.length()) return TOKEN_EOF;
-        if (orig.charAt(token_start)==',') { token_end++; return TOKEN_COMMA; }
-        token_abbr = -1;
-        token_term = ' ';
-        token_case = true;
-        int braces_level = 0;
-        int current_backslash = -1;
-        boolean first_letter_is_found = false;
-        while (token_end < orig.length()) {
-            char c = orig.charAt(token_end);
-            if (c=='{') { braces_level++; }
-            if (braces_level > 0) if (c=='}') braces_level--;
-            if (first_letter_is_found && token_abbr<0 && braces_level==0) token_abbr = token_end;
-            if (!first_letter_is_found && current_backslash<0 && Character.isLetter(c)) {
-                token_case = Character.isUpperCase(c); first_letter_is_found = true;
-            }
-            if (current_backslash>=0 && !Character.isLetter(c)) {
-                if (!first_letter_is_found) {
-                    String tex_cmd_name = orig.substring(current_backslash+1, token_end);
-                    if (tex_names.get(tex_cmd_name)!=null) {
-                        token_case = Character.isUpperCase(tex_cmd_name.charAt(0));
-                        first_letter_is_found = true;
-                    }
-                }
-                current_backslash = -1;
-            }
-            if (c=='\\') current_backslash = token_end;
-            if (braces_level==0)
-                if (c==',' || c=='~' || /*c=='-' ||*/ Character.isWhitespace(c)) break;
-            // Morten Alver 18 Apr 2006: Removed check for hyphen '-' above to prevent
-            // problems with names like Bailey-Jones getting broken up and sorted wrong.
-            token_end++;
-        }
-        if (token_abbr<0) token_abbr = token_end;
-        if (token_end<orig.length() && orig.charAt(token_end)=='-') token_term='-';
-        if (orig.substring(token_start,token_end).equalsIgnoreCase("and"))
-            return TOKEN_AND; else return TOKEN_WORD;
-    }
-
-    /**
-     * Returns the number of author names in this object.
-     * @return the number of author names in this object.
-     */
-    public int size() { return authors.size(); }
-    /**
-     * Returns the <CODE>Author</CODE> object for ith author.
-     * @param i index of the author (from 0 to <CODE>size()-1</CODE>).
-     * @return the <CODE>Author</CODE> object.
-     */
-    public Author getAuthor(int i) { return (Author) authors.get(i); }
-    /**
-     * Returns the list of authors in "natbib" format.
-     * <p>
-     * "John Smith" ==> "Smith";
-     * "John Smith and Black Brown, Peter" ==> "Smith and Black Brown";
-     * "John von Neumann and John Smith and Black Brown, Peter" ==> "von Neumann et al.".
-     * @return formatted list of authors.
-     */
-    public String getAuthorsNatbib() {
-        // Check if we've computed this before:
-        if (authorsNatbib != null)
-            return authorsNatbib;
-
-        StringBuffer res = new StringBuffer();
-        if (size()>0) {
-            res.append(getAuthor(0).getLastOnly());
-            if (size()==2) {
-                res.append(" and ");
-                res.append(getAuthor(1).getLastOnly());
-            } else if (size()>2) {
-                res.append(" et al.");
-            }
-        }
-        authorsNatbib = res.toString();
-        return authorsNatbib;
-    }
-        /**
-     * Returns the list of authors separated by commas with last name only;
-     * If the list consists of three or more authors, "and" is inserted before
-     * the last author's name.
-     * <p>
-     * "John Smith" ==> "Smith";
-     * "John Smith and Black Brown, Peter" ==> "Smith and Black Brown" ;
-     * "John von Neumann and John Smith and Black Brown, Peter" ==>
-     * "von Neumann, Smith and Black Brown".
-     * @return formatted list of authors.
-     */
-        public String getAuthorsLastOnly() {
-            // Check if we've computed this before:
-            if (authorsLastOnly != null)
-                return authorsLastOnly;
-            StringBuffer res = new StringBuffer();
-            if (size() > 0) {
-                res.append(getAuthor(0).getLastOnly());
-                int i = 1;
-                while (i < size() - 1) {
-                    res.append(", ");
-                    res.append(getAuthor(i).getLastOnly());
-                    i++;
-                }
-                if (size() > 2) res.append(",");
-                if (size() > 1) {
-                    res.append(" and ");
-                    res.append(getAuthor(i).getLastOnly());
-                }
-            }
-            authorsLastOnly = res.toString();
-            return authorsLastOnly;
-        }
-    /**
-     * Returns the list of authors separated by commas with first names after last name;
-     * first names are abbreviated or not depending on parameter.
-     * If the list consists of three or more authors, "and" is inserted before
-     * the last author's name.
-     * <p>
-     * "John Smith" ==> "Smith, John" or "Smith, J.";
-     * "John Smith and Black Brown, Peter" ==>
-     * "Smith, John and Black Brown, Peter" or "Smith, J. and Black Brown, P.";
-     * "John von Neumann and John Smith and Black Brown, Peter" ==>
-     * "von Neumann, John, Smith, John and Black Brown, Peter" or
-     * "von Neumann, J., Smith, J. and Black Brown, P.".
-     * @param abbr <CODE>true</CODE> -- abbreviate first names,
-     * <CODE>false</CODE> -- do not abbreviate.
-     * @return formatted list of authors.
-     */
-    public String getAuthorsLastFirst(boolean abbr) {
-        // Check if we've computed this before:
-        if (authorsLastFirst != null)
-            return authorsLastFirst;
-
-        StringBuffer res = new StringBuffer();
-        if (size()>0) {
-            res.append(getAuthor(0).getLastFirst(abbr));
-            int i = 1;
-            while (i < size()-1) {
-                res.append(", ");
-                res.append(getAuthor(i).getLastFirst(abbr));
-                i++;
-            }
-            if (size() > 2) res.append(",");
-            if (size() > 1) {
-                res.append(" and ");
-                res.append(getAuthor(i).getLastFirst(abbr));
-            }
-        }
-        authorsLastFirst = res.toString();
-        return authorsLastFirst;
-    }
-    /**
-     * Returns the list of authors separated by "and"s with first names after last name;
-     * first names are not abbreviated.
-     * <p>
-     * "John Smith" ==> "Smith, John";
-     * "John Smith and Black Brown, Peter" ==> "Smith, John and Black Brown, Peter";
-     * "John von Neumann and John Smith and Black Brown, Peter" ==>
-     * "von Neumann, John and Smith, John and Black Brown, Peter".
-     * @return formatted list of authors.
-     */
-    public String getAuthorsLastFirstAnds() {
-        // Check if we've computed this before:
-        if (authorLastFirstAnds != null)
-            return authorLastFirstAnds;
-
-        StringBuffer res = new StringBuffer();
-        if (size()>0) {
-            res.append(getAuthor(0).getLastFirst(false));
-            for (int i=1; i<size(); i++) {
-                res.append(" and ");
-                res.append(getAuthor(i).getLastFirst(false));
-            }
-        }
-
-        authorLastFirstAnds = res.toString();
-        return authorLastFirstAnds;
-    }
-    /**
-     * Returns the list of authors separated by commas with first names before last name;
-     * first names are abbreviated or not depending on parameter.
-     * If the list consists of three or more authors, "and" is inserted before
-     * the last author's name.
-     * <p>
-     * "John Smith" ==> "John Smith" or "J. Smith";
-     * "John Smith and Black Brown, Peter" ==>
-     * "John Smith and Peter Black Brown" or "J. Smith and P. Black Brown";
-     * "John von Neumann and John Smith and Black Brown, Peter" ==>
-     * "John von Neumann, John Smith and Peter Black Brown" or
-     * "J. von Neumann, J. Smith and P. Black Brown".
-     * @param abbr <CODE>true</CODE> -- abbreviate first names,
-     * <CODE>false</CODE> -- do not abbreviate.
-     * @return formatted list of authors.
-     */
-    public String getAuthorsFirstFirst(boolean abbr) {
-        // Check if we've computed this before:
-        if (authorsFirstFirst != null)
-            return authorsFirstFirst;
-
-        StringBuffer res = new StringBuffer();
-        if (size()>0) {
-            res.append(getAuthor(0).getFirstLast(abbr));
-            int i = 1;
-            while (i < size()-1) {
-                res.append(", ");
-                res.append(getAuthor(i).getFirstLast(abbr));
-                i++;
-            }
-            if (size() > 2) res.append(",");
-            if (size() > 1) {
-                res.append(" and ");
-                res.append(getAuthor(i).getFirstLast(abbr));
-            }
-        }
-        authorsFirstFirst = res.toString();
-        return authorsFirstFirst;
-    }
-    /**
-     * Returns the list of authors separated by "and"s with first names before last name;
-     * first names are not abbreviated.
-     * <p>
-     * "John Smith" ==> "John Smith";
-     * "John Smith and Black Brown, Peter" ==> "John Smith and Peter Black Brown";
-     * "John von Neumann and John Smith and Black Brown, Peter" ==>
-     * "John von Neumann and John Smith and Peter Black Brown".
-     * @return formatted list of authors.
-     */
-    public String getAuthorsFirstFirstAnds() {
-        // Check if we've computed this before:
-        if (authorsFirstFirstAnds != null)
-            return authorsFirstFirstAnds;
-
-        StringBuffer res = new StringBuffer();
-        if (size()>0) {
-            res.append(getAuthor(0).getFirstLast(false));
-            for (int i=1; i<size(); i++) {
-                res.append(" and ");
-                res.append(getAuthor(i).getFirstLast(false));
-            }
-        }
-        authorsFirstFirstAnds = res.toString();
-        return authorsFirstFirstAnds;
-    }
-
-    /**
-     * Returns the list of authors in a form suitable for alphabetization. This means that
-     * last names come first, never preceded by "von" particles, and that any braces are
-     * removed. First names are abbreviated so the same name is treated similarly if abbreviated
-     * in one case and not in another.
-     * This form is not intended to be suitable for presentation, only for sorting.
-     *
-     * <p>
-     * "John Smith" ==> "Smith, J.";
-     * "John von Neumann
-     * @return formatted list of authors
-     */
-    public String getAuthorsForAlphabetization() {
-         if (authorsAlph != null)
-            return authorsAlph;
-
-         StringBuffer res = new StringBuffer();
-        if (size()>0) {
-            res.append(getAuthor(0).getNameForAlphabetization());
-            for (int i=1; i<size(); i++) {
-                res.append(" and ");
-                res.append(getAuthor(i).getNameForAlphabetization());
-            }
-        }
-        authorsAlph = res.toString();
-        return authorsAlph;
-    }
-
-
-
-    /**
-     *  This is an immutable class that keeps information regarding single author.
-     *  It is just a container for the information, with very simple methods
-     *  to access it.
-     *  <p>
-     *  Current usage: only methods <code>getLastOnly</code>,
-     *  <code>getFirstLast</code>, and <code>getLastFirst</code> are used;
-     *  all other methods are provided for completeness.
-     */
-    private static class Author {
-        private final String first_part;
-        private final String first_abbr;
-        private final String von_part;
-        private final String last_part;
-        private final String jr_part;
-        /**
-         * Creates the Author object.
-         * If any part of the name is absent, <CODE>null</CODE> must be passes;
-         * otherwise other methods may return erroneous results.
-         * @param first the first name of the author (may consist of several tokens,
-         * like "Charles Louis Xavier Joseph" in
-         * "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin")
-         * @param firstabbr the abbreviated first name of the author (may consist
-         * of several tokens, like "C. L. X. J." in
-         * "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin").
-         * It is a responsibility of the caller to create a reasonable
-         * abbreviation of the first name.
-         * @param von the von part of the author's name (may consist of
-         * several tokens, like "de la" in
-         * "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin")
-         * @param last the lats name of the author (may consist of several tokens,
-         * like "Vall{\'e}e Poussin" in
-         * "Charles Louis Xavier Joseph de la Vall{\'e}e Poussin")
-         * @param jr the junior part of the author's name (may consist of
-         * several tokens, like "Jr. III" in
-         * "Smith, Jr. III, John")
-         */
-        public Author(String first, String firstabbr, String von, String last, String jr) {
-            first_part = first;
-            first_abbr = firstabbr;
-            von_part = von;
-            last_part = last;
-            jr_part = jr;
-        }
-        /**
-         * Retunrns the first name of the author stored in this object.
-         * @return first name of the author (may consist of several tokens)
-         */
-        public String getFirst() { return first_part; }
-        /**
-         * Retunrns the abbreviated first name of the author stored in this object.
-         * @return abbreviated first name of the author (may consist of several tokens)
-         */
-        public String getFirstAbbr() { return first_abbr; }
-        /**
-         * Retunrns the von part of the author's name stored in this object.
-         * @return von part of the author's name (may consist of several tokens)
-         */
-        public String getVon() { return von_part; }
-        /**
-         * Retunrns the last name of the author stored in this object.
-         * @return last name of the author (may consist of several tokens)
-         */
-        public String getLast() { return last_part; }
-        /**
-         * Retunrns the junior part of the author's name stored in this object.
-         * @return junior part of the author's name (may consist of several tokens)
-         */
-        public String getJr() { return jr_part; }
-        /**
-         * Returns von part followed by last name.
-         * If both fields were specified as <CODE>null</CODE>,
-         * the empty string <CODE>""</CODE> is returned.
-         * @return 'von Last'
-         */
-        public String getLastOnly() {
-            if (von_part==null) {
-                return (last_part==null ? "" : last_part);
-            } else {
-                return (last_part==null ? von_part : von_part + " " + last_part);
-            }
-        }
-        /**
-         * Returns the author's name in form 'von Last, Jr., First' with the first name
-         * full or abbreviated depending on parameter.
-         * @param abbr <CODE>true</CODE> - abbreviate first name,
-         * <CODE>false</CODE> - do not abbreviate
-         * @return 'von Last, Jr., First' (if <CODE>abbr==false</CODE>) or
-         * 'von Last, Jr., F.' (if <CODE>abbr==true</CODE>)
-         */
-        public String getLastFirst(boolean abbr) {
-            String res = getLastOnly();
-            if (jr_part != null) res += ", " + jr_part;
-            if (abbr) {
-                if (first_abbr != null) res += ", " + first_abbr;
-            } else {
-                if (first_part != null) res += ", " + first_part;
-            }
-            return res;
-        }
-        /**
-         * Returns the author's name in form 'First von Last, Jr.' with the first name
-         * full or abbreviated depending on parameter.
-         * @param abbr <CODE>true</CODE> - abbreviate first name,
-         * <CODE>false</CODE> - do not abbreviate
-         * @return 'First von Last, Jr.' (if <CODE>abbr==false</CODE>) or
-         * 'F. von Last, Jr.' (if <CODE>abbr==true</CODE>)
-         */
-        public String getFirstLast(boolean abbr) {
-            String res = getLastOnly();
-            if (abbr) {
-                res = (first_abbr==null ? "" : first_abbr + " ") + res;
-            } else {
-                res = (first_part==null ? "" : first_part + " ") + res;
-            }
-            if (jr_part != null) res += ", " + jr_part;
-            return res;
-        }
-
-        public String getNameForAlphabetization() {
-            StringBuffer res = new StringBuffer();
-            if (last_part != null)
-                res.append(last_part);
-            if (jr_part != null) {
-                res.append(", ");
-                res.append(jr_part);
-            }
-            if (first_abbr != null) {
-                res.append(", ");
-                res.append(first_abbr);
-            }
-            while ((res.length() > 0) && (res.charAt(0) == '{'))
-                res.deleteCharAt(0);
-            return res.toString();
-
-        }
-    }//end Author
-}//end AuthorList
+       private Vector authors; // of Author
+
+       // Variables for storing computed strings, so they only need be created
+       // once:
+       private String authorsNatbib = null, authorsFirstFirstAnds = null,
+               authorsAlph = null;
+
+       private String[] authorsFirstFirst = new String[4], authorsLastOnly = new String[2],
+       authorLastFirstAnds = new String[2], 
+       authorsLastFirst = new String[4];
+
+       // The following variables are used only during parsing
+
+       private String orig; // the raw bibtex author/editor field
+
+       // the following variables are updated by getToken procedure
+       private int token_start; // index in orig
+
+       private int token_end; // to point 'abc' in ' abc xyz', start=2 and end=5
+
+       // the following variables are valid only if getToken returns TOKEN_WORD
+       private int token_abbr; // end of token abbreviation (always: token_start <
+
+       // token_abbr <= token_end)
+
+       private char token_term; // either space or dash
+
+       private boolean token_case; // true if upper-case token, false if lower-case
+
+       // token
+
+       // Tokens of one author name.
+       // Each token occupies TGL consecutive entries in this vector (as described
+       // below)
+       private Vector tokens;
+
+       private static final int TOKEN_GROUP_LENGTH = 4; // number of entries for
+
+       // a token
+
+       // the following are offsets of an entry in a group of entries for one token
+       private static final int OFFSET_TOKEN = 0; // String -- token itself;
+
+       private static final int OFFSET_TOKEN_ABBR = 1; // String -- token
+
+       // abbreviation;
+
+       private static final int OFFSET_TOKEN_TERM = 2; // Character -- token
+
+       // terminator (either " " or
+       // "-")
+
+       // private static final int OFFSET_TOKEN_CASE = 3; // Boolean --
+       // true=uppercase, false=lowercase
+       // the following are indices in 'tokens' vector created during parsing of
+       // author name
+       // and later used to properly split author name into parts
+       int von_start, // first lower-case token (-1 if all tokens upper-case)
+               last_start, // first upper-case token after first lower-case token (-1
+               // if does not exist)
+               comma_first, // token after first comma (-1 if no commas)
+               comma_second; // token after second comma (-1 if no commas or only one
+
+       // comma)
+
+       // Token types (returned by getToken procedure)
+       private static final int TOKEN_EOF = 0;
+
+       private static final int TOKEN_AND = 1;
+
+       private static final int TOKEN_COMMA = 2;
+
+       private static final int TOKEN_WORD = 3;
+
+       // Constant Hashtable containing names of TeX special characters
+       private static final java.util.Hashtable tex_names = new java.util.Hashtable();
+       // and static constructor to initialize it
+       static {
+               tex_names.put("aa", "aa"); // only keys are important in this table
+               tex_names.put("ae", "ae");
+               tex_names.put("l", "l");
+               tex_names.put("o", "o");
+               tex_names.put("oe", "oe");
+               tex_names.put("i", "i");
+               tex_names.put("AA", "AA");
+               tex_names.put("AE", "AE");
+               tex_names.put("L", "L");
+               tex_names.put("O", "O");
+               tex_names.put("OE", "OE");
+               tex_names.put("j", "j");
+       }
+
+       static WeakHashMap authorCache = new WeakHashMap();
+
+       /**
+        * Parses the parameter strings and stores preformatted author information.
+        * 
+        * Don't call this constructor directly but rather use the getAuthorList()
+        * method which caches its results.
+        * 
+        * @param bibtex_authors
+        *            contents of either <CODE>author</CODE> or <CODE>editor</CODE>
+        *            bibtex field.
+        */
+       protected AuthorList(String bibtex_authors) {
+               authors = new Vector(5); // 5 seems to be reasonable initial size
+               orig = bibtex_authors; // initialization
+               token_start = 0;
+               token_end = 0; // of parser
+               while (token_start < orig.length()) {
+                       Author author = getAuthor();
+                       if (author != null)
+                               authors.add(author);
+               }
+               // clean-up
+               orig = null;
+               tokens = null;
+       }
+
+       /**
+        * Retrieve an AuthorList for the given string of authors or editors.
+        * 
+        * This function tries to cache AuthorLists by string passed in.
+        * 
+        * @param authors
+        *            The string of authors or editors in bibtex format to parse.
+        * @return An AuthorList object representing the given authors.
+        */
+       public static AuthorList getAuthorList(String authors) {
+               AuthorList authorList = (AuthorList) authorCache.get(authors);
+               if (authorList == null) {
+                       authorList = new AuthorList(authors);
+                       authorCache.put(authors, authorList);
+               }
+               return authorList;
+       }
+
+       /**
+        * This is a convenience method for getAuthorsFirstFirst()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsFirstFirst
+        */
+       public static String fixAuthor_firstNameFirstCommas(String authors, boolean abbr,
+               boolean oxfordComma) {
+               return getAuthorList(authors).getAuthorsFirstFirst(abbr, oxfordComma);
+       }
+
+       /**
+        * This is a convenience method for getAuthorsFirstFirstAnds()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsFirstFirstAnds
+        */
+       public static String fixAuthor_firstNameFirst(String authors) {
+               return getAuthorList(authors).getAuthorsFirstFirstAnds();
+       }
+
+       /**
+        * This is a convenience method for getAuthorsLastFirst()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsLastFirst
+        */
+       public static String fixAuthor_lastNameFirstCommas(String authors, boolean abbr,
+               boolean oxfordComma) {
+               return getAuthorList(authors).getAuthorsLastFirst(abbr, oxfordComma);
+       }
+
+       /**
+        * This is a convenience method for getAuthorsLastFirstAnds(true)
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsLastFirstAnds
+        */
+       public static String fixAuthor_lastNameFirst(String authors) {
+               return getAuthorList(authors).getAuthorsLastFirstAnds(false);
+       }
+       
+       /**
+        * This is a convenience method for getAuthorsLastFirstAnds()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsLastFirstAnds
+        */
+       public static String fixAuthor_lastNameFirst(String authors, boolean abbreviate) {
+               return getAuthorList(authors).getAuthorsLastFirstAnds(abbreviate);
+       }
+
+       /**
+        * This is a convenience method for getAuthorsLastOnly()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsLastOnly
+        */
+       public static String fixAuthor_lastNameOnlyCommas(String authors, boolean oxfordComma) {
+               return getAuthorList(authors).getAuthorsLastOnly(oxfordComma);
+       }
+
+       /**
+        * This is a convenience method for getAuthorsForAlphabetization()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsForAlphabetization
+        */
+       public static String fixAuthorForAlphabetization(String authors) {
+               return getAuthorList(authors).getAuthorsForAlphabetization();
+       }
+
+       /**
+        * This is a convenience method for getAuthorsNatbib()
+        * 
+        * @see net.sf.jabref.AuthorList#getAuthorsNatbib
+        */
+       public static String fixAuthor_Natbib(String authors) {
+               return AuthorList.getAuthorList(authors).getAuthorsNatbib();
+       }
+
+       /**
+        * Parses one author name and returns preformatted information.
+        * 
+        * @return Preformatted author name; <CODE>null</CODE> if author name is
+        *         empty.
+        */
+       private Author getAuthor() {
+
+               tokens = new Vector(); // initialization
+               von_start = -1;
+               last_start = -1;
+               comma_first = -1;
+               comma_second = -1;
+
+               // First step: collect tokens in 'tokens' Vector and calculate indices
+               token_loop: while (true) {
+                       int token = getToken();
+                       cases: switch (token) {
+                       case TOKEN_EOF:
+                       case TOKEN_AND:
+                               break token_loop;
+                       case TOKEN_COMMA:
+                               if (comma_first < 0)
+                                       comma_first = tokens.size();
+                               else if (comma_second < 0)
+                                       comma_second = tokens.size();
+                               break cases;
+                       case TOKEN_WORD:
+                               tokens.add(orig.substring(token_start, token_end));
+                               tokens.add(orig.substring(token_start, token_abbr));
+                               tokens.add(new Character(token_term));
+                               tokens.add(Boolean.valueOf(token_case));
+                               if (comma_first >= 0)
+                                       break cases;
+                               if (last_start >= 0)
+                                       break cases;
+                               if (von_start < 0) {
+                                       if (!token_case) {
+                                               von_start = tokens.size() - TOKEN_GROUP_LENGTH;
+                                               break cases;
+                                       }
+                               } else if (last_start < 0 && token_case) {
+                                       last_start = tokens.size() - TOKEN_GROUP_LENGTH;
+                                       break cases;
+                               }
+                       }
+               }// end token_loop
+
+               // Second step: split name into parts (here: calculate indices
+               // of parts in 'tokens' Vector)
+               if (tokens.size() == 0)
+                       return null; // no author information
+
+               // the following negatives indicate absence of the corresponding part
+               int first_part_start = -1, von_part_start = -1, last_part_start = -1, jr_part_start = -1;
+               int first_part_end = 0, von_part_end = 0, last_part_end = 0, jr_part_end = 0;
+               if (comma_first < 0) { // no commas
+                       if (von_start < 0) { // no 'von part'
+                               last_part_end = tokens.size();
+                               last_part_start = tokens.size() - TOKEN_GROUP_LENGTH;
+                               first_part_end = last_part_start;
+                               if (first_part_end > 0)
+                                       first_part_start = 0;
+                       } else { // 'von part' is present
+                               if (last_start >= 0) {
+                                       last_part_end = tokens.size();
+                                       last_part_start = last_start;
+                                       von_part_end = last_part_start;
+                               } else {
+                                       von_part_end = tokens.size();
+                               }
+                               von_part_start = von_start;
+                               first_part_end = von_part_start;
+                               if (first_part_end > 0)
+                                       first_part_start = 0;
+                       }
+               } else { // commas are present: it affects only 'first part' and
+                       // 'junior part'
+                       first_part_end = tokens.size();
+                       if (comma_second < 0) { // one comma
+                               if (comma_first < first_part_end)
+                                       first_part_start = comma_first;
+                       } else { // two or more commas
+                               if (comma_second < first_part_end)
+                                       first_part_start = comma_second;
+                               jr_part_end = comma_second;
+                               if (comma_first < jr_part_end)
+                                       jr_part_start = comma_first;
+                       }
+                       if (von_start != 0) { // no 'von part'
+                               last_part_end = comma_first;
+                               if (last_part_end > 0)
+                                       last_part_start = 0;
+                       } else { // 'von part' is present
+                               if (last_start < 0) {
+                                       von_part_end = comma_first;
+                               } else {
+                                       last_part_end = comma_first;
+                                       last_part_start = last_start;
+                                       von_part_end = last_part_start;
+                               }
+                               von_part_start = 0;
+                       }
+               }
+
+               // Third step: do actual splitting, construct Author object
+               return new Author((first_part_start < 0 ? null : concatTokens(first_part_start,
+                       first_part_end, OFFSET_TOKEN, false)), (first_part_start < 0 ? null : concatTokens(
+                       first_part_start, first_part_end, OFFSET_TOKEN_ABBR, true)), (von_part_start < 0 ? null
+                       : concatTokens(von_part_start, von_part_end, OFFSET_TOKEN, false)),
+                       (last_part_start < 0 ? null : concatTokens(last_part_start, last_part_end,
+                               OFFSET_TOKEN, false)), (jr_part_start < 0 ? null : concatTokens(jr_part_start,
+                               jr_part_end, OFFSET_TOKEN, false)));
+       }
+
+       /**
+        * Concatenates list of tokens from 'tokens' Vector. Tokens are separated by
+        * spaces or dashes, dependeing on stored in 'tokens'. Callers always ensure
+        * that start < end; thus, there exists at least one token to be
+        * concatenated.
+        * 
+        * @param start
+        *            index of the first token to be concatenated in 'tokens' Vector
+        *            (always divisible by TOKEN_GROUP_LENGTH).
+        * @param end
+        *            index of the first token not to be concatenated in 'tokens'
+        *            Vector (always divisible by TOKEN_GROUP_LENGTH).
+        * @param offset
+        *            offset within token group (used to request concatenation of
+        *            either full tokens or abbreviation).
+        * @param dot_after
+        *            <CODE>true</CODE> -- add period after each token, <CODE>false</CODE> --
+        *            do not add.
+        * @return the result of concatenation.
+        */
+       private String concatTokens(int start, int end, int offset, boolean dot_after) {
+               StringBuffer res = new StringBuffer();
+               // Here we always have start < end
+               res.append((String) tokens.get(start + offset));
+               if (dot_after)
+                       res.append('.');
+               start += TOKEN_GROUP_LENGTH;
+               while (start < end) {
+                       res.append(tokens.get(start - TOKEN_GROUP_LENGTH + OFFSET_TOKEN_TERM));
+                       res.append((String) tokens.get(start + offset));
+                       if (dot_after)
+                               res.append('.');
+                       start += TOKEN_GROUP_LENGTH;
+               }
+               return res.toString();
+       }
+
+       /**
+        * Parses the next token.
+        * <p>
+        * The string being parsed is stored in global variable <CODE>orig</CODE>,
+        * and position which parsing has to start from is stored in global variable
+        * <CODE>token_end</CODE>; thus, <CODE>token_end</CODE> has to be set
+        * to 0 before the first invocation. Procedure updates <CODE>token_end</CODE>;
+        * thus, subsequent invocations do not require any additional variable
+        * settings.
+        * <p>
+        * The type of the token is returned; if it is <CODE>TOKEN_WORD</CODE>,
+        * additional information is given in global variables <CODE>token_start</CODE>,
+        * <CODE>token_end</CODE>, <CODE>token_abbr</CODE>, <CODE>token_term</CODE>,
+        * and <CODE>token_case</CODE>; namely: <CODE>orig.substring(token_start,token_end)</CODE>
+        * is the thext of the token, <CODE>orig.substring(token_start,token_abbr)</CODE>
+        * is the token abbreviation, <CODE>token_term</CODE> contains token
+        * terminator (space or dash), and <CODE>token_case</CODE> is <CODE>true</CODE>,
+        * if token is upper-case and <CODE>false</CODE> if token is lower-case.
+        * 
+        * @return <CODE>TOKEN_EOF</CODE> -- no more tokens, <CODE>TOKEN_COMMA</CODE> --
+        *         token is comma, <CODE>TOKEN_AND</CODE> -- token is the word
+        *         "and" (or "And", or "aND", etc.), <CODE>TOKEN_WORD</CODE> --
+        *         token is a word; additional information is given in global
+        *         variables <CODE>token_start</CODE>, <CODE>token_end</CODE>,
+        *         <CODE>token_abbr</CODE>, <CODE>token_term</CODE>, and
+        *         <CODE>token_case</CODE>.
+        */
+       private int getToken() {
+               token_start = token_end;
+               while (token_start < orig.length()) {
+                       char c = orig.charAt(token_start);
+                       if (!(c == '~' || c == '-' || Character.isWhitespace(c)))
+                               break;
+                       token_start++;
+               }
+               token_end = token_start;
+               if (token_start >= orig.length())
+                       return TOKEN_EOF;
+               if (orig.charAt(token_start) == ',') {
+                       token_end++;
+                       return TOKEN_COMMA;
+               }
+               token_abbr = -1;
+               token_term = ' ';
+               token_case = true;
+               int braces_level = 0;
+               int current_backslash = -1;
+               boolean first_letter_is_found = false;
+               while (token_end < orig.length()) {
+                       char c = orig.charAt(token_end);
+                       if (c == '{') {
+                               braces_level++;
+                       }
+                       if (braces_level > 0)
+                               if (c == '}')
+                                       braces_level--;
+                       if (first_letter_is_found && token_abbr < 0 && braces_level == 0)
+                               token_abbr = token_end;
+                       if (!first_letter_is_found && current_backslash < 0 && Character.isLetter(c)) {
+                               token_case = Character.isUpperCase(c);
+                               first_letter_is_found = true;
+                       }
+                       if (current_backslash >= 0 && !Character.isLetter(c)) {
+                               if (!first_letter_is_found) {
+                                       String tex_cmd_name = orig.substring(current_backslash + 1, token_end);
+                                       if (tex_names.get(tex_cmd_name) != null) {
+                                               token_case = Character.isUpperCase(tex_cmd_name.charAt(0));
+                                               first_letter_is_found = true;
+                                       }
+                               }
+                               current_backslash = -1;
+                       }
+                       if (c == '\\')
+                               current_backslash = token_end;
+                       if (braces_level == 0)
+                               if (c == ',' || c == '~' || /* c=='-' || */Character.isWhitespace(c))
+                                       break;
+                       // Morten Alver 18 Apr 2006: Removed check for hyphen '-' above to
+                       // prevent
+                       // problems with names like Bailey-Jones getting broken up and
+                       // sorted wrong.
+                       token_end++;
+               }
+               if (token_abbr < 0)
+                       token_abbr = token_end;
+               if (token_end < orig.length() && orig.charAt(token_end) == '-')
+                       token_term = '-';
+               if (orig.substring(token_start, token_end).equalsIgnoreCase("and"))
+                       return TOKEN_AND;
+               else
+                       return TOKEN_WORD;
+       }
+
+       /**
+        * Returns the number of author names in this object.
+        * 
+        * @return the number of author names in this object.
+        */
+       public int size() {
+               return authors.size();
+       }
+
+       /**
+        * Returns the <CODE>Author</CODE> object for the i-th author.
+        * 
+        * @param i
+        *            Index of the author (from 0 to <CODE>size()-1</CODE>).
+        * @return the <CODE>Author</CODE> object.
+        */
+       public Author getAuthor(int i) {
+               return (Author) authors.get(i);
+       }
+
+       /**
+        * Returns the list of authors in "natbib" format.
+        * <p>
+        * <ul>
+        * <li>"John Smith" -> "Smith"</li>
+        * <li>"John Smith and Black Brown, Peter" ==> "Smith and Black Brown"</li>
+        * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "von
+        * Neumann et al." </li>
+        * </ul>
+        * 
+        * @return formatted list of authors.
+        */
+       public String getAuthorsNatbib() {
+               // Check if we've computed this before:
+               if (authorsNatbib != null)
+                       return authorsNatbib;
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getLastOnly());
+                       if (size() == 2) {
+                               res.append(" and ");
+                               res.append(getAuthor(1).getLastOnly());
+                       } else if (size() > 2) {
+                               res.append(" et al.");
+                       }
+               }
+               authorsNatbib = res.toString();
+               return authorsNatbib;
+       }
+
+       /**
+        * Returns the list of authors separated by commas with last name only; If
+        * the list consists of three or more authors, "and" is inserted before the
+        * last author's name.
+        * <p>
+        * 
+        * <ul>
+        * <li> "John Smith" ==> "Smith"</li>
+        * <li> "John Smith and Black Brown, Peter" ==> "Smith and Black Brown"</li>
+        * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "von
+        * Neumann, Smith and Black Brown".</li>
+        * </ul>
+        * 
+        * @param oxfordComma
+        *            Whether to put a comma before the and at the end.
+        * 
+        * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
+        *      explaination about the Oxford comma.
+        * 
+        * @return formatted list of authors.
+        */
+       public String getAuthorsLastOnly(boolean oxfordComma) {
+
+               int abbrInt = (oxfordComma ? 0 : 1);
+
+               // Check if we've computed this before:
+               if (authorsLastOnly[abbrInt] != null)
+                       return authorsLastOnly[abbrInt];
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getLastOnly());
+                       int i = 1;
+                       while (i < size() - 1) {
+                               res.append(", ");
+                               res.append(getAuthor(i).getLastOnly());
+                               i++;
+                       }
+                       if (size() > 2 && oxfordComma)
+                               res.append(",");
+                       if (size() > 1) {
+                               res.append(" and ");
+                               res.append(getAuthor(i).getLastOnly());
+                       }
+               }
+               authorsLastOnly[abbrInt] = res.toString();
+               return authorsLastOnly[abbrInt];
+       }
+
+       /**
+        * Returns the list of authors separated by commas with first names after
+        * last name; first names are abbreviated or not depending on parameter. If
+        * the list consists of three or more authors, "and" is inserted before the
+        * last author's name.
+        * <p>
+        * 
+        * <ul>
+        * <li> "John Smith" ==> "Smith, John" or "Smith, J."</li>
+        * <li> "John Smith and Black Brown, Peter" ==> "Smith, John and Black
+        * Brown, Peter" or "Smith, J. and Black Brown, P."</li>
+        * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "von
+        * Neumann, John, Smith, John and Black Brown, Peter" or "von Neumann, J.,
+        * Smith, J. and Black Brown, P.".</li>
+        * </ul>
+        * 
+        * @param abbreviate
+        *            whether to abbreivate first names.
+        * 
+        * @param oxfordComma
+        *            Whether to put a comma before the and at the end.
+        * 
+        * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
+        *      explaination about the Oxford comma.
+        * 
+        * @return formatted list of authors.
+        */
+       public String getAuthorsLastFirst(boolean abbreviate, boolean oxfordComma) {
+               int abbrInt = (abbreviate ? 0 : 1);
+               abbrInt += (oxfordComma ? 0 : 2);
+
+               // Check if we've computed this before:
+               if (authorsLastFirst[abbrInt] != null)
+                       return authorsLastFirst[abbrInt];
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getLastFirst(abbreviate));
+                       int i = 1;
+                       while (i < size() - 1) {
+                               res.append(", ");
+                               res.append(getAuthor(i).getLastFirst(abbreviate));
+                               i++;
+                       }
+                       if (size() > 2 && oxfordComma)
+                               res.append(",");
+                       if (size() > 1) {
+                               res.append(" and ");
+                               res.append(getAuthor(i).getLastFirst(abbreviate));
+                       }
+               }
+               authorsLastFirst[abbrInt] = res.toString();
+               return authorsLastFirst[abbrInt];
+       }
+
+       /**
+        * Returns the list of authors separated by "and"s with first names after
+        * last name; first names are not abbreviated.
+        * <p>
+        * <ul>
+        * <li>"John Smith" ==> "Smith, John"</li>
+        * <li>"John Smith and Black Brown, Peter" ==> "Smith, John and Black
+        * Brown, Peter"</li>
+        * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "von
+        * Neumann, John and Smith, John and Black Brown, Peter".</li>
+        * </ul>
+        * 
+        * @return formatted list of authors.
+        */
+       public String getAuthorsLastFirstAnds(boolean abbreviate) {
+
+               int abbrInt = (abbreviate ? 0 : 1);
+               // Check if we've computed this before:
+               if (authorLastFirstAnds[abbrInt] != null)
+                       return authorLastFirstAnds[abbrInt];
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getLastFirst(abbreviate));
+                       for (int i = 1; i < size(); i++) {
+                               res.append(" and ");
+                               res.append(getAuthor(i).getLastFirst(abbreviate));
+                       }
+               }
+
+               authorLastFirstAnds[abbrInt] = res.toString();
+               return authorLastFirstAnds[abbrInt];
+       }
+
+       /**
+        * Returns the list of authors separated by commas with first names before
+        * last name; first names are abbreviated or not depending on parameter. If
+        * the list consists of three or more authors, "and" is inserted before the
+        * last author's name.
+        * <p>
+        * <ul>
+        * <li>"John Smith" ==> "John Smith" or "J. Smith"</li>
+        * <li>"John Smith and Black Brown, Peter" ==> "John Smith and Peter Black
+        * Brown" or "J. Smith and P. Black Brown"</li>
+        * <li> "John von Neumann and John Smith and Black Brown, Peter" ==> "John
+        * von Neumann, John Smith and Peter Black Brown" or "J. von Neumann, J.
+        * Smith and P. Black Brown" </li>
+        * </ul>
+        * 
+        * @param abbr
+        *            whether to abbreivate first names.
+        * 
+        * @param oxfordComma
+        *            Whether to put a comma before the and at the end.
+        * 
+        * @see http://en.wikipedia.org/wiki/Serial_comma For an detailed
+        *      explaination about the Oxford comma.
+        * 
+        * @return formatted list of authors.
+        */
+       public String getAuthorsFirstFirst(boolean abbr, boolean oxfordComma) {
+
+               int abbrInt = (abbr ? 0 : 1);
+               abbrInt += (oxfordComma ? 0 : 2);
+
+               // Check if we've computed this before:
+               if (authorsFirstFirst[abbrInt] != null)
+                       return authorsFirstFirst[abbrInt];
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getFirstLast(abbr));
+                       int i = 1;
+                       while (i < size() - 1) {
+                               res.append(", ");
+                               res.append(getAuthor(i).getFirstLast(abbr));
+                               i++;
+                       }
+                       if (size() > 2 && oxfordComma)
+                               res.append(",");
+                       if (size() > 1) {
+                               res.append(" and ");
+                               res.append(getAuthor(i).getFirstLast(abbr));
+                       }
+               }
+               authorsFirstFirst[abbrInt] = res.toString();
+               return authorsFirstFirst[abbrInt];
+       }
+
+       /**
+        * Returns the list of authors separated by "and"s with first names before
+        * last name; first names are not abbreviated.
+        * <p>
+        * <ul>
+        * <li>"John Smith" ==> "John Smith"</li>
+        * <li>"John Smith and Black Brown, Peter" ==> "John Smith and Peter Black
+        * Brown"</li>
+        * <li>"John von Neumann and John Smith and Black Brown, Peter" ==> "John
+        * von Neumann and John Smith and Peter Black Brown" </li>
+        * </li>
+        * 
+        * @return formatted list of authors.
+        */
+       public String getAuthorsFirstFirstAnds() {
+               // Check if we've computed this before:
+               if (authorsFirstFirstAnds != null)
+                       return authorsFirstFirstAnds;
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getFirstLast(false));
+                       for (int i = 1; i < size(); i++) {
+                               res.append(" and ");
+                               res.append(getAuthor(i).getFirstLast(false));
+                       }
+               }
+               authorsFirstFirstAnds = res.toString();
+               return authorsFirstFirstAnds;
+       }
+
+       /**
+        * Returns the list of authors in a form suitable for alphabetization. This
+        * means that last names come first, never preceded by "von" particles, and
+        * that any braces are removed. First names are abbreviated so the same name
+        * is treated similarly if abbreviated in one case and not in another. This
+        * form is not intended to be suitable for presentation, only for sorting.
+        * 
+        * <p>
+        * <ul>
+        * <li>"John Smith" ==> "Smith, J.";</li>
+        * 
+        * 
+        * @return formatted list of authors
+        */
+       public String getAuthorsForAlphabetization() {
+               if (authorsAlph != null)
+                       return authorsAlph;
+
+               StringBuffer res = new StringBuffer();
+               if (size() > 0) {
+                       res.append(getAuthor(0).getNameForAlphabetization());
+                       for (int i = 1; i < size(); i++) {
+                               res.append(" and ");
+                               res.append(getAuthor(i).getNameForAlphabetization());
+                       }
+               }
+               authorsAlph = res.toString();
+               return authorsAlph;
+       }
+
+       /**
+        * This is an immutable class that keeps information regarding single
+        * author. It is just a container for the information, with very simple
+        * methods to access it.
+        * <p>
+        * Current usage: only methods <code>getLastOnly</code>,
+        * <code>getFirstLast</code>, and <code>getLastFirst</code> are used;
+        * all other methods are provided for completeness.
+        */
+       public static class Author {
+               private final String first_part;
+
+               private final String first_abbr;
+
+               private final String von_part;
+
+               private final String last_part;
+
+               private final String jr_part;
+
+               /**
+                * Creates the Author object. If any part of the name is absent, <CODE>null</CODE>
+                * must be passes; otherwise other methods may return erroneous results.
+                * 
+                * @param first
+                *            the first name of the author (may consist of several
+                *            tokens, like "Charles Louis Xavier Joseph" in "Charles
+                *            Louis Xavier Joseph de la Vall{\'e}e Poussin")
+                * @param firstabbr
+                *            the abbreviated first name of the author (may consist of
+                *            several tokens, like "C. L. X. J." in "Charles Louis
+                *            Xavier Joseph de la Vall{\'e}e Poussin"). It is a
+                *            responsibility of the caller to create a reasonable
+                *            abbreviation of the first name.
+                * @param von
+                *            the von part of the author's name (may consist of several
+                *            tokens, like "de la" in "Charles Louis Xavier Joseph de la
+                *            Vall{\'e}e Poussin")
+                * @param last
+                *            the lats name of the author (may consist of several
+                *            tokens, like "Vall{\'e}e Poussin" in "Charles Louis Xavier
+                *            Joseph de la Vall{\'e}e Poussin")
+                * @param jr
+                *            the junior part of the author's name (may consist of
+                *            several tokens, like "Jr. III" in "Smith, Jr. III, John")
+                */
+               public Author(String first, String firstabbr, String von, String last, String jr) {
+                       first_part = first;
+                       first_abbr = firstabbr;
+                       von_part = von;
+                       last_part = last;
+                       jr_part = jr;
+               }
+
+               /**
+                * Returns the first name of the author stored in this object ("First").
+                * 
+                * @return first name of the author (may consist of several tokens)
+                */
+               public String getFirst() {
+                       return first_part;
+               }
+
+               /**
+                * Returns the abbreviated first name of the author stored in this
+                * object ("F.").
+                * 
+                * @return abbreviated first name of the author (may consist of several
+                *         tokens)
+                */
+               public String getFirstAbbr() {
+                       return first_abbr;
+               }
+
+               /**
+                * Returns the von part of the author's name stored in this object
+                * ("von").
+                * 
+                * @return von part of the author's name (may consist of several tokens)
+                */
+               public String getVon() {
+                       return von_part;
+               }
+
+               /**
+                * Returns the last name of the author stored in this object ("Last").
+                * 
+                * @return last name of the author (may consist of several tokens)
+                */
+               public String getLast() {
+                       return last_part;
+               }
+
+               /**
+                * Returns the junior part of the author's name stored in this object
+                * ("Jr").
+                * 
+                * @return junior part of the author's name (may consist of several
+                *         tokens) or null if the author does not have a Jr. Part
+                */
+               public String getJr() {
+                       return jr_part;
+               }
+
+               /**
+                * Returns von-part followed by last name ("von Last"). If both fields
+                * were specified as <CODE>null</CODE>, the empty string <CODE>""</CODE>
+                * is returned.
+                * 
+                * @return 'von Last'
+                */
+               public String getLastOnly() {
+                       if (von_part == null) {
+                               return (last_part == null ? "" : last_part);
+                       } else {
+                               return (last_part == null ? von_part : von_part + " " + last_part);
+                       }
+               }
+
+               /**
+                * Returns the author's name in form 'von Last, Jr., First' with the
+                * first name full or abbreviated depending on parameter.
+                * 
+                * @param abbr
+                *            <CODE>true</CODE> - abbreviate first name, <CODE>false</CODE> -
+                *            do not abbreviate
+                * @return 'von Last, Jr., First' (if <CODE>abbr==false</CODE>) or
+                *         'von Last, Jr., F.' (if <CODE>abbr==true</CODE>)
+                */
+               public String getLastFirst(boolean abbr) {
+                       String res = getLastOnly();
+                       if (jr_part != null)
+                               res += ", " + jr_part;
+                       if (abbr) {
+                               if (first_abbr != null)
+                                       res += ", " + first_abbr;
+                       } else {
+                               if (first_part != null)
+                                       res += ", " + first_part;
+                       }
+                       return res;
+               }
+
+               /**
+                * Returns the author's name in form 'First von Last, Jr.' with the
+                * first name full or abbreviated depending on parameter.
+                * 
+                * @param abbr
+                *            <CODE>true</CODE> - abbreviate first name, <CODE>false</CODE> -
+                *            do not abbreviate
+                * @return 'First von Last, Jr.' (if <CODE>abbr==false</CODE>) or 'F.
+                *         von Last, Jr.' (if <CODE>abbr==true</CODE>)
+                */
+               public String getFirstLast(boolean abbr) {
+                       String res = getLastOnly();
+                       if (abbr) {
+                               res = (first_abbr == null ? "" : first_abbr + " ") + res;
+                       } else {
+                               res = (first_part == null ? "" : first_part + " ") + res;
+                       }
+                       if (jr_part != null)
+                               res += ", " + jr_part;
+                       return res;
+               }
+
+               /**
+                * Returns the name as "Last, Jr, F." omitting the von-part and removing
+                * starting braces.
+                * 
+                * @return "Last, Jr, F." as described above or "" if all these parts
+                *         are empty.
+                */
+               public String getNameForAlphabetization() {
+                       StringBuffer res = new StringBuffer();
+                       if (last_part != null)
+                               res.append(last_part);
+                       if (jr_part != null) {
+                               res.append(", ");
+                               res.append(jr_part);
+                       }
+                       if (first_abbr != null) {
+                               res.append(", ");
+                               res.append(first_abbr);
+                       }
+                       while ((res.length() > 0) && (res.charAt(0) == '{'))
+                               res.deleteCharAt(0);
+                       return res.toString();
+               }
+       }// end Author
+}// end AuthorList
index e6b1ff7..3acf1c6 100644 (file)
@@ -28,36 +28,82 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 package net.sf.jabref;
 
-import java.awt.*;
-import java.awt.datatransfer.*;
-import java.awt.event.*;
-import java.io.*;
-import java.util.*;
-import java.util.List;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
 import java.nio.charset.UnsupportedCharsetException;
-import javax.swing.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.JFileChooser;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextArea;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.filechooser.FileFilter;
 import javax.swing.tree.TreePath;
-import javax.swing.undo.*;
-import net.sf.jabref.collab.*;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+
+import net.sf.jabref.collab.ChangeScanner;
+import net.sf.jabref.collab.FileUpdateListener;
+import net.sf.jabref.collab.FileUpdatePanel;
 import net.sf.jabref.export.*;
 import net.sf.jabref.external.AutoSetExternalFileForEntries;
-import net.sf.jabref.groups.*;
-import net.sf.jabref.imports.*;
-import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.undo.*;
-import net.sf.jabref.wizard.text.gui.TextInputDialog;
+import net.sf.jabref.external.WriteXMPAction;
+import net.sf.jabref.groups.GroupSelector;
+import net.sf.jabref.groups.GroupTreeNode;
+import net.sf.jabref.gui.GlazedEntrySorter;
+import net.sf.jabref.gui.MainTable;
+import net.sf.jabref.gui.MainTableFormat;
+import net.sf.jabref.gui.MainTableSelectionListener;
+import net.sf.jabref.imports.AppendDatabaseAction;
+import net.sf.jabref.imports.BibtexParser;
 import net.sf.jabref.journals.AbbreviateAction;
 import net.sf.jabref.journals.UnabbreviateAction;
-import net.sf.jabref.gui.*;
+import net.sf.jabref.labelPattern.LabelPatternUtil;
 import net.sf.jabref.search.NoSearchMatcher;
 import net.sf.jabref.search.SearchMatcher;
-import com.jgoodies.uif_lite.component.UIFSplitPane;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
+import net.sf.jabref.undo.CountingUndoManager;
+import net.sf.jabref.undo.NamedCompound;
+import net.sf.jabref.undo.UndoableChangeType;
+import net.sf.jabref.undo.UndoableInsertEntry;
+import net.sf.jabref.undo.UndoableKeyChange;
+import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.wizard.text.gui.TextInputDialog;
 import ca.odell.glazedlists.FilterList;
-import ca.odell.glazedlists.matchers.Matcher;
-import ca.odell.glazedlists.event.ListEventListener;
 import ca.odell.glazedlists.event.ListEvent;
+import ca.odell.glazedlists.event.ListEventListener;
+import ca.odell.glazedlists.matchers.Matcher;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.uif_lite.component.UIFSplitPane;
 
 public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListener {
 
@@ -66,7 +112,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     private EntryEditor currentEditor = null;
     private PreviewPanel currentPreview = null;
 
-  boolean tmp = true;
+    boolean tmp = true;
 
     private MainTableSelectionListener selectionListener = null;
     private ListEventListener groupsHighlightListener;
@@ -79,8 +125,10 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     JabRefFrame frame;
     BibtexDatabase database;
     // The database shown in this panel.
-    File file = null,
-        fileToOpen = null; // The filename of the database.
+    
+    //         Moving file to MetaData (Morten, 2006.08.29)
+    // private File fileToOpen = null; 
+    
     String fileMonitorHandle = null;
     boolean saving = false, updatedExternally = false;
     private String encoding;
@@ -191,7 +239,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
             db.setCompleters(autoCompleters);
             }*/
 
-      this.file = file;
+      metaData.setFile(file);
 
       // Register so we get notifications about outside changes to the file.
       if (file != null)
@@ -202,20 +250,37 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         }
     }
 
+    public boolean isBaseChanged(){
+       return baseChanged;
+    }
+    
     public int getMode() {
         return mode;
     }
 
-    public BibtexDatabase database() { return database; }
-    public MetaData metaData() { return metaData; }
-    public File file() { return file; }
-    public JabRefFrame frame() { return frame; }
-    public JabRefPreferences prefs() { return Globals.prefs; }
+    public BibtexDatabase database() {
+               return database;
+       }
 
-    public String getEncoding() { return encoding; }
-    public void setEncoding(String encoding) {
-    this.encoding = encoding;
-    }
+       public MetaData metaData() {
+               return metaData;
+       }
+
+       public JabRefFrame frame() {
+               return frame;
+       }
+
+       public JabRefPreferences prefs() {
+               return Globals.prefs;
+       }
+
+       public String getEncoding() {
+               return encoding;
+       }
+
+       public void setEncoding(String encoding) {
+               this.encoding = encoding;
+       }
 
     public void output(String s) {
     //Util.pr("\""+s+"\""+(SwingUtilities.isEventDispatchThread()));
@@ -266,8 +331,21 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("test", new BaseAction () {
                 public void action() throws Throwable {
 
+                    ExportFormats.initAllExports();
+                    JFileChooser fc = ExportFormats.createExportFileChooser("/home/alver/Documents");
+                    fc.showSaveDialog(frame);
+                    File file = fc.getSelectedFile();
+                    if (file == null)
+                        return;
+                    FileFilter ff = fc.getFileFilter();
+                    if (ff instanceof ExportFileFilter) {
+                        ExportFormat format = ((ExportFileFilter)ff).getExportFormat();
+                        format.performExport(database, file.getPath(), "UTF8", null);
+                        // Make sure we remember which filter was used, to set the default
+                        // for next time:
+                        Globals.prefs.put("lastUsedExport", format.getConsoleName());
 
-
+                    }
 
                 }
             });
@@ -279,7 +357,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
             public void init() throws Throwable {
                 success = false;
                 cancelled = false;
-                if (file == null)
+                if (getFile() == null)
                     runCommand("saveAs");
                 else {
 
@@ -299,11 +377,11 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                         else if (answer == JOptionPane.YES_OPTION) {
                             ChangeScanner scanner = new ChangeScanner(frame, BasePanel.this); //, panel.database(), panel.metaData());
                             //try {
-                            scanner.changeScan(file());
+                            scanner.changeScan(getFile());
                             setUpdatedExternally(false);
                             SwingUtilities.invokeLater(new Runnable() {
                                 public void run() {
-                                    sidePaneManager.hideAway("fileUpdate");
+                                    sidePaneManager.hide("fileUpdate");
                                 }
                             });
 
@@ -322,16 +400,18 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
             public void update() {
                 if (success) {
-                    frame.setTabTitle(BasePanel.this, file.getName());
+                       // Reset title of tab
+                    frame.setTabTitle(BasePanel.this, getFile().getName(),
+                            getFile().getAbsolutePath());
                     frame.output(Globals.lang("Saved database")+" '"
-                             +file.getPath()+"'.");
+                             +getFile().getPath()+"'.");
                 } else if (!cancelled) {
                     frame.output(Globals.lang("Save failed"));
                 }
             }
 
             public void run() {
-                if (file == null) {
+                if (getFile() == null) {
                     cancelled = true;
                     return;
                 }
@@ -361,7 +441,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                     }
                     // Done with autosetting keys. Now save the database:
 
-                    success = saveDatabase(file, false, encoding);
+                    success = saveDatabase(getFile(), false, encoding);
 
                     //Util.pr("Testing resolve string... BasePanel line 237");
                     //Util.pr("Resolve aq: "+database.resolveString("aq"));
@@ -397,10 +477,10 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                                                          JFileChooser.SAVE_DIALOG, false);
 
                   if (chosenFile != null) {
-                    file = new File(chosenFile);
-                    if (!file.exists() ||
+                    metaData.setFile(new File(chosenFile));
+                    if (!metaData.getFile().exists() ||
                         (JOptionPane.showConfirmDialog
-                         (frame, "'"+file.getName()+"' "+Globals.lang("exists. Overwrite file?"),
+                         (frame, "'"+metaData.getFile().getName()+"' "+Globals.lang("exists. Overwrite file?"),
                           Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
                          == JOptionPane.OK_OPTION)) {
 
@@ -408,17 +488,18 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
                       // Register so we get notifications about outside changes to the file.
                       try {
-                        fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(BasePanel.this,file);
+                        fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(BasePanel.this,getFile());
                       } catch (IOException ex) {
                         ex.printStackTrace();
                       }
 
-                      Globals.prefs.put("workingDirectory", file.getParent());
-                      frame.getFileHistory().newFile(file.getPath());
+                      Globals.prefs.put("workingDirectory", metaData.getFile().getParent());
+                      frame.getFileHistory().newFile(metaData.getFile().getPath());
                     }
-                    else
-                      file = null;
+                    else {
+                      metaData.setFile(null);
                     }
+                   }
                 }
             });
 
@@ -723,8 +804,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         // The action for toggling the groups interface
         actions.put("toggleGroups", new BaseAction() {
             public void action() {
-              sidePaneManager.togglePanel("groups");
-              frame.groupToggle.setSelected(sidePaneManager.isPanelVisible("groups"));
+              sidePaneManager.toggle("groups");
+              frame.groupToggle.setSelected(sidePaneManager.isComponentVisible("groups"));
             }
         });
 
@@ -829,7 +910,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("search", new BaseAction() {
                 public void action() {
                     //sidePaneManager.togglePanel("search");
-                    sidePaneManager.ensureVisible("search");
+                    sidePaneManager.show("search");
                     //boolean on = sidePaneManager.isPanelVisible("search");
                     frame.searchToggle.setSelected(true);
                     if (true)
@@ -840,8 +921,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         actions.put("toggleSearch", new BaseAction() {
                 public void action() {
                     //sidePaneManager.togglePanel("search");
-                    sidePaneManager.togglePanel("search");
-                    boolean on = sidePaneManager.isPanelVisible("search");
+                    sidePaneManager.toggle("search");
+                    boolean on = sidePaneManager.isComponentVisible("search");
                     frame.searchToggle.setSelected(on);
                     if (on)
                       frame.searchManager.startSearch();
@@ -850,7 +931,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
         actions.put("incSearch", new BaseAction() {
                 public void action() {
-                    sidePaneManager.ensureVisible("search");
+                    sidePaneManager.show("search");
                     frame.searchToggle.setSelected(true);
                     frame.searchManager.startIncrementalSearch();
                 }
@@ -935,6 +1016,10 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
           actions.put("mergeDatabase", new AppendDatabaseAction(frame, this));
 
+          
+        
+          
+          
          actions.put("openFile", new BaseAction() {
            public void action() {
              (new Thread() {
@@ -1297,7 +1382,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
               try {
                   BibtexEntry[] bes = mainTable.getSelectedEntries();
                   StringWriter sw = new StringWriter();
-                  FileActions.exportEntries(database, bes, format, custom, directory, sw);
+                  System.out.println("actual export to clipboard not implemented...");
+                  //FileActions.exportEntries(database, bes, format, custom, directory, sw);
                   ClipboardOwner owner = new ClipboardOwner() {
                     public void lostOwnership(Clipboard clipboard, Transferable content) {}
                   };
@@ -1317,8 +1403,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
           });
 
-
-
+        actions.put("writeXMP", new WriteXMPAction(this));
+        
         actions.put("abbreviateIso", new AbbreviateAction(this, true));
         actions.put("abbreviateMedline", new AbbreviateAction(this, false));
         actions.put("unabbreviate", new UnabbreviateAction(this));
@@ -1466,8 +1552,9 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
      * prompted for an entry type.
      *
      * @param type The type of the entry to create.
+     * @return The newly created BibtexEntry or null the operation was canceled by the user.
      */
-    public void newEntry(BibtexEntryType type) {
+    public BibtexEntry newEntry(BibtexEntryType type) {
         if (type == null) {
             // Find out what type is wanted.
             EntryTypeDialog etd = new EntryTypeDialog(frame);
@@ -1505,10 +1592,12 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
                 markBaseChanged(); // The database just changed.
                 new FocusRequester(getEntryEditor(be));
+                return be;
             } catch (KeyCollisionException ex) {
                 Util.pr(ex.getMessage());
     &nbs