[svn-upgrade] Integrating new upstream version, jabref (2.5) upstream/2.5
authorgregor herrmann <gregoa@debian.org>
Tue, 11 Aug 2009 15:32:23 +0000 (15:32 -0000)
committergregor herrmann <gregoa@debian.org>
Tue, 11 Aug 2009 15:32:23 +0000 (15:32 -0000)
156 files changed:
JabRef.ipr [new file with mode: 0644]
JabRef.iws [new file with mode: 0644]
build.number
build.xml
src/Jabref.iml [new file with mode: 0644]
src/Jabref_trunk.iml [deleted file]
src/help/Autosave.html [new file with mode: 0644]
src/help/Contents.html
src/help/CustomExports.html
src/help/Plugin.html
src/help/RevisionHistory.html
src/help/da/About.html
src/help/de/RevisionHistory.html
src/help/fr/Autosave.html [new file with mode: 0644]
src/help/fr/Contents.html
src/help/fr/CustomExports.html
src/help/fr/RevisionHistory.html
src/images/absIcon.png [deleted file]
src/images/add.png [deleted file]
src/images/autumn.png [deleted file]
src/images/completeItem.png [deleted file]
src/images/contents.png [deleted file]
src/images/crystal_16/Icons.properties
src/images/crystal_16/kwikdisk.png [new file with mode: 0755]
src/images/database_connect.png [deleted file]
src/images/database_save.png [deleted file]
src/images/document-save-as.png [deleted file]
src/images/document-save.png [deleted file]
src/images/doismall.png [deleted file]
src/images/duplicate.png [deleted file]
src/images/edit-copy.png [deleted file]
src/images/edit-cut.png [deleted file]
src/images/edit-delete.png [deleted file]
src/images/edit-find.png [deleted file]
src/images/edit-paste.png [deleted file]
src/images/edit-redo.png [deleted file]
src/images/edit-undo.png [deleted file]
src/images/editor.png [deleted file]
src/images/emacs.png [deleted file]
src/images/emblem-web-small.png [deleted file]
src/images/emblem-web.png [deleted file]
src/images/fileclose.png [deleted file]
src/images/fileclose2.png [deleted file]
src/images/filenew.png [deleted file]
src/images/fileopen.png [deleted file]
src/images/genIcon.png [deleted file]
src/images/go-down.png [deleted file]
src/images/go-next.png [deleted file]
src/images/go-previous.png [deleted file]
src/images/go-up.png [deleted file]
src/images/groupIncluding.png [deleted file]
src/images/groupRefining.png [deleted file]
src/images/grouping_morten.png [deleted file]
src/images/groupsHighlightAll.png [deleted file]
src/images/groupsHighlightAny.png [deleted file]
src/images/help-about.png [deleted file]
src/images/help-browser.png [deleted file]
src/images/integrity.png [deleted file]
src/images/lyx2.png [deleted file]
src/images/mark.png [deleted file]
src/images/messageFail.png [deleted file]
src/images/messageInfo.png [deleted file]
src/images/messageWarn.png [deleted file]
src/images/optIcon.png [deleted file]
src/images/pdf-new.png [deleted file]
src/images/pdf.png [deleted file]
src/images/postscript.png [deleted file]
src/images/preamble.png [deleted file]
src/images/preferences.png [deleted file]
src/images/remove.png [deleted file]
src/images/reqIcon.png [deleted file]
src/images/search.png [deleted file]
src/images/splash-2.1.svg [deleted file]
src/images/splash-2.1beta.png [deleted file]
src/images/splash-2.3.svg [deleted file]
src/images/splash-2.4.svg [deleted file]
src/images/splash-2.5.svg [new file with mode: 0644]
src/images/splash-2.5beta.svg
src/images/splash.png
src/images/splashBackground.png [deleted file]
src/images/strings.png [deleted file]
src/images/unmark.png [deleted file]
src/images/user-home.png [deleted file]
src/images/view-refresh.png [deleted file]
src/images/viewsource.gif [deleted file]
src/images/winedt.png [deleted file]
src/images/wizard.png [deleted file]
src/images/wrongItem.png [deleted file]
src/images/wwwciteseer.png [deleted file]
src/java/net/sf/jabref/AuthorList.java
src/java/net/sf/jabref/BasePanel.java
src/java/net/sf/jabref/ExternalTab.java
src/java/net/sf/jabref/FieldTextArea.java
src/java/net/sf/jabref/FileTab.java
src/java/net/sf/jabref/GUIGlobals.java
src/java/net/sf/jabref/Globals.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/PrefsDialog3.java
src/java/net/sf/jabref/PreviewPanel.java
src/java/net/sf/jabref/TabLabelPattern.java
src/java/net/sf/jabref/export/AutoSaveManager.java [new file with mode: 0644]
src/java/net/sf/jabref/export/ExportFormat.java
src/java/net/sf/jabref/export/ExportFormats.java
src/java/net/sf/jabref/export/FileActions.java
src/java/net/sf/jabref/export/SaveDatabaseAction.java
src/java/net/sf/jabref/export/layout/Layout.java
src/java/net/sf/jabref/export/layout/LayoutEntry.java
src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/Number.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
src/java/net/sf/jabref/external/FindFullTextAction.java
src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
src/java/net/sf/jabref/imports/OpenDatabaseAction.java
src/java/net/sf/jabref/imports/ParserResult.java
src/java/net/sf/jabref/imports/RisImporter.java
src/java/net/sf/jabref/imports/ScifinderImporter.java
src/java/net/sf/jabref/msbib/MSBibEntry.java
src/java/net/sf/jabref/net/Cookie.java [new file with mode: 0644]
src/java/net/sf/jabref/net/CookieHandlerImpl.java [new file with mode: 0644]
src/java/net/sf/jabref/net/URLDownload.java
src/java/net/sf/jabref/plugin/ManagePluginsDialog.java
src/java/net/sf/jabref/plugin/PluginInstaller.java
src/java/net/sf/jabref/plugin/PluginInstallerAction.java
src/java/net/sf/jabref/sql/SQLutil.java
src/resource/Icons.properties
src/resource/JabRef_da.properties
src/resource/JabRef_de.properties
src/resource/JabRef_en.properties
src/resource/JabRef_fr.properties
src/resource/JabRef_it.properties
src/resource/JabRef_nl.properties
src/resource/JabRef_no.properties
src/resource/JabRef_tr.properties
src/resource/JabRef_zh.properties
src/resource/JabRef_zh.properties.UTF8 [new file with mode: 0644]
src/resource/Menu_da.properties
src/resource/Menu_de.properties
src/resource/Menu_en.properties
src/resource/Menu_es.properties
src/resource/Menu_fr.properties
src/resource/Menu_it.properties
src/resource/Menu_nl.properties
src/resource/Menu_no.properties
src/resource/Menu_tr.properties
src/resource/Menu_zh.properties.UTF8 [new file with mode: 0644]
src/resource/build.properties
src/resource/layout/bibtexml.layout
src/txt/CHANGELOG
src/txt/README
src/txt/README~ [new file with mode: 0644]
src/txt/TODO

diff --git a/JabRef.ipr b/JabRef.ipr
new file mode 100644 (file)
index 0000000..f15c148
--- /dev/null
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="false" version="4">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+    <buildFile url="file://$PROJECT_DIR$/build.xml">
+      <additionalClassPath />
+      <antReference projectDefault="true" />
+      <customJdkName value="" />
+      <maximumHeapSize value="128" />
+      <maximumStackSize value="32" />
+      <properties />
+    </buildFile>
+  </component>
+  <component name="BuildJarProjectSettings">
+    <option name="BUILD_JARS_ON_MAKE" value="false" />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="DependencyValidationManager">
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </component>
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
+  <component name="InspectionProjectProfileManager">
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
+    <scopes />
+    <profiles>
+      <profile version="1.0" is_locked="false">
+        <option name="myName" value="Project Default" />
+        <option name="myLocal" value="false" />
+      </profile>
+    </profiles>
+    <list size="0" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="ProjectDetails">
+    <option name="projectName" value="JabRef" />
+  </component>
+  <component name="ProjectFileVersion" converted="true" />
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/src/Jabref.iml" filepath="$PROJECT_DIR$/src/Jabref.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="SvnBranchConfigurationManager">
+    <option name="myConfigurationMap">
+      <map>
+        <entry key="$PROJECT_DIR$">
+          <value>
+            <SvnBranchConfiguration>
+              <option name="branchUrls">
+                <list>
+                  <option value="https://jabref.svn.sourceforge.net/svnroot/jabref/branches" />
+                  <option value="https://jabref.svn.sourceforge.net/svnroot/jabref/tags" />
+                </list>
+              </option>
+              <option name="trunkUrl" value="https://jabref.svn.sourceforge.net/svnroot/jabref/trunk" />
+            </SvnBranchConfiguration>
+          </value>
+        </entry>
+      </map>
+    </option>
+    <option name="myVersion" value="124" />
+  </component>
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="svn" />
+  </component>
+  <component name="masterDetails">
+    <option name="states">
+      <map>
+        <entry key="Errors.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ProjectJDKs.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl>
+                  <option name="proportions">
+                    <list>
+                      <option value="0.2" />
+                    </list>
+                  </option>
+                </SplitterProportionsDataImpl>
+              </option>
+              <option name="lastEditedConfigurable" value="1.6" />
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ScopeChooserConfigurable.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+      </map>
+    </option>
+    <option name="myStates">
+      <map>
+        <entry key="Errors.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ProjectJDKs.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl>
+                  <option name="proportions">
+                    <list>
+                      <option value="0.2" />
+                    </list>
+                  </option>
+                </SplitterProportionsDataImpl>
+              </option>
+              <option name="lastEditedConfigurable" value="1.6" />
+            </UIState>
+          </value>
+        </entry>
+        <entry key="ScopeChooserConfigurable.UI">
+          <value>
+            <UIState>
+              <option name="proportions">
+                <SplitterProportionsDataImpl />
+              </option>
+            </UIState>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+</project>
+
diff --git a/JabRef.iws b/JabRef.iws
new file mode 100644 (file)
index 0000000..b1b87af
--- /dev/null
@@ -0,0 +1,655 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project relativePaths="false" version="4">
+  <component name="ChangeListManager">
+    <list default="true" readonly="true" name="Default" comment="">
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/txt/CHANGELOG" afterPath="$PROJECT_DIR$/src/txt/CHANGELOG" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.xml" afterPath="$PROJECT_DIR$/build.xml" />
+    </list>
+    <ignored path="JabRef.iws" />
+    <ignored path=".idea/workspace.xml" />
+  </component>
+  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+  <component name="Commander">
+    <leftPanel />
+    <rightPanel />
+    <splitter proportion="0.5" />
+  </component>
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+    <option name="REVERSE_PATCH" value="false" />
+  </component>
+  <component name="DaemonCodeAnalyzer">
+    <disable_hints />
+  </component>
+  <component name="DebuggerManager">
+    <breakpoint_any>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+      <breakpoint>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
+        <option name="CONDITION" value="" />
+        <option name="LOG_MESSAGE" value="" />
+      </breakpoint>
+    </breakpoint_any>
+    <breakpoint_rules />
+    <ui_properties />
+  </component>
+  <component name="FavoritesManager">
+    <favorites_list name="JabRef" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file leaf-file-name="PluginInstaller.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginInstaller.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="297" column="22" selection-start="12576" selection-end="12576" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="RisImporter.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/RisImporter.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="158" column="39" selection-start="5957" selection-end="5957" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="CHANGELOG" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/txt/CHANGELOG">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="27" column="13" selection-start="1676" selection-end="1676" vertical-scroll-proportion="0.6958763">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="build.xml" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/build.xml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="49" column="46" selection-start="2179" selection-end="2179" vertical-scroll-proportion="-12.954545">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="SQLutil.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/sql/SQLutil.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="1026" column="20" selection-start="36310" selection-end="36310" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="JabRef.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/JabRef.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="813" column="32" selection-start="34953" selection-end="34953" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="JabRef_en.properties" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/resource/JabRef_en.properties">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="2114" column="0" selection-start="69411" selection-end="69411" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+          <provider editor-type-id="ResourceBundle">
+            <state />
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Autosave.html" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/help/Autosave.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="14" column="16" selection-start="770" selection-end="770" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Contents.html" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/help/Contents.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="29" column="49" selection-start="1140" selection-end="1140" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="BaseFrameHelp.html" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/help/BaseFrameHelp.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="0" column="0" selection-start="0" selection-end="4665" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindManager">
+    <FindUsagesManager>
+      <setting name="OPEN_NEW_TAB" value="false" />
+    </FindUsagesManager>
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" />
+    <option name="LAST_EDITED_TAB_NAME" />
+  </component>
+  <component name="ProjectLevelVcsManager">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectPane">
+    <subPane>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="JabRef" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+      </PATH>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="JabRef" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="Jabref" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+      </PATH>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="JabRef" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="Jabref" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="src" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+      </PATH>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="JabRef" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="Jabref" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="src" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="txt" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+      </PATH>
+      <PATH>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="JabRef" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="Jabref" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="src" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+        <PATH_ELEMENT>
+          <option name="myItemId" value="help" />
+          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+        </PATH_ELEMENT>
+      </PATH>
+    </subPane>
+  </component>
+  <component name="ProjectReloadState">
+    <option name="STATE" value="0" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="0.5" version="1" splitterProportion="0.5">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <showStructure ProjectPane="false" />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+    </navigator>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+  </component>
+  <component name="RestoreUpdateTree">
+    <UpdateInfo date="6/18/09 6:26 PM" ActionInfo="_Update">
+      <UpdatedFiles>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Updated from server" />
+          <option name="myStatusName" value="Changed on server" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="CHANGED_ON_SERVER" />
+          <FILE-GROUP>
+            <option name="myUpdateName" value="Updated" />
+            <option name="myStatusName" value="Changed" />
+            <option name="mySupportsDeletion" value="false" />
+            <option name="myCanBeAbsent" value="false" />
+            <option name="myId" value="UPDATED" />
+            <PATH vcs="svn" revision="3027">$PROJECT_DIR$/src/resource/JabRef_da.properties</PATH>
+          </FILE-GROUP>
+          <FILE-GROUP>
+            <option name="myUpdateName" value="Created" />
+            <option name="myStatusName" value="Created" />
+            <option name="mySupportsDeletion" value="false" />
+            <option name="myCanBeAbsent" value="false" />
+            <option name="myId" value="CREATED" />
+          </FILE-GROUP>
+          <FILE-GROUP>
+            <option name="myUpdateName" value="Deleted" />
+            <option name="myStatusName" value="Deleted" />
+            <option name="mySupportsDeletion" value="false" />
+            <option name="myCanBeAbsent" value="true" />
+            <option name="myId" value="REMOVED_FROM_REPOSITORY" />
+          </FILE-GROUP>
+          <FILE-GROUP>
+            <option name="myUpdateName" value="Restored" />
+            <option name="myStatusName" value="Will be restored" />
+            <option name="mySupportsDeletion" value="false" />
+            <option name="myCanBeAbsent" value="false" />
+            <option name="myId" value="RESTORED" />
+          </FILE-GROUP>
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Modified" />
+          <option name="myStatusName" value="Modified" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="MODIFIED" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Skipped" />
+          <option name="myStatusName" value="Skipped" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="SKIPPED" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Merged with conflicts" />
+          <option name="myStatusName" value="Will be merged with conflicts" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="MERGED_WITH_CONFLICTS" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Merged" />
+          <option name="myStatusName" value="Will be merged" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="MERGED" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Not in repository" />
+          <option name="myStatusName" value="Not in repository" />
+          <option name="mySupportsDeletion" value="true" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="UNKNOWN" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Locally added" />
+          <option name="myStatusName" value="Locally added" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="LOCALLY_ADDED" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Locally removed" />
+          <option name="myStatusName" value="Locally removed" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="LOCALLY_REMOVED" />
+        </FILE-GROUP>
+        <FILE-GROUP>
+          <option name="myUpdateName" value="Switched" />
+          <option name="myStatusName" value="Switched" />
+          <option name="mySupportsDeletion" value="false" />
+          <option name="myCanBeAbsent" value="false" />
+          <option name="myId" value="SWITCHED" />
+        </FILE-GROUP>
+      </UpdatedFiles>
+    </UpdateInfo>
+  </component>
+  <component name="RunManager">
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+    </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false" runner="emma">
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false" runner="emma">
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="ADDITIONAL_CLASS_PATH" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="moduleWithDependencies" />
+      </option>
+      <envs />
+    </configuration>
+    <list size="0" />
+    <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
+      <Host>localhost</Host>
+      <Port>5050</Port>
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false" />
+  <component name="StructureViewFactory">
+    <option name="AUTOSCROLL_MODE" value="true" />
+    <option name="AUTOSCROLL_FROM_SOURCE" value="false" />
+    <option name="ACTIVE_ACTIONS" value="" />
+  </component>
+  <component name="SvnConfiguration">
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="LAST_MERGED_REVISION" />
+    <option name="UPDATE_RUN_STATUS" value="false" />
+    <option name="MERGE_DRY_RUN" value="false" />
+    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
+    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
+    <configuration useDefault="true">/home/alver/.subversion</configuration>
+    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
+  </component>
+  <component name="TodoView" selected-index="0">
+    <todo-panel id="selected-file">
+      <are-packages-shown value="false" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="all">
+      <are-packages-shown value="true" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="default-changelist">
+      <are-packages-shown value="false" />
+      <are-modules-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="false" />
+    </todo-panel>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-5" y="25" width="1290" height="979" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2180723" sideWeight="0.0" order="7" side_tool="false" />
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.120227456" sideWeight="0.773494" order="1" side_tool="false" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32969698" sideWeight="0.5" order="1" side_tool="false" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Dataflow to this" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3253012" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32650602" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24979524" sideWeight="0.66424245" order="1" side_tool="false" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25426483" sideWeight="0.773494" order="0" side_tool="false" />
+      <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" />
+    </layout>
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="false" />
+    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="false" />
+    <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
+    <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" value="Added quoting of some special characters in SQL export." />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+    <option name="ACTIVE_VCS_NAME" />
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
+    <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+    <MESSAGE value="Added help file for autosave feature. Added help button for autosave in the Preferences dialog." />
+    <MESSAGE value="Fixed bug in startup that could show warnings multiple times when loading from autosave files." />
+    <MESSAGE value="Added support for conditional blocks with multiple fields in export layouts. Such blocks need all fields to be present in order to give output." />
+    <MESSAGE value="Added documentation for multiple-field conditional blocks. Reorganized custom exports help file." />
+    <MESSAGE value="Fixed bug in installing a plugin directly from remote URL." />
+    <MESSAGE value="Changed RIS import so multiple abstract fields in an entry are concatenated." />
+    <MESSAGE value="Added quoting of some special characters in SQL export." />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+    <buildFile url="file://$PROJECT_DIR$/build.xml">
+      <antCommandLine value="" />
+      <runInBackground value="true" />
+      <targetFilters />
+      <treeView value="true" />
+      <verbose value="true" />
+      <viewClosedWhenNoErrors value="false" />
+    </buildFile>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/help/CustomExports.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="191" column="33" selection-start="8328" selection-end="8328" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/external/PushToApplicationButton.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="92" column="30" selection-start="3703" selection-end="3703" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/export/layout/LayoutEntry.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="166" column="14" selection-start="5364" selection-end="5364" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/txt/TODO">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="14" column="33" selection-start="466" selection-end="466" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/ManagePluginsDialog.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="231" column="12" selection-start="9064" selection-end="9064" vertical-scroll-proportion="0.0">
+          <folding>
+            <marker date="1245172555000" expanded="true" signature="8124:8157" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/net/URLDownload.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="55" column="16" selection-start="1397" selection-end="1397" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/plugin/PluginInstaller.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="297" column="22" selection-start="12576" selection-end="12576" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/imports/RisImporter.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="158" column="39" selection-start="5957" selection-end="5957" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/JabRef.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="813" column="32" selection-start="34953" selection-end="34953" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/resource/JabRef_en.properties">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="2114" column="0" selection-start="69411" selection-end="69411" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="ResourceBundle">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/help/Autosave.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="14" column="16" selection-start="770" selection-end="770" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/help/Contents.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="29" column="49" selection-start="1140" selection-end="1140" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/help/BaseFrameHelp.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="0" column="0" selection-start="0" selection-end="4665" vertical-scroll-proportion="-0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/net/sf/jabref/sql/SQLutil.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="1026" column="20" selection-start="36310" selection-end="36310" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/build.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="49" column="46" selection-start="2179" selection-end="2179" vertical-scroll-proportion="-12.954545">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/txt/CHANGELOG">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="27" column="13" selection-start="1676" selection-end="1676" vertical-scroll-proportion="0.6958763">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>
+
index 90a84de..3827efa 100644 (file)
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Tue Apr 21 18:39:51 CEST 2009
-build.number=16
+#Mon Jun 22 19:37:12 CEST 2009
+build.number=67
index abe9e33..e6f9b7c 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -22,8 +22,8 @@
    Compiler: Ant
    Authors:  Joerg K. Wegner, wegnerj@informatik.uni-tuebingen.de
              Morten O. Alver
-   Version:  $Revision: 2951 $
-             $Date: 2009-04-19 15:16:00 +0200 (Sun, 19 Apr 2009) $
+   Version:  $Revision: 2997 $
+             $Date: 2009-05-11 17:55:23 +0200 (Mon, 11 May 2009) $
              $Author: mortenalver $
 
    modified:
@@ -47,7 +47,7 @@
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
        <!-- some version information -->
-       <property name="jabref.version" value="2.5b" />
+       <property name="jabref.version" value="2.5" />
        <property name="jabref.placeholder.version" value="@version@" />
        <!-- used by replace task -->
 
        <!-- Compiles project excluding tests -->
        <target name="compile" depends="generate">
                <mkdir dir="${build.classes}" />
-               <javac debug="on" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
+               <javac debug="off" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
                        <src path="${java.dir}" />
                        <exclude name="tests/**" />
                        <exclude name="**/JabRefMain.java" />
                        <classpath refid="classpath" />
                </javac>
-               <javac debug="on" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
+               <javac debug="off" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
                        <src path="${java.dir}" />
                        <include name="**/JabRefMain.java" />
                </javac>
diff --git a/src/Jabref.iml b/src/Jabref.iml
new file mode 100644 (file)
index 0000000..cab9dcf
--- /dev/null
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/plugin/velocity-dep-1.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/plugin/jpf-boot.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/plugin/commons-logging.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/plugin/jpf.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator-rt.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/glazedlists-1.7.0_java15.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/langproper.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/PDFBox-0.7.3-dev-reduced.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/antlr-3.0b5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/ccl.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/javancss.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jaxen-core-1.0-fcs.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/microba.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jdom-1.0b8.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/forms-1.1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/saxpath-1.0-fcs.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/antlr.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/EndNote.zip!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/log4j-1.2.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jalopy-1.0b10.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jarbundler-1.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/substance-4.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/vizant.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/spin.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/mysql-connector-java-5.0.7-bin.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jalopy-ant-0.6.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/sax-2.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/junit.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/log4j-1.2.6.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/oro-2.0.6.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/aelfred-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/jaxp-1.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/looks-2.2.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/JempBox-0.2.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/pmd-2.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>
+
diff --git a/src/Jabref_trunk.iml b/src/Jabref_trunk.iml
deleted file mode 100644 (file)
index 3c681e2..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/velocity-dep-1.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/jpf.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator-rt.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/commons-logging.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/jpf-boot.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jalopy-1.0b10.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/microba.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/langproper.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jalopy-ant-0.6.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/antlr.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jdom-1.0b8.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/oro-2.0.6.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/junit.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/ccl.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/antlr-3.0b5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/glazedlists-1.7.0_java15.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/log4j-1.2.6.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jaxen-core-1.0-fcs.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/pmd-2.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/javancss.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/spin.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/sax-2.0.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/JempBox-0.2.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/vizant.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jarbundler-1.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/EndNote.zip!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/forms-1.1.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/saxpath-1.0-fcs.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/mysql-connector-java-5.0.7-bin.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/aelfred-1.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/substance-4.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/PDFBox-0.7.3-dev-reduced.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/jaxp-1.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/log4j-1.2.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/looks-2.2.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-  </component>
-</module>
-
diff --git a/src/help/Autosave.html b/src/help/Autosave.html
new file mode 100644 (file)
index 0000000..aadf95b
--- /dev/null
@@ -0,0 +1,22 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+
+    <h1>Autosave</h1>
+
+    <p>The autosave feature helps prevent loss of data if your computer or JabRef crashes.
+    When autosave is enabled, JabRef will check regularly (with a configurable time interval)
+    whether any of your databases have been modified since your last save. For each one that
+    has, JabRef will save a copy of the database in the file named <code>.$[file]$</code>,
+    where <code>[file]</code> is the file name of the database in question. The autosave file
+    lies in the same directory as the bib file.</p>
+    <p>The autosave file will be deleted whenever you actively save the database, and if you
+    quit JabRef normally. However, if JabRef is shut down due to a crash, the autosave file
+    will remain. In this case, it will be detected the next time you attempt to open the
+    database, and you will be given the option to recover the database from the autosave file.</p>
+    <p>Autosave is enabled by default, with a save interval of 5 minutes. If you prefer, you
+    can disable the option to prompt before using an autosave. In this
+    case, JabRef will quietly recover the database without providing any notifications.</p>
+</body>
+</html>
index 0b29cd3..a4f13c6 100755 (executable)
@@ -11,6 +11,7 @@
       <li><a href="JabRefHelp.html">General information</a></li>
       <li><a href="BaseFrameHelp.html">The JabRef main window</a></li>
       <li><a href="EntryEditorHelp.html">Entry editor</a></li>
+      <li><a href="Autosave.html">Autosave</a></li>
     </ul>
 
     <h2>Fields</h2>
@@ -49,6 +50,7 @@
       <li><a href="ImportInspectionDialog.html">Import inspection window</a></li>
       <li><a href="EndNoteFilters.html">The EndNote import/export filter set</a></li>
       <li><a href="OpenOfficeHelp.html">Using JabRef bibliographies in OpenOffice.org</a></li>
+      <li><a href="ACMPortalHelp.html">Fetching entries from <em>ACM</em> Portal</a></li>
       <li><a href="CiteSeerHelp.html">Fetching entries from <em>CiteSeer</em></a></li>
       <li><a href="IEEEXploreHelp.html">Fetching entries from <em>IEEExplore</em></a></li>
       <li><a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a></li>
index c63c476..c7c2ba1 100644 (file)
     in the "journal" field after replacing all whitespace by underscores).
     </p>
 
+    <p>See below for a list of built-in export formatters.</p>
+
+    <h3>Conditional output</h3>
+
+    <p>Some static output might only make
+    sense if a specific field is set. For instance, say we want to
+    follow the editor names with the text <code>(Ed.)</code>. This
+    can be done with the following text:</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Ed.)</code></p>
+
+    <p>However, if the <code>editor</code> field has not been set -
+    it might not even make sense for the entry being exported - the
+    <code>(Ed.)</code> would be left hanging. This can be prevented
+    by instead using the <code>\begin</code> and <code>\end</code>
+    commands:</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
+     \end{editor}</code></p>
+
+    <p>The <code>\begin</code> and <code>\end</code> commands make
+    sure the text in between is printed if and only if the field
+    referred in the curly braces is defined for the entry being
+    exported.</p>
+
+    <p>A conditional block can also be dependent on more than one field. In this case
+    the contents of the block are printed only if all the fields are defined. To make
+    such a block, simply give the list of fields separated by semicolons. For instance,
+    to output text only if both <code>year</code> and <code>month</code> are set, use
+    a block like the following:</p>
+
+    <p><code>\begin{year;month}Month: \format[HTMLChars]{\month}\end{year;month}</code></p>
+
+    <p>which will print "Month: " plus the contents of the <code>month</code> field, but
+    only if also the <code>year</code> field is defined.</p>
+
+    <p><b>Note:</b> Use of the <code>\begin</code> and
+    <code>\end</code> commands is a key to creating layout files
+    that work well with a variety of entry types.</p>
+
+    <h3>Grouped output</h3>
+
+    <p>If you wish to separate your entries
+    into groups based on a certain field, use the grouped output
+    commands. Grouped output is very similar to conditional output,
+    except that the text in between is printed only if the field
+    referred in the curly braces has changed value.</p>
+
+    <p>For example, let's assume I wish to group by keyword. Before
+    exporting the file, make sure you have sorted your entries
+    based on keyword. Now use the following commands to group by
+    keyword:</p>
+
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Sharing your work</h2>
+
+    <p>With external layout files, it's
+    fairly simple to share custom export formats between users. If
+    you write an export filter for a format not supported by
+    JabRef, or an improvement over an existing one, we encourage
+    you to post your work on our SourceForge.net page. The same
+    goes for formatter classes that you write. We'd be happy to
+    distribute a collection of submitted layout files, or to add to
+    the selection of standard export filters and formatters.</p>
+
+    <p>Starting with JabRef 2.4b1 you can also package your
+       ExportFormat or LayoutFormatter as a plug-in. If you do so,
+       you can provide a single zip-file to other user to make use
+       of your ExportFormat. For an example download the JabRef
+       source release and have a look at the directory
+       <code>src/plugins/</code>. Don't hesitate to stop by the
+       forums on Sourceforge, since we don't have extensive documentation, yet.</p>
+
+
     <h2>Built-in export formatters</h2>
 
     <p>JabRef provides the following set of formatters, some of
         to <code>AuthorLastFirstCommas</code>, except that the "and"
         between the last two names is preceded by a comma.</li>
 
+        <li><code>AuthorLF_FF</code> : formats
+        author/editor fields with last name first for the first author,
+        and the first name first for the remaining authors. Returns
+        names delimited with "and".</li>
+
+        <li><code>AuthorLF_FFAbbr</code> : same as <code>AuthorLF_FF</code>,
+        but abbreviates first names.</li>
+                
         <li><code>AuthorNatBib</code> : formats author names in
         NatBib style, with last names only, separating names by
         "and" if there are two authors, and giving the first author
         <li><code>NoSpaceBetweenAbbreviations</code> : spaces
         between multiple abbreviated first names are removed.</li>
 
-        <li><code>RemoveBrackets</code> : removes all curly
-        brackets "{" or "}".</li>
+        <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the
+        current export. This formatter can be used to make a numbered list of entries. The
+        sequence number depends on the current entry's place in the current sort order, not on
+        the number of calls to this formatter.</li>
+
+        <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>
 
         <li><code>RemoveBracketsAddComma</code> : to be
         documented.</li>
     <pre>1. An early &quot;draft&quot; (/home/john/draft.txt)</pre>
     <p/>Additional pairs of replacements could be added.
 
-    
+
     <h3>Custom formatters</h3>
 
     <p>If none of the available formatters can do what you want to
     <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>
-
-    <p>Some static output might only make
-    sense if a specific field is set. For instance, say we want to
-    follow the editor names with the text <code>(Ed.)</code>. This
-    can be done with the following text:</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Ed.)</code></p>
-
-    <p>However, if the <code>editor</code> field has not been set -
-    it might not even make sense for the entry being exported - the
-    <code>(Ed.)</code> would be left hanging. This can be prevented
-    by instead using the <code>\begin</code> and <code>\end</code>
-    commands:</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
-     \end{editor}</code></p>
-
-    <p>The <code>\begin</code> and <code>\end</code> commands make
-    sure the text in between is printed if and only if the field
-    referred in the curly braces is defined for the ently being
-    exported.</p>
-
-    <p><b>Note:</b> Use of the <code>\begin</code> and
-    <code>\end</code> commands is a key to creating layout files
-    that work well with a variety of entry types.</p>
-
-    <h3>Grouped output</h3>
-
-    <p>If you wish to separate your entries
-    into groups based on a certain field, use the grouped output
-    commands. Grouped output is very similar to conditional output,
-    except that the text in between is printed only if the field
-    referred in the curly braces has changed value.</p>
-
-    <p>For example, let's assume I wish to group by keyword. Before
-    exporting the file, make sure you have sorted your entries
-    based on keyword. Now use the following commands to group by
-    keyword:</p>
-
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Sharing your work</h2>
-
-    <p>With external layout files, it's
-    fairly simple to share custom export formats between users. If
-    you write an export filter for a format not supported by
-    JabRef, or an improvement over an existing one, we encourage
-    you to post your work on our SourceForge.net page. The same
-    goes for formatter classes that you write. We'd be happy to
-    distribute a collection of submitted layout files, or to add to
-    the selection of standard export filters and formatters.</p>
-
-    <p>Starting with JabRef 2.4b1 you can also package your
-       ExportFormat or LayoutFormatter as a plug-in. If you do so,
-       you can provide a single zip-file to other user to make use
-       of your ExportFormat. For an example download the JabRef
-       source release and have a look at the directory
-       <code>src/plugins/</code>. Don't hesitate to stop by the
-       forums on Sourceforge, since we don't have extensive documentation, yet.</p>
-
 
 </body>
 </html>
index 6afa4a5..3de24d4 100644 (file)
@@ -5,11 +5,18 @@
 \r
     <h1>JabRef Plugin System</h1>\r
 \r
-    <p>Starting with 2.4b1, JabRef can be extended using a plugin system which was \r
-    build using Java Plugin Framework (JPF).</p>\r
+    <p>Starting with version 2.4, JabRef can be extended using a plugin system which was \r
+    built using Java Plugin Framework (JPF).</p>\r
 \r
-    <p>To <i>use plugins</i> simply put the jar file of the plugin in a folder called <code>plugins</code> in the\r
-    folder where the JabRef.jar is located. When starting up, JabRef will print a list of all plugins loaded.</p>\r
+    <p>To use a plugin, it needs to be put in one of the directories where JabRef looks for plugins.\r
+    One such directory is the one called <code>plugins</code> below the directory where the JabRef\r
+    jar file is located. Another is the user plugin directory, <code>~/.jabref/plugins</code> under\r
+    Linux or OS X and <code>.jabref/plugins</code> under your user home directory under Windows.</p>\r
+\r
+    <p>The simplest way of installing plugins is through the <i>Plugin manager</i>, accessed from\r
+    the <i>Plugins</i> menu. The plugin manager lists all plugins installed in your user plugin\r
+    directory, and allows you to both delete installed plugins and install new ones.\r
+    </p>\r
     \r
     <h2>How to write a plugin</h2>\r
     \r
index d8cabed..87ce748 100644 (file)
@@ -5,6 +5,64 @@
 
   <h1>Revision history</h1>
 
+    <h3>Version 2.5beta (April 21st, 2009)</h3>
+
+    <ul>
+      <li> Added Simplified Chinese translation.</li>
+      <li> Added simple plugin manager.</li>
+      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
+      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
+      <li> Added [authorAlpha] key marker that formats authors according to the &quot;alpha&quot; BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
+      <li> Changed LyX pipe setting so it works whether &quot;.in&quot; is included or omitted.</li>
+      <li> Modified ISI importer so the words &quot;of&quot;, &quot;and&quot; and &quot;the&quot; will not be capitalized in the title, journal or publisher fields.</li>
+      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
+      <li> Added &quot;Remove all broken links&quot; option in the resolver dialog for broken links when synchronizing file links.</li>
+      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
+      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
+      <li> Added option under &quot;Entry table&quot; to designate fields as numeric for sorting purposes.</li>
+      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named &quot;&lt;filtername&gt;.formatters&quot;. This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
+      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
+      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
+      <li> Added &quot;:(x)&quot; modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
+      <li> Added &quot;:upper&quot; modifier to key generator, to force uppercase for a field marker.</li>
+      <li> Added buttons in External programs tab in Preferences for modifying settings for &quot;Push to&quot;-features, and removed obsolete fields.</li>
+      <li> Added support for DOI field in Endnote importer.</li>
+      <li> Added support for language and publication status fields in Medline import (publication status stored in &quot;medline-pst&quot; field).</li>
+      <li> Enabled cookie handling for downloading full-text articles.</li>
+      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
+      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
+      <li> Changed name handling so a single-entry name without a capital initial letter, such as &quot;unknown&quot;, will be treated as a solitary last name rather than a von particle.</li>
+      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
+      <li> Changed handling of &quot;affiliation&quot; in Medline import - now makes sure to escape # characters before storing.</li>
+      <li> Modified ACM portal fetcher due to web site changes.</li>
+      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
+      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
+      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
+      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
+      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
+      <li> Fixed bug in HTMLConverter.</li>
+      <li> Fixed NullPointerException in key generator for incomplete names.</li>
+      <li> Fixed bug in removing custom export filters.</li>
+      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
+      <li> Fixed bug in &quot;Move/rename file&quot; feature in file field editor with regard to undefined file directory.</li>
+      <li> Fixed bug in Ris importer.</li>
+      <li> Fixed NullPointerException in Endnote importer.</li>
+    </ul>
+
+
+    <h3>Version 2.4.2 (November 1st, 2008)</h3>
+
+    <ul>
+      <li>Added missing layout formatters FirstPage and LastPage.</li>
+      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
+      <li>Fixed crash during initalization of journal abbreviation list.</li>
+      <li>Added option to have JabRef search for external file when &quot;Open file&quot; function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
+      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers &quot;upper&quot;, &quot;lower&quot; and &quot;abbr&quot; (for case conversion and abbreviation) can be used.</li>
+      <li>Ris importer now imports PB as &quot;school&quot; instead of &quot;publisher&quot; for THES entries.</li>
+      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
+    </ul>
+
 
     <h3>Version 2.4.1 (October 8th, 2008)</h3>
 
index d2c65c6..a00300a 100755 (executable)
         2.</p>
 
         <p>JabRef bruger ANTLR parser-generatoren til fortolkning af
-        søgestrenge. ANTLR er public domain software - se
+        s&oslash;gestrenge. ANTLR er public domain software - se
         <code>http://www.antlr.org/license.html</code> for
         licensbetingelser.</p>
 
-        <p>Til tabelpræsentation og -filtrering benytter JabRef Glazed
-        Lists biblioteket
+        <p>Til tabelpr&aelig;sentation og -filtrering benytter JabRef
+        Glazed Lists biblioteket
         (<code>http://publicobject.com/glazedlists</code>), som
         distribueres under Lesser General Public License.</p>
 
-        <p>JabRef benytter også trådbiblioteket Spin 1.3.1, som
-        distribueres under betingelserne i Lesser General Public
-        License.</p>
+        <p>JabRef benytter ogs&aring; tr&aring;dbiblioteket Spin
+        1.3.1, som distribueres under betingelserne i Lesser General
+        Public License.</p>
 
         <p>Der er brugt visse GUI-komponenter fra Microba-biblioteket,
         som er licenseret under en BSD-lignende licens. See
         <code>http://sourceforge.net/projects/microba/</code> for mere
         information.</p>
 
-        <p>Størstedelen af ikonerne stammer fra Crystal Clear
-        ikonsættet af Everaldo (<code>http://www.everaldo.com</code>),
-        som distribueres under betingelserne i Lesser General Public
-        License.</p>
+        <p>St&oslash;rstedelen af ikonerne stammer fra Crystal Clear
+        ikons&aelig;ttet af Everaldo
+        (<code>http://www.everaldo.com</code>), som distribueres under
+        betingelserne i Lesser General Public License.</p>
 
         <p>JabRef benytter JempBox og PDFBox bibliotekerne til
-        PDF-håndtering; begge distribueres under en BSD-lignende
+        PDF-h&aring;ndtering; begge distribueres under en BSD-lignende
         licens.</p>
     </center>
 </body>
index 2d95d60..fda7d8b 100644 (file)
@@ -6,6 +6,65 @@
   <h1>Versionsgeschichte (auf Englisch)</h1>
 
 
+    <h3>Version 2.5beta (April 21st, 2009)</h3>
+
+    <ul>
+      <li> Added Simplified Chinese translation.</li>
+      <li> Added simple plugin manager.</li>
+      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
+      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
+      <li> Added [authorAlpha] key marker that formats authors according to the &quot;alpha&quot; BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
+      <li> Changed LyX pipe setting so it works whether &quot;.in&quot; is included or omitted.</li>
+      <li> Modified ISI importer so the words &quot;of&quot;, &quot;and&quot; and &quot;the&quot; will not be capitalized in the title, journal or publisher fields.</li>
+      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
+      <li> Added &quot;Remove all broken links&quot; option in the resolver dialog for broken links when synchronizing file links.</li>
+      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
+      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
+      <li> Added option under &quot;Entry table&quot; to designate fields as numeric for sorting purposes.</li>
+      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named &quot;&lt;filtername&gt;.formatters&quot;. This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
+      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
+      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
+      <li> Added &quot;:(x)&quot; modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
+      <li> Added &quot;:upper&quot; modifier to key generator, to force uppercase for a field marker.</li>
+      <li> Added buttons in External programs tab in Preferences for modifying settings for &quot;Push to&quot;-features, and removed obsolete fields.</li>
+      <li> Added support for DOI field in Endnote importer.</li>
+      <li> Added support for language and publication status fields in Medline import (publication status stored in &quot;medline-pst&quot; field).</li>
+      <li> Enabled cookie handling for downloading full-text articles.</li>
+      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
+      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
+      <li> Changed name handling so a single-entry name without a capital initial letter, such as &quot;unknown&quot;, will be treated as a solitary last name rather than a von particle.</li>
+      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
+      <li> Changed handling of &quot;affiliation&quot; in Medline import - now makes sure to escape # characters before storing.</li>
+      <li> Modified ACM portal fetcher due to web site changes.</li>
+      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
+      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
+      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
+      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
+      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
+      <li> Fixed bug in HTMLConverter.</li>
+      <li> Fixed NullPointerException in key generator for incomplete names.</li>
+      <li> Fixed bug in removing custom export filters.</li>
+      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
+      <li> Fixed bug in &quot;Move/rename file&quot; feature in file field editor with regard to undefined file directory.</li>
+      <li> Fixed bug in Ris importer.</li>
+      <li> Fixed NullPointerException in Endnote importer.</li>
+    </ul>
+
+
+    <h3>Version 2.4.2 (November 1st, 2008)</h3>
+
+    <ul>
+      <li>Added missing layout formatters FirstPage and LastPage.</li>
+      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
+      <li>Fixed crash during initalization of journal abbreviation list.</li>
+      <li>Added option to have JabRef search for external file when &quot;Open file&quot; function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
+      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers &quot;upper&quot;, &quot;lower&quot; and &quot;abbr&quot; (for case conversion and abbreviation) can be used.</li>
+      <li>Ris importer now imports PB as &quot;school&quot; instead of &quot;publisher&quot; for THES entries.</li>
+      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
+    </ul>
+
+
     <h3>Version 2.4.1 (October 8th, 2008)</h3>
 
       <ul>
diff --git a/src/help/fr/Autosave.html b/src/help/fr/Autosave.html
new file mode 100644 (file)
index 0000000..ac48b34
--- /dev/null
@@ -0,0 +1,21 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<body text="#275856">
+    <basefont size="4" color="#2F4958" face="arial" />
+    <h1>Sauvegarde automatique</h1>
+
+    <p>La fonction de sauvegarde automatique aide &agrave; pr&eacute;venir la perte de donn&eacute;es si votre ordinateur ou JabRef plante.
+    Quand la sauvegarde automatique est activ&eacute;e, JabRef v&eacute;rifie r&eacute;guli&egrave;rement (&agrave; un intervalle de temps configurable)
+    si l'une de vos bases a &eacute;t&eacute; modifi&eacute;e depuis votre dernier enregistrement. Si c'est le cas,
+    JabRef cr&eacute;era une copie de la base dans un fichier nomm&eacute; <code>.$[fichier]$</code>,
+    o&ugrave; <code>[fichier]</code> est le nom de fichier de la base en question. Le fichier de sauvegarde automatique
+    se trouve dans le m&ecirc;me r&eacute;pertoire que le fichier bib.</p>
+    <p>Le fichier de sauvegarde automatique sera effac&eacute; d&egrave;s que vous enregistrerez la base, ainsi qui si vous
+    quittez normalement JabRef. Cependant, si JabRef se ferme &agrave; cause d'un plantage, le fichier de sauvegarde automatique
+    persistera. Dans ce cas, il sera d&eacute;tect&eacute; la prochaine fois que vous essayerez d'ouvrir la base, et on vous proposera
+    alors de r&eacute;cup&eacute;rer la base &agrave; partir du fichier de sauvegarde automatique.</p>
+    <p>La sauvegarde automatique est activ&eacute;e par d&eacute;faut, avec un intervalle de sauvegarde de 5&nbsp;minutes. Si vous le voulez, vous
+    pouvez d&eacute;sactiver l'option vous demandant de confirmer la r&eacute;cup&eacute;ration de la base &agrave; partir du fichier de sauvegarde automatique.
+    Dans ce cas, JabRef r&eacute;cup&eacute;rera la base directement, sans vous en informer.</p>
+</body>
+</html>
index 59ae4c0..e7eb00e 100644 (file)
@@ -11,6 +11,7 @@
       <li><a href="JabRefHelp.html">Informations g&eacute;n&eacute;rales</a></li>
       <li><a href="BaseFrameHelp.html">La fen&ecirc;tre principale de JabRef</a></li>
       <li><a href="EntryEditorHelp.html">&Eacute;diteur d'entr&eacute;es</a></li>
+      <li><a href="Autosave.html">Sauvegarde automatique<</a></li>
     </ul>
 
     <h2>Champs</h2>
@@ -49,6 +50,7 @@
       <li><a href="ImportInspectionDialog.html">Fen&ecirc;tre de v&eacute;rification des importations</a></li>
       <li><a href="EndNoteFilters.html">Filtres d'importation/exportation d'EndNote</a></li>
       <li><a href="OpenOfficeHelp.html">Utiliser les bibliographies JabRef dans OpenOffice.org</a></li>
+      <li><a href="ACMPortalHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis le portail <em>ACM</em></a></li>
       <li><a href="CiteSeerHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis <em>CiteSeer</em></a></li>
       <li><a href="IEEEXploreHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis <em>IEEExplore</em></a></li>
       <li><a href="MedlineHelp.html">R&eacute;cup&eacute;ration des entr&eacute;es depuis <em>Medline</em></a></li>
@@ -62,7 +64,7 @@
 
     <h2>Divers</h2>
     <ul>
-      <li><a href="RevisionHistory.html">Historique des r&eacute;visions</a></li>
+      <li><a href="RevisionHistory.html">Historique des r&eacute;visions (en anglais)</a></li>
       <li><a href="About.html">About JabRef</a></li>
     </ul>
 
index 6db9ccd..54b364d 100644 (file)
     le formateur <b>Replace</b> avec l'argument <b>\s,_</b> (ce qui remplace
     tous les espaces par des soulignets dans le champ "field").</p>
 
+
+    <p>See below for a list of built-in export formatters.</p>
+
+
+    <h3>Les sorties conditionnelles</h3>
+
+    <p>Certaines informations dans les sorties ne prennent de sens
+    que si un certain champ est utilis&eacute;. Par exemple, disons
+    que l'on veuille faire suivre le nom de l'&eacute;diteur par le
+    texte <code>(Ed.)</code>. Cela peut &ecirc;tre
+    r&eacute;alis&eacute; avec le code suivant&nbsp;:</p>
+
+    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
+    (Ed.)</code></p>
+
+    <p>Cependant, si le champs <code>editor</code> n'a pas
+    &eacute;t&eacute; renseign&eacute; - il n'a pas de sens pour
+    l'entr&eacute;e export&eacute;e - le texte <code>(Ed.)</code>
+    doit &ecirc;tre ignor&eacute;. Cela peut &ecirc;tre
+    effectu&eacute; en utilisant les commandes <code>\begin</code>
+    et <code>\end</code>&nbsp;:</p>
+
+    <p><code>\begin{editor}<br />
+    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
+     \end{editor}</code></p>
+
+    <p>Les commandes <code>\begin</code> et <code>\end</code>
+    assure que le texte contenu entre les deux commandes ne sera
+    imprim&eacute; que si et seulement si le champ
+    sp&eacute;cifi&eacute; entre accolades est renseign&eacute;
+    dans l'entr&eacute;e que l'on veut exporter.</p>
+
+    <p>Un bloc conditionnel peut aussi d&eacute;pendre de plus d'un champ. Dans ce cas,
+    le contenu du bloc est imprim&eacute; uniquement si tous les champs sont d&eacute;finis. Pour cr&eacute;er
+    un tel bloc, donnez simplement la liste des champs s&eacute;par&eacute;s par des points-virgules. Par exemple,
+    pour imprimer du texte uniquement si &agrave; la fois les champs <code>year</code> et <code>month</code> sont renseign&eacute;s, utilisez
+    un bloc tel que celui-ci&nbsp;:</p>
+
+    <p><code>\begin{year;month}Month: \format[HTMLChars]{\month}\end{year;month}</code></p>
+
+    <p>qui imprimera "Month: " plus le contenu du champ <code>month</code>, mais
+    seulement si le champ <code>year</code> est lui-aussi d&eacute;fini.</p>
+
+    <p><b>Note&nbsp;:</b> L'utilisation des commandes
+    <code>\begin</code> et <code>\end</code> est une mani&egrave;re
+    astucieuse de cr&eacute;er des gabarits qui sont communs
+    &agrave; une grande vari&eacute;t&eacute; d'entr&eacute;es.</p>
+
+
+    <h3>Les sorties group&eacute;es</h3>
+
+    <p>Si vous d&eacute;sirez s&eacute;parer vos entr&eacute;es en
+    groupes bas&eacute;s sur un certain champ, vous pouvez utiliser
+    les commandes de sorties group&eacute;es. La sortie
+    group&eacute;e est assez similaire aux sorties conditionnelles,
+    except&eacute; que le texte sp&eacute;cifi&eacute; n'est
+    imprim&eacute; que si le champ indiqu&eacute; dans les
+    accolades change de valeur.</p>
+
+    <p>Par exemple, on suppose que l'on d&eacute;sire faire des
+    groupes &agrave; partir de mots-clefs. Avant l'exportation, on
+    s'assure que les entr&eacute;es sont tri&eacute;es selon les
+    mots-clefs. Ensuite, on utilise les commandes suivantes pour
+    les grouper par mot-clefs&nbsp;:</p>
+    
+    <p><code>\begingroup{keywords}New Category:
+    \format[HTMLChars]{\keywords}<br />
+     \endgroup{keywords}</code></p>
+
+    <h2>Partage de votre travail</h2>
+
+    <p>Avec les fichiers gabarit externes, il est relativement
+    simple de partager des formats d'exportation entre
+    utilisateurs. Si vous &eacute;crivez un filtre d'exportation
+    pour un format non support&eacute; par JabRef, ou si vous
+    am&eacute;liorez un filtre d&eacute;j&agrave; existant, nous
+    vous encourageons &agrave; d&eacute;poser votre travail sur
+    notre page SourceForge.net. La m&ecirc;me chose est possible
+    pour les nouvelles classes de formateur que vous avez
+    &eacute;crites. Nous serons heureux de distribuer une
+    collection des fichiers gabarit soumis ou de les ajouter
+    &agrave; la s&eacute;rie des filtres d'exportation standard ou
+    des formateurs.</p>
+
+    <p>A partir de JabRef 2.4b1 vous pouvez aussi empaqueter votre
+    format d'exportation ("ExportFormat") ou formateur de gabarit
+    ("LayoutFormatter") comme un greffon ("plug-in"). Si vous le
+    faites, vous pouvez fournir un unique fichier zip &agrave; d'autres
+    utilisateurs afin qu'ils utilisent votre format d'exportation.
+    Pour un example, t&eacute;l&eacute;charger le source de JabRef et jeter un
+    oeil au r&eacute;pertoire <code>src/plugins/</code>. N'h&eacute;sitez pas
+    &agrave; participer aux forums sur Sourceforge, puisque nous ne disposons
+    pas encore d'une documentation volumineuse.</p>
+
+
     <h2>Formateurs d'exportation inclus</h2>
 
     <p>JabRef fournit la s&eacute;rie suivante de formateurs, certains
         except&eacute; que le "and" entre les deux derniers noms
         est pr&eacute;c&eacute;d&eacute; d'une virgule.</li>
 
+        <li><code>AuthorLF_FF</code>&nbsp;: formate
+        les champs author/editor avec le nom de famille en premier pour le
+        premier auteur et le pr&eacute;nom en premier pour les auteurs restants.
+        Renvoie les noms sépar&eacute;s par des "and".</li>
+
+        <li><code>AuthorLF_FFAbbr</code>&nbsp;: comme <code>AuthorLF_FF</code>,
+        mais abr&egrave;ge les pr&eacute;noms.</li>
+
         <li><code>AuthorNatBib</code>&nbsp;: Formats des noms
         d'auteurs dans le style NatBib, avec les noms propres
         s&eacute;par&eacute;s par "and" s'il y a deux auteurs, ou
         <li><code>NoSpaceBetweenAbbreviations</code>&nbsp;: Les espaces
         entre les initiales des pr&eacute;noms sont
         supprim&eacute;s.</li>
-        
+                
+        <li><code>Number</code>&nbsp;: renvoie la s&eacute;quence de nombres &agrave; base de 1 de l'entr&eacute;e actuelle dans
+        l'exportation actuelle. Ce formatteur peut &ecirc;tre utilis&eacute; pour faire une liste num&eacute;rot&eacute;e d'entr&eacute;es. Le
+        num&eacute;ro de s&eacute;quence d&eacute;pend de la place de l'entr&eacute;e actuelle dans l'ordre de tri actuel, pas du
+        nombre d'appels de ce formatteur.</li>
+
         <li><code>RemoveBrackets</code>&nbsp;: supprime toutes les
         accolades "{" ou "}".</li>
 
     sur ce sujet, envoyez un courriel sur l'une des listes de
     diffusion de JabRef&nbsp;!</p>
 
-    <h3>Les sorties conditionnelles</h3>
-
-    <p>Certaines informations dans les sorties ne prennent de sens
-    que si un certain champ est utilis&eacute;. Par exemple, disons
-    que l'on veuille faire suivre le nom de l'&eacute;diteur par le
-    texte <code>(Ed.)</code>. Cela peut &ecirc;tre
-    r&eacute;alis&eacute; avec le code suivant&nbsp;:</p>
-
-    <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}
-    (Ed.)</code></p>
-
-    <p>Cependant, si le champs <code>editor</code> n'a pas
-    &eacute;t&eacute; renseign&eacute; - il n'a pas de sens pour
-    l'entr&eacute;e export&eacute;e - le texte <code>(Ed.)</code>
-    doit &ecirc;tre ignor&eacute;. Cela peut &ecirc;tre
-    effectu&eacute; en utilisant les commandes <code>\begin</code>
-    et <code>\end</code>&nbsp;:</p>
-
-    <p><code>\begin{editor}<br />
-    \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />
-     \end{editor}</code></p>
-
-    <p>Les commandes <code>\begin</code> et <code>\end</code>
-    assure que le texte contenu entre les deux commandes ne sera
-    imprim&eacute; que si et seulement si le champ
-    sp&eacute;cifi&eacute; entre accolades est renseign&eacute;
-    dans l'entr&eacute;e que l'on veut exporter.</p>
-
-    <p><b>Note&nbsp;:</b> L'utilisation des commandes
-    <code>\begin</code> et <code>\end</code> est une mani&egrave;re
-    astucieuse de cr&eacute;er des gabarits qui sont communs
-    &agrave; une grande vari&eacute;t&eacute; d'entr&eacute;es.</p>
-
-    <h3>Les sorties group&eacute;es</h3>
-
-    <p>Si vous d&eacute;sirez s&eacute;parer vos entr&eacute;es en
-    groupes bas&eacute;s sur un certain champ, vous pouvez utiliser
-    les commandes de sorties group&eacute;es. La sortie
-    group&eacute;e est assez similaire aux sorties conditionnelles,
-    except&eacute; que le texte sp&eacute;cifi&eacute; n'est
-    imprim&eacute; que si le champ indiqu&eacute; dans les
-    accolades change de valeur.</p>
-
-    <p>Par exemple, on suppose que l'on d&eacute;sire faire des
-    groupes &agrave; partir de mots-clefs. Avant l'exportation, on
-    s'assure que les entr&eacute;es sont tri&eacute;es selon les
-    mots-clefs. Ensuite, on utilise les commandes suivantes pour
-    les grouper par mot-clefs&nbsp;:</p>
-
-    <p><code>\begingroup{keywords}New Category:
-    \format[HTMLChars]{\keywords}<br />
-     \endgroup{keywords}</code></p>
-
-    <h2>Partage de votre travail</h2>
-
-    <p>Avec les fichiers gabarit externes, il est relativement
-    simple de partager des formats d'exportation entre
-    utilisateurs. Si vous &eacute;crivez un filtre d'exportation
-    pour un format non support&eacute; par JabRef, ou si vous
-    am&eacute;liorez un filtre d&eacute;j&agrave; existant, nous
-    vous encourageons &agrave; d&eacute;poser votre travail sur
-    notre page SourceForge.net. La m&ecirc;me chose est possible
-    pour les nouvelles classes de formateur que vous avez
-    &eacute;crites. Nous serons heureux de distribuer une
-    collection des fichiers gabarit soumis ou de les ajouter
-    &agrave; la s&eacute;rie des filtres d'exportation standard ou
-    des formateurs.</p>
-
-    <p>A partir de JabRef 2.4b1 vous pouvez aussi empaqueter votre
-    format d'exportation ("ExportFormat") ou formateur de gabarit
-    ("LayoutFormatter") comme un greffon ("plug-in"). Si vous le
-    faites, vous pouvez fournir un unique fichier zip &agrave; d'autres
-    utilisateurs afin qu'ils utilisent votre format d'exportation.
-    Pour un example, t&eacute;l&eacute;charger le source de JabRef et jeter un
-    oeil au r&eacute;pertoire <code>src/plugins/</code>. N'h&eacute;sitez pas
-    &agrave; participer aux forums sur Sourceforge, puisque nous ne disposons
-    pas encore d'une documentation volumineuse.</p>
-
 </body>
 </html>
index c93ca77..59bf77b 100644 (file)
@@ -6,6 +6,65 @@
   <h1>Historique des r&eacute;visions (en anglais)</h1>
 
 
+    <h3>Version 2.5beta (April 21st, 2009)</h3>
+
+    <ul>
+      <li> Added Simplified Chinese translation.</li>
+      <li> Added simple plugin manager.</li>
+      <li> Added ~/.jabref/plugins as user-specific plugin directory.</li>
+      <li> Added \r marker to WrapFileLinks formatter that outputs file links without expanding relative links.</li>
+      <li> Added [authorAlpha] key marker that formats authors according to the &quot;alpha&quot; BibTeX style. Patch submitted by Oliver Kopp.</li>
+      <li> Table sort order set by clicking and Ctrl-clicking table columns is now immediately set as default sort order in preferences.</li>
+      <li> Changed LyX pipe setting so it works whether &quot;.in&quot; is included or omitted.</li>
+      <li> Modified ISI importer so the words &quot;of&quot;, &quot;and&quot; and &quot;the&quot; will not be capitalized in the title, journal or publisher fields.</li>
+      <li> When adding new local file link, browse dialog now appears immediately when opening file link editor, saving one mouse click.</li>
+      <li> Added &quot;Remove all broken links&quot; option in the resolver dialog for broken links when synchronizing file links.</li>
+      <li> Added rename option to Set/clear field dialog, to move contents from one field to another.</li>
+      <li> Added Back and Forward actions, for switching between recently edited BibTeX entries.</li>
+      <li> Added option under &quot;Entry table&quot; to designate fields as numeric for sorting purposes.</li>
+      <li> Added possibility for custom export filters to define their own name formatters. This is done by adding a file named &quot;&lt;filtername&gt;.formatters&quot;. This file defines one formatter on each line, with each line containing the name of the formatter and the formatter definition, separated by a colon (:).</li>
+      <li> Added menu items for increasing/decreasing table font size, with shortcut keys Ctrl-plus and Ctrl-minus.</li>
+      <li> Added options to automatically mark entries imported into an existing database, and to unmark previously marked entries when importing.</li>
+      <li> Added &quot;:(x)&quot; modifier to key generator, specifying that the arbitrary string x should be used as a fallback value if the value returned by the field marker is empty.</li>
+      <li> Added &quot;:upper&quot; modifier to key generator, to force uppercase for a field marker.</li>
+      <li> Added buttons in External programs tab in Preferences for modifying settings for &quot;Push to&quot;-features, and removed obsolete fields.</li>
+      <li> Added support for DOI field in Endnote importer.</li>
+      <li> Added support for language and publication status fields in Medline import (publication status stored in &quot;medline-pst&quot; field).</li>
+      <li> Enabled cookie handling for downloading full-text articles.</li>
+      <li> Improved handling of invalid BibTeX keys containing white space. Parser will now try to piece together the key and avoid disturbing the continued parsing. Patch submitted by Stephan Lau.</li>
+      <li> Cosmetic change to the entry type label to the left in the entry editor.</li>
+      <li> Changed name handling so a single-entry name without a capital initial letter, such as &quot;unknown&quot;, will be treated as a solitary last name rather than a von particle.</li>
+      <li> Changed table selection coloring so entries that are grayed out or marked can be distinguished from normal entries when selected.</li>
+      <li> Changed handling of &quot;affiliation&quot; in Medline import - now makes sure to escape # characters before storing.</li>
+      <li> Modified ACM portal fetcher due to web site changes.</li>
+      <li> Improvements to IEEEXplore fetcher - better handling of month and page fields.</li>
+      <li> Changed behaviour of source panel when an entry contains imbalanced # characters - the panel can now show the entry in its invalid form, allowing the user to fix the problem.</li>
+      <li> Improved handling of PDF files without XMP metadata - other metadata will now be retained. Patch submitted by Felix Langner.</li>
+      <li> Fixed bug in parsing file field - double spaces in file names would be reduced to single spaces, breaking the file link. Fix submitted by Uwe Kuehn.</li>
+      <li> Fixed NullPointerException when downloading external file and file directory is undefined.</li>
+      <li> Fixed bug in HTMLConverter.</li>
+      <li> Fixed NullPointerException in key generator for incomplete names.</li>
+      <li> Fixed bug in removing custom export filters.</li>
+      <li> Fixed bug 2225371: restart is no longer required after adding a new custom export filter. </li>
+      <li> Fixed bug in &quot;Move/rename file&quot; feature in file field editor with regard to undefined file directory.</li>
+      <li> Fixed bug in Ris importer.</li>
+      <li> Fixed NullPointerException in Endnote importer.</li>
+    </ul>
+
+
+    <h3>Version 2.4.2 (November 1st, 2008)</h3>
+
+    <ul>
+      <li>Added missing layout formatters FirstPage and LastPage.</li>
+      <li>Fixed a bug regarding ParamLayoutFormatter loaded from plugin.</li>
+      <li>Fixed crash during initalization of journal abbreviation list.</li>
+      <li>Added option to have JabRef search for external file when &quot;Open file&quot; function is chosen for an entry without any linked files. This is similar to what was always done in JabRef 2.3.1 and earlier.</li>
+      <li>Improved regular expression file search, so the regular expression can contain field markers as used for BibTeX key generation in addition to just regular fields. It is no longer possible to call arbitrary layout formatters, but the modifiers &quot;upper&quot;, &quot;lower&quot; and &quot;abbr&quot; (for case conversion and abbreviation) can be used.</li>
+      <li>Ris importer now imports PB as &quot;school&quot; instead of &quot;publisher&quot; for THES entries.</li>
+      <li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
+    </ul>
+
+
     <h3>Version 2.4.1 (October 8th, 2008)</h3>
 
       <ul>
diff --git a/src/images/absIcon.png b/src/images/absIcon.png
deleted file mode 100644 (file)
index f249fda..0000000
Binary files a/src/images/absIcon.png and /dev/null differ
diff --git a/src/images/add.png b/src/images/add.png
deleted file mode 100644 (file)
index 6b636fe..0000000
Binary files a/src/images/add.png and /dev/null differ
diff --git a/src/images/autumn.png b/src/images/autumn.png
deleted file mode 100644 (file)
index 77b7590..0000000
Binary files a/src/images/autumn.png and /dev/null differ
diff --git a/src/images/completeItem.png b/src/images/completeItem.png
deleted file mode 100644 (file)
index 5eeadc7..0000000
Binary files a/src/images/completeItem.png and /dev/null differ
diff --git a/src/images/contents.png b/src/images/contents.png
deleted file mode 100644 (file)
index 6e44fa7..0000000
Binary files a/src/images/contents.png and /dev/null differ
index 1133f96..4877f68 100644 (file)
@@ -75,4 +75,5 @@ groupRefining=groupRefining.png
 unknown=help.png
 dbConnect=database_connect.png
 dbExport=database_save.png
-dbImport=database_save.png
\ No newline at end of file
+dbImport=database_save.png
+plugin=kwikdisk.png
diff --git a/src/images/crystal_16/kwikdisk.png b/src/images/crystal_16/kwikdisk.png
new file mode 100755 (executable)
index 0000000..3573f09
Binary files /dev/null and b/src/images/crystal_16/kwikdisk.png differ
diff --git a/src/images/database_connect.png b/src/images/database_connect.png
deleted file mode 100644 (file)
index 3a11197..0000000
Binary files a/src/images/database_connect.png and /dev/null differ
diff --git a/src/images/database_save.png b/src/images/database_save.png
deleted file mode 100644 (file)
index 44c06dd..0000000
Binary files a/src/images/database_save.png and /dev/null differ
diff --git a/src/images/document-save-as.png b/src/images/document-save-as.png
deleted file mode 100644 (file)
index 7a1591f..0000000
Binary files a/src/images/document-save-as.png and /dev/null differ
diff --git a/src/images/document-save.png b/src/images/document-save.png
deleted file mode 100644 (file)
index 0311e47..0000000
Binary files a/src/images/document-save.png and /dev/null differ
diff --git a/src/images/doismall.png b/src/images/doismall.png
deleted file mode 100644 (file)
index 3c9595b..0000000
Binary files a/src/images/doismall.png and /dev/null differ
diff --git a/src/images/duplicate.png b/src/images/duplicate.png
deleted file mode 100644 (file)
index 5599a18..0000000
Binary files a/src/images/duplicate.png and /dev/null differ
diff --git a/src/images/edit-copy.png b/src/images/edit-copy.png
deleted file mode 100644 (file)
index efec317..0000000
Binary files a/src/images/edit-copy.png and /dev/null differ
diff --git a/src/images/edit-cut.png b/src/images/edit-cut.png
deleted file mode 100644 (file)
index 7e750c9..0000000
Binary files a/src/images/edit-cut.png and /dev/null differ
diff --git a/src/images/edit-delete.png b/src/images/edit-delete.png
deleted file mode 100644 (file)
index 0ac3589..0000000
Binary files a/src/images/edit-delete.png and /dev/null differ
diff --git a/src/images/edit-find.png b/src/images/edit-find.png
deleted file mode 100644 (file)
index b98e348..0000000
Binary files a/src/images/edit-find.png and /dev/null differ
diff --git a/src/images/edit-paste.png b/src/images/edit-paste.png
deleted file mode 100644 (file)
index 577e9c2..0000000
Binary files a/src/images/edit-paste.png and /dev/null differ
diff --git a/src/images/edit-redo.png b/src/images/edit-redo.png
deleted file mode 100644 (file)
index 712a8ee..0000000
Binary files a/src/images/edit-redo.png and /dev/null differ
diff --git a/src/images/edit-undo.png b/src/images/edit-undo.png
deleted file mode 100644 (file)
index 4652df0..0000000
Binary files a/src/images/edit-undo.png and /dev/null differ
diff --git a/src/images/editor.png b/src/images/editor.png
deleted file mode 100644 (file)
index a653bfe..0000000
Binary files a/src/images/editor.png and /dev/null differ
diff --git a/src/images/emacs.png b/src/images/emacs.png
deleted file mode 100644 (file)
index 6b76f52..0000000
Binary files a/src/images/emacs.png and /dev/null differ
diff --git a/src/images/emblem-web-small.png b/src/images/emblem-web-small.png
deleted file mode 100644 (file)
index 3d81a37..0000000
Binary files a/src/images/emblem-web-small.png and /dev/null differ
diff --git a/src/images/emblem-web.png b/src/images/emblem-web.png
deleted file mode 100644 (file)
index 49f7290..0000000
Binary files a/src/images/emblem-web.png and /dev/null differ
diff --git a/src/images/fileclose.png b/src/images/fileclose.png
deleted file mode 100644 (file)
index 033326f..0000000
Binary files a/src/images/fileclose.png and /dev/null differ
diff --git a/src/images/fileclose2.png b/src/images/fileclose2.png
deleted file mode 100644 (file)
index c1e5f4d..0000000
Binary files a/src/images/fileclose2.png and /dev/null differ
diff --git a/src/images/filenew.png b/src/images/filenew.png
deleted file mode 100644 (file)
index 7274a21..0000000
Binary files a/src/images/filenew.png and /dev/null differ
diff --git a/src/images/fileopen.png b/src/images/fileopen.png
deleted file mode 100644 (file)
index 7c9f7a6..0000000
Binary files a/src/images/fileopen.png and /dev/null differ
diff --git a/src/images/genIcon.png b/src/images/genIcon.png
deleted file mode 100644 (file)
index 5bedaa2..0000000
Binary files a/src/images/genIcon.png and /dev/null differ
diff --git a/src/images/go-down.png b/src/images/go-down.png
deleted file mode 100644 (file)
index 970d43a..0000000
Binary files a/src/images/go-down.png and /dev/null differ
diff --git a/src/images/go-next.png b/src/images/go-next.png
deleted file mode 100644 (file)
index cfee8f4..0000000
Binary files a/src/images/go-next.png and /dev/null differ
diff --git a/src/images/go-previous.png b/src/images/go-previous.png
deleted file mode 100644 (file)
index 3311c05..0000000
Binary files a/src/images/go-previous.png and /dev/null differ
diff --git a/src/images/go-up.png b/src/images/go-up.png
deleted file mode 100644 (file)
index 4ee50ef..0000000
Binary files a/src/images/go-up.png and /dev/null differ
diff --git a/src/images/groupIncluding.png b/src/images/groupIncluding.png
deleted file mode 100644 (file)
index 6f2bd08..0000000
Binary files a/src/images/groupIncluding.png and /dev/null differ
diff --git a/src/images/groupRefining.png b/src/images/groupRefining.png
deleted file mode 100644 (file)
index 2ba0a26..0000000
Binary files a/src/images/groupRefining.png and /dev/null differ
diff --git a/src/images/grouping_morten.png b/src/images/grouping_morten.png
deleted file mode 100644 (file)
index 9b29f68..0000000
Binary files a/src/images/grouping_morten.png and /dev/null differ
diff --git a/src/images/groupsHighlightAll.png b/src/images/groupsHighlightAll.png
deleted file mode 100644 (file)
index c6e1a97..0000000
Binary files a/src/images/groupsHighlightAll.png and /dev/null differ
diff --git a/src/images/groupsHighlightAny.png b/src/images/groupsHighlightAny.png
deleted file mode 100644 (file)
index 1bc2e28..0000000
Binary files a/src/images/groupsHighlightAny.png and /dev/null differ
diff --git a/src/images/help-about.png b/src/images/help-about.png
deleted file mode 100644 (file)
index 90ce540..0000000
Binary files a/src/images/help-about.png and /dev/null differ
diff --git a/src/images/help-browser.png b/src/images/help-browser.png
deleted file mode 100644 (file)
index 6de563b..0000000
Binary files a/src/images/help-browser.png and /dev/null differ
diff --git a/src/images/integrity.png b/src/images/integrity.png
deleted file mode 100644 (file)
index 4343947..0000000
Binary files a/src/images/integrity.png and /dev/null differ
diff --git a/src/images/lyx2.png b/src/images/lyx2.png
deleted file mode 100644 (file)
index 84a742f..0000000
Binary files a/src/images/lyx2.png and /dev/null differ
diff --git a/src/images/mark.png b/src/images/mark.png
deleted file mode 100644 (file)
index 6f8ab3a..0000000
Binary files a/src/images/mark.png and /dev/null differ
diff --git a/src/images/messageFail.png b/src/images/messageFail.png
deleted file mode 100644 (file)
index 474f63f..0000000
Binary files a/src/images/messageFail.png and /dev/null differ
diff --git a/src/images/messageInfo.png b/src/images/messageInfo.png
deleted file mode 100644 (file)
index ecdc991..0000000
Binary files a/src/images/messageInfo.png and /dev/null differ
diff --git a/src/images/messageWarn.png b/src/images/messageWarn.png
deleted file mode 100755 (executable)
index 55a6f01..0000000
Binary files a/src/images/messageWarn.png and /dev/null differ
diff --git a/src/images/optIcon.png b/src/images/optIcon.png
deleted file mode 100644 (file)
index 64562b3..0000000
Binary files a/src/images/optIcon.png and /dev/null differ
diff --git a/src/images/pdf-new.png b/src/images/pdf-new.png
deleted file mode 100644 (file)
index cda12b9..0000000
Binary files a/src/images/pdf-new.png and /dev/null differ
diff --git a/src/images/pdf.png b/src/images/pdf.png
deleted file mode 100644 (file)
index d5eab07..0000000
Binary files a/src/images/pdf.png and /dev/null differ
diff --git a/src/images/postscript.png b/src/images/postscript.png
deleted file mode 100644 (file)
index 5065c98..0000000
Binary files a/src/images/postscript.png and /dev/null differ
diff --git a/src/images/preamble.png b/src/images/preamble.png
deleted file mode 100644 (file)
index cf9d89d..0000000
Binary files a/src/images/preamble.png and /dev/null differ
diff --git a/src/images/preferences.png b/src/images/preferences.png
deleted file mode 100644 (file)
index 426460b..0000000
Binary files a/src/images/preferences.png and /dev/null differ
diff --git a/src/images/remove.png b/src/images/remove.png
deleted file mode 100644 (file)
index 0815d3f..0000000
Binary files a/src/images/remove.png and /dev/null differ
diff --git a/src/images/reqIcon.png b/src/images/reqIcon.png
deleted file mode 100644 (file)
index 5d2439c..0000000
Binary files a/src/images/reqIcon.png and /dev/null differ
diff --git a/src/images/search.png b/src/images/search.png
deleted file mode 100644 (file)
index a555de8..0000000
Binary files a/src/images/search.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 1f931f6..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://sodipodi.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_newcvs/jabref/src/images"
-   inkscape:version="0.44"
-   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="853"
-     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.1rc/src/images/splash-2.1.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="/home/alver/jabref/src/images/splashBackground.png"
-       x="79"
-       y="172.36218"
-       inkscape:export-filename="/home/alver/jabref-2.1rc/src/images/splash-2.1.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-2.1rc/src/images/splash-2.1.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.1rc/src/images/splash-2.1.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.1rc/src/images/splash-2.1.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.1rc/src/images/splash-2.1.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>
-  </g>
-</svg>
diff --git a/src/images/splash-2.1beta.png b/src/images/splash-2.1beta.png
deleted file mode 100644 (file)
index 4304131..0000000
Binary files a/src/images/splash-2.1beta.png and /dev/null differ
diff --git a/src/images/splash-2.3.svg b/src/images/splash-2.3.svg
deleted file mode 100644 (file)
index d519da8..0000000
+++ /dev/null
@@ -1,276 +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"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-2.3.svg"
-   sodipodi:docbase="/home/alver/jabref/src/images"
-   inkscape:version="0.45.1"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs2140">
-    <linearGradient
-       id="linearGradient2974">
-      <stop
-         style="stop-color:#505b77;stop-opacity:1;"
-         offset="0"
-         id="stop2976" />
-      <stop
-         style="stop-color:#596a97;stop-opacity:1;"
-         offset="1"
-         id="stop2978" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2883">
-      <stop
-         style="stop-color:#c5c1c1;stop-opacity:1;"
-         offset="0"
-         id="stop2885" />
-      <stop
-         style="stop-color:white;stop-opacity:1;"
-         offset="1"
-         id="stop2887" />
-    </linearGradient>
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <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>
-    <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>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2889"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="linearGradient2909"
-       x1="443.79153"
-       y1="351.89935"
-       x2="602.17139"
-       y2="351.89935"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2796"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2798"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="25"
-     inkscape:window-x="0"
-     inkscape:window-height="949"
-     inkscape:window-width="1280"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="677.8697"
-     inkscape:cx="414.10531"
-     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/src/images/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
-       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/src/images/splash.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/src/images/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/src/images/splash.png"
-       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
-       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-   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-2007) 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/src/images/splash.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="450.75409"
-       x="187.49605"
-       style="font-size:43.99980927px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
-       xml:space="preserve"><tspan
-         y="450.75409"
-         x="187.49605"
-         id="tspan2181"
-         sodipodi:role="line">JabRef reference manager</tspan></text>
-    <g
-       id="g2867"
-       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
-       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75">
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="cccscssc"
-         id="path3874"
-         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="ccccsc"
-         id="path3876"
-         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:57.1212616px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Nimbus Sans L"
-       x="462.20135"
-       y="426.2529"
-       id="text2911"
-       sodipodi:linespacing="100%"
-       transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><tspan
-         sodipodi:role="line"
-         id="tspan2913"
-         x="462.20135"
-         y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.3</tspan></text>
-  </g>
-</svg>
diff --git a/src/images/splash-2.4.svg b/src/images/splash-2.4.svg
deleted file mode 100644 (file)
index 8eaf7e1..0000000
+++ /dev/null
@@ -1,284 +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://creativecommons.org/ns#"
-   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"
-   inkscape:export-ydpi="90.000000"
-   inkscape:export-xdpi="90.000000"
-   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
-   sodipodi:docname="splash-2.4.svg"
-   sodipodi:docbase="/home/alver/jabref_trunk/src/images"
-   inkscape:version="0.46"
-   sodipodi:version="0.32"
-   id="svg2138"
-   height="1052.3622047"
-   width="744.09448819"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs2140">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective2595" />
-    <linearGradient
-       id="linearGradient2974">
-      <stop
-         style="stop-color:#505b77;stop-opacity:1;"
-         offset="0"
-         id="stop2976" />
-      <stop
-         style="stop-color:#596a97;stop-opacity:1;"
-         offset="1"
-         id="stop2978" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2883">
-      <stop
-         style="stop-color:#c5c1c1;stop-opacity:1;"
-         offset="0"
-         id="stop2885" />
-      <stop
-         style="stop-color:white;stop-opacity:1;"
-         offset="1"
-         id="stop2887" />
-    </linearGradient>
-    <pattern
-       patternTransform="translate(316.0000,1046.362)"
-       id="pattern9054"
-       xlink:href="#pattern9048"
-       inkscape:collect="always" />
-    <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>
-    <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>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2889"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="linearGradient2909"
-       x1="443.79153"
-       y1="351.89935"
-       x2="602.17139"
-       y2="351.89935"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2796"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2883"
-       id="radialGradient2798"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
-       cx="255.5"
-       cy="330.36218"
-       fx="255.5"
-       fy="330.36218"
-       r="135.88549" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="25"
-     inkscape:window-x="0"
-     inkscape:window-height="949"
-     inkscape:window-width="1279"
-     inkscape:current-layer="layer1"
-     inkscape:document-units="px"
-     inkscape:cy="677.8697"
-     inkscape:cx="414.10531"
-     inkscape:zoom="1"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0.0"
-     borderopacity="1.0"
-     bordercolor="#666666"
-     pagecolor="#ffffff"
-     id="base"
-     showgrid="false" />
-  <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/src/images/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
-       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_beta/src/images/splash.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/src/images/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/src/images/splash.png"
-       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
-       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-       id="flowRoot3076"
-       xml:space="preserve"><flowRegion
-         id="flowRegion3078">
-        <rect
-   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
-   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-2008) 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/src/images/splash.png"
-       transform="scale(0.853347,1.171856)"
-       sodipodi:linespacing="100%"
-       id="text2179"
-       y="450.75409"
-       x="187.49605"
-       style="font-size:43.99980927px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
-       xml:space="preserve"><tspan
-         y="450.75409"
-         x="187.49605"
-         id="tspan2181"
-         sodipodi:role="line">JabRef reference manager</tspan></text>
-    <g
-       id="g2867"
-       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
-       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75">
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="cccscssc"
-         id="path3874"
-         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         inkscape:export-ydpi="57.68"
-         inkscape:export-xdpi="57.68"
-         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
-         sodipodi:nodetypes="ccccsc"
-         id="path3876"
-         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
-         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:57.1212616px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Nimbus Sans L"
-       x="462.20135"
-       y="426.2529"
-       id="text2911"
-       sodipodi:linespacing="100%"
-       transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
-       inkscape:export-xdpi="75"
-       inkscape:export-ydpi="75"><tspan
-         sodipodi:role="line"
-         id="tspan2913"
-         x="462.20135"
-         y="426.2529"
-         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.4</tspan></text>
-  </g>
-</svg>
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.5.svg
new file mode 100644 (file)
index 0000000..55e8e0e
--- /dev/null
@@ -0,0 +1,284 @@
+<?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://creativecommons.org/ns#"
+   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"
+   inkscape:export-ydpi="90.000000"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
+   sodipodi:docname="splash-2.5.svg"
+   sodipodi:docbase="/home/alver/jabref_trunk/src/images"
+   inkscape:version="0.46"
+   sodipodi:version="0.32"
+   id="svg2138"
+   height="1052.3622047"
+   width="744.09448819"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2140">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2595" />
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         style="stop-color:#505b77;stop-opacity:1;"
+         offset="0"
+         id="stop2976" />
+      <stop
+         style="stop-color:#596a97;stop-opacity:1;"
+         offset="1"
+         id="stop2978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2883">
+      <stop
+         style="stop-color:#c5c1c1;stop-opacity:1;"
+         offset="0"
+         id="stop2885" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop2887" />
+    </linearGradient>
+    <pattern
+       patternTransform="translate(316.0000,1046.362)"
+       id="pattern9054"
+       xlink:href="#pattern9048"
+       inkscape:collect="always" />
+    <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>
+    <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>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2889"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88549"
+       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="linearGradient2909"
+       x1="443.79153"
+       y1="351.89935"
+       x2="602.17139"
+       y2="351.89935"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88549" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2883"
+       id="radialGradient2798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.799579,-5.606082e-2,6.979161e-2,-1.00875,436.7358,677.9388)"
+       cx="255.5"
+       cy="330.36218"
+       fx="255.5"
+       fy="330.36218"
+       r="135.88549" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="25"
+     inkscape:window-x="0"
+     inkscape:window-height="949"
+     inkscape:window-width="1280"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="677.8697"
+     inkscape:cx="414.10531"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false" />
+  <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/src/images/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
+       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_beta/src/images/splash.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/src/images/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/src/images/splash.png"
+       transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
+       style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+       id="flowRoot3076"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3078">
+        <rect
+   style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
+   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-2008) 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/src/images/splash.png"
+       transform="scale(0.853347,1.171856)"
+       sodipodi:linespacing="100%"
+       id="text2179"
+       y="450.75409"
+       x="187.49605"
+       style="font-size:43.99980927px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#805b41;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L"
+       xml:space="preserve"><tspan
+         y="450.75409"
+         x="187.49605"
+         id="tspan2181"
+         sodipodi:role="line">JabRef reference manager</tspan></text>
+    <g
+       id="g2867"
+       transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
+       style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75">
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="cccscssc"
+         id="path3874"
+         d="M 157.96931,200.83693 C 195.68133,200.83693 226.84892,201.74266 226.84892,201.74266 C 226.84892,201.74266 264.67261,230.02095 245.09466,392.86816 C 239.45611,424.41127 211.69305,452.41514 177.77033,452.41514 C 143.84738,452.41514 124.35978,432.41027 124.35978,409.07782 C 159.37053,424.87768 185.33022,416.88114 194.38104,413.14131 C 198.72239,411.3483 214.85378,403.80956 214.58004,365.73926 C 213.94457,277.38853 222.57808,258.1971 157.96931,200.83693 z "
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2796);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         inkscape:export-ydpi="57.68"
+         inkscape:export-xdpi="57.68"
+         inkscape:export-filename="/home/alver/Documents/jabrefIkon.png"
+         sodipodi:nodetypes="ccccsc"
+         id="path3876"
+         d="M 255.00983,201.1495 C 346.39949,205.65848 415.05774,279.60734 324.95506,328.62763 C 299.6693,344.58746 362.3433,423.95718 386.64022,459.88743 C 324.57976,439.24633 270.32186,376.11089 274.24748,333.19936 C 276.87135,302.14849 327.63081,304.24915 329.72814,285.1414 C 331.82536,266.03489 296.3799,268.06417 255.00983,201.1495 z "
+         style="fill:#3d3d5f;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient2798);stroke-width:1.99301183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:57.1212616px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Nimbus Sans L"
+       x="462.20135"
+       y="426.2529"
+       id="text2911"
+       sodipodi:linespacing="100%"
+       transform="scale(0.917932,1.089405)"
+       inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+       inkscape:export-xdpi="75"
+       inkscape:export-ydpi="75"><tspan
+         sodipodi:role="line"
+         id="tspan2913"
+         x="462.20135"
+         y="426.2529"
+         style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.5</tspan></text>
+  </g>
+</svg>
index 22b3fcb..e4cd4d7 100644 (file)
   </defs>
   <sodipodi:namedview
      inkscape:window-y="25"
-     inkscape:window-x="0"
-     inkscape:window-height="949"
+     inkscape:window-x="50"
+     inkscape:window-height="768"
      inkscape:window-width="1280"
      inkscape:current-layer="layer1"
      inkscape:document-units="px"
     <rect
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        y="170.36218"
        x="77.500000"
        height="432.00000"
        xlink:href="splashBackground.png"
        x="79"
        y="172.36218"
-       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.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_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/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"
     </flowRoot>    <flowRoot
        inkscape:export-ydpi="75.000000"
        inkscape:export-xdpi="75.000000"
-       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
        style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
        id="flowRoot3076"
    id="rect3080" />
       </flowRegion><flowPara
          id="flowPara1339">This program is distributed under the terms of the General Public License.</flowPara><flowPara
-         id="flowPara1341">Copyright (2003-2008) Morten O. Alver, Nizar Batada and all contributors.</flowPara></flowRoot>    <text
+         id="flowPara1341">Copyright (2003-2009) 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_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        transform="scale(0.853347,1.171856)"
        sodipodi:linespacing="100%"
        id="text2179"
        id="g2867"
        transform="matrix(1.14435,0,0,1.103688,-34.88143,-26.75429)"
        style="fill:#3d3d5f;fill-opacity:1;stroke:url(#radialGradient2889);stroke-width:1.99301183;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75">
       <path
        id="text2911"
        sodipodi:linespacing="100%"
        transform="scale(0.917932,1.089405)"
-       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75"><tspan
          sodipodi:role="line"
        id="flowRoot2745"
        style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
        transform="matrix(0.9688007,-0.2478411,0.2478411,0.9688007,-87.20276,118.59483)"
-       inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
+       inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
        inkscape:export-xdpi="75"
        inkscape:export-ydpi="75"><flowRegion
          id="flowRegion2747"><rect
index 0510373..efc1828 100644 (file)
Binary files a/src/images/splash.png and b/src/images/splash.png differ
diff --git a/src/images/splashBackground.png b/src/images/splashBackground.png
deleted file mode 100644 (file)
index d5a048e..0000000
Binary files a/src/images/splashBackground.png and /dev/null differ
diff --git a/src/images/strings.png b/src/images/strings.png
deleted file mode 100644 (file)
index 649899f..0000000
Binary files a/src/images/strings.png and /dev/null differ
diff --git a/src/images/unmark.png b/src/images/unmark.png
deleted file mode 100644 (file)
index 92ac338..0000000
Binary files a/src/images/unmark.png and /dev/null differ
diff --git a/src/images/user-home.png b/src/images/user-home.png
deleted file mode 100644 (file)
index a3c4765..0000000
Binary files a/src/images/user-home.png and /dev/null differ
diff --git a/src/images/view-refresh.png b/src/images/view-refresh.png
deleted file mode 100644 (file)
index 952b5f7..0000000
Binary files a/src/images/view-refresh.png and /dev/null differ
diff --git a/src/images/viewsource.gif b/src/images/viewsource.gif
deleted file mode 100644 (file)
index 3ef9a2e..0000000
Binary files a/src/images/viewsource.gif and /dev/null differ
diff --git a/src/images/winedt.png b/src/images/winedt.png
deleted file mode 100644 (file)
index cded1a7..0000000
Binary files a/src/images/winedt.png and /dev/null differ
diff --git a/src/images/wizard.png b/src/images/wizard.png
deleted file mode 100644 (file)
index b5d81d3..0000000
Binary files a/src/images/wizard.png and /dev/null differ
diff --git a/src/images/wrongItem.png b/src/images/wrongItem.png
deleted file mode 100644 (file)
index 8b2f1eb..0000000
Binary files a/src/images/wrongItem.png and /dev/null differ
diff --git a/src/images/wwwciteseer.png b/src/images/wwwciteseer.png
deleted file mode 100644 (file)
index 1885445..0000000
Binary files a/src/images/wwwciteseer.png and /dev/null differ
index 3477287..d0465ed 100644 (file)
@@ -123,7 +123,9 @@ public class AuthorList {
 
        private String[] authorsFirstFirst = new String[4], authorsLastOnly = new String[2],
        authorLastFirstAnds = new String[2], 
-       authorsLastFirst = new String[4];
+       authorsLastFirst = new String[4],
+    authorsLastFirstFirstLast = new String[2];
+
 
        // The following variables are used only during parsing
 
@@ -780,6 +782,25 @@ public class AuthorList {
                return authorLastFirstAnds[abbrInt];
        }
 
+       public String getAuthorsLastFirstFirstLastAnds(boolean abbreviate) {
+               int abbrInt = (abbreviate ? 0 : 1);
+               // Check if we've computed this before:
+               if (authorsLastFirstFirstLast[abbrInt] != null)
+                       return authorsLastFirstFirstLast[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).getFirstLast(abbreviate));
+                       }
+               }
+
+               authorsLastFirstFirstLast[abbrInt] = res.toString();
+               return authorsLastFirstFirstLast[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
index 9d3716d..8ed5da6 100644 (file)
@@ -1429,7 +1429,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         try {
             if (!selectedOnly)
                 session = FileActions.saveDatabase(database, metaData, file,
-                                           Globals.prefs, false, false, encoding);
+                                           Globals.prefs, false, false, encoding, false);
             else
                 session = FileActions.savePartOfDatabase(database, metaData, file,
                                                Globals.prefs, mainTable.getSelectedEntries(), encoding);
index 9427774..5adcde6 100644 (file)
@@ -36,15 +36,15 @@ public class ExternalTab extends JPanel implements PrefsTab {
                _frame = frame;
                setLayout(new BorderLayout());
 
-               psDir = new JTextField(30);
-               pdfDir = new JTextField(30);
-        fileDir = new JTextField(30);
-        pdf = new JTextField(30);
-               ps = new JTextField(30);
-               html = new JTextField(30);
+               psDir = new JTextField(25);
+               pdfDir = new JTextField(25);
+        fileDir = new JTextField(25);
+        pdf = new JTextField(25);
+               ps = new JTextField(25);
+               html = new JTextField(25);
                editFileTypes = new JButton(Globals.lang("Manage external file types"));
         runAutoFileSearch = new JCheckBox(Globals.lang("When opening file link, search for matching file if no link is defined"));
-        regExpTextField = new JTextField(30);
+        regExpTextField = new JTextField(25);
         useRegExpComboBox = new JRadioButton(Globals.lang("Use Regular Expression Search"));
                regExpListener = new ItemListener() {
                        public void itemStateChanged(ItemEvent e) {
@@ -63,7 +63,7 @@ public class ExternalTab extends JPanel implements PrefsTab {
         BrowseAction browse;
 
                FormLayout layout = new FormLayout(
-                       "1dlu, 8dlu, left:pref, 4dlu, fill:170dlu, 4dlu, fill:pref","");
+                       "1dlu, 8dlu, left:pref, 4dlu, fill:150dlu, 4dlu, fill:pref","");
 
                DefaultFormBuilder builder = new DefaultFormBuilder(layout);
 
@@ -99,7 +99,7 @@ public class ExternalTab extends JPanel implements PrefsTab {
                builder.append(helpAction.getIconButton());
                builder.nextLine();
         builder.append(new JPanel());
-        builder.append(runAutoFileSearch);
+        builder.append(runAutoFileSearch, 3);
         builder.nextLine();
                builder.appendSeparator(Globals.lang("Legacy file fields"));
                pan = new JPanel();
index 0e1c696..5b86bd7 100644 (file)
@@ -43,7 +43,7 @@ import javax.swing.undo.CannotUndoException;
  * multi-line input.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2864 $ ($Date: 2008-11-25 21:22:56 +0100 (Tue, 25 Nov 2008) $)
+ * @version $Revision: 2955 $ ($Date: 2009-04-21 18:47:52 +0200 (Tue, 21 Apr 2009) $)
  * 
  */
 public class FieldTextArea extends JTextArea implements FieldEditor {
@@ -89,6 +89,8 @@ public class FieldTextArea extends JTextArea implements FieldEditor {
                label = new FieldNameLabel(" " + Util.nCase(fieldName) + " ");
                setBackground(GUIGlobals.validFieldBackground);
 
+        //setFont(new Font("Times", Font.PLAIN, 10));
+
                FieldTextMenu popMenu = new FieldTextMenu(this);
                this.addMouseListener(popMenu);
                label.addMouseListener(popMenu);
index 0b83e34..a61d6e1 100644 (file)
@@ -1,14 +1,10 @@
 package net.sf.jabref;
 
-import java.awt.BorderLayout;
+import java.awt.*;
 
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
+import javax.swing.*;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ChangeEvent;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -22,26 +18,42 @@ public class FileTab extends JPanel implements PrefsTab {
     JabRefPreferences _prefs;
     JabRefFrame _frame;
 
-    private JCheckBox backup, openLast, autoDoubleBraces;
+    private JCheckBox backup, openLast, autoDoubleBraces, autoSave, promptBeforeUsingAutoSave;
     private JRadioButton
         saveOriginalOrder, saveAuthorOrder, saveTableOrder,
+        exportOriginalOrder, exportAuthorOrder, exportTableOrder,
         resolveStringsStandard, resolveStringsAll;
     private JTextField bracesAroundCapitalsFields, nonWrappableFields,
             doNotResolveStringsFor;
+    private JSpinner autoSaveInterval;
+    private boolean origAutoSaveSetting = false;
+    private HelpAction autosaveHelp;
 
     public FileTab(JabRefFrame frame, JabRefPreferences prefs) {
         _prefs = prefs;
         _frame = frame;
 
+        autosaveHelp = new HelpAction(frame.helpDiag, GUIGlobals.autosaveHelp, "Help",
+                GUIGlobals.getIconUrl("helpSmall"));
         openLast = new JCheckBox(Globals.lang("Open last edited databases at startup"));
         backup = new JCheckBox(Globals.lang("Backup old file when saving"));
         saveAuthorOrder = new JRadioButton(Globals.lang("Save ordered by author/editor/year"));
+        exportAuthorOrder = new JRadioButton(Globals.lang("Export ordered by author/editor/year"));
         saveOriginalOrder = new JRadioButton(Globals.lang("Save entries in their original order"));
-        saveTableOrder = new JRadioButton(Globals.lang("Save in default table sort order"));
+        exportOriginalOrder = new JRadioButton(Globals.lang("Export entries in their original order"));
+        saveTableOrder = new JRadioButton(Globals.lang("Save in current table sort order"));
+        exportTableOrder = new JRadioButton(Globals.lang("Export in current table sort order"));
+        autoSave = new JCheckBox(Globals.lang("Autosave"));
+        promptBeforeUsingAutoSave = new JCheckBox(Globals.lang("Prompt before recovering a database from an autosave file"));
+        autoSaveInterval = new JSpinner(new SpinnerNumberModel(1, 1, 60, 1));
         ButtonGroup bg = new ButtonGroup();
         bg.add(saveAuthorOrder);
         bg.add(saveOriginalOrder);
         bg.add(saveTableOrder);
+        bg = new ButtonGroup();
+        bg.add(exportAuthorOrder);
+        bg.add(exportOriginalOrder);
+        bg.add(exportTableOrder);
         resolveStringsAll = new JRadioButton(Globals.lang("Resolve strings for all fields except")+":");
         resolveStringsStandard = new JRadioButton(Globals.lang("Resolve strings for standard BibTeX fields only"));
         bg = new ButtonGroup();
@@ -56,6 +68,13 @@ public class FileTab extends JPanel implements PrefsTab {
                 //+ "Double braces signal that BibTeX should preserve character case.") + "</HTML>");
                 Globals.lang("Remove double braces around BibTeX fields when loading."));
 
+        autoSave.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent changeEvent) {
+                autoSaveInterval.setEnabled(autoSave.isSelected());
+                promptBeforeUsingAutoSave.setEnabled(autoSave.isSelected());
+            }
+        });
+
         FormLayout layout = new FormLayout("left:pref, 4dlu, fill:pref", "");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
 
@@ -81,12 +100,30 @@ public class FileTab extends JPanel implements PrefsTab {
         builder.append(resolveStringsAll);
         builder.append(doNotResolveStringsFor);
         builder.nextLine();
+        builder.appendSeparator(Globals.lang("Autosave"));
+        builder.append(autoSave, 1);
+        JButton hlp = new JButton(autosaveHelp);
+        hlp.setText(null);
+        hlp.setPreferredSize(new Dimension(24, 24));
+        JPanel hPan = new JPanel();
+        hPan.setLayout(new BorderLayout());
+        hPan.add(hlp, BorderLayout.EAST);
+        builder.append(hPan);
+        builder.nextLine();
+        builder.append(Globals.lang("Autosave interval (minutes)")+":");
+        builder.append(autoSaveInterval);
+        builder.nextLine();
+        builder.append(promptBeforeUsingAutoSave);
+        builder.nextLine();
         builder.appendSeparator(Globals.lang("Sort order"));
-        builder.append(saveAuthorOrder, 3);
+        builder.append(saveAuthorOrder, 1);
+        builder.append(exportAuthorOrder, 1);
         builder.nextLine();
-        builder.append(saveTableOrder, 3);
+        builder.append(saveTableOrder, 1);
+        builder.append(exportTableOrder, 1);
         builder.nextLine();
-        builder.append(saveOriginalOrder, 3);
+        builder.append(saveOriginalOrder, 1);
+        builder.append(exportOriginalOrder, 1);
         builder.nextLine();
 
         JPanel pan = builder.getPanel();
@@ -104,6 +141,13 @@ public class FileTab extends JPanel implements PrefsTab {
             saveOriginalOrder.setSelected(true);
         else
             saveTableOrder.setSelected(true);
+        if (_prefs.getBoolean("exportInStandardOrder"))
+            exportAuthorOrder.setSelected(true);
+        else if (_prefs.getBoolean("exportInOriginalOrder"))
+            exportOriginalOrder.setSelected(true);
+        else
+            exportTableOrder.setSelected(true);
+
         //preserveFormatting.setSelected(_prefs.getBoolean("preserveFieldFormatting"));
         autoDoubleBraces.setSelected(_prefs.getBoolean("autoDoubleBraces"));
         resolveStringsAll.setSelected(_prefs.getBoolean("resolveStringsAllFields"));
@@ -112,7 +156,10 @@ public class FileTab extends JPanel implements PrefsTab {
         bracesAroundCapitalsFields.setText(_prefs.get("putBracesAroundCapitals"));
         nonWrappableFields.setText(_prefs.get("nonWrappableFields"));
 
-
+        autoSave.setSelected(_prefs.getBoolean("autoSave"));
+        promptBeforeUsingAutoSave.setSelected(_prefs.getBoolean("promptBeforeUsingAutosave"));
+        autoSaveInterval.setValue(_prefs.getInt("autoSaveInterval"));
+        origAutoSaveSetting = autoSave.isSelected();
     }
 
     public void storeSettings() {
@@ -120,9 +167,14 @@ public class FileTab extends JPanel implements PrefsTab {
         _prefs.putBoolean("openLastEdited", openLast.isSelected());
         _prefs.putBoolean("saveInStandardOrder", saveAuthorOrder.isSelected());
         _prefs.putBoolean("saveInOriginalOrder", saveOriginalOrder.isSelected());
+        _prefs.putBoolean("exportInStandardOrder", exportAuthorOrder.isSelected());
+        _prefs.putBoolean("exportInOriginalOrder", exportOriginalOrder.isSelected());
         _prefs.putBoolean("autoDoubleBraces", autoDoubleBraces.isSelected());
         _prefs.putBoolean("resolveStringsAllFields", resolveStringsAll.isSelected());
         _prefs.put("doNotResolveStringsFor", doNotResolveStringsFor.getText().trim());
+        _prefs.putBoolean("autoSave", autoSave.isSelected());
+        _prefs.putBoolean("promptBeforeUsingAutosave", promptBeforeUsingAutoSave.isSelected());
+        _prefs.putInt("autoSaveInterval", (Integer)autoSaveInterval.getValue());
         doNotResolveStringsFor.setText(_prefs.get("doNotResolveStringsFor"));
         boolean updateSpecialFields = false;
         if (!bracesAroundCapitalsFields.getText().trim().equals(_prefs.get("putBracesAroundCapitals"))) {
@@ -137,6 +189,14 @@ public class FileTab extends JPanel implements PrefsTab {
         if (updateSpecialFields)
                 _prefs.updateSpecialFieldHandling();
 
+        // See if we should start or stop the auto save manager:
+        if (!origAutoSaveSetting && autoSave.isSelected()) {
+            Globals.startAutoSaveManager(_frame);
+        }
+        else if (origAutoSaveSetting && !autoSave.isSelected()) {
+            Globals.stopAutoSaveManager();
+        }
+
     }
 
     public boolean readyToClose() {
index 3b2fa78..830a478 100644 (file)
@@ -161,7 +161,9 @@ public class GUIGlobals {
        regularExpressionSearchHelp = "ExternalFiles.html#RegularExpressionSearch",
        nameFormatterHelp = "CustomExports.html#NameFormatter",
        previewHelp = "PreviewHelp.html",
-        pluginHelp = "Plugin.html";
+    pluginHelp = "Plugin.html",
+    autosaveHelp = "Autosave.html";
+
 
 //     Colors.
        public static Color
index 490abb5..856dae8 100644 (file)
@@ -54,6 +54,7 @@ import net.sf.jabref.imports.ImportFormatReader;
 import net.sf.jabref.journals.JournalAbbreviations;
 import net.sf.jabref.util.ErrorConsole;
 import net.sf.jabref.util.TBuildInfo;
+import net.sf.jabref.export.AutoSaveManager;
 
 public class Globals {
 
@@ -176,7 +177,9 @@ public class Globals {
     }
 
        public static GlobalFocusListener focusListener;
-    
+
+    public static AutoSaveManager autoSaveManager = null;
+
        public static JabRefPreferences prefs = null;
 
        public static HelpDialog helpDiag = null;
@@ -217,8 +220,29 @@ public class Globals {
 
         fileUpdateMonitor = new FileUpdateMonitor();
         fileUpdateMonitor.start();
+
+
     }
 
+    /**
+     * Initialize and start the autosave manager.
+     * @param frame The main frame.
+     */
+    public static void startAutoSaveManager(JabRefFrame frame) {
+        autoSaveManager = new AutoSaveManager(frame);
+        autoSaveManager.startAutoSaveTimer();        
+    }
+
+    /**
+     * Stop the autosave manager if it has been started.
+     */
+    public static void stopAutoSaveManager() {
+        if (autoSaveManager != null) {
+            autoSaveManager.stopAutoSaveTimer();
+            autoSaveManager.clearAutoSaves();
+            autoSaveManager = null;
+        }
+    }
 
        public static void logger(String s) {
                logger.info(s);
index 256b63e..3e8578b 100644 (file)
@@ -34,12 +34,10 @@ import gnu.dtools.ritopt.BooleanOption;
 import gnu.dtools.ritopt.Options;
 import gnu.dtools.ritopt.StringOption;
 import net.sf.jabref.export.*;
-import net.sf.jabref.imports.EntryFetcher;
-import net.sf.jabref.imports.ImportInspectionCommandLine;
-import net.sf.jabref.imports.OpenDatabaseAction;
-import net.sf.jabref.imports.ParserResult;
+import net.sf.jabref.imports.*;
 import net.sf.jabref.plugin.PluginCore;
 import net.sf.jabref.plugin.SidePanePlugin;
+import net.sf.jabref.plugin.PluginInstaller;
 import net.sf.jabref.plugin.core.JabRefPlugin;
 import net.sf.jabref.plugin.core.generated._JabRefPlugin;
 import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
@@ -54,16 +52,17 @@ import java.awt.event.KeyEvent;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.Collection;
+import java.util.*;
 import java.util.List;
-import java.util.Vector;
+
+import spin.Spin;
 
 /**
  * JabRef Main Class - The application gets started here.
  *
  */
 public class JabRef {
-    
+
        public static JabRef singleton;
     public static RemoteListener remoteListener = null;
     public JabRefFrame jrf;
@@ -74,7 +73,9 @@ public class JabRef {
 
     StringOption importFile, exportFile, exportPrefs, importPrefs, auxImExport, importToOpenBase, fetcherEngine;
     BooleanOption helpO, disableGui, blank, loadSess, showVersion, disableSplash;
-    
+
+    public static final int MAX_DIALOG_WARNINGS = 10;
+
     public static void main(String[] args) {
         new JabRef(args);
     }
@@ -89,6 +90,14 @@ public class JabRef {
                System.getProperties().put("proxySet", "true");
 
                JabRefPreferences prefs = JabRefPreferences.getInstance();
+
+        // See if there are plugins scheduled for deletion:
+        if (prefs.hasKey("deletePlugins") && (prefs.get("deletePlugins").length() > 0)) {
+            String[] toDelete = prefs.getStringArray("deletePlugins");
+            PluginInstaller.deletePluginsOnStartup(toDelete);
+            prefs.put("deletePlugins", "");
+        }
+
         Globals.startBackgroundTasks();
                Globals.prefs = prefs;
                Globals.setLanguage(prefs.get("language"), "");
@@ -265,7 +274,7 @@ public class JabRef {
                 boolean bibExtension = leftOver[i].toLowerCase().endsWith("bib");
                 ParserResult pr = null;
                 if (bibExtension)
-                    pr = openBibFile(leftOver[i]);
+                    pr = openBibFile(leftOver[i], false);
 
                 if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
                     // We will try to import this file. Normally we
@@ -280,6 +289,8 @@ public class JabRef {
                         ParserResult res = importToOpenBase(leftOver[i]);
                         if (res != null)
                             loaded.add(res);
+                        else
+                            loaded.add(ParserResult.INVALID_FORMAT);
                     }
                 }
                 else
@@ -325,7 +336,7 @@ public class JabRef {
                             System.out.println(Globals.lang("Saving") + ": " + data[0]);
                             SaveSession session = FileActions.saveDatabase(pr.getDatabase(),
                                 new MetaData(pr.getMetaData(),pr.getDatabase()), new File(data[0]), Globals.prefs,
-                                false, false, Globals.prefs.get("defaultEncoding"));
+                                false, false, Globals.prefs.get("defaultEncoding"), false);
                             // Show just a warning message if encoding didn't work for all characters:
                             if (!session.getWriter().couldEncodeAll())
                                 System.err.println(Globals.lang("Warning")+": "+
@@ -418,7 +429,7 @@ public class JabRef {
                                     + subName);
                                 SaveSession session = FileActions.saveDatabase(newBase, new MetaData(), // no Metadata
                                     new File(subName), Globals.prefs, false, false,
-                                    Globals.prefs.get("defaultEncoding"));
+                                    Globals.prefs.get("defaultEncoding"), false);
                                 // Show just a warning message if encoding didn't work for all characters:
                                 if (!session.getWriter().couldEncodeAll())
                                     System.err.println(Globals.lang("Warning")+": "+
@@ -664,7 +675,7 @@ public class JabRef {
             if (!blank.isInvoked() && Globals.prefs.getBoolean("openLastEdited") && (Globals.prefs.get("lastEdited") != null)) {
                 // How to handle errors in the databases to open?
                 String[] names = Globals.prefs.getStringArray("lastEdited");
-lastEdLoop: 
+                lastEdLoop: 
                 for (int i = 0; i < names.length; i++) {
                     File fileToOpen = new File(names[i]);
 
@@ -676,17 +687,16 @@ lastEdLoop:
                     }
 
                     if (fileToOpen.exists()) {
-                        ParserResult pr = openBibFile(names[i]);
+                        ParserResult pr = openBibFile(names[i], false);
 
                         if (pr != null) {
 
-                           if (pr == ParserResult.INVALID_FORMAT) {
-                               System.out.println(Globals.lang("Error opening file")+" '"+fileToOpen.getPath()+"'");
-                           }
-                           else
-                               loaded.add(pr);
+                            if (pr.isInvalid()) {
+                                System.out.println(Globals.lang("Error opening file")+" '"+fileToOpen.getPath()+"'");
+                            }
+                            loaded.add(pr);
 
-                       }
+                        }
                     }
                 }
             }
@@ -700,12 +710,28 @@ lastEdLoop:
             jrf = new JabRefFrame();
 
             // Add all loaded databases to the frame:
-           boolean first = true;
+            
+               boolean first = true;
+            List<File> postponed = new ArrayList<File>();
+            List<ParserResult> failed = new ArrayList<ParserResult>();
             if (loaded.size() > 0) {
-                for (ParserResult pr : loaded){
-                           jrf.addTab(pr.getDatabase(), pr.getFile(),
-                            pr.getMetaData(), pr.getEncoding(), first);
-                    first = false;
+                for (Iterator<ParserResult> i = loaded.iterator(); i.hasNext();){
+                    ParserResult pr = i.next();
+                    if (pr.isInvalid()) {
+
+                        failed.add(pr);
+                        i.remove();
+                    }
+                    else if (!pr.isPostponedAutosaveFound()) {
+                        jrf.addTab(pr.getDatabase(), pr.getFile(),
+                                pr.getMetaData(), pr.getEncoding(), first);
+                        first = false;
+                    }
+                    else {
+                        i.remove();
+                        postponed.add(pr.getFile());
+
+                    }
                 }
             }
 
@@ -722,6 +748,11 @@ lastEdLoop:
                 +"is an early beta version. Do not use it without backing up your files!"),
                     Globals.lang("Beta version"), JOptionPane.WARNING_MESSAGE);*/
 
+
+            // Start auto save timer:
+            if (Globals.prefs.getBoolean("autoSave"))
+                Globals.startAutoSaveManager(jrf);
+
             //Util.pr(": Showing frame");
             jrf.setVisible(true);
             // If we are set to remember the window location, we also remember the maximised
@@ -736,14 +767,26 @@ lastEdLoop:
             // TEST TEST TEST TEST TEST TEST
             startSidePanePlugins(jrf);
 
+            for (ParserResult pr : failed) {
+                String message = "<html>"+Globals.lang("Error opening file '%0'.", pr.getFile().getName())
+                    +"<p>"+pr.getErrorMessage()+"</html>";
+
+                JOptionPane.showMessageDialog(jrf, message, Globals.lang("Error opening file"),
+                    JOptionPane.ERROR_MESSAGE);
+            }
+
             for (int i = 0; i < loaded.size(); i++) {
                 ParserResult pr = loaded.elementAt(i);
                 if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
                     String[] wrns = pr.warnings();
-                    StringBuffer wrn = new StringBuffer();
-                    for (int j = 0; j<wrns.length; j++)
+                    StringBuilder wrn = new StringBuilder();
+                    for (int j = 0; j<Math.min(MAX_DIALOG_WARNINGS, wrns.length); j++)
                         wrn.append(j + 1).append(". ").append(wrns[j]).append("\n");
-                    if (wrn.length() > 0)
+                    if (wrns.length > MAX_DIALOG_WARNINGS) {
+                        wrn.append("... ");
+                        wrn.append(Globals.lang("%0 warnings", String.valueOf(wrns.length)));
+                    }
+                    else if (wrn.length() > 0)
                         wrn.deleteCharAt(wrn.length() - 1);
                     jrf.showBaseAt(i);
                     JOptionPane.showMessageDialog(jrf, wrn.toString(),
@@ -765,6 +808,13 @@ lastEdLoop:
 
             //Util.pr(": Finished adding panels");
 
+            // If any database loading was postponed due to an autosave, schedule them
+            // for handing now:
+            if (postponed.size() > 0) {
+                AutosaveStartupPrompter asp = new AutosaveStartupPrompter(jrf, postponed);
+                SwingUtilities.invokeLater(asp);
+            }
+
             if (loaded.size() > 0) {
                 jrf.tabbedPane.setSelectedIndex(0);
                 new FocusRequester(((BasePanel) jrf.tabbedPane.getComponentAt(0)).mainTable);
@@ -792,15 +842,31 @@ lastEdLoop:
         }
     }
 
-    public static ParserResult openBibFile(String name) {
+    public static ParserResult openBibFile(String name, boolean ignoreAutosave) {
         System.out.println(Globals.lang("Opening") + ": " + name);
-
+        File file = new File(name);
         try {
-            File file = new File(name);
+
+            if (!ignoreAutosave) {
+                boolean autoSaveFound = AutoSaveManager.newerAutoSaveExists(file);
+                if (autoSaveFound) {
+                    // We have found a newer autosave. Make a note of this, so it can be
+                    // handled after startup:
+                    ParserResult postp = new ParserResult(null, null, null);
+                    postp.setPostponedAutosaveFound(true);
+                    postp.setFile(file);
+                    return postp;
+                }
+            }
             String encoding = Globals.prefs.get("defaultEncoding");
             ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
-            if (pr == null)
-                return ParserResult.INVALID_FORMAT;
+            if (pr == null) {
+                pr = new ParserResult(null, null, null);
+                pr.setFile(file);
+                pr.setInvalid(true);
+                return pr;
+
+            }
             pr.setFile(file);
             if (pr.hasWarnings()) {
                 String[] warn = pr.warnings();
@@ -810,13 +876,13 @@ lastEdLoop:
             }
             return pr;
         } catch (Throwable ex) {
-            //System.err.println(Globals.lang("Error opening file")+" '"+ name+"':
-            // "+ex.getMessage());
-            System.err.println(Globals.lang("Error opening file") + ": "
-                + ex.getMessage());
+            ParserResult pr = new ParserResult(null, null, null);
+            pr.setFile(file);
+            pr.setInvalid(true);
+            pr.setErrorMessage(ex.getMessage());
+            return pr;
         }
 
-        return null;
     }
 
     public static ParserResult importFile(String argument){
index 0f3564e..59304e7 100644 (file)
@@ -51,11 +51,7 @@ import javax.swing.*;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
-import net.sf.jabref.export.ExpandEndnoteFilters;
-import net.sf.jabref.export.ExportCustomizationDialog;
-import net.sf.jabref.export.ExportFormats;
-import net.sf.jabref.export.SaveAllAction;
-import net.sf.jabref.export.SaveDatabaseAction;
+import net.sf.jabref.export.*;
 import net.sf.jabref.external.ExternalFileTypeEditor;
 import net.sf.jabref.external.PushToApplicationButton;
 import net.sf.jabref.groups.EntryTableTransferHandler;
@@ -127,6 +123,7 @@ public class JabRefFrame extends JFrame implements OutputPrinter {
 
     JMenuBar mb = new JMenuBar();
     JMenu pluginMenu = subMenu("Plugins");
+    boolean addedToPluginMenu = false;
 
     GridBagLayout gbl = new GridBagLayout();
 
@@ -339,8 +336,8 @@ public class JabRefFrame extends JFrame implements OutputPrinter {
          Globals.lang("Export to external SQL database"), 
           GUIGlobals.getIconUrl("dbExport") ),
     dbImport = new DbImportAction(this).getAction(),
-    downloadFullText = new GeneralAction("downloadFullText", "Look up full text document",
-            "Follow DOI or URL link and try to locate PDF full text document"),
+    //downloadFullText = new GeneralAction("downloadFullText", "Look up full text document",
+    //        Globals.lang("Follow DOI or URL link and try to locate PDF full text document")),
     increaseFontSize = new IncreaseTableFontSizeAction(),
     decreseFontSize = new DecreaseTableFontSizeAction(),
     installPlugin = new PluginInstallerAction(this);
@@ -694,6 +691,10 @@ public JabRefPreferences prefs() {
       prefs.customImports.store();
       BibtexEntryType.saveCustomEntryTypes(prefs);
 
+      // Clear autosave files:
+      if (Globals.autoSaveManager != null)
+        Globals.autoSaveManager.clearAutoSaves();
+
       // Let the search interface store changes to prefs.
       // But which one? Let's use the one that is visible.
       if (basePanel() != null) {
@@ -1216,7 +1217,7 @@ public JabRefPreferences prefs() {
       tools.add(replaceAll);
       tools.add(new MassSetFieldAction(this));
       tools.add(makeKeyAction);
-      tools.add(downloadFullText);
+      //tools.add(downloadFullText);
       // [kiar] I think we should group these festures
       tools.add(checkAndFix);
       checkAndFix.add(dupliCheck);
@@ -1299,6 +1300,7 @@ public JabRefPreferences prefs() {
       });*/
 
       pluginMenu.add(installPlugin);
+
       //pluginMenu.setEnabled(false);
       mb.add(pluginMenu);
 
@@ -1332,10 +1334,11 @@ public JabRefPreferences prefs() {
 
 
     public void addPluginMenuItem(JMenuItem item) {
-        if (pluginMenu.getComponentCount() == 1)
+        if (!addedToPluginMenu) {
             pluginMenu.addSeparator();
+            addedToPluginMenu = true;
+        }
         pluginMenu.add(item);
-        pluginMenu.setEnabled(true);
     }
 
   private void createToolBar() {
@@ -1681,8 +1684,10 @@ public JabRefPreferences prefs() {
         }
 
         public void close() {
-            basePanel().cleanUp();
-            tabbedPane.remove(basePanel());
+            BasePanel pan = basePanel();
+            pan.cleanUp();
+            AutoSaveManager.deleteAutoSaveFile(pan); // Delete autosave
+            tabbedPane.remove(pan);
             if (tabbedPane.getTabCount() > 0) {
                 markActiveBasePanel();
             }
index 10fed2d..4b51df8 100644 (file)
@@ -208,6 +208,8 @@ public class JabRefPreferences {
         defaults.put("incrementS", Boolean.FALSE);
         defaults.put("saveInStandardOrder", Boolean.TRUE);
         defaults.put("saveInOriginalOrder", Boolean.FALSE);
+        defaults.put("exportInStandardOrder", Boolean.TRUE);
+        defaults.put("exportInOriginalOrder", Boolean.FALSE);
         defaults.put("selectS", Boolean.FALSE);
         defaults.put("regExpSearch", Boolean.TRUE);
         defaults.put("searchPanePosX", new Integer(0));
@@ -380,6 +382,13 @@ public class JabRefPreferences {
         defaults.put("autolinkExactKeyOnly", Boolean.TRUE);
         defaults.put("numericFields", "mittnum;author");
         defaults.put("runAutomaticFileSearch", Boolean.FALSE);
+
+        defaults.put("autoSave", Boolean.TRUE);
+        defaults.put("autoSaveInterval", 5);
+        defaults.put("promptBeforeUsingAutosave", Boolean.TRUE);
+
+        defaults.put("deletePlugins", "");
+        
         //defaults.put("lastAutodetectedImport", "");
 
         //defaults.put("autoRemoveExactDuplicates", Boolean.FALSE);
index c5c0ead..8f1cfa8 100644 (file)
@@ -109,7 +109,6 @@ public class PrefsDialog3 extends JDialog {
                        PrefsTab tab = it.next();
                        names[i++] = tab.getTabName(); 
                        main.add((Component) tab, tab.getTabName());
-            //comps.add((Component)tab); // for debug only
         }
 
                upper.setBorder(BorderFactory.createEtchedBorder());
index bb21552..036099c 100644 (file)
@@ -15,13 +15,14 @@ import javax.swing.event.HyperlinkListener;
 
 import net.sf.jabref.export.layout.Layout;
 import net.sf.jabref.export.layout.LayoutHelper;
+import net.sf.jabref.export.ExportFormats;
 import net.sf.jabref.util.DocumentPrinter;
 
 /**
  * Displays an BibtexEntry using the given layout format.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2734 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
+ * @version $Revision: 2983 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
  *          2007) $)
  * 
  */
@@ -283,6 +284,7 @@ public class PreviewPanel extends JPanel implements VetoableChangeListener {
        public void update() {
 
                StringBuffer sb = new StringBuffer();
+        ExportFormats.entryNumber = 1; // Set entry number in case that is included in the preview layout.
                if (entry != null)
                        sb.append(layout.doLayout(entry, database));
                previewPane.setText(sb.toString());
index b1e7ac5..0ac3f50 100644 (file)
@@ -159,7 +159,8 @@ public class TabLabelPattern extends JPanel implements PrefsTab{
        private void buildGUI(){
 
            JPanel pan = new JPanel();
-           JScrollPane sp = new JScrollPane(pan);      
+           JScrollPane sp = new JScrollPane(pan);
+        sp.setPreferredSize(new Dimension(100,100));
            sp.setBorder(BorderFactory.createEmptyBorder());
            pan.setLayout(gbl);
            setLayout(gbl);         
diff --git a/src/java/net/sf/jabref/export/AutoSaveManager.java b/src/java/net/sf/jabref/export/AutoSaveManager.java
new file mode 100644 (file)
index 0000000..1cc79dc
--- /dev/null
@@ -0,0 +1,130 @@
+package net.sf.jabref.export;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.Globals;
+
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.List;
+import java.util.ArrayList;
+import java.io.File;
+
+/**
+ * Background task and utilities for autosave feature.
+ */
+public class AutoSaveManager {
+    private JabRefFrame frame;
+    private Timer t = null;
+    private TimerTask task = null;
+
+    public AutoSaveManager(JabRefFrame frame) {
+
+        this.frame = frame;
+    }
+
+    public void startAutoSaveTimer() {
+        task = new AutoSaveTask();
+        t = new Timer();
+        long interval = (long)(60000*Globals.prefs.getInt("autoSaveInterval"));
+        t.scheduleAtFixedRate(task, interval, interval);
+    }
+
+    public void stopAutoSaveTimer() {
+        t.cancel();
+    }
+
+    class AutoSaveTask extends TimerTask {
+        public void run() {
+            // Since this method is running in the background, we must be prepared that
+            // there could be changes done by the user while this method is running.
+
+            List<BasePanel> panels = new ArrayList<BasePanel>();
+            for (int i=0; i<frame.baseCount(); i++)
+                panels.add(frame.baseAt(i));
+
+            int i=0;
+            for (BasePanel panel : panels) {
+                if (panel.isBaseChanged()) {
+                    if (panel.getFile() != null) {
+                        autoSave(panel);
+                    }
+                }
+                else {
+                }
+                i++;
+            }
+        }
+    }
+
+    /**
+     * Get a File object pointing to the autosave file corresponding to the given file.
+     * @param f The database file.
+     * @return its corresponding autosave file.
+     */
+    public static File getAutoSaveFile(File f) {
+        String n = f.getName();
+        return new File(f.getParentFile(), ".$"+n+"$");
+    }
+
+    /**
+     * Perform an autosave.
+     * @param panel The BasePanel to autosave for.
+     * @return true if successful, false otherwise.
+     */
+    public static boolean autoSave(BasePanel panel) {
+        File backupFile = getAutoSaveFile(panel.getFile());
+        try {
+            SaveSession ss = FileActions.saveDatabase(panel.database(), panel.metaData(),
+                    backupFile, Globals.prefs,
+                    false, false, panel.getEncoding(), true);
+            ss.commit();
+        } catch (SaveException e) {
+            e.printStackTrace();
+            return false;
+        } catch (Throwable ex) {
+            ex.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Delete this BasePanel's autosave if it exists.
+     * @param panel The BasePanel in question.
+     * @return true if there was no autosave or if the autosave was successfully deleted, false otherwise.
+     */
+    public static boolean deleteAutoSaveFile(BasePanel panel) {
+        if (panel.getFile() == null)
+            return true;
+        File backupFile = getAutoSaveFile(panel.getFile());
+        if (backupFile.exists()) {
+            return backupFile.delete();
+        }
+        else return true;
+    }
+
+    /**
+     * Clean up by deleting the autosave files corresponding to all open files,
+     * if they exist.
+     */
+    public void clearAutoSaves() {
+        List<BasePanel> panels = new ArrayList<BasePanel>();
+        for (int i=0; i<frame.baseCount(); i++)
+            panels.add(frame.baseAt(i));
+        for (BasePanel panel : panels) {
+            deleteAutoSaveFile(panel);
+        }
+    }
+
+    /**
+     * Check if a newer autosave exists for the given file.
+     * @param f The file to check.
+     * @return true if an autosave is found, and if the autosave is newer
+     *   than the given file.
+     */
+    public static boolean newerAutoSaveExists(File f) {
+        File asFile = getAutoSaveFile(f);
+        return asFile.exists() && (asFile.lastModified() > f.lastModified());
+    }
+}
index 07a9cf5..13b89e2 100644 (file)
@@ -12,9 +12,7 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.Reader;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * Base class for export formats based on templates.
@@ -179,14 +177,15 @@ public class ExportFormat implements IExportFormat {
         // Set a global field, so all layouts have access to the custom name formatters: 
         Globals.prefs.customExportNameFormatters = customNameFormatters;
 
-        // Print header
+        ArrayList<String> missingFormatters = new ArrayList<String>(1);
 
-               try {
+        // Print header
+        try {
                        reader = getReader(lfFileName + ".begin.layout");
                        LayoutHelper layoutHelper = new LayoutHelper(reader);
                        beginLayout = layoutHelper
                                .getLayoutFromText(Globals.FORMATTER_PACKAGE);
-                       reader.close();
+            reader.close();
                } catch (IOException ex) {
                        // If an exception was cast, export filter doesn't have a begin
                        // file.
@@ -194,6 +193,7 @@ public class ExportFormat implements IExportFormat {
                // Write the header
                if (beginLayout != null) {
                        ps.write(beginLayout.doLayout(database, encoding));
+            missingFormatters.addAll(beginLayout.getMissingFormatters());
                }
 
                /*
@@ -213,9 +213,16 @@ public class ExportFormat implements IExportFormat {
                Layout defLayout = layoutHelper
                        .getLayoutFromText(Globals.FORMATTER_PACKAGE);
                reader.close();
+        if (defLayout != null) {
+            missingFormatters.addAll(defLayout.getMissingFormatters());
+            System.out.println(defLayout.getMissingFormatters());
+        }
                HashMap<String, Layout> layouts = new HashMap<String, Layout>();
                Layout layout;
+
+        ExportFormats.entryNumber = 0;
                for (BibtexEntry entry : sorted) {
+            ExportFormats.entryNumber++; // Increment entry counter.
                        // Get the layout
                        String type = entry.getType().getName().toLowerCase();
                        if (layouts.containsKey(type))
@@ -229,6 +236,9 @@ public class ExportFormat implements IExportFormat {
                                                .getLayoutFromText(Globals.FORMATTER_PACKAGE);
                                        layouts.put(type, layout);
                                        reader.close();
+                    if (layout != null)
+                        missingFormatters.addAll(layout.getMissingFormatters());
+
                                } catch (IOException ex) {
                                        // The exception indicates that no type-specific layout
                                        // exists, so we
@@ -259,11 +269,23 @@ public class ExportFormat implements IExportFormat {
                // Write footer
                if (endLayout != null) {
                        ps.write(endLayout.doLayout(database, encoding));
+            missingFormatters.addAll(endLayout.getMissingFormatters());
                }
 
         // Clear custom name formatters:
         Globals.prefs.customExportNameFormatters = null;
 
+        if (missingFormatters.size() > 0) {
+            StringBuilder sb = new StringBuilder("The following formatters could not be found").
+                    append(": ");
+            for (Iterator<String> i = missingFormatters.iterator(); i.hasNext();) {
+                sb.append(i.next());
+                if (i.hasNext())
+                    sb.append(", ");
+            }
+            System.err.println(sb.toString());
+        }
+
         finalizeSaveSession(ss);
        }
 
index 2e00969..08d1cce 100644 (file)
@@ -27,7 +27,11 @@ public class ExportFormats {
 
        private static Map<String,IExportFormat> exportFormats = new TreeMap<String,IExportFormat>();
 
+    // Global variable that is used for counting output entries when exporting:
+    public static int entryNumber = 0;
+
     public static void initAllExports() {
+
         exportFormats.clear();
 
         // Initialize Build-In Export Formats
index a8610e8..2d28d2d 100644 (file)
@@ -152,12 +152,14 @@ public class FileActions
      */
     public static SaveSession saveDatabase(BibtexDatabase database,
                MetaData metaData, File file, JabRefPreferences prefs,
-               boolean checkSearch, boolean checkGroup, String encoding)
+               boolean checkSearch, boolean checkGroup, String encoding, boolean suppressBackup)
                throws SaveException {
        
                TreeMap<String, BibtexEntryType> types = new TreeMap<String, BibtexEntryType>();
                
                boolean backup = prefs.getBoolean("backup");
+        if (suppressBackup)
+            backup = false;
 
                SaveSession session;
                BibtexEntry exceptionCause = null;
@@ -447,7 +449,9 @@ public class FileActions
        public static List<BibtexEntry> getSortedEntries(BibtexDatabase database, Set<String> keySet, boolean isSaveOperation) {
         FieldComparatorStack<BibtexEntry> comparatorStack = null;
 
-        if (Globals.prefs.getBoolean("saveInOriginalOrder")) {
+        boolean inOriginalOrder = isSaveOperation ? Globals.prefs.getBoolean("saveInOriginalOrder") :
+            Globals.prefs.getBoolean("exportInOriginalOrder");
+        if (inOriginalOrder) {
             // Sort entries based on their creation order, utilizing the fact
             // that IDs used for entries are increasing, sortable numbers.
             List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
@@ -459,8 +463,9 @@ public class FileActions
             String pri, sec, ter;
             boolean priD, secD, terD = false;
 
-
-            if (!isSaveOperation || !Globals.prefs.getBoolean("saveInStandardOrder")) {
+            boolean inStandardOrder = isSaveOperation ? Globals.prefs.getBoolean("saveInStandardOrder") :
+                Globals.prefs.getBoolean("exportInStandardOrder");
+            if (!inStandardOrder) {
                 // The setting is to save according to the current table order.
                 pri = Globals.prefs.get("priSort");
                 sec = Globals.prefs.get("secSort");
@@ -469,6 +474,7 @@ public class FileActions
                 priD = Globals.prefs.getBoolean("priDescending");
                 secD = Globals.prefs.getBoolean("secDescending");
                 terD = Globals.prefs.getBoolean("terDescending");
+
             } else {
                 // The setting is to save in standard order: author, editor, year
                 pri = "author";
@@ -478,7 +484,7 @@ public class FileActions
                 secD = false;
                 terD = true;
             }
-
+            
             List<Comparator<BibtexEntry>> comparators = new ArrayList<Comparator<BibtexEntry>>();
             if (isSaveOperation)
                 comparators.add(new CrossRefEntryComparator());
index 762c0f6..a14cdcd 100644 (file)
@@ -153,6 +153,11 @@ public class SaveDatabaseAction extends AbstractWorker {
             panel.setSaving(false);
             if (success) {
                 panel.undoManager.markUnchanged();
+
+                if (!AutoSaveManager.deleteAutoSaveFile(panel)) {
+                    System.out.println("Deletion of autosave file failed");
+                } else
+                    System.out.println("Deleted autosave file (if it existed)");
                 // (Only) after a successful save the following
                 // statement marks that the base is unchanged
                 // since last save:
@@ -171,7 +176,7 @@ public class SaveDatabaseAction extends AbstractWorker {
         try {
             if (!selectedOnly)
                 session = FileActions.saveDatabase(panel.database(), panel.metaData(), file,
-                        Globals.prefs, false, false, encoding);
+                        Globals.prefs, false, false, encoding, false);
             else
                 session = FileActions.savePartOfDatabase(panel.database(), panel.metaData(), file,
                         Globals.prefs, panel.getSelectedEntries(), encoding);
index ed24ca7..3e262f1 100755 (executable)
@@ -26,6 +26,8 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref.export.layout;
 
 import java.util.Vector;
+import java.util.ArrayList;
+import java.util.Collections;
 
 import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.BibtexEntry;
@@ -36,7 +38,7 @@ import wsi.ra.types.StringInt;
  * Main class for formatting DOCUMENT ME!
  *
  * @author $author$
- * @version $Revision: 2488 $
+ * @version $Revision: 3018 $
  */
 public class Layout
 {
@@ -44,6 +46,8 @@ public class Layout
 
     private LayoutEntry[] layoutEntries;
 
+    private ArrayList<String> missingFormatters = new ArrayList<String>();
+
     //~ Constructors ///////////////////////////////////////////////////////////
 
     public Layout(Vector<StringInt> parsedEntries, String classPrefix)  throws Exception
@@ -129,6 +133,10 @@ public class Layout
         for (int i = 0; i < tmpEntries.size(); i++)
         {
             layoutEntries[i] = tmpEntries.get(i);
+            // Note if one of the entries has an invalid formatter:
+            if (layoutEntries[i].isInvalidFormatter()) {
+                missingFormatters.addAll(layoutEntries[i].getInvalidFormatters());
+            }
 
             //System.out.println(layoutEntries[i].text);
         }
@@ -209,6 +217,10 @@ public class Layout
         return sb.toString();
     }
     // added section - end (arudert)
+
+    public ArrayList<String> getMissingFormatters() {
+        return missingFormatters;
+    }
 }
 ///////////////////////////////////////////////////////////////////////////////
 //  END OF FILE.
index 0ae8050..78db159 100755 (executable)
@@ -32,6 +32,7 @@ import java.util.Vector;
 
 import net.sf.jabref.*;
 import net.sf.jabref.export.layout.format.plugin.NameFormat;
+import net.sf.jabref.export.layout.format.NotFoundFormatter;
 import net.sf.jabref.plugin.PluginCore;
 import net.sf.jabref.plugin.core.JabRefPlugin;
 import net.sf.jabref.plugin.core.generated._JabRefPlugin.LayoutFormatterExtension;
@@ -42,7 +43,7 @@ import wsi.ra.types.StringInt;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision: 2864 $
+ * @version $Revision: 3018 $
  */
 public class LayoutEntry {
        // ~ Instance fields
@@ -58,6 +59,8 @@ public class LayoutEntry {
 
        private String classPrefix;
 
+    private ArrayList<String> invalidFormatter = null;
+
        // ~ Constructors
        // ///////////////////////////////////////////////////////////
 
@@ -81,6 +84,17 @@ public class LayoutEntry {
                                text = v.get(0).trim();
 
                                option = getOptionalLayout(v.get(1), classPrefix);
+                // See if there was an undefined formatter:
+                for (int i = 0; i < option.length; i++) {
+                    if (option[i] instanceof NotFoundFormatter) {
+                        String notFound = ((NotFoundFormatter)option[i]).getNotFound();
+                        
+                        if (invalidFormatter == null)
+                            invalidFormatter = new ArrayList<String>();
+                        invalidFormatter.add(notFound);
+                    }
+                }
+
                        }
                }
        }
@@ -146,8 +160,15 @@ public class LayoutEntry {
                for (int i = 0; i < tmpEntries.size(); i++) {
                        layoutEntries[i] = tmpEntries.get(i);
 
-                       // System.out.println(layoutEntries[i].text);
-               }
+            // Note if one of the entries has an invalid formatter:
+            if (layoutEntries[i].isInvalidFormatter()) {
+                if (invalidFormatter == null)
+                    invalidFormatter = new ArrayList<String>(1);
+                invalidFormatter.addAll(layoutEntries[i].getInvalidFormatters());
+            }
+
+        }
+               
        }
 
        public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
@@ -159,8 +180,19 @@ public class LayoutEntry {
                        return BibtexDatabase.getResolvedField(text, bibtex, database);
                case LayoutHelper.IS_FIELD_START:
                case LayoutHelper.IS_GROUP_START: {
-                       String field = BibtexDatabase.getResolvedField(text, bibtex, database);
-
+            String field;
+            if (type == LayoutHelper.IS_GROUP_START)
+                field = BibtexDatabase.getResolvedField(text, bibtex, database);
+            else {
+                String[] parts = text.split(";");
+                field = null;
+                for (int i = 0; i < parts.length; i++) {
+                    field = BibtexDatabase.getResolvedField(parts[i], bibtex, database);
+                    if (field == null)
+                        break;
+                }
+            }
+                       
                        if ((field == null)
                                || ((type == LayoutHelper.IS_GROUP_START) && (field.equalsIgnoreCase(LayoutHelper
                                        .getCurrentGroup())))) {
@@ -296,8 +328,7 @@ public class LayoutEntry {
        public static LayoutFormatter getLayoutFormatterFromPlugins(String formatterName){
                if (pluginLayoutFormatter == null){
                        pluginLayoutFormatter = new HashMap<String, LayoutFormatter>();
-            System.out.println("Loading from plugin: "+formatterName);
-                       JabRefPlugin plugin = JabRefPlugin.getInstance(PluginCore.getManager());
+            JabRefPlugin plugin = JabRefPlugin.getInstance(PluginCore.getManager());
                        if (plugin != null){
                                for (LayoutFormatterExtension e : plugin.getLayoutFormatterExtensions()){
                                        LayoutFormatter formatter = e.getLayoutFormatter();
@@ -418,11 +449,20 @@ public class LayoutEntry {
                        }
 
                        // If not found throw exception...
-                       throw new Exception(Globals.lang("Formatter not found") + ": "
-                                       + className);
+            //return new LayoutFormatter[] {new NotFoundFormatter(className)};
+            results.add(new NotFoundFormatter(className));
+                       //throw new Exception(Globals.lang("Formatter not found") + ": "+ className);
                }
 
                return results.toArray(new LayoutFormatter[] {});
        }
 
+
+    public boolean isInvalidFormatter() {
+        return invalidFormatter != null;
+    }
+
+    public ArrayList<String> getInvalidFormatters() {
+        return invalidFormatter;
+    }
 }
\ No newline at end of file
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java b/src/java/net/sf/jabref/export/layout/format/AuthorLF_FF.java
new file mode 100644 (file)
index 0000000..b1668a1
--- /dev/null
@@ -0,0 +1,16 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.AuthorList;
+
+/**
+ *
+ */
+public class AuthorLF_FF implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+
+        return al.getAuthorsLastFirstFirstLastAnds(false);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java b/src/java/net/sf/jabref/export/layout/format/AuthorLF_FFAbbr.java
new file mode 100644 (file)
index 0000000..80c6ca2
--- /dev/null
@@ -0,0 +1,16 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.AuthorList;
+import net.sf.jabref.export.layout.LayoutFormatter;
+
+/**
+ *
+ */
+public class AuthorLF_FFAbbr implements LayoutFormatter {
+
+    public String format(String fieldText) {
+        AuthorList al = AuthorList.getAuthorList(fieldText);
+
+        return al.getAuthorsLastFirstFirstLastAnds(true);
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java b/src/java/net/sf/jabref/export/layout/format/NotFoundFormatter.java
new file mode 100644 (file)
index 0000000..2ac510b
--- /dev/null
@@ -0,0 +1,25 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.Globals;
+
+/**
+ * Formatter used to signal that a formatter hasn't been found. This can be
+ * used for graceful degradation if a layout uses an undefined format.
+ */
+public class NotFoundFormatter implements LayoutFormatter {
+    private String notFound;
+
+    public NotFoundFormatter(String notFound) {
+
+        this.notFound = notFound;
+    }
+
+    public String getNotFound() {
+        return notFound;
+    }
+
+    public String format(String fieldText) {
+        return "["+Globals.lang("Formatter not found: %0", notFound)+"] "+fieldText;
+    }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/Number.java b/src/java/net/sf/jabref/export/layout/format/Number.java
new file mode 100644 (file)
index 0000000..4556e61
--- /dev/null
@@ -0,0 +1,18 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+import net.sf.jabref.export.ExportFormats;
+
+/**
+ * Formatter that outputs a sequence number for the current entry. The sequence number is
+ * tied to the entry's position in the order, not to the number of calls to this formatter.
+ */
+public class Number implements ParamLayoutFormatter {
+    public void setArgument(String arg) {
+        // No effect currently.
+    }
+
+    public String format(String fieldText) {
+        return String.valueOf(ExportFormats.entryNumber);
+    }
+}
index 4da59d6..fc6a2a5 100644 (file)
@@ -11,14 +11,14 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  * must exist).
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2484 $ ($Date: 2007-11-13 18:57:36 +0100 (Tue, 13 Nov 2007) $)
+ * @version $Revision: 2973 $ ($Date: 2009-04-29 22:09:09 +0200 (Wed, 29 Apr 2009) $)
  */
 public class ResolvePDF implements LayoutFormatter {
 
        public String format(String field) {
 
         // Search in the standard PDF directory:
-        /* TODO: oops, this part is not sufficient. We need access to the
+        /* Oops, this part is not sufficient. We need access to the
           database's metadata in order to check if the database overrides
           the standard file directory */
         String dir = Globals.prefs.get("pdfDirectory");
index d13a380..40319c3 100644 (file)
@@ -21,7 +21,7 @@ public class FindFullTextAction extends AbstractWorker {
     }
 
     public void init() throws Throwable {
-        basePanel.output("Looking for full text document...");
+        basePanel.output(Globals.lang("Looking for full text document..."));
     }
 
     public void run() {
diff --git a/src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java b/src/java/net/sf/jabref/imports/AutosaveStartupPrompter.java
new file mode 100644 (file)
index 0000000..893a57a
--- /dev/null
@@ -0,0 +1,108 @@
+package net.sf.jabref.imports;
+
+import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.Globals;
+import net.sf.jabref.JabRef;
+import net.sf.jabref.export.AutoSaveManager;
+
+import javax.swing.*;
+import java.io.File;
+import java.util.*;
+import net.sf.jabref.BasePanel;
+
+/**
+ * Runnable task that prompts the user for what to do about files loaded at startup,
+ * where an autosave file was found. The task should be run on the EDT after startup.
+ */
+public class AutosaveStartupPrompter implements Runnable {
+    private JabRefFrame frame;
+    private List<File> files;
+
+    public AutosaveStartupPrompter(JabRefFrame frame, List<File> files) {
+
+        this.frame = frame;
+        this.files = files;
+    }
+
+    public void run() {
+        boolean first = frame.baseCount() == 0;
+        List<ParserResult> loaded = new ArrayList<ParserResult>();
+        Map<ParserResult,Integer> location = new HashMap<ParserResult, Integer>();
+        for (File file : files) {
+            File fileToLoad = file;
+            boolean tryingAutosave = false;
+            if (Globals.prefs.getBoolean("promptBeforeUsingAutosave")) {
+                int answer = JOptionPane.showConfirmDialog(null,"<html>"+
+                    Globals.lang("An autosave file was found for this database. This could indicate "
+                        +"that JabRef didn't shut down cleanly last time the file was used.")+"<br>"
+                    +Globals.lang("Do you want to recover the database from the autosave file?")+"</html>",
+                    Globals.lang("Autosave of file '%0'", file.getName()), JOptionPane.YES_NO_OPTION);
+                tryingAutosave = answer == JOptionPane.YES_OPTION;
+            } else
+                tryingAutosave = true;
+
+            if (tryingAutosave) {
+                fileToLoad = AutoSaveManager.getAutoSaveFile(file);
+            }
+            boolean done = false;
+            ParserResult pr = null;
+            while (!done) {
+                pr = JabRef.openBibFile(fileToLoad.getPath(), true);
+                if ((pr != null) && !pr.isInvalid()) {
+                    loaded.add(pr);
+                    BasePanel panel = frame.addTab(pr.getDatabase(), file,
+                                    pr.getMetaData(), pr.getEncoding(), first);
+                    location.put(pr, frame.baseCount()-1);
+                    if (tryingAutosave)
+                        panel.markNonUndoableBaseChanged();
+                    
+                    first = false;
+                    done = true;
+                } else {
+                    if (tryingAutosave) {
+                        JOptionPane.showMessageDialog(frame,
+                            Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName()),
+                            Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
+                        tryingAutosave = false;
+                        fileToLoad = file;
+                    } else {
+                        String message;
+                        if (pr != null) {
+                            message = "<html>"+pr.getErrorMessage()+"<p>"+
+                            Globals.lang("Error opening file '%0'.", file.getName())+"</html>";
+                        }
+                        else {
+                            message = Globals.lang("Error opening file '%0'.", file.getName());
+                        }
+                        JOptionPane.showMessageDialog(frame,
+                            message, Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
+                        done = true;
+                    }
+
+                }
+            }
+
+            if ((pr != null) && !pr.isInvalid()) {
+                if (Globals.prefs.getBoolean("displayKeyWarningDialogAtStartup") && pr.hasWarnings()) {
+                    String[] wrns = pr.warnings();
+                    StringBuffer wrn = new StringBuffer();
+                    for (int j = 0; j<wrns.length; j++)
+                        wrn.append(j + 1).append(". ").append(wrns[j]).append("\n");
+                    if (wrn.length() > 0)
+                        wrn.deleteCharAt(wrn.length() - 1);
+                    frame.showBaseAt(location.get(pr));
+                    JOptionPane.showMessageDialog(frame, wrn.toString(),
+                        Globals.lang("Warnings"),
+                        JOptionPane.WARNING_MESSAGE);
+                }
+            }
+        }
+        
+        /*for (int i = 0; i < loaded.size(); i++) {
+            ParserResult pr = loaded.get(i);
+            
+        }*/
+
+
+    }
+}
index 8ed9a8d..f6a2698 100644 (file)
@@ -306,7 +306,7 @@ public class IEEEXploreFetcher implements EntryFetcher {
        }
        // clean up month
        String month = (String)entry.getField("month");
-       if (!month.isEmpty()) {
+       if ((month != null) && (month.length() > 0)) {
                month = month.replaceAll("\\.", "");
                month = month.toLowerCase();
 
@@ -314,17 +314,17 @@ public class IEEEXploreFetcher implements EntryFetcher {
                Matcher mm = monthPattern.matcher(month);
                String date = month;
                if (mm.find()) {
-                       if (mm.group(3).isEmpty()) {
-                               if (!mm.group(2).isEmpty()) {
+                       if (mm.group(3).length() == 0) {
+                               if (mm.group(2).length() > 0) {
                                        date = "#" + mm.group(2).substring(0, 3) + "#";
-                                       if (!mm.group(1).isEmpty()) {
+                                       if (mm.group(1).length() > 0) {
                                                date += " " + mm.group(1) + ",";
                                        }
                                } else {
                                        date = mm.group(1) + ",";
                                }
-                       } else if (mm.group(2).isEmpty()) {
-                               if (!mm.group(4).isEmpty()) {
+                       } else if (mm.group(2).length() == 0) {
+                               if (mm.group(4).length() > 0) {
                                        date = "#" + mm.group(4).substring(0, 3) + "# " + mm.group(1) + "--" + mm.group(3) + ",";
                                } else
                                        date += ",";
@@ -573,7 +573,7 @@ public class IEEEXploreFetcher implements EntryFetcher {
                     String month = convertHTMLChars(ms4.group(1)).replaceAll("-", "--");
                     // Year
                     String year = ms4.group(2);
-                       if (!year.isEmpty()) {
+                       if (year.length() > 0) {
                                month = month.replaceAll(year, "");
                                entry.setField("year", year);
                        }
index 76c2db4..02940f8 100644 (file)
@@ -20,6 +20,7 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.MnemonicAwareAction;
 import net.sf.jabref.Util;
+import net.sf.jabref.export.AutoSaveManager;
 import net.sf.jabref.gui.FileDialogs;
 import net.sf.jabref.external.FileLinksUpgradeWarning;
 
@@ -142,40 +143,79 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
 
     public void openIt(File file, boolean raisePanel) {
         if ((file != null) && (file.exists())) {
+            File fileToLoad = file;
             frame.output(Globals.lang("Opening") + ": '" + file.getPath() + "'");
-            try {
+            boolean tryingAutosave = false;
+            boolean autoSaveFound = AutoSaveManager.newerAutoSaveExists(file);
+            if (autoSaveFound && !Globals.prefs.getBoolean("promptBeforeUsingAutosave")) {
+                // We have found a newer autosave, and the preferences say we should load
+                // it without prompting, so we replace the fileToLoad:
+                fileToLoad = AutoSaveManager.getAutoSaveFile(file);
+                tryingAutosave = true;
+            } else if (autoSaveFound) {
+                // We have found a newer autosave, but we are not allowed to use it without
+                // prompting.
+                int answer = JOptionPane.showConfirmDialog(null,"<html>"+
+                        Globals.lang("An autosave file was found for this database. This could indicate "
+                            +"that JabRef didn't shut down cleanly last time the file was used.")+"<br>"
+                        +Globals.lang("Do you want to recover the database from the autosave file?")+"</html>",
+                        Globals.lang("Recover from autosave"), JOptionPane.YES_NO_OPTION);
+                if (answer == JOptionPane.YES_OPTION) {
+                    fileToLoad = AutoSaveManager.getAutoSaveFile(file);
+                    tryingAutosave = true;
+                }
+            }
+
+            boolean done = false;
+            while (!done) {
                 String fileName = file.getPath();
                 Globals.prefs.put("workingDirectory", file.getPath());
                 // Should this be done _after_ we know it was successfully opened?
                 String encoding = Globals.prefs.get("defaultEncoding");
-                final ParserResult pr = loadDatabase(file, encoding);
-
+                ParserResult pr;
+                String errorMessage = null;
+                try {
+                    pr = loadDatabase(fileToLoad, encoding);
+                } catch (Exception ex) {
+                    //ex.printStackTrace();
+                    errorMessage = ex.getMessage();
+                    pr = null;
+                }
                 if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
-                    JOptionPane.showMessageDialog(null, Globals.lang("Error opening file" + " '" + fileName + "'"),
-                            Globals.lang("Error"),
-                            JOptionPane.ERROR_MESSAGE);
+                    //Util.showQuickErrorDialog(frame, Globals.lang("Open database"), exception);
 
-                    return;
-                }
+                    String message = "<html>"+errorMessage+"<p>"+
+                            (tryingAutosave ? Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName())
+                            : ""/*Globals.lang("Error opening file '%0'.", file.getName())*/)+"</html>";
+                    JOptionPane.showMessageDialog(null, message, Globals.lang("Error opening file"), JOptionPane.ERROR_MESSAGE);
+
+                    if (tryingAutosave) {
+                        tryingAutosave = false;
+                        fileToLoad = file;
+                    }
+                    else
+                        done = true;
+                    continue;
+                } else done = true;
 
                 final BasePanel panel = addNewDatabase(pr, file, raisePanel);
-                
+                if (tryingAutosave)
+                    panel.markNonUndoableBaseChanged();
+
                 // After adding the database, go through our list and see if
                 // any post open actions need to be done. For instance, checking
                 // if we found new entry types that can be imported, or checking
                 // if the database contents should be modified due to new features
                 // in this version of JabRef:
+                final ParserResult prf = pr;
                 SwingUtilities.invokeLater(new Runnable() {
                     public void run() {
-                        performPostOpenActions(panel, pr, true);
+                        performPostOpenActions(panel, prf, true);
                     }
                 });
-
-
-            } catch (Exception ex) {
-                //ex.printStackTrace();
-                Util.showQuickErrorDialog(frame, Globals.lang("Open database"), ex);
             }
+
+            
         }
     }
 
index 3eaa97a..513f8b8 100644 (file)
@@ -40,10 +40,15 @@ public class ParserResult {
     private BibtexDatabase base;
     private HashMap<String, String> metaData;
     private HashMap<String, BibtexEntryType> entryTypes;
+
+
     private File file = null;
     private ArrayList<String> warnings = new ArrayList<String>();
+    private String errorMessage = null;
     private String encoding = null; // Which encoding was used?
 
+    private boolean postponedAutosaveFound = false;
+    private boolean invalid = false;
 
     private String jabrefVersion = null; // Which JabRef version wrote the file, if any?
     private int jabrefMajorVersion = 0, jabrefMinorVersion = 0; // Numeric version representation
@@ -163,4 +168,27 @@ public class ParserResult {
       return s;
     }
 
+    public boolean isPostponedAutosaveFound() {
+        return postponedAutosaveFound;
+    }
+
+    public void setPostponedAutosaveFound(boolean postponedAutosaveFound) {
+        this.postponedAutosaveFound = postponedAutosaveFound;
+    }
+
+    public boolean isInvalid() {
+        return invalid;
+    }
+
+    public void setInvalid(boolean invalid) {
+        this.invalid = invalid;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public void setErrorMessage(String errorMessage) {
+        this.errorMessage = errorMessage;
+    }
 }
index 3838267..4f7fc6f 100644 (file)
@@ -151,8 +151,14 @@ public class RisImporter extends ImportFormat {
                         hm.put("issn", val);
             else if (lab.equals("VL")) hm.put("volume", val);
             else if (lab.equals("IS")) hm.put("number", val);
-            else if (lab.equals("N2") || lab.equals("AB")) hm
-                                       .put("abstract", val);
+            else if (lab.equals("N2") || lab.equals("AB")) {
+                String oldAb = hm.get("abstract");
+                if (oldAb == null)
+                    hm.put("abstract", val);
+                else
+                    hm.put("abstract", oldAb+"\n"+val);
+            }
+
             else if (lab.equals("UR")) hm.put("url", val);
             else if ((lab.equals("Y1") || lab.equals("PY")) && val.length() >= 4) {
                         String[] parts = val.split("/");
index 542ae24..c314af0 100644 (file)
@@ -62,6 +62,9 @@ public class ScifinderImporter extends ImportFormat {
     StringBuffer sb = new StringBuffer();
     BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
     String str;
+    String number = "";
+    String country = "";
+    String kindcode = "";
     while ((str = in.readLine()) != null){
         sb.append(str);
     }
@@ -80,20 +83,29 @@ public class ScifinderImporter extends ImportFormat {
             if (tmp.length > 1){//==2
             if (tmp[0].equals("Author")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
             else if (tmp[0].equals("Title")) hm.put("title", tmp[1]);
-
             else if (tmp[0].equals("Journal Title")) hm.put("journal", tmp[1]);
 
+
             else if (tmp[0].equals("Volume")) hm.put("volume", tmp[1]);
             else if (tmp[0].equals("Page")) hm.put("pages", tmp[1]);
             else if (tmp[0].equals("Publication Year")) hm.put("year", tmp[1]);
             else if (tmp[0].equals("Abstract")) hm.put("abstract", tmp[1]);
             else if (tmp[0].equals("Supplementary Terms")) hm.put("keywords",
                                           tmp[1]);
+            else if (tmp[0].equals("Inventor Name")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
+            else if (tmp[0].equals("Patent Assignee")) hm.put("institution", tmp[1]);
+            else if (tmp[0].equals("Patent Kind Code")) kindcode = " " + tmp[1];
+            else if (tmp[0].equals("Patent Country")) country = tmp[1] + " ";
+            else if (tmp[0].equals("Patent Number")) number = tmp[1];
+            else if (tmp[0].equals("Priority Application Date")) hm.put("number", country + number + kindcode);
+
             else if (tmp[0].equals("Document Type")) {
                                 if (tmp[1].startsWith("Journal") || tmp[1].startsWith("Review"))
                                     Type = "article";
                                 else if (tmp[1].equals("Dissertation"))
                                     Type = "phdthesis";
+                                else if (tmp[1].equals("Patent"))
+                                    Type = "patent";
                                 else
                                     Type = tmp[1];
                         }
@@ -111,4 +123,3 @@ public class ScifinderImporter extends ImportFormat {
     }
 }
 
-
index 2ae9e56..75e4d96 100644 (file)
@@ -420,8 +420,9 @@ public class MSBibEntry {
 
                if (bibtex.getField("author") != null)
                        authors = getAuthors(bibtex.getField("author").toString());
-               
-               
+        if (bibtex.getField("editor") != null)
+            editors = getAuthors(bibtex.getField("editor").toString());
+        
                if(FORMATXML)
                {
                        title = format(title);
@@ -519,7 +520,7 @@ public class MSBibEntry {
                interviewers = getSpecificAuthors("Interviewer",authorsElem,_bcol);
                interviewees = getSpecificAuthors("Interviewee",authorsElem,_bcol);
                inventors = getSpecificAuthors("Inventor",authorsElem,_bcol);
-               counsels = getSpecificAuthors("Counsel",authorsElem,_bcol);             
+               counsels = getSpecificAuthors("Counsel",authorsElem,_bcol);
        }
 
        protected List<PersonName> getAuthors(String authors) {
diff --git a/src/java/net/sf/jabref/net/Cookie.java b/src/java/net/sf/jabref/net/Cookie.java
new file mode 100644 (file)
index 0000000..66341e0
--- /dev/null
@@ -0,0 +1,125 @@
+package net.sf.jabref.net;
+
+import java.net.*;
+import java.text.*;
+import java.util.*;
+
+public class Cookie {
+
+  String name;
+  String value;
+  URI uri;
+  String domain;
+  Date expires;
+  String path;
+
+  private static DateFormat expiresFormat1
+     = new SimpleDateFormat("E, dd MMM yyyy k:m:s 'GMT'", Locale.US);
+
+  private static DateFormat expiresFormat2
+     = new SimpleDateFormat("E, dd-MMM-yyyy k:m:s 'GMT'", Locale.US);
+
+
+  /**
+   * Construct a cookie from the URI and header fields
+   *
+   * @param uri URI for cookie
+   * @param header Set of attributes in header
+   */
+  public Cookie(URI uri, String header) {
+    String attributes[] = header.split(";");
+    String nameValue = attributes[0].trim();
+    this.uri = uri;
+    this.name =
+      nameValue.substring(0, nameValue.indexOf('='));
+    this.value =
+      nameValue.substring(nameValue.indexOf('=')+1);
+    this.path = "/";
+    this.domain = uri.getHost();
+
+    for (int i=1; i < attributes.length; i++) {
+      nameValue = attributes[i].trim();
+      int equals = nameValue.indexOf('=');
+      if (equals == -1) {
+        continue;
+      }
+      String name = nameValue.substring(0, equals);
+      String value = nameValue.substring(equals+1);
+      if (name.equalsIgnoreCase("domain")) {
+        String uriDomain = uri.getHost();
+        if (uriDomain.equals(value)) {
+          this.domain = value;
+        } else {
+          if (!value.startsWith(".")) {
+            value = "." + value;
+          }
+          uriDomain = uriDomain.substring(
+            uriDomain.indexOf('.'));
+          if (!uriDomain.equals(value)) {
+            throw new IllegalArgumentException(
+              "Trying to set foreign cookie");
+          }
+          this.domain = value;
+        }
+      } else if (name.equalsIgnoreCase("path")) {
+        this.path = value;
+      } else if (name.equalsIgnoreCase("expires")) {
+        try {
+          this.expires = expiresFormat1.parse(value);
+        } catch (ParseException e) {
+          try {
+            this.expires = expiresFormat2.parse(value);
+          } catch (ParseException e2) {
+            throw new IllegalArgumentException(
+              "Bad date format in header: " + value);
+          }
+        }
+      }
+    }
+  }
+
+  public boolean hasExpired() {
+    if (expires == null) {
+      return false;
+    }
+    Date now = new Date();
+    return now.after(expires);
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public URI getURI() {
+    return uri;
+  }
+
+  /**
+   * Check if cookie isn't expired and if URI matches,
+   * should cookie be included in response.
+   *
+   * @param uri URI to check against
+   * @return true if match, false otherwise
+   */
+  public boolean matches(URI uri) {
+
+    if (hasExpired()) {
+      return false;
+    }
+
+   String path = uri.getPath();
+    if (path == null) {
+      path = "/";
+    }
+
+    return path.startsWith(this.path);
+  }
+
+  public String toString() {
+    StringBuilder result = new StringBuilder(name);
+    result.append("=");
+    result.append(value);
+    return result.toString();
+  }
+}
+
diff --git a/src/java/net/sf/jabref/net/CookieHandlerImpl.java b/src/java/net/sf/jabref/net/CookieHandlerImpl.java
new file mode 100644 (file)
index 0000000..63e4c9d
--- /dev/null
@@ -0,0 +1,99 @@
+package net.sf.jabref.net;
+
+import java.net.CookieHandler;
+import java.net.URI;
+import java.util.*;
+import java.io.IOException;
+
+/**
+ * 
+ */
+public class CookieHandlerImpl extends CookieHandler {
+
+    // "Long" term storage for cookies, not serialized so only
+    // for current JVM instance
+    private List<Cookie> cache = new LinkedList<Cookie>();
+
+    /**
+     * Saves all applicable cookies present in the response
+     * headers into cache.
+     *
+     * @param uri             URI source of cookies
+     * @param responseHeaders Immutable map from field names to
+     *                        lists of field
+     *                        values representing the response header fields returned
+     */
+
+    public void put(
+            URI uri,
+            Map<String, List<String>> responseHeaders)
+            throws IOException {
+
+        List<String> setCookieList =
+                responseHeaders.get("Set-Cookie");
+        if (setCookieList != null) {
+            for (String item : setCookieList) {
+                Cookie cookie = new Cookie(uri, item);
+                // Remove cookie if it already exists
+                // New one will replace
+                for (Cookie existingCookie : cache) {
+                    if ((cookie.getURI().equals(
+                            existingCookie.getURI())) &&
+                            (cookie.getName().equals(
+                                    existingCookie.getName()))) {
+                        cache.remove(existingCookie);
+                        break;
+                    }
+                }
+                cache.add(cookie);
+            }
+        }
+    }
+
+    /**
+     * Gets all the applicable cookies from a cookie cache for
+     * the specified uri in the request header.
+     *
+     * @param uri            URI to send cookies to in a request
+     * @param requestHeaders Map from request header field names
+     *                       to lists of field values representing the current request
+     *                       headers
+     * @return Immutable map, with field name "Cookie" to a list
+     *         of cookies
+     */
+
+    public Map<String, List<String>> get(
+            URI uri,
+            Map<String, List<String>> requestHeaders)
+            throws IOException {
+
+        // Retrieve all the cookies for matching URI
+        // Put in comma-separated list
+        StringBuilder cookies = new StringBuilder();
+        for (Cookie cookie : cache) {
+            // Remove cookies that have expired
+            if (cookie.hasExpired()) {
+                cache.remove(cookie);
+            } else if (cookie.matches(uri)) {
+                if (cookies.length() > 0) {
+                    cookies.append(", ");
+                }
+                cookies.append(cookie.toString());
+            }
+        }
+
+        // Map to return
+        Map<String, List<String>> cookieMap =
+                new HashMap<String, List<String>>(requestHeaders);
+
+        // Convert StringBuilder to List, store in map
+        if (cookies.length() > 0) {
+            List<String> list =
+                    Collections.singletonList(cookies.toString());
+            cookieMap.put("Cookie", list);
+        }
+        return Collections.unmodifiableMap(cookieMap);
+    }
+}
+
+
index 1214403..1d780b9 100644 (file)
@@ -9,7 +9,6 @@ import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.CookieHandler;
-import java.net.CookieManager;
 
 import javax.swing.ProgressMonitorInputStream;
 
@@ -35,7 +34,7 @@ public class URLDownload {
         try {
             // This should set up JabRef to receive cookies properly
             if ((cm = CookieHandler.getDefault()) == null) {
-                cm = new CookieManager();
+                cm = new CookieHandlerImpl();
                 CookieHandler.setDefault(cm);
             }
         } catch (SecurityException e) {
index 6848b8c..4253484 100644 (file)
@@ -6,32 +6,27 @@
 package net.sf.jabref.plugin;
 
 import ca.odell.glazedlists.SortedList;
+import ca.odell.glazedlists.EventList;
+import ca.odell.glazedlists.BasicEventList;
 import ca.odell.glazedlists.gui.TableFormat;
 import ca.odell.glazedlists.swing.EventTableModel;
 import com.jgoodies.forms.builder.ButtonBarBuilder;
-import java.awt.BorderLayout;
+
+import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.File;
+import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
+import java.util.Iterator;
+import javax.swing.*;
+
 import net.sf.jabref.GUIGlobals;
 import net.sf.jabref.Globals;
 import net.sf.jabref.HelpAction;
 import net.sf.jabref.JabRefFrame;
+import net.sf.jabref.net.URLDownload;
 import net.sf.jabref.gui.FileDialogs;
 import net.sf.jabref.plugin.PluginInstaller.NameAndVersion;
 
@@ -43,9 +38,9 @@ public class ManagePluginsDialog {
 
     private JabRefFrame frame;
     private JDialog diag;
-    private SortedList<NameAndVersion> plugins;
-    private JTable table;
-    private TableFormat tableFormat;
+    private SortedList<NameAndVersion> plugins, pluginsOther;
+    private JTable table, tableOther;
+    private TableFormat tableFormat, tableFormatOther;
     private JButton close = new JButton(Globals.lang("Close")),
             install = new JButton(Globals.lang("Install plugin")),
             download = new JButton(Globals.lang("Download plugin")),
@@ -57,17 +52,35 @@ public class ManagePluginsDialog {
         this.frame = frame;
         diag = new JDialog(frame, Globals.lang("Plugin manager"), false);
         help.addActionListener(new HelpAction(Globals.helpDiag, GUIGlobals.pluginHelp, "Help"));
-        
+        JPanel pan = new JPanel();
+        pan.setLayout(new BorderLayout());
+
         JLabel lab = new JLabel
-                (Globals.lang("Plugins installed in your user plugin directory (%0) are listed below:",
+                (Globals.lang("Plugins installed in your user plugin directory (%0):",
                 PluginCore.userPluginDir.getPath()));
         lab.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        diag.getContentPane().add(lab, BorderLayout.NORTH);
-        
+        pan.add(lab, BorderLayout.NORTH);
+
+        // Table for user dir plugins:
         table = new JTable();
+        // Table for other plugiuns
+        tableOther = new JTable();
+        tableOther.setRowSelectionAllowed(false);
+        tableOther.setColumnSelectionAllowed(false);
+        tableOther.setCellSelectionEnabled(false);
         buildList();
-        
-        diag.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
+        table.setPreferredScrollableViewportSize(new Dimension(500, 200));
+        tableOther.setPreferredScrollableViewportSize(new Dimension(500, 100));
+        pan.add(new JScrollPane(table), BorderLayout.CENTER);
+        diag.getContentPane().add(pan, BorderLayout.NORTH);
+        pan = new JPanel();
+        pan.setLayout(new BorderLayout());
+        lab = new JLabel(Globals.lang("Plugins installed in other locations:"));
+        lab.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pan.add(lab, BorderLayout.NORTH);
+        pan.add(new JScrollPane(tableOther), BorderLayout.CENTER);
+
+        diag.getContentPane().add(pan, BorderLayout.CENTER);
         
         ButtonBarBuilder b = new ButtonBarBuilder();
         b.addGlue();
@@ -134,15 +147,40 @@ public class ManagePluginsDialog {
                 PluginInstaller.NameAndVersion nav = plugins.get(sel[i]);
                 success = PluginInstaller.deletePlugin(nav) & success;
             }
+            if (!success) {
+
+                JOptionPane.showMessageDialog(frame, sel.length > 1 ?
+                        Globals.lang("Plugins will be deleted next time JabRef starts up.")
+                        : Globals.lang("Plugin will be deleted next time JabRef starts up."),
+                        sel.length > 1 ? Globals.lang("Delete plugins") : Globals.lang("Delete plugin"),
+                        JOptionPane.INFORMATION_MESSAGE);
+            }
             buildList();
         }
     }
     
     private void buildList() {
         plugins = new SortedList<NameAndVersion>(PluginInstaller.findInstalledPlugins());
+        // Move those plugins that are not installed in the user plugin dir to another list:
+        EventList<NameAndVersion> outsideUserDir = new BasicEventList<NameAndVersion>();
+        for (Iterator<NameAndVersion> i = plugins.iterator(); i.hasNext();) {
+            NameAndVersion nav = i.next();
+            if (!nav.inUserDirectory) {
+                outsideUserDir.add(nav);
+                i.remove();
+            }
+        }
+        pluginsOther = new SortedList<NameAndVersion>(outsideUserDir);
+        tableFormatOther = new PluginTableFormat();
+        EventTableModel tableModel = new EventTableModel(pluginsOther, tableFormatOther);
+        tableOther.setModel(tableModel);
+        tableOther.getColumnModel().getColumn(0).setPreferredWidth(200);
+        tableOther.getColumnModel().getColumn(1).setPreferredWidth(50);
+        tableOther.getColumnModel().getColumn(2).setPreferredWidth(50);
+
         tableFormat = new PluginTableFormat();
-        EventTableModel tableModel = new EventTableModel(plugins, tableFormat);
-        table.setModel(tableModel);
+        EventTableModel tableModelOther = new EventTableModel(plugins, tableFormat);
+        table.setModel(tableModelOther);
         table.getColumnModel().getColumn(0).setPreferredWidth(200);
         table.getColumnModel().getColumn(1).setPreferredWidth(50);
         table.getColumnModel().getColumn(2).setPreferredWidth(50);
@@ -163,11 +201,7 @@ public class ManagePluginsDialog {
                 JOptionPane.showMessageDialog(frame, Globals.lang("File not found")+".",
                         Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
             } else {
-                try {
-                    installFromURL(new URL("file://"+f.getPath()));
-                } catch (MalformedURLException e) {
-                    e.printStackTrace();
-                }
+                installFromFile(f);
             }
         }
 
@@ -186,7 +220,26 @@ public class ManagePluginsDialog {
     }
     
     public void installFromURL(URL url) {
-        PluginInstaller.installPlugin(frame, url);
+        try {
+            File tmpFile = File.createTempFile("jabref-plugin", ".jar");
+            tmpFile.deleteOnExit();
+            URLDownload ud = new URLDownload(frame, url, tmpFile);
+            ud.download();
+            String path = url.getPath();
+            int pos = path.lastIndexOf('/');
+            if ((pos >= 0) && (pos < path.length()-1))
+                path = path.substring(pos+1);
+            PluginInstaller.installPlugin(frame, tmpFile, path);
+            tmpFile.delete();
+            buildList();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        
+    }
+
+    public void installFromFile(File file) {
+        PluginInstaller.installPlugin(frame, file, null);
         buildList();
     }
     
index 6c84a9d..cd82c2d 100644 (file)
@@ -9,24 +9,26 @@ import net.sf.jabref.Globals;
 
 import javax.swing.*;
 import java.net.URL;
-import java.io.File;
-import java.io.IOException;
-import java.io.FilenameFilter;
+import java.net.MalformedURLException;
+import java.io.*;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Collections;
-import java.util.HashMap;
+import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.jar.JarFile;
+
 import org.java.plugin.registry.PluginDescriptor;
+import org.java.plugin.registry.PluginRegistry;
+import org.java.plugin.registry.ManifestProcessingException;
+import org.java.plugin.registry.ManifestInfo;
+import org.java.plugin.registry.xml.PluginRegistryImpl;
 
 /**
  *
  */
 public class PluginInstaller {
 
+    public static final String PLUGIN_XML_FILE = "plugin.xml";
     public static final int
         SUCCESS = 0,
         UNABLE_TO_CREATE_DIR = 1,
@@ -44,9 +46,10 @@ public class PluginInstaller {
         NOT_LOADED = 0,
         LOADED = 1,
         BAD = 2;
-    
-    public static void installPlugin(JabRefFrame frame, URL source) {
-        String fileName = (new File(source.getFile())).getName();
+
+
+    public static void installPlugin(JabRefFrame frame, File file, String targetFileName) {
+        String fileName = targetFileName != null ? targetFileName : file.getName();
         if (!PluginCore.userPluginDir.exists()) {
             boolean created = PluginCore.userPluginDir.mkdirs();
             if (!created) {
@@ -56,11 +59,11 @@ public class PluginInstaller {
                 return;
             }
         }
-        int status = checkInstalledVersion(fileName);
+        int status = checkInstalledVersion(file);
         int result;
         switch (status) {
             case NO_VERSIONS_INSTALLED:
-                result = copyPlugin(frame, source, fileName);
+                result = copyPlugin(frame, file, fileName);
                 if (result == SUCCESS)
                     JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installed successfully. You must restart JabRef to load the new plugin."),
                             Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
@@ -84,21 +87,21 @@ public class PluginInstaller {
                         Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
                 break;
             case OLDER_VERSION_INSTALLED:
-                result = copyPlugin(frame, source, fileName);
+                result = copyPlugin(frame, file, fileName);
                 if (result == SUCCESS) {
                     int answer = JOptionPane.showConfirmDialog(frame,
                             Globals.lang("One or more older versions of this plugin is installed. Delete old versions?"),
                             Globals.lang("Plugin installer"), JOptionPane.YES_NO_OPTION);
                     if (answer == JOptionPane.YES_OPTION) {
-                        boolean success = deleteOlderVersions(fileName);
+                        boolean success = deleteOlderVersions(file);
                         if (success) {
                             JOptionPane.showMessageDialog(frame,
                                     Globals.lang("Old versions deleted successfully."),
                                     Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
                         } else {
                             JOptionPane.showMessageDialog(frame,
-                                    Globals.lang("Deletion of old versions failed."),
-                                    Globals.lang("Plugin installer"), JOptionPane.ERROR_MESSAGE);
+                                    Globals.lang("Old plugin versions will be deleted next time JabRef starts up."),
+                                    Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
                         }
                     }
                 }
@@ -118,13 +121,12 @@ public class PluginInstaller {
             //    break;
             case UNKNOWN_VERSION:
                 JLabel lab = new JLabel("<html>"+Globals.lang("Unable to determine plugin name and "
-                        +"version from filename."
-                        +" File name convention is '[plugin name]-[version].jar'.")
+                        +"version. This may not be a valid JabRef plugin.")
                         +"<br>"+Globals.lang("Install anyway?")+"</html>");
                 int answer = JOptionPane.showConfirmDialog(frame, lab,
                         Globals.lang("Plugin installer"), JOptionPane.YES_NO_OPTION);
                 if (answer == JOptionPane.YES_OPTION) {
-                    result = copyPlugin(frame, source, fileName);
+                    result = copyPlugin(frame, file, fileName);
                     if (result == SUCCESS)
                         JOptionPane.showMessageDialog(frame, Globals.lang("Plugin installed successfully. You must restart JabRef to load the new plugin."),
                                 Globals.lang("Plugin installer"), JOptionPane.INFORMATION_MESSAGE);
@@ -147,23 +149,25 @@ public class PluginInstaller {
     /**
      * Check the status of the named plugin - whether an older, the same or a
      * newer version is already installed.
-     * @param filename The filename of the plugin.
+     * @param f The plugin file.
      * @return an integer indicating the status
      */
-    public static int checkInstalledVersion(String filename) {
-        String[] nav = getNameAndVersion(filename);
+    public static int checkInstalledVersion(File f) {
+        String[] nav = getNameAndVersion(f);
         if (nav == null)
             return UNKNOWN_VERSION;
-        
+
         VersionNumber vn = new VersionNumber(nav[1]);
-        List<VersionNumber> versions = getInstalledVersions(nav[0]);
-        
-        boolean hasSame = versions.size() > 0 && (vn.compareTo(versions.get(0)) == 0);
-        boolean hasNewer = versions.size() > 0 && (vn.compareTo(versions.get(0)) > 0);
+        Map<VersionNumber, File> versions = getInstalledVersions(nav[0]);
 
         if (versions.size() == 0) {
             return NO_VERSIONS_INSTALLED;
         }
+        VersionNumber thenum = versions.keySet().iterator().next();
+        boolean hasSame = vn.compareTo(thenum) == 0;
+        boolean hasNewer = vn.compareTo(thenum) > 0;
+
+
         if (hasNewer)
             return NEWER_VERSION_INSTALLED;
         if (hasSame)
@@ -178,29 +182,47 @@ public class PluginInstaller {
      * @return true if deletion is successful, false otherwise.
      */
     public static boolean deletePlugin(NameAndVersion plugin) {
-        String file = buildFileName(plugin.name, 
-                plugin.version.equals(VersionNumber.ZERO) ? null : plugin.version.toString());
-        return (new File(file)).delete();
+        /*String file = buildFileName(plugin.name,
+                plugin.version.equals(VersionNumber.ZERO) ? null : plugin.version.toString());*/
+        return deletePluginFile(plugin.file);
     }
     
-    public static boolean deleteOlderVersions(String filename) {
-        String[] nav = getNameAndVersion(filename);
+    public static boolean deleteOlderVersions(File f) {
+        String[] nav = getNameAndVersion(f);
         if (nav == null)
             return false;
         boolean success = true;
         VersionNumber num = new VersionNumber(nav[1]);
-        List<VersionNumber> versions = getInstalledVersions(nav[0]);
-        for (Iterator<VersionNumber> iterator = versions.iterator(); iterator.hasNext();) {
+        Map<VersionNumber, File> versions = getInstalledVersions(nav[0]);
+        for (Iterator<VersionNumber> iterator = versions.keySet().iterator(); iterator.hasNext();) {
             VersionNumber versionNumber = iterator.next();
             if (num.compareTo(versionNumber) < 0) {
                 String vnString = versionNumber.equals(VersionNumber.ZERO) ? null : versionNumber.toString();
-                String file = buildFileName(nav[0], vnString);
-                success = (new File(file)).delete() && success;
+                File file = versions.get(versionNumber);//buildFileName(nav[0], vnString);
+                success = deletePluginFile(file);//file).delete() && success;
             }
         }
         return success;
     }
 
+    /**
+     * This method deletes a plugin file. If deletion fails - typically happens
+     * on Windows due to file locking - the file is scheduled for deletion on
+     * the next startup.
+     *
+     * @param f The file to delete.
+     * @return true if deletion was successful, false if scheduled for later.
+     */
+    public static boolean deletePluginFile(File f) {
+        boolean success = f.delete();
+        if (success)
+            return true;
+        else {
+            schedulePluginForDeletion(f.getPath());
+            return false;
+        }
+    }
+
     /**
      * Copy a plugin to the user plugin directory. Does not check whether the plugin
      * already exists.
@@ -228,76 +250,186 @@ public class PluginInstaller {
         }
     }
 
+    public static int copyPlugin(JFrame frame, File source, String destFileName) {
+        if (destFileName == null)
+            destFileName = source.getName();
+        if (!PluginCore.userPluginDir.exists()) {
+            boolean created = PluginCore.userPluginDir.mkdirs();
+            if (!created) {
+                return UNABLE_TO_CREATE_DIR;
+            }
+        }
+        File destFile = new File(PluginCore.userPluginDir, destFileName);
+        BufferedInputStream in = null;
+        BufferedOutputStream out = null;
+        try {
+            in = new BufferedInputStream(new FileInputStream(source));
+            out = new BufferedOutputStream(new FileOutputStream(destFile));
+            byte[] buf = new byte[1024];
+            int count;
+            while ((count = in.read(buf, 0, buf.length)) > 0) {
+                out.write(buf, 0, count);
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return UNABLE_TO_COPY_FILE;
+        } finally {
+            if (in != null) try {
+                in.close();
+            } catch (IOException ex) {
+                return UNABLE_TO_COPY_FILE;
+            }
+            if (out != null) try {
+                out.close();
+            } catch (IOException ex) {
+                return UNABLE_TO_COPY_FILE;
+            }
+        }
+        return SUCCESS;
+    }
+
 
 
     /**
      * Based on a plugin name, find all versions that are already present
      * in the user plugin directory.
      * @param pluginName The name of the plugin.
-     * @return A list of versions already present.
+     * @return A map of versions already present, linking to the file containing each.
      */
-    public static List<VersionNumber> getInstalledVersions(final String pluginName) {
+    public static Map<VersionNumber, File> getInstalledVersions(final String pluginName) {
 
         String[] files = PluginCore.userPluginDir.list(new FilenameFilter() {
             public boolean accept(File file, String s) {
-                return s.startsWith(pluginName) && s.endsWith(".jar");
+                return s.endsWith(".jar");
             }
         });
-        List<VersionNumber> versions = new ArrayList<VersionNumber>();
+        Map<VersionNumber, File> versions = new TreeMap<VersionNumber, File>();
         for (int i = 0; i < files.length; i++) {
             String file = files[i];
-            String[] nav = getNameAndVersion(file);
+            File f = new File(PluginCore.userPluginDir,file);
+            String[] nav = getNameAndVersion(f);
             if (nav != null) {
-                VersionNumber vn = new VersionNumber(nav[1]);
-                versions.add(vn);
+                if (nav[0].equals(pluginName)) {
+                    VersionNumber vn = new VersionNumber(nav[1]);
+                    versions.put(vn, f);
+                }
             }
                 
         }
-        Collections.sort(versions);
+
         return versions;
     }
 
+    /**
+     * Add the given filename to the list of plugins to be deleted on the next
+     * JabRef startup.
+     *
+     * @param filename The path to the file to delete.
+     */
+    public static void schedulePluginForDeletion(String filename) {
+        String[] oldValues = Globals.prefs.getStringArray("deletePlugins");
+        String[] newValues = oldValues == null ? new String[1] : new String[oldValues.length+1];
+        if (oldValues != null) for (int i=0; i<oldValues.length; i++) {
+            newValues[i] = oldValues[i];
+        }
+        newValues[newValues.length-1] = filename;
+        Globals.prefs.putStringArray("deletePlugins", newValues);
+    }
+
+    /**
+     * Delete the given files. Refuses to delete files outside the user plugin directory.
+     * This method throws no errors is the files don't exist or deletion failed.
+     * @param filenames An array of names of the files to be deleted.
+     */
+    public static void deletePluginsOnStartup(String[] filenames) {
+        for (int i = 0; i < filenames.length; i++) {
+            String s = filenames[i];
+            File f = new File(s);
+            if (f.getParentFile().equals(PluginCore.userPluginDir)) {
+            //if (s.startsWith(PluginCore.userPluginDir.getPath())) {
+                boolean success = f.delete();
+            }
+            else
+                System.out.println("File outside of user plugin dir: "+s);
+        }
+    }
+
 
     static Pattern pluginFilePattern = Pattern.compile("(.*)-([\\d\\.]+).jar");
     static Pattern pluginFilePatternNoVersion = Pattern.compile("(.*).jar");
 
     /**
-     * Try to split up a plugin file name in order to find the plugin name and
-     * the version number. The file name is expected to be on the format
-     * [plugin name]-[version number].jar
+     * Look inside a jar file, find the plugin.xml file, and use it to determine the name
+     * and version of the plugin.
      *
-     * @param filename The plugin file name.
+     * @param f The file to investigate.
      * @return A string array containing the plugin name in the first element and
      *   the version number in the second, or null if the filename couldn't be
      *   interpreted.
      *
      */
-    public static String[] getNameAndVersion(String filename) {
-        Matcher m = pluginFilePattern.matcher(filename);
-        if (m.matches()) {
-            return new String[] {m.group(1), m.group(2)};
-        }
-        m = pluginFilePatternNoVersion.matcher(filename);
-        if (m.matches()) {
-            return new String[] {m.group(1), "0"}; // unknown version is set to 0
-        }
-        else
+    public static String[] getNameAndVersion(File f) {
+
+        try {
+            File temp = unpackPluginXML(f);
+            if (temp == null)
+                return null; // Couldn't find the plugin.xml file
+            ManifestInfo mi = PluginCore.getManager().getRegistry().
+                    readManifestInfo(temp.toURI().toURL());
+            temp.delete();
+            return new String[] {mi.getId(), mi.getVersion().toString()};
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
             return null;
+        } catch (ManifestProcessingException e) {
+            return null; // Couldn't make sense of the plugin.xml
+        }
+
     }
 
     /**
-     * Make a File pointing to a file with the correct name in the user
-     * plugin directory.
-     * @param name The plugin name.
-     * @param version The plugin version.
-     * @return the correct File.
+     * Take the name of a jar file and extract the plugin.xml file, if possible,
+     * to a temporary file.
+     * @param f The jar file to extract from.
+     * @return a temporary file to which the plugin.xml file has been copied.
      */
-    public static String buildFileName(String name, String version) {
-        if (version != null)
-            return PluginCore.userPluginDir+"/"+name+"-"+version+".jar";
-        else
-            return PluginCore.userPluginDir+"/"+name+".jar";
+    public static File unpackPluginXML(File f) {
+        InputStream in = null;
+        OutputStream out = null;
+
+        try {
+            JarFile jar = new JarFile(f);
+            ZipEntry entry = jar.getEntry(PLUGIN_XML_FILE);
+            if (entry == null) {
+                return null;
+            }
+            File dest = File.createTempFile("jabref_plugin", ".xml");
+            dest.deleteOnExit();
+            
+            in = new BufferedInputStream(jar.getInputStream(entry));
+            out = new BufferedOutputStream(new FileOutputStream(dest));
+            byte[] buffer = new byte[2048];
+            for (;;)  {
+                int nBytes = in.read(buffer);
+                if (nBytes <= 0) break;
+                out.write(buffer, 0, nBytes);
+            }
+            out.flush();
+            return dest;
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return null;
+        } finally {
+                try {
+                    if (out != null) out.close();
+                    if (in != null) in.close();
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                    return null;
+                }
+        }
     }
+
     
     /**
      * Build a list of installed plugins.
@@ -317,26 +449,50 @@ public class PluginInstaller {
         Collection<PluginDescriptor> descriptors =
                 PluginCore.getManager().getRegistry().getPluginDescriptors();
         for (PluginDescriptor desc : descriptors) {
-            urls.put(desc.getLocation().getFile(), desc);
+            if ((desc.getPluginClassName()==null) || !desc.getPluginClassName()
+                    .equals("net.sf.jabref.plugin.core.JabRefPlugin")) {
+                urls.put(desc.getId(), desc);
+            }
         }
         
         for (int i=0; i<files.length; i++) {
-            String[] nav = getNameAndVersion(files[i]);
+            File file = new File(PluginCore.userPluginDir, files[i]);
+            String[] nav = getNameAndVersion(file);
             if (nav != null) {
                 VersionNumber vn = nav[1] != null ? new VersionNumber(nav[1]) : null;
-                NameAndVersion nameAndVersion = new NameAndVersion(nav[0], vn);
-                for (String loc : urls.keySet()) {
+                NameAndVersion nameAndVersion = new NameAndVersion(nav[0], vn, true,
+                        file);
+                for (Iterator<String> it = urls.keySet().iterator(); it.hasNext();) {
+                    String loc = it.next();
                     if (loc.indexOf(nav[0]) >= 0) {
+                        PluginDescriptor desc = urls.get(loc);
+                        //System.out.println("Accounted for: "+desc.getId()+" "+desc.getVersion().toString());
                         if (!PluginCore.getManager().isPluginEnabled(urls.get(loc)))
                             nameAndVersion.setStatus(BAD);
                         else
                             nameAndVersion.setStatus(LOADED);
-                        
+                        it.remove();
                     }
                 }
                 plugins.add(nameAndVersion);
             }
         }
+
+        for (String url : urls.keySet()) {
+            PluginDescriptor desc = urls.get(url);
+            File location =  new File(desc.getLocation().getFile());
+            if (location.getPath().indexOf(PluginCore.userPluginDir.getPath()) >= 0)
+                continue; // This must be a loaded user dir plugin that's been deleted.
+            //System.out.println("File: "+desc.getLocation().getFile());
+            NameAndVersion nameAndVersion = new NameAndVersion(desc.getId(),
+            &nb