[svn-upgrade] Integrating new upstream version, jabref (2.6~beta2) upstream/2.6_beta2
authorgregor herrmann <gregoa@debian.org>
Tue, 1 Dec 2009 16:45:51 +0000 (16:45 -0000)
committergregor herrmann <gregoa@debian.org>
Tue, 1 Dec 2009 16:45:51 +0000 (16:45 -0000)
191 files changed:
.classpath
JabRef.ipr [deleted file]
JabRef.iws [deleted file]
build.number
build.xml
src/Jabref.iml [deleted file]
src/Jabref_trunk.iml [new file with mode: 0644]
src/help/About.html
src/help/BaseFrameHelp.html
src/help/CustomExports.html
src/help/EntryEditorHelp.html
src/help/RevisionHistory.html
src/help/da/About.html
src/help/de/About.html
src/help/fr/About.html
src/help/fr/BaseFrameHelp.html
src/help/fr/CustomExports.html
src/help/fr/EntryEditorHelp.html
src/help/fr/RevisionHistory.html
src/images/absIcon.png [new file with mode: 0644]
src/images/add.png [new file with mode: 0644]
src/images/autumn.png [new file with mode: 0644]
src/images/completeItem.png [new file with mode: 0644]
src/images/contents.png [new file with mode: 0644]
src/images/database_connect.png [new file with mode: 0644]
src/images/database_save.png [new file with mode: 0644]
src/images/document-save-as.png [new file with mode: 0644]
src/images/document-save.png [new file with mode: 0644]
src/images/doismall.png [new file with mode: 0644]
src/images/duplicate.png [new file with mode: 0644]
src/images/edit-copy.png [new file with mode: 0644]
src/images/edit-cut.png [new file with mode: 0644]
src/images/edit-delete.png [new file with mode: 0644]
src/images/edit-find.png [new file with mode: 0644]
src/images/edit-paste.png [new file with mode: 0644]
src/images/edit-redo.png [new file with mode: 0644]
src/images/edit-undo.png [new file with mode: 0644]
src/images/editor.png [new file with mode: 0644]
src/images/emacs.png [new file with mode: 0644]
src/images/emblem-web-small.png [new file with mode: 0644]
src/images/emblem-web.png [new file with mode: 0644]
src/images/fileclose.png [new file with mode: 0644]
src/images/fileclose2.png [new file with mode: 0644]
src/images/filenew.png [new file with mode: 0644]
src/images/fileopen.png [new file with mode: 0644]
src/images/genIcon.png [new file with mode: 0644]
src/images/go-down.png [new file with mode: 0644]
src/images/go-next.png [new file with mode: 0644]
src/images/go-previous.png [new file with mode: 0644]
src/images/go-up.png [new file with mode: 0644]
src/images/groupIncluding.png [new file with mode: 0644]
src/images/groupRefining.png [new file with mode: 0644]
src/images/grouping_morten.png [new file with mode: 0644]
src/images/groupsHighlightAll.png [new file with mode: 0644]
src/images/groupsHighlightAny.png [new file with mode: 0644]
src/images/help-about.png [new file with mode: 0644]
src/images/help-browser.png [new file with mode: 0644]
src/images/integrity.png [new file with mode: 0644]
src/images/lyx2.png [new file with mode: 0644]
src/images/mark.png [new file with mode: 0644]
src/images/messageFail.png [new file with mode: 0644]
src/images/messageInfo.png [new file with mode: 0644]
src/images/messageWarn.png [new file with mode: 0755]
src/images/optIcon.png [new file with mode: 0644]
src/images/pdf-new.png [new file with mode: 0644]
src/images/pdf.png [new file with mode: 0644]
src/images/postscript.png [new file with mode: 0644]
src/images/preamble.png [new file with mode: 0644]
src/images/preferences.png [new file with mode: 0644]
src/images/remove.png [new file with mode: 0644]
src/images/reqIcon.png [new file with mode: 0644]
src/images/search.png [new file with mode: 0644]
src/images/splash-2.1.svg [new file with mode: 0644]
src/images/splash-2.1beta.png [new file with mode: 0644]
src/images/splash-2.3.svg [new file with mode: 0644]
src/images/splash-2.4.svg [new file with mode: 0644]
src/images/splash-2.5.svg
src/images/splash-2.6beta.svg [new file with mode: 0644]
src/images/splash.png
src/images/splashBackground.png [new file with mode: 0644]
src/images/strings.png [new file with mode: 0644]
src/images/unmark.png [new file with mode: 0644]
src/images/user-home.png [new file with mode: 0644]
src/images/view-refresh.png [new file with mode: 0644]
src/images/viewsource.gif [new file with mode: 0644]
src/images/winedt.png [new file with mode: 0644]
src/images/wizard.png [new file with mode: 0644]
src/images/wrongItem.png [new file with mode: 0644]
src/images/wwwciteseer.png [new file with mode: 0644]
src/java/net/sf/jabref/BasePanel.java
src/java/net/sf/jabref/ContentSelectorDialog2.java
src/java/net/sf/jabref/DuplicateCheck.java
src/java/net/sf/jabref/EntryEditor.java
src/java/net/sf/jabref/EntryEditorTab.java
src/java/net/sf/jabref/GeneralTab.java
src/java/net/sf/jabref/Globals.java
src/java/net/sf/jabref/JabRef.java
src/java/net/sf/jabref/JabRefPreferences.java
src/java/net/sf/jabref/PreviewPanel.java
src/java/net/sf/jabref/RegExpRule.java
src/java/net/sf/jabref/SearchManager2.java
src/java/net/sf/jabref/SimpleSearchRule.java
src/java/net/sf/jabref/Util.java
src/java/net/sf/jabref/collab/Change.java
src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
src/java/net/sf/jabref/collab/ChangeScanner.java
src/java/net/sf/jabref/collab/EntryAddChange.java
src/java/net/sf/jabref/collab/EntryChange.java
src/java/net/sf/jabref/collab/EntryDeleteChange.java
src/java/net/sf/jabref/collab/FileUpdateMonitor.java
src/java/net/sf/jabref/collab/GroupChange.java
src/java/net/sf/jabref/collab/MetaDataChange.java [new file with mode: 0644]
src/java/net/sf/jabref/collab/PreambleChange.java
src/java/net/sf/jabref/collab/StringAddChange.java
src/java/net/sf/jabref/collab/StringChange.java
src/java/net/sf/jabref/collab/StringNameChange.java
src/java/net/sf/jabref/collab/StringRemoveChange.java
src/java/net/sf/jabref/export/FileActions.java
src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
src/java/net/sf/jabref/export/SaveDatabaseAction.java
src/java/net/sf/jabref/export/SaveException.java
src/java/net/sf/jabref/export/SaveSession.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/Default.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/FormatChars.java
src/java/net/sf/jabref/export/layout/format/HTMLChars.java
src/java/net/sf/jabref/export/layout/format/LastPage.java
src/java/net/sf/jabref/export/layout/format/RTFChars.java
src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
src/java/net/sf/jabref/external/TransferableFileLinkSelection.java [new file with mode: 0644]
src/java/net/sf/jabref/groups/AutoGroupDialog.java
src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
src/java/net/sf/jabref/groups/KeywordGroup.java
src/java/net/sf/jabref/gui/AutoCompleteListener.java
src/java/net/sf/jabref/gui/AutoCompleter.java
src/java/net/sf/jabref/gui/FileListEditor.java
src/java/net/sf/jabref/gui/FileListEntryEditor.java
src/java/net/sf/jabref/gui/ImportInspectionDialog.java
src/java/net/sf/jabref/gui/MainTableSelectionListener.java
src/java/net/sf/jabref/gui/VerticalLabelUI.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/CsaImporter.java
src/java/net/sf/jabref/imports/EndnoteImporter.java
src/java/net/sf/jabref/imports/IsiImporter.java
src/java/net/sf/jabref/imports/OpenDatabaseAction.java
src/java/net/sf/jabref/imports/ParserResult.java
src/java/net/sf/jabref/imports/ScifinderImporter.java
src/java/net/sf/jabref/journals/ManageJournalsPanel.java
src/java/net/sf/jabref/net/Cookie.java
src/java/net/sf/jabref/search/BasicSearch.java
src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
src/java/net/sf/jabref/sql/SQLutil.java
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
src/resource/Menu_tr.properties
src/resource/build.properties
src/resource/layout/endnote/EndNote.article.layout
src/resource/layout/endnote/EndNote.book.layout
src/resource/layout/endnote/EndNote.booklet.layout
src/resource/layout/endnote/EndNote.inbook.layout
src/resource/layout/endnote/EndNote.incollection.layout
src/resource/layout/endnote/EndNote.inproceedings.layout
src/resource/layout/endnote/EndNote.layout
src/resource/layout/endnote/EndNote.manual.layout
src/resource/layout/endnote/EndNote.mastersthesis.layout
src/resource/layout/endnote/EndNote.misc.layout
src/resource/layout/endnote/EndNote.other.layout
src/resource/layout/endnote/EndNote.phdthesis.layout
src/resource/layout/endnote/EndNote.proceedings.layout
src/resource/layout/endnote/EndNote.techreport.layout
src/resource/layout/endnote/EndNote.unpublished.layout
src/resource/layout/harvard/harvard.book.layout
src/resource/layout/harvard/harvard.inbook.layout
src/resource/layout/harvard/harvard.incollection.layout
src/resource/layout/harvard/harvard.inproceedings.layout
src/resource/layout/harvard/harvard.layout
src/resource/layout/harvard/harvard.proceedings.layout
src/txt/CHANGELOG
src/txt/README
src/txt/README~ [deleted file]
src/txt/TODO
src/windows/nsis/launcher.nsi

index c66a907072881226e8bc63360e2832182c6c0f55..16e0e169f922990408fd087706563a7f56c31357 100644 (file)
@@ -5,7 +5,7 @@
        <classpathentry exported="true" kind="lib" path="lib/plugin/commons-logging.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/spin.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/microba.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/looks-2.0.4.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/looks-2.2.0.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/PDFBox-0.7.3-dev-reduced.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/antlr.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/antlr-3.0b5.jar"/>
diff --git a/JabRef.ipr b/JabRef.ipr
deleted file mode 100644 (file)
index f15c148..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-<?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
deleted file mode 100644 (file)
index b1b87af..0000000
+++ /dev/null
@@ -1,655 +0,0 @@
-<?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 3827efafd3e81bd01dc48a1b54328dbecedf308d..9f34c41cc421be1b082b40f4f631e97df7b85239 100644 (file)
@@ -1,3 +1,3 @@
 #Build Number for ANT. Do not edit!
-#Mon Jun 22 19:37:12 CEST 2009
-build.number=67
+#Sun Nov 01 16:45:05 CET 2009
+build.number=40
index e6f9b7c3100b1340f4c11fa5dcdfed8e99d58c37..5a7bd0a379b2e734f720ada852377281dba8c925 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: 2997 $
-             $Date: 2009-05-11 17:55:23 +0200 (Mon, 11 May 2009) $
+   Version:  $Revision: 3131 $
+             $Date: 2009-11-01 15:46:02 +0100 (Sun, 01 Nov 2009) $
              $Author: mortenalver $
 
    modified:
@@ -47,7 +47,7 @@
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
        <!-- some version information -->
-       <property name="jabref.version" value="2.5" />
+       <property name="jabref.version" value="2.6b2" />
        <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="off" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
+               <javac debug="on" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
                        <src path="${java.dir}" />
                        <exclude name="tests/**" />
                        <exclude name="**/JabRefMain.java" />
diff --git a/src/Jabref.iml b/src/Jabref.iml
deleted file mode 100644 (file)
index cab9dcf..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-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
new file mode 100644 (file)
index 0000000..5049fe7
--- /dev/null
@@ -0,0 +1,165 @@
+<?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/substance-4.1.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/JempBox-0.2.0.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/spin.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/glazedlists-1.7.0_java15.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/looks-2.2.0.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>
+  </component>
+</module>
+
index 1246bc9794d72ef75a0c3241b533f828adc32cea..92d8cc85793d3d10c21bd407e52f71a989954fe8 100755 (executable)
@@ -35,6 +35,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+       Wenbo Yang,
         J&ouml;rg Zieren</p>
 
         <h2>Contributions from:</h2>
index b83d338a98d5a4c92fce810183cb560583e82f03..8522fdd5221c4326d339db9fef7b2406f7ad84cf 100755 (executable)
         keys.</li>
 
         <li>The table is sorted according to a set of fields of
-        your choosing. The default sort order is set up in
+        your choosing. The default sort order can be set up in
         <strong>Preferences -&gt; Entry table</strong>, but to
-        quickly change the order, click the header of a column to
+        more quickly change the order, click the header of a column to
         set it as the primary sort criterion, or reverse the
         sorting if it is already set. Another click will deselect
         the column as sorting criterion. Hold down <b>CONTROL</b>
         and click a column to add, reverse or remove it as a
         sub-criterion after the primary column. You can add an
-        arbitrary number of sub-criteria.</li>
+        arbitrary number of sub-criteria, but only three levels
+        will be stored for the next time you start JabRef.</li>
 
         <li>Adjust the width of each column by dragging the borders
         between their headers.</li>
 
-        <li>In the <strong>Preferences</strong> dialog, toggle
-        whether the table should be resized to fit the window.
-        Enable this to ensure visibility of the whole table, and
-        disable it to make room for displaying more
-        information.</li>
-
         <li>
             Color codes can be toggled in the
             <strong>Preferences</strong> dialog, and they help you
@@ -85,7 +80,7 @@
     types.</p>
 
     <p>When a new entry is added, by default an
-    <a href="EntryEditorHelp.html">editor dialog</a> for the entry
+    <a href="EntryEditorHelp.html">entry editor</a> for the entry
     will be opened. This behaviour can be toggled in the
     <strong>Preferences</strong> dialog.</p>
 
     <h2>Editing an entry</h2>
 
     <p>To open an
-    <a href="EntryEditorHelp.html">editor dialog</a> for an
+    <a href="EntryEditorHelp.html">entry editor</a> for an
     existing entry, simply double-click anywhere on the appropriate
-    line will open the <a href="EntryEditorHelp.html">editor
-    dialog</a> (or select the entry and press ENTER).</p>
+    line will open the <a href="EntryEditorHelp.html">entry editor</a>
+    (or select the entry and press ENTER).</p>
 
     <h2>Referencing a <em>bibtex</em> string in a field</h2>
 
index c7c2ba18a494da3a19e63d785033c73ca83b4b56..c8d8694d18302193bc7a6e9278ad8da1cfdbf0fc 100644 (file)
         <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the
         date only, e.g. 2005.11.30.</li>
 
+        <li><code>Default</code> : takes a single argument, which serves as a default value.
+        If the string to format is non-empty, it is output without changes. If it is empty,
+        the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>
+        will output the entry's year if set, and "unknown" if no year is set.</li>
+
         <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs
         the first external file link encoded in the field. To work, the formatter must
         be supplied with the contents of the "file" field.
index 734b55c0b5af4455865ca60c2e6c832a00c79ef4..9120ace92fa5016307177c4d3a4a8955f872dd48 100755 (executable)
@@ -19,7 +19,7 @@
 
     <p>You can fully customize which fields should be regarded as
     required and optional for each type of entry, and which fields
-    appear in the General fields tab. See
+    appear in the General fields tabs. See
     <a href="CustomEntriesHelp.html">Customizing entry types</a>
     for more information about this.</p>
 
     unknown to JabRef, these will be visible in the source
     panel.</p>
 
-    <p><strong>Tip:</strong> the <i>pdf</i> and <i>url</i> fields
-    support Drag and Drop operations. You can drop there an url
-    from your browser. either a link to a pdf file (that JabRef can
-    download for you) or you can keep the link.</p>
-
     <h2>Field consistency checking</h2>
 
     <p>When the contents of a field
     is changed, JabRef checks if the new contents are acceptable.
     For field types that are used by <em>bibtex</em>, the contents
     are checked with respect to the use of the '#' character. The
-    hash symbol is <em>only</em> to be used in pairs, wrapping the
+    hash symbol is <em>only</em> to be used in pairs (except in escaped
+    form, '\#'), wrapping the
     name of a <em>bibtex</em> string that is referenced. Note that
     JabRef does not check if the referenced string actually exists
     (this is not trivial, since the <em>bibtex</em> style you use
index 87ce7482d407984c58e5443ec5536626145b1227..ced61f52fcb1992af34949f9c5a98f4fabfdee67 100644 (file)
@@ -5,6 +5,107 @@
 
   <h1>Revision history</h1>
 
+    <h3>Version 2.6beta 2</h3>
+    <ul>
+    <li>Added export formatter "Default" which takes a single argument. Outputs the string to format
+      unchanged if it is non-empty, otherwise outputs the argument.</li>
+    <li>Added option under Options -> Preferences -> General for disabling the strict enforcing of
+      correct BibTeX keys. Disabling this makes it possible to use e.g. umlaut characters in keys.</li>
+    <li>Modified launcher script for Windows installer to give higher heap size limit.</li>
+    <li>Improved autocompletion. All fields with autocompletion which have content selectors will now
+      autocomplete on content selector values. For the "journal" field, the autocompleter will now
+      additionally use entries from the current journal abbreviations list, and will also complete
+      on the entire field up to the cursor rather than just looking at the last word only.</li>
+    <li>Added support for postformatter in Layout. The postformatter will be run after
+      the formatters called from a layout.</li>
+    <li>Improved group autogeneration. Added option to generate groups based on author or editor
+      last names. Autogenerated groups are now alphabetized.</li>
+    <li>Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.</li>
+    <li>Changed keyword groups so they will match on whole words only. E.g. a keyword group for the
+      keyword "can" will no longer match the keyword "scanner".</li>
+    <li>Improved entry type determination and author parsing for some varieties of CSA files.</li>
+    <li>Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+      inbook entries.</li>
+    <li>Set limit to the number of displayed characters in group names in groups tree in order to
+      avoid group panel width problems.</li>
+    <li>Changed file link handling so all remote links classified as URL can be opened through
+      the browser. Setting a different file type manually makes JabRef call a remote link using
+      the handler application instead.</li>
+    <li>Modified Endnote/refer import filter to strip "doi:" from the %R field.</li>
+    <li>Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+      &lt;br&gt;, while multiple newlines are displayed as &lt;p&gt;.
+    <li>Fixed bug: switching entry editor between entries of different type may result in switching
+      of entry editor tabs.</li>
+    <li>Fixed bug: adding external file link leads to relative path from root directory if file
+      directory is set to an empty string.</li>
+    <li>Fixed error message when a # in a BibTeX string prevents saving. No longer states that the
+      problem is in an entry, but specifies that it is in a string.</li>
+    <li>Fixed bug: ODS export doesn't resolve BibTeX strings.</li>
+    <li>Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.</li>
+    <li>Fixed bug: editing source doesn't allow change of entry type.</li>
+    <li>RTFChars formatter now converts --- to \emdash and -- to \endash.</li>
+    </ul>
+    
+    <h3>Version 2.6beta</h3>
+
+    <ul>
+        <li>Added pages information to several entry types in Endnote export.</li>
+        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
+        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
+            means that the value "test \textit{case}" now matches the search string "test case".</li>
+        <li>Changed default table font family to "SansSerif".</li>
+        <li>Can now create lock file while writing a bib file. The lock file is checked before
+            saving, and before scanning an externally changed file, in order to avoid reading an
+            unfinished file.</li>
+        <li>Added support for dragging a file link from the file column to another application.</li>
+        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
+        <li>Improved ISI import filter so DOI information is included.</li>
+        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
+        <li>Fixed bug: when accepting external changes and not saving before new changes are
+            detected, the previously accepted changes would also be listed.</li>
+        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+            author field.</li>
+        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
+            if the user closed the entry editor or mouse clicked on another field.</li>
+        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
+        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+            character (e.g. "\={A}") are recognized.</li>
+        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
+            by search mode selection. Added separate prefs key for the groups setting.
+            Fix suggested by Igor L. Chernyavsky.</li>
+        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
+            an exception when trying to fetch from Medline.</li>
+        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
+        <li>Disabled table column reordering in import inspection window, since a user reported
+            problems when using this.</li>
+        <li>Changed years from 2008 to 2009 in splash image.</li>
+    </ul>
+    <h3>Version 2.5 (June 22nd, 2009)</h3>
+    <ul>
+        <li>Modified export layout procedure so missing formatters can be reported in the error
+          output. Export now succeeds with warnings added where formatters are missing.</li>
+        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+          semicolon-separated list of fields as argument. All fields must then be set for output
+          to be given.</li>
+        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
+        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
+        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
+        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
+        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
+        <li>Fixed bug in startup that could show warnings multiple times when loading
+          from autosave files.</li>
+    </ul>
+    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
+    <ul>
+        <li>Plugin manager now handles plugin versions correctly based on the version number in their
+          plugin.xml file.</li>
+        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
+          export operation. This formatter can be used to produce a numbered list of entries.</li>
+        <li>Added autosave feature.</li>
+        <li>Fixed bug in file link handling in BibTeXML export.</li>
+        <li>Improved handling of patents in Scifinder import.</li>
+    </ul>
+
     <h3>Version 2.5beta (April 21st, 2009)</h3>
 
     <ul>
       <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> Added [authorsAlpha] 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>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>
index a00300a90791b673eb44c3c3f47b27603fcf1cea..fbf40c42f63fa02b1eda6b18a4f5acd5372a00c0 100755 (executable)
@@ -37,6 +37,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+       Wenbo Yang,
         J&ouml;rg Zieren</p>
 
         <h2>Bidrag fra:</h2>
index 721cf8e58fa28d337ba988c41a443b97a52a9edb..5bf8769a0a4d0ce2879834f8fd0b4cd8f5f43900 100644 (file)
@@ -35,6 +35,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+       Wenbo Yang,
         J&ouml;rg Zieren</p>
 
         <h2>Beitr&auml;ge von:</h2>
index a4d36d182b78c1c238561561b578a20a454b8a73..2a3ab4ca36ec091fff13acbc3da6592db9e16971 100644 (file)
@@ -35,6 +35,7 @@
         Joerg K. Wegner,
         Michael Wrighton,
         Egon Willighagen,
+       Wenbo Yang,
         J&ouml;rg Zieren</p>
 
         <h2>Contributions de&nbsp;:</h2>
index b005647369a036cee4f637b8036c558718abecbf..47351c4b6ee63cf8c6b72acfaee96252607e375e 100644 (file)
         fl&egrave;ches du clavier.</li>
 
         <li>Le tableau est tri&eacute; selon une s&eacute;rie de
-        champs de votre choix. L'ordre de tri par d&eacute;faut est
+        champs de votre choix. L'ordre de tri par d&eacute;faut peut être
         configur&eacute; dans <strong>Options -&gt;
         Pr&eacute;f&eacute;rences -&gt; Table des
-        entr&eacute;es</strong> mais pour changer rapidement cet
+        entr&eacute;es</strong> mais pour changer plus rapidement cet
         ordre, cliquez l'ent&ecirc;te d'une colonne pour la
         d&eacute;finir comme crit&egrave;re de tri principal, ou
         inverser l'ordre du tri s'il est d&eacute;j&agrave;
         enfonc&eacute;e et cliquez sur un autre ent&ecirc;te de
         colonne pour l'ajouter, l'inverser ou l'enlever comme
         crit&egrave;re de tri auxiliaire. Vous pouvez ajouter un
-        nombre arbitraire de crit&egrave;res auxiliaires.</li>
+        nombre arbitraire de crit&egrave;res auxiliaires, mais uniquement
+        trois niveaux seront mémoris&eacute;s pour
+        le d&eacute;marrage suivant de JabRef.</li>
 
         <li>Vous pouvez ajuster la largeur des colonnes en faisant
         glisser les limites entre les ent&ecirc;tes.</li>
 
-        <li>Dans la fen&ecirc;tre de dialogue
-        <strong>Pr&eacute;f&eacute;rences</strong>, choisissez si
-        le tableau doit &ecirc;tre redimensionn&eacute; pour
-        s'ajuster &agrave; la fen&ecirc;tre. S&eacute;lectionnez
-        cette option pour toujours voir l'ensemble du tableau, et
-        d&eacute;s&eacute;lectionnez l&agrave; pour permettre
-        l'affichage de plus d'informations.</li>
-
         <li>
             Les codes de couleurs vous aident &agrave; visualiser
             l'&eacute;tat de votre base de donn&eacute;es. Les
     les types les plus courants.</p>
 
     <p>Lorsqu'une nouvelle entr&eacute;e est ajout&eacute;e, par
-    d&eacute;faut, une <a href="EntryEditorHelp.html">fen&ecirc;tre
-    d'&eacute;dition</a> s'ouvre. Ce comportement peut &ecirc;tre
+    d&eacute;faut,  l'<a href="EntryEditorHelp.html">&eacute;diteur
+    d'entr&eacute;es</a> s'ouvre. Ce comportement peut &ecirc;tre
     modifi&eacute; dans la fen&ecirc;tre de dialogue
     <strong>Pr&eacute;f&eacute;rences</strong>.</p>
 
 
     <h2>Editer une entr&eacute;e</h2>
 
-    <p>Pour ouvrir la
-    <a href="EntryEditorHelp.html">fen&ecirc;tre
-    d'&eacute;dition</a> sur une entr&eacute;e existante,
+    <p>Pour ouvrir l'<a href="EntryEditorHelp.html">&eacute;diteur
+    d'entr&eacute;es</a> sur une entr&eacute;e existante,
     double-cliquez simplement sur la ligne correspondant &agrave;
     l'entr&eacute;e (ou appuyez sur ENTREE apr&egrave;s avoir
-    s&eacute;lectionner l'entr&eacute;e).</p>
+    s&eacute;lectionn&eacute; l'entr&eacute;e).</p>
 
     <h2>R&eacute;f&eacute;rencer une cha&icirc;ne <em>BibTeX</em>
     dans un champ</h2>
index 54b364d5a5d4e95cf0bf71e9e82b87f04cc0973d..39e06851cad354143feb83efdff1698f86cb163b 100644 (file)
         date peut-&ecirc;tre adapt&eacute;. Par exemple,
         <code>\format[CurrentDate]{yyyy.MM.dd}</code> renverra
         uniquement la date, comme par exemple 2005.11.30.</li>
+        
+        <li><code>Default</code>&nbsp;: prend un seul argument, qui sert comme
+        valeur par d&eacute;faut. Si la cha&icirc;ne &agrave; formatter
+        n'est pas vide, elle est renvoy&eacute;e sans changement.
+        Si elle est vide, la valeur par d&eacute;faut est renvoy&eacute;e.
+        Par exemple,
+        <code>\format[Default(unknown)]{\year}</code>
+        renverra l'ann&eacute;e de l'entr&eacute;e si elle existe,
+        et "unknown" si l'ann&eacute;e n'est pas pr&eacute;cis&eacute;e.</li>
        
         <li><code>FileLink(TypeDeFichier)</code>&nbsp;: sans argument, ce formateur renvoie
         le premier lien apparaissant dans le champ. Pour fonctionner, ce formateur doit
index 48c7f2484110cce15f4f4a50e87baf80d883bafc..d448afe338a7651973dcfe4eb6315890877523dc 100644 (file)
     d'utiliser les quatre autres onglets, vous devez cocher cette
     option.</p>
 
-    <p><strong>Astuce&nbsp;:</strong> Si votre base contient des
-    champs que JabRef ne conna&icirc;t pas, ils seront visibles
-    dans l'onglet <em>Source BibTeX</em>.</p>
-
     <p><strong>Astuce&nbsp;:</strong> les champs <i>pdf</i> et
     <i>url</i> supportent les op&eacute;rations de
     Glisser-D&eacute;placer. Vous pouvez faire glisser une url
@@ -97,7 +93,8 @@
     Pour les champs qui sont utilis&eacute;s par <em>BibTeX</em>,
     le contenu est v&eacute;rifi&eacute; par rapport &agrave;
     l'utilisation du caract&eacute;re '#'. Le symbole di&egrave;se
-    doit <em>toujours</em> &ecirc;tre utilis&eacute; par paires,
+    doit <em>toujours</em> &ecirc;tre utilis&eacute; par paires
+    (except&eacute; pour la forme d'&eacute;chappement '\#'),
     encadrant le nom d'une cha&icirc;ne <em>BibTeX</em> existante.
     Notez que JabRef ne v&eacute;rifie pas si la cha&icirc;ne
     <em>BibTeX</em> est vraiment d&eacute;finie (ce n'est pas
index 59bf77b4408fb24fbe25a6cb3c2634c9474068d0..05e95e1fe18f3375053b906b4e0c1dc86cb54151 100644 (file)
@@ -5,6 +5,65 @@
 
   <h1>Historique des r&eacute;visions (en anglais)</h1>
 
+    <h3>Version 2.6beta</h3>
+
+    <ul>
+        <li>Added pages information to several entry types in Endnote export.</li>
+        <li>Modified LastPage formatter so it returns the number when only the number of pages is given.</li>
+        <li>Modified search algorithms so LaTeX commands are removed before search. For instance, this
+            means that the value "test \textit{case}" now matches the search string "test case".</li>
+        <li>Changed default table font family to "SansSerif".</li>
+        <li>Can now create lock file while writing a bib file. The lock file is checked before
+            saving, and before scanning an externally changed file, in order to avoid reading an
+            unfinished file.</li>
+        <li>Added support for dragging a file link from the file column to another application.</li>
+        <li>Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.</li>
+        <li>Improved ISI import filter so DOI information is included.</li>
+        <li>Fixed bug: metadata changes would not be detected as external changes to a database.</li>
+        <li>Fixed bug: when accepting external changes and not saving before new changes are
+            detected, the previously accepted changes would also be listed.</li>
+        <li>Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+            author field.</li>
+        <li>Fixed bug in autocompleter. Current suggested completion would be added to the field
+            if the user closed the entry editor or mouse clicked on another field.</li>
+        <li>Fixed problem with exporting to some MySql versions. Patch by François Dorin.</li>
+        <li>Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+            character (e.g. "\={A}") are recognized.</li>
+        <li>Fixed bug: gray out / hide setting in groups panel is overridden on startup
+            by search mode selection. Added separate prefs key for the groups setting.
+            Fix suggested by Igor L. Chernyavsky.</li>
+        <li>Fixed bug: cookie manager installed by Download button in file field editor throws
+            an exception when trying to fetch from Medline.</li>
+        <li>Fixed bug: temporary files don't get deleted on shutdown.</li>
+        <li>Disabled table column reordering in import inspection window, since a user reported
+            problems when using this.</li>
+        <li>Changed years from 2008 to 2009 in splash image.</li>
+    </ul>
+    <h3>Version 2.5 (June 22nd, 2009)</h3>
+    <ul>
+        <li>Modified export layout procedure so missing formatters can be reported in the error
+          output. Export now succeeds with warnings added where formatters are missing.</li>
+        <li>Conditional blocks (\begin{field}...\end{field}) in layout files can now be given a
+          semicolon-separated list of fields as argument. All fields must then be set for output
+          to be given.</li>
+        <li>Changed RIS import so multiple abstract fields in an entry are concatenated.</li>
+        <li>Added quoting of some special characters in SQL export, based on Kyle Crabtree's patch.</li>
+        <li>Fixed bug in MS Office 2007 XML export - editor names missing.</li>
+        <li>Fixed bug in plugin manager that prevented the "Download plugin" button from working.</li>
+        <li>Fixed bug in plugin manager routine that checks for installed versions of a plugin.</li>
+        <li>Fixed bug in startup that could show warnings multiple times when loading
+          from autosave files.</li>
+    </ul>
+    <h3>Version 2.5beta 2 (May 19th, 2009)</h3>
+    <ul>
+        <li>Plugin manager now handles plugin versions correctly based on the version number in their
+          plugin.xml file.</li>
+        <li>Added formatter "Number" that outputs a sequence number for the current entry in the current
+          export operation. This formatter can be used to produce a numbered list of entries.</li>
+        <li>Added autosave feature.</li>
+        <li>Fixed bug in file link handling in BibTeXML export.</li>
+        <li>Improved handling of patents in Scifinder import.</li>
+    </ul>
 
     <h3>Version 2.5beta (April 21st, 2009)</h3>
 
@@ -13,7 +72,7 @@
       <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> Added [authorsAlpha] 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>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>
 
   </body>
 
-</html>
+</html>
\ No newline at end of file
diff --git a/src/images/absIcon.png b/src/images/absIcon.png
new file mode 100644 (file)
index 0000000..f249fda
Binary files /dev/null and b/src/images/absIcon.png differ
diff --git a/src/images/add.png b/src/images/add.png
new file mode 100644 (file)
index 0000000..6b636fe
Binary files /dev/null and b/src/images/add.png differ
diff --git a/src/images/autumn.png b/src/images/autumn.png
new file mode 100644 (file)
index 0000000..77b7590
Binary files /dev/null and b/src/images/autumn.png differ
diff --git a/src/images/completeItem.png b/src/images/completeItem.png
new file mode 100644 (file)
index 0000000..5eeadc7
Binary files /dev/null and b/src/images/completeItem.png differ
diff --git a/src/images/contents.png b/src/images/contents.png
new file mode 100644 (file)
index 0000000..6e44fa7
Binary files /dev/null and b/src/images/contents.png differ
diff --git a/src/images/database_connect.png b/src/images/database_connect.png
new file mode 100644 (file)
index 0000000..3a11197
Binary files /dev/null and b/src/images/database_connect.png differ
diff --git a/src/images/database_save.png b/src/images/database_save.png
new file mode 100644 (file)
index 0000000..44c06dd
Binary files /dev/null and b/src/images/database_save.png differ
diff --git a/src/images/document-save-as.png b/src/images/document-save-as.png
new file mode 100644 (file)
index 0000000..7a1591f
Binary files /dev/null and b/src/images/document-save-as.png differ
diff --git a/src/images/document-save.png b/src/images/document-save.png
new file mode 100644 (file)
index 0000000..0311e47
Binary files /dev/null and b/src/images/document-save.png differ
diff --git a/src/images/doismall.png b/src/images/doismall.png
new file mode 100644 (file)
index 0000000..3c9595b
Binary files /dev/null and b/src/images/doismall.png differ
diff --git a/src/images/duplicate.png b/src/images/duplicate.png
new file mode 100644 (file)
index 0000000..5599a18
Binary files /dev/null and b/src/images/duplicate.png differ
diff --git a/src/images/edit-copy.png b/src/images/edit-copy.png
new file mode 100644 (file)
index 0000000..efec317
Binary files /dev/null and b/src/images/edit-copy.png differ
diff --git a/src/images/edit-cut.png b/src/images/edit-cut.png
new file mode 100644 (file)
index 0000000..7e750c9
Binary files /dev/null and b/src/images/edit-cut.png differ
diff --git a/src/images/edit-delete.png b/src/images/edit-delete.png
new file mode 100644 (file)
index 0000000..0ac3589
Binary files /dev/null and b/src/images/edit-delete.png differ
diff --git a/src/images/edit-find.png b/src/images/edit-find.png
new file mode 100644 (file)
index 0000000..b98e348
Binary files /dev/null and b/src/images/edit-find.png differ
diff --git a/src/images/edit-paste.png b/src/images/edit-paste.png
new file mode 100644 (file)
index 0000000..577e9c2
Binary files /dev/null and b/src/images/edit-paste.png differ
diff --git a/src/images/edit-redo.png b/src/images/edit-redo.png
new file mode 100644 (file)
index 0000000..712a8ee
Binary files /dev/null and b/src/images/edit-redo.png differ
diff --git a/src/images/edit-undo.png b/src/images/edit-undo.png
new file mode 100644 (file)
index 0000000..4652df0
Binary files /dev/null and b/src/images/edit-undo.png differ
diff --git a/src/images/editor.png b/src/images/editor.png
new file mode 100644 (file)
index 0000000..a653bfe
Binary files /dev/null and b/src/images/editor.png differ
diff --git a/src/images/emacs.png b/src/images/emacs.png
new file mode 100644 (file)
index 0000000..6b76f52
Binary files /dev/null and b/src/images/emacs.png differ
diff --git a/src/images/emblem-web-small.png b/src/images/emblem-web-small.png
new file mode 100644 (file)
index 0000000..3d81a37
Binary files /dev/null and b/src/images/emblem-web-small.png differ
diff --git a/src/images/emblem-web.png b/src/images/emblem-web.png
new file mode 100644 (file)
index 0000000..49f7290
Binary files /dev/null and b/src/images/emblem-web.png differ
diff --git a/src/images/fileclose.png b/src/images/fileclose.png
new file mode 100644 (file)
index 0000000..033326f
Binary files /dev/null and b/src/images/fileclose.png differ
diff --git a/src/images/fileclose2.png b/src/images/fileclose2.png
new file mode 100644 (file)
index 0000000..c1e5f4d
Binary files /dev/null and b/src/images/fileclose2.png differ
diff --git a/src/images/filenew.png b/src/images/filenew.png
new file mode 100644 (file)
index 0000000..7274a21
Binary files /dev/null and b/src/images/filenew.png differ
diff --git a/src/images/fileopen.png b/src/images/fileopen.png
new file mode 100644 (file)
index 0000000..7c9f7a6
Binary files /dev/null and b/src/images/fileopen.png differ
diff --git a/src/images/genIcon.png b/src/images/genIcon.png
new file mode 100644 (file)
index 0000000..5bedaa2
Binary files /dev/null and b/src/images/genIcon.png differ
diff --git a/src/images/go-down.png b/src/images/go-down.png
new file mode 100644 (file)
index 0000000..970d43a
Binary files /dev/null and b/src/images/go-down.png differ
diff --git a/src/images/go-next.png b/src/images/go-next.png
new file mode 100644 (file)
index 0000000..cfee8f4
Binary files /dev/null and b/src/images/go-next.png differ
diff --git a/src/images/go-previous.png b/src/images/go-previous.png
new file mode 100644 (file)
index 0000000..3311c05
Binary files /dev/null and b/src/images/go-previous.png differ
diff --git a/src/images/go-up.png b/src/images/go-up.png
new file mode 100644 (file)
index 0000000..4ee50ef
Binary files /dev/null and b/src/images/go-up.png differ
diff --git a/src/images/groupIncluding.png b/src/images/groupIncluding.png
new file mode 100644 (file)
index 0000000..6f2bd08
Binary files /dev/null and b/src/images/groupIncluding.png differ
diff --git a/src/images/groupRefining.png b/src/images/groupRefining.png
new file mode 100644 (file)
index 0000000..2ba0a26
Binary files /dev/null and b/src/images/groupRefining.png differ
diff --git a/src/images/grouping_morten.png b/src/images/grouping_morten.png
new file mode 100644 (file)
index 0000000..9b29f68
Binary files /dev/null and b/src/images/grouping_morten.png differ
diff --git a/src/images/groupsHighlightAll.png b/src/images/groupsHighlightAll.png
new file mode 100644 (file)
index 0000000..c6e1a97
Binary files /dev/null and b/src/images/groupsHighlightAll.png differ
diff --git a/src/images/groupsHighlightAny.png b/src/images/groupsHighlightAny.png
new file mode 100644 (file)
index 0000000..1bc2e28
Binary files /dev/null and b/src/images/groupsHighlightAny.png differ
diff --git a/src/images/help-about.png b/src/images/help-about.png
new file mode 100644 (file)
index 0000000..90ce540
Binary files /dev/null and b/src/images/help-about.png differ
diff --git a/src/images/help-browser.png b/src/images/help-browser.png
new file mode 100644 (file)
index 0000000..6de563b
Binary files /dev/null and b/src/images/help-browser.png differ
diff --git a/src/images/integrity.png b/src/images/integrity.png
new file mode 100644 (file)
index 0000000..4343947
Binary files /dev/null and b/src/images/integrity.png differ
diff --git a/src/images/lyx2.png b/src/images/lyx2.png
new file mode 100644 (file)
index 0000000..84a742f
Binary files /dev/null and b/src/images/lyx2.png differ
diff --git a/src/images/mark.png b/src/images/mark.png
new file mode 100644 (file)
index 0000000..6f8ab3a
Binary files /dev/null and b/src/images/mark.png differ
diff --git a/src/images/messageFail.png b/src/images/messageFail.png
new file mode 100644 (file)
index 0000000..474f63f
Binary files /dev/null and b/src/images/messageFail.png differ
diff --git a/src/images/messageInfo.png b/src/images/messageInfo.png
new file mode 100644 (file)
index 0000000..ecdc991
Binary files /dev/null and b/src/images/messageInfo.png differ
diff --git a/src/images/messageWarn.png b/src/images/messageWarn.png
new file mode 100755 (executable)
index 0000000..55a6f01
Binary files /dev/null and b/src/images/messageWarn.png differ
diff --git a/src/images/optIcon.png b/src/images/optIcon.png
new file mode 100644 (file)
index 0000000..64562b3
Binary files /dev/null and b/src/images/optIcon.png differ
diff --git a/src/images/pdf-new.png b/src/images/pdf-new.png
new file mode 100644 (file)
index 0000000..cda12b9
Binary files /dev/null and b/src/images/pdf-new.png differ
diff --git a/src/images/pdf.png b/src/images/pdf.png
new file mode 100644 (file)
index 0000000..d5eab07
Binary files /dev/null and b/src/images/pdf.png differ
diff --git a/src/images/postscript.png b/src/images/postscript.png
new file mode 100644 (file)
index 0000000..5065c98
Binary files /dev/null and b/src/images/postscript.png differ
diff --git a/src/images/preamble.png b/src/images/preamble.png
new file mode 100644 (file)
index 0000000..cf9d89d
Binary files /dev/null and b/src/images/preamble.png differ
diff --git a/src/images/preferences.png b/src/images/preferences.png
new file mode 100644 (file)
index 0000000..426460b
Binary files /dev/null and b/src/images/preferences.png differ
diff --git a/src/images/remove.png b/src/images/remove.png
new file mode 100644 (file)
index 0000000..0815d3f
Binary files /dev/null and b/src/images/remove.png differ
diff --git a/src/images/reqIcon.png b/src/images/reqIcon.png
new file mode 100644 (file)
index 0000000..5d2439c
Binary files /dev/null and b/src/images/reqIcon.png differ
diff --git a/src/images/search.png b/src/images/search.png
new file mode 100644 (file)
index 0000000..a555de8
Binary files /dev/null and b/src/images/search.png differ
diff --git a/src/images/splash-2.1.svg b/src/images/splash-2.1.svg
new file mode 100644 (file)
index 0000000..1f931f6
--- /dev/null
@@ -0,0 +1,229 @@
+<?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
new file mode 100644 (file)
index 0000000..4304131
Binary files /dev/null and b/src/images/splash-2.1beta.png differ
diff --git a/src/images/splash-2.3.svg b/src/images/splash-2.3.svg
new file mode 100644 (file)
index 0000000..d519da8
--- /dev/null
@@ -0,0 +1,276 @@
+<?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
new file mode 100644 (file)
index 0000000..8eaf7e1
--- /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.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>
index 55e8e0ecb4e04e766c34cd9e317644a9fe6a4a05..f571b086e2d958da45ef84b092314d5440e57add 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"
    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_beta/src/images/splash.png"
diff --git a/src/images/splash-2.6beta.svg b/src/images/splash-2.6beta.svg
new file mode 100644 (file)
index 0000000..af82162
--- /dev/null
@@ -0,0 +1,299 @@
+<?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.6beta.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="0"
+     inkscape:window-x="0"
+     inkscape:window-height="768"
+     inkscape:window-width="1272"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="px"
+     inkscape:cy="677.8697"
+     inkscape:cx="238.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_trunk/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_trunk/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"
+       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_trunk/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-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"
+       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_trunk/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_trunk/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.6</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       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-xdpi="75"
+       inkscape:export-ydpi="75"><flowRegion
+         id="flowRegion2747"><rect
+           id="rect2749"
+           width="164"
+           height="68"
+           x="482"
+           y="470.36218"
+           style="font-size:56px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#f91616;fill-opacity:0.65789472;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold" /></flowRegion><flowPara
+         id="flowPara2751">beta</flowPara></flowRoot>  </g>
+</svg>
index efc18280cf07ee57ac8534b4a251698106c88dc4..5b71a8a49e1d4cb04e3f6d90ee5944719c103255 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
new file mode 100644 (file)
index 0000000..d5a048e
Binary files /dev/null and b/src/images/splashBackground.png differ
diff --git a/src/images/strings.png b/src/images/strings.png
new file mode 100644 (file)
index 0000000..649899f
Binary files /dev/null and b/src/images/strings.png differ
diff --git a/src/images/unmark.png b/src/images/unmark.png
new file mode 100644 (file)
index 0000000..92ac338
Binary files /dev/null and b/src/images/unmark.png differ
diff --git a/src/images/user-home.png b/src/images/user-home.png
new file mode 100644 (file)
index 0000000..a3c4765
Binary files /dev/null and b/src/images/user-home.png differ
diff --git a/src/images/view-refresh.png b/src/images/view-refresh.png
new file mode 100644 (file)
index 0000000..952b5f7
Binary files /dev/null and b/src/images/view-refresh.png differ
diff --git a/src/images/viewsource.gif b/src/images/viewsource.gif
new file mode 100644 (file)
index 0000000..3ef9a2e
Binary files /dev/null and b/src/images/viewsource.gif differ
diff --git a/src/images/winedt.png b/src/images/winedt.png
new file mode 100644 (file)
index 0000000..cded1a7
Binary files /dev/null and b/src/images/winedt.png differ
diff --git a/src/images/wizard.png b/src/images/wizard.png
new file mode 100644 (file)
index 0000000..b5d81d3
Binary files /dev/null and b/src/images/wizard.png differ
diff --git a/src/images/wrongItem.png b/src/images/wrongItem.png
new file mode 100644 (file)
index 0000000..8b2f1eb
Binary files /dev/null and b/src/images/wrongItem.png differ
diff --git a/src/images/wwwciteseer.png b/src/images/wwwciteseer.png
new file mode 100644 (file)
index 0000000..1885445
Binary files /dev/null and b/src/images/wwwciteseer.png differ
index 8ed5da674bc4cbccdeb2aeaaef48799552d21500..054b44e5751f5c791014ebabb1d8d065a493cf3c 100644 (file)
@@ -1789,6 +1789,42 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         for (BibtexEntry entry : database.getEntries()){
             Util.updateCompletersForEntry(autoCompleters, entry);
         }
+
+        addJournalListToAutoCompleter();
+        addContentSelectorValuesToAutoCompleters();
+    }
+
+    /**
+     * For all fields with both autocompletion and content selector, add content selector
+     * values to the autocompleter list:
+     */
+    public void addContentSelectorValuesToAutoCompleters() {
+        for (String field : autoCompleters.keySet()) {
+            AutoCompleter ac = autoCompleters.get(field);
+            if (metaData.getData(Globals.SELECTOR_META_PREFIX + field) != null) {
+                Vector<String> items = metaData.getData(Globals.SELECTOR_META_PREFIX + field);
+                if (items != null) {
+                    Iterator<String> i = items.iterator();
+                    while (i.hasNext())
+                        ac.addWord(i.next());
+                }
+            }
+        }
+    }
+
+    /**
+     * If an autocompleter exists for the "journal" field, add all
+     * journal names in the journal abbreviation list to this autocompleter.
+     */
+    public void addJournalListToAutoCompleter() {
+        if (autoCompleters.containsKey("journal")) {
+            AutoCompleter ac = autoCompleters.get("journal");
+            Set<String> journals = Globals.journalAbbrev.getJournals().keySet();
+            for (String journal : journals)
+                ac.addWord(journal);
+        }
+
+
     }
 
 
@@ -2478,6 +2514,15 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
          };
 
       // Test: running scan automatically in background
+      if ((BasePanel.this.getFile() != null) &&
+              !Util.waitForFileLock(BasePanel.this.getFile(), 10)) {
+          // The file is locked even after the maximum wait. Do nothing.
+          System.err.println("File updated externally, but change scan failed because the file is locked.");
+          // Perturb the stored timestamp so successive checks are made:
+          Globals.fileUpdateMonitor.perturbTimestamp(getFileMonitorHandle());
+          return;
+      }
+
       scanner.changeScan(BasePanel.this.getFile());
       try {
          scanner.join();
index 27869d43c202259968741642d23656f191ded902..66e9900f88ed04b99805c3e311872699d4c1903e 100644 (file)
@@ -292,6 +292,8 @@ public class ContentSelectorDialog2 extends JDialog {
        else {
            panel.rebuildAllEntryEditors();
        }
+    panel.addContentSelectorValuesToAutoCompleters();
+        
     }
 
     /**
index ad4148d885f7ff4cb00f57a493d31de6f076f095..467db6569005bf44d0abdc86b3e7108a140ec30c 100644 (file)
@@ -25,16 +25,18 @@ public class DuplicateCheck {
         // The check if they have the same required fields:
         String[] fields = one.getType().getRequiredFields();
 
-        float req;
-        if (fields == null)
-            req = 1;
+        float req, reqWeight = 2;
+        if (fields == null) {
+            req = 0;
+            reqWeight = 0;
+        }
         else
             req = compareFieldSet(fields, one, two);
         fields = one.getType().getOptionalFields();
 
         if (fields != null) {
             float opt = compareFieldSet(fields, one, two);
-            return (2 * req + opt) / 3 >= Globals.duplicateThreshold;
+            return (reqWeight * req + opt) / (1 + reqWeight) >= Globals.duplicateThreshold;
         } else {
             return (req >= Globals.duplicateThreshold);
         }
index 5b3b4fcd07f9722e324e9d43e556af97cde6c31d..8de6827090a2d0e3dd9c5df12d6a33f3a66d8a49 100644 (file)
@@ -53,10 +53,9 @@ import net.sf.jabref.gui.*;
 import net.sf.jabref.gui.date.DatePickerButton;
 import net.sf.jabref.imports.BibtexParser;
 import net.sf.jabref.labelPattern.LabelPatternUtil;
-import net.sf.jabref.undo.NamedCompound;
-import net.sf.jabref.undo.UndoableFieldChange;
-import net.sf.jabref.undo.UndoableKeyChange;
-import net.sf.jabref.undo.UndoableRemoveEntry;
+import net.sf.jabref.undo.*;
+import com.jgoodies.looks.Options;
+import com.jgoodies.looks.HeaderStyle;
 
 /**
  * GUI component that allows editing of the fields of a BibtexEntry (i.e. the
@@ -101,6 +100,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     // The action which generates a bibtexkey for this entry.
     public GenerateKeyAction generateKeyAction;
 
+    public AutoSetFileAction autoLink = new AutoSetFileAction();
+
     public AbstractAction writeXmp;
 
     SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
@@ -247,7 +248,12 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     }
 
     private void setupToolBar() {
+        JPanel leftPan = new JPanel();
+        leftPan.setLayout(new BorderLayout());
         tlb = new JToolBar(JToolBar.VERTICAL);
+        //tlb.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
+        tlb.setBorder(null);
+        tlb.setRollover(true);
 
         tlb.setMargin(new Insets(0, 0, 0, 2));
 
@@ -262,6 +268,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         am.put("store", storeFieldAction);
         im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
         am.put("generateKey", generateKeyAction);
+        im.put(prefs.getKey("Automatically link files"), "autoLink");
+        am.put("autoLink", autoLink);
         im.put(prefs.getKey("Entry editor, previous entry"), "prev");
         am.put("prev", prevEntryAction);
         im.put(prefs.getKey("Entry editor, next entry"), "next");
@@ -275,17 +283,22 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
 
         tlb.setFloatable(false);
 
+        // Add actions (and thus buttons)
+        JButton closeBut = new JButton(closeAction);
+        closeBut.setText(null);
+        closeBut.setBorder(null);
+        leftPan.add(closeBut, BorderLayout.NORTH);
+
         // Create type-label
         typeLabel = new TypeLabel(entry.getType().getName());
-        
-        // Add actions (and thus buttons)
-        tlb.add(closeAction);
+        leftPan.add(typeLabel, BorderLayout.CENTER);
 
-        tlb.add(typeLabel);
+        //tlb.add(typeL);
 
         tlb.addSeparator();
         
         tlb.add(generateKeyAction);
+        tlb.add(autoLink);
 
         tlb.add(writeXmp);
 
@@ -304,7 +317,8 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         for (int i = 0; i < comps.length; i++)
             ((JComponent) comps[i]).setOpaque(false);
 
-        add(tlb, BorderLayout.WEST);
+        leftPan.add(tlb, BorderLayout.SOUTH);
+        add(leftPan, BorderLayout.WEST);
     }
 
     /**
@@ -386,7 +400,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
         } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + ed.getFieldName()) != null) {
             FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, ed,
                 panel.metaData, storeFieldAction, false,
-                (ed.getFieldName().equals("author") ? " and " : ", "));
+                ((ed.getFieldName().equals("author") || ed.getFieldName().equals("editor")) ? " and " : ", "));
             contentSelectors.add(ws);
 
             return ws;
@@ -720,6 +734,7 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             // oldKey = entry.getCiteKey(),
             newKey = nu.getCiteKey();
             boolean anyChanged = false;
+            boolean changedType = false;
             boolean duplicateWarning = false;
             boolean emptyWarning = newKey == null || newKey.equals("");
 
@@ -755,6 +770,14 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
                 }
             }
 
+            // See if the user has changed the entry type:
+            if (nu.getType() != entry.getType()) {
+                compound.addEdit(new UndoableChangeType(entry,
+                      entry.getType(), nu.getType()));
+                entry.setType(nu.getType());
+                anyChanged = true;
+                changedType = true;
+            }
             compound.end();
 
             if (!anyChanged)
@@ -776,10 +799,14 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             }
 
             lastSourceStringAccepted = source.getText();
-            updateAllFields();
-            lastSourceAccepted = true;
-            updateSource = true;
-
+            if (!changedType) {
+                updateAllFields();
+                lastSourceAccepted = true;
+                updateSource = true;
+            }
+            else {
+                panel.updateEntryEditorIfShowing();
+            }
             // TODO: does updating work properly after source stored?
             // panel.tableModel.remap();
             // panel.entryTable.repaint();
@@ -873,10 +900,13 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     }
 
 
-    private class TypeLabel extends JPanel {
-        private String label;
+    private class TypeLabel extends JLabel {
         public TypeLabel(String type) {
-            label = type;
+            super(type+" ");
+            setUI(new VerticalLabelUI(false));
+            setForeground(GUIGlobals.validFieldColor);
+            setHorizontalAlignment(RIGHT);
+            setFont(GUIGlobals.typeNameFont);
             addMouseListener(new MouseAdapter() {
                 public void mouseClicked(MouseEvent e) {
                     boolean ctrlClick = prefs.getBoolean("ctrlClick");
@@ -895,15 +925,16 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
             });
         }
 
-        public void paint(Graphics g) {
+        public void paintComponent(Graphics g) {
             Graphics2D g2 = (Graphics2D) g;
-            g2.setColor(GUIGlobals.validFieldColor);
-            g2.setFont(GUIGlobals.typeNameFont);
-            FontMetrics fm = g2.getFontMetrics();
-            int width = fm.stringWidth(label);
+            //g2.setColor(GUIGlobals.validFieldColor);
+            //g2.setFont(GUIGlobals.typeNameFont);
+            //FontMetrics fm = g2.getFontMetrics();
+            //int width = fm.stringWidth(label);
             g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-            g2.rotate(-Math.PI / 2, 0, 0);
-            g2.drawString(label, -width - 7, 28);
+            super.paintComponent(g2);
+            //g2.rotate(-Math.PI / 2, 0, 0);
+            //g2.drawString(label, -width - 7, 28);
         }
     }
 
@@ -1397,4 +1428,27 @@ public class EntryEditor extends JPanel implements VetoableChangeListener {
     }
 
 
+    class AutoSetFileAction extends AbstractAction {
+        public AutoSetFileAction() {
+            putValue(SMALL_ICON, GUIGlobals.getImage("autoGroup"));
+            putValue(SHORT_DESCRIPTION, Globals.lang("Automatically set file links for this entry")
+                    +" (Alt-F)");
+        }
+
+        public void actionPerformed(ActionEvent event) {
+            JDialog diag = new JDialog(frame, true);
+            final FileListTableModel tableModel = new FileListTableModel();
+            tableModel.setContent(entry.getField(GUIGlobals.FILE_FIELD));
+            FileListEditor.autoSetLinks(entry, tableModel, panel.metaData(), new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getID() > 0) {
+                        entry.setField(GUIGlobals.FILE_FIELD, tableModel.getStringRepresentation());
+                        frame.output(Globals.lang("Finished autosetting external links."));
+                    }
+                    else frame.output(Globals.lang("Finished autosetting external links.")
+                        +" "+Globals.lang("No files found."));
+                }
+            }, diag);
+        }
+    }
 }
index 42f4f4f53d1fd4ce02cdc710d8d5ba6b4f1ec60f..20289284fd0d5bd50f3609d84963f07aa63aca88 100644 (file)
@@ -48,7 +48,7 @@ import com.jgoodies.forms.layout.FormLayout;
  * A single tab displayed in the EntryEditor holding several FieldEditors.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2864 $ ($Date: 2008-11-25 21:22:56 +0100 (Tue, 25 Nov 2008) $)
+ * @version $Revision: 3072 $ ($Date: 2009-09-03 21:07:51 +0200 (Thu, 03 Sep 2009) $)
  * 
  */
 public class EntryEditorTab {
@@ -138,13 +138,14 @@ public class EntryEditorTab {
             //ta.addUndoableEditListener(bPanel.undoListener);
             
             JComponent ex = parent.getExtra(fields[i], ta);
-            setupJTextComponent(ta.getTextComponent());
 
             // Add autocompleter listener, if required for this field:
             AutoCompleter autoComp = bPanel.getAutoCompleter(fields[i]);
+            AutoCompleteListener acl = null;
             if (autoComp != null) {
-                ta.getTextComponent().addKeyListener(new AutoCompleteListener(autoComp));
+                acl = new AutoCompleteListener(autoComp);
             }
+            setupJTextComponent(ta.getTextComponent(), acl);
 
             // Store the editor for later reference:
             editors.put(fields[i], ta);
@@ -171,7 +172,7 @@ public class EntryEditorTab {
                        final FieldTextField tf = new FieldTextField(BibtexFields.KEY_FIELD, parent
                                .getEntry().getField(BibtexFields.KEY_FIELD), true);
             //tf.addUndoableEditListener(bPanel.undoListener);
-                       setupJTextComponent(tf);
+                       setupJTextComponent(tf, null);
 
                        editors.put("bibtexkey", tf);
                        /*
@@ -308,9 +309,23 @@ public class EntryEditorTab {
         * 
         * @param component
         */
-       public void setupJTextComponent(final JComponent component) {
-
-               component.addFocusListener(fieldListener);
+       public void setupJTextComponent(final JComponent component, final AutoCompleteListener acl) {
+
+        // Here we add focus listeners to the component. The funny code is because we need
+        // to guarantee that the AutoCompleteListener - if used - is called before fieldListener
+        // on a focus lost event. The AutoCompleteListener is responsible for removing any
+        // current suggestion when focus is lost, and this must be done before fieldListener
+        // stores the current edit. Swing doesn't guarantee the order of execution of event
+        // listeners, so we handle this by only adding the AutoCompleteListener and telling
+        // it to call fieldListener afterwards. If no AutoCompleteListener is used, we
+        // add the fieldListener normally.
+        if (acl != null) {
+            component.addKeyListener(acl);
+            component.addFocusListener(acl);
+            acl.setNextFocusListener(fieldListener);
+        }
+        else
+                   component.addFocusListener(fieldListener);
 
                InputMap im = component.getInputMap(JComponent.WHEN_FOCUSED);
                ActionMap am = component.getActionMap();
index 42e33e6d278eba21f1d3f4f07eba51d146f1a1bb..5d8ced51d92ace63e58299017ffbe5a61f4c0169 100644 (file)
@@ -23,7 +23,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
 
     private JCheckBox
     defSort, ctrlClick, useOwner, overwriteOwner,
-    keyDuplicateWarningDialog, keyEmptyWarningDialog,
+    keyDuplicateWarningDialog, keyEmptyWarningDialog, enforceLegalKeys,
     confirmDelete, allowEditing, memoryStick, useImportInspector,
     useImportInspectorForSingle, inspectionWarnDupli, useTimeStamp, overwriteTimeStamp,
     markImportedEntries, unmarkAllEntriesBeforeImporting;
@@ -57,6 +57,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
             +"the field set, overwrite."));
         keyDuplicateWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when a duplicate BibTeX key is entered"));
         keyEmptyWarningDialog = new JCheckBox(Globals.lang("Show warning dialog when an empty BibTeX key is entered")); // JZTODO lyrics
+        enforceLegalKeys = new JCheckBox(Globals.lang("Enforce legal characters in BibTeX keys"));
         confirmDelete = new JCheckBox(Globals.lang("Show confirmation dialog when deleting entries"));
 
         useImportInspector = new JCheckBox(Globals.lang("Display imported entries in an inspection window before they are added."));
@@ -110,6 +111,8 @@ public class GeneralTab extends JPanel implements PrefsTab {
         builder.nextLine();
         builder.append(keyEmptyWarningDialog, 13);
         builder.nextLine();
+        builder.append(enforceLegalKeys, 13);
+        builder.nextLine();
         builder.append(memoryStick, 13);
         
         // Create a new panel with its own FormLayout for the last items:
@@ -165,6 +168,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         overwriteTimeStamp.setSelected(_prefs.getBoolean("overwriteTimeStamp"));
         keyDuplicateWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForDuplicateKey"));
         keyEmptyWarningDialog.setSelected(_prefs.getBoolean("dialogWarningForEmptyKey"));
+        enforceLegalKeys.setSelected(_prefs.getBoolean("enforceLegalBibtexKey"));
         memoryStick.setSelected(_prefs.getBoolean("memoryStickMode"));
         confirmDelete.setSelected(_prefs.getBoolean("confirmDelete"));
         defOwnerField.setText(_prefs.get("defaultOwner"));
@@ -205,6 +209,7 @@ public class GeneralTab extends JPanel implements PrefsTab {
         _prefs.putBoolean("overwriteTimeStamp", overwriteTimeStamp.isSelected());
         _prefs.putBoolean("dialogWarningForDuplicateKey", keyDuplicateWarningDialog.isSelected());
         _prefs.putBoolean("dialogWarningForEmptyKey", keyEmptyWarningDialog.isSelected());
+        _prefs.putBoolean("enforceLegalBibtexKey", enforceLegalKeys.isSelected());
         if (_prefs.getBoolean("memoryStickMode") && !memoryStick.isSelected()){
             JOptionPane.showMessageDialog(null, Globals.lang("To disable the memory stick mode" +
                        " rename or remove the jabref.xml file in the same folder as JabRef."),
index 856dae88abdaf66e134defaab1f5923b26d55e00..d6625fffbf473dd877dc2484141246d09e660798 100644 (file)
@@ -410,7 +410,7 @@ public class Globals {
        }
 
 
-    public static String SPECIAL_COMMAND_CHARS = "\"`^~'c";
+    public static String SPECIAL_COMMAND_CHARS = "\"`^~'c=";
 
        public static HashMap<String, String> HTML_CHARS = new HashMap<String, String>();
        public static HashMap<String, String> HTMLCHARS = new HashMap<String, String>();
index 3e8578bb62f52499e963f0c26752ff7323352c8a..125fd413d1156b1c461c7023faea3fb990cf6e02 100644 (file)
@@ -293,7 +293,7 @@ public class JabRef {
                             loaded.add(ParserResult.INVALID_FORMAT);
                     }
                 }
-                else
+                else if (pr != ParserResult.FILE_LOCKED)
                     loaded.add(pr);
 
             }
@@ -482,10 +482,6 @@ public class JabRef {
             fetchCommand.split(":").length != 2) {
             System.out.println(Globals.lang("Expected syntax for --fetch='<name of fetcher>:<query>'"));
             System.out.println(Globals.lang("The following fetchers are available:"));
-            for (EntryFetcherExtension e : JabRefPlugin.getInstance(PluginCore.getManager())
-                .getEntryFetcherExtensions()) {
-                System.out.println("  " + e.getId().replaceAll("Fetcher", "").toLowerCase());
-            }
             return null;
         }
 
@@ -691,10 +687,11 @@ public class JabRef {
 
                         if (pr != null) {
 
-                            if (pr.isInvalid()) {
+                            if (pr == ParserResult.INVALID_FORMAT) {
                                 System.out.println(Globals.lang("Error opening file")+" '"+fileToOpen.getPath()+"'");
                             }
-                            loaded.add(pr);
+                            else if (pr != ParserResult.FILE_LOCKED)
+                                loaded.add(pr);
 
                         }
                     }
@@ -858,6 +855,13 @@ public class JabRef {
                     return postp;
                 }
             }
+
+            if (!Util.waitForFileLock(file, 10)) {
+                System.out.println(Globals.lang("Error opening file")+" '"+name+"'. "+
+                    "File is locked by another JabRef instance.");
+                return ParserResult.FILE_LOCKED;
+            }
+
             String encoding = Globals.prefs.get("defaultEncoding");
             ParserResult pr = OpenDatabaseAction.loadDatabase(file, encoding);
             if (pr == null) {
index 4b51df8189f050e5e78f8d08a6725a8b7592ddc8..fe02fde32b8cc9c5c24ae13a6d7c2cff32b8de3b 100644 (file)
@@ -261,7 +261,7 @@ public class JabRefPreferences {
 
         //defaults.put("recentFiles", "/home/alver/Documents/bibk_dok/hovedbase.bib");
         defaults.put("historySize", new Integer(8));
-        defaults.put("fontFamily", "Times");
+        defaults.put("fontFamily", "SansSerif");
         defaults.put("fontStyle", new Integer(java.awt.Font.PLAIN));
         defaults.put("fontSize", new Integer(12));
         defaults.put("overrideDefaultFonts", Boolean.FALSE);
@@ -298,6 +298,7 @@ public class JabRefPreferences {
         defaults.put("warnBeforeOverwritingKey", Boolean.TRUE);
         defaults.put("confirmDelete", Boolean.TRUE);
         defaults.put("grayOutNonHits", Boolean.TRUE);
+        defaults.put("floatSearch", Boolean.TRUE);
         defaults.put("showSearchInDialog", Boolean.FALSE);
         defaults.put("searchAllBases", Boolean.FALSE);
         defaults.put("defaultLabelPattern", "[auth][year]");
@@ -382,13 +383,15 @@ public class JabRefPreferences {
         defaults.put("autolinkExactKeyOnly", Boolean.TRUE);
         defaults.put("numericFields", "mittnum;author");
         defaults.put("runAutomaticFileSearch", Boolean.FALSE);
-
+        defaults.put("useLockFiles", Boolean.TRUE);
         defaults.put("autoSave", Boolean.TRUE);
         defaults.put("autoSaveInterval", 5);
         defaults.put("promptBeforeUsingAutosave", Boolean.TRUE);
 
         defaults.put("deletePlugins", "");
         
+        defaults.put("enforceLegalBibtexKey", Boolean.TRUE);
+
         //defaults.put("lastAutodetectedImport", "");
 
         //defaults.put("autoRemoveExactDuplicates", Boolean.FALSE);
@@ -882,6 +885,7 @@ public class JabRefPreferences {
         defKeyBinds.put("Increase table font size", "ctrl PLUS");
         defKeyBinds.put("Decrease table font size", "ctrl MINUS");
 
+        defKeyBinds.put("Automatically link files", "alt F");
     }
 
     private String getNextUnit(Reader data) throws IOException {
index 036099c0b9686a6e45537cf1de79adb5d1ddf853..1b5148c0d6c5a00f814da4a8b9ed702a993185fd 100644 (file)
@@ -22,7 +22,7 @@ import net.sf.jabref.util.DocumentPrinter;
  * Displays an BibtexEntry using the given layout format.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2983 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
+ * @version $Revision: 3047 $ ($Date: 2007-08-01 20:23:38 +0200 (Mi, 01 Aug
  *          2007) $)
  * 
  */
index 5f591e5edf601c22c7d47dbad99f9605cbf0863f..4183f992a0f8f95271539aac1c30a54acc90974e 100644 (file)
@@ -32,12 +32,13 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
 
 public class RegExpRule implements SearchRule {
 
     final boolean m_caseSensitiveSearch;
-    static RemoveBrackets removeBrackets = new RemoveBrackets();
+    //static RemoveBrackets removeBrackets = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
 
     public RegExpRule(boolean caseSensitive) {
         m_caseSensitiveSearch = caseSensitive;
index 43c041e4b8fbb1f3924bbbf7533d31c9c0f17a39..4a9b1c93fe208e0e64888289e0516a447f810ada 100644 (file)
@@ -218,7 +218,7 @@ class SearchManager2 extends SidePaneComponent
     // Select the last used mode of search:
     if (Globals.prefs.getBoolean("incrementS"))
         increment.setSelected(true);
-    else if (Globals.prefs.getBoolean("grayOutNonHits"))
+    else if (Globals.prefs.getBoolean("floatSearch"))
         floatSearch.setSelected(true);
     else if (Globals.prefs.getBoolean("showSearchInDialog"))
         showResultsInDialog.setSelected(true);
@@ -320,7 +320,7 @@ class SearchManager2 extends SidePaneComponent
         Globals.prefs.putBoolean("searchAll", searchAll.isSelected());
         Globals.prefs.putBoolean("incrementS", increment.isSelected());
         Globals.prefs.putBoolean("selectS", select.isSelected());
-        Globals.prefs.putBoolean("grayOutNonHits", floatSearch.isSelected());
+        Globals.prefs.putBoolean("floatSearch", floatSearch.isSelected());
         Globals.prefs.putBoolean("caseSensitiveSearch",
                  caseSensitive.isSelected());
         Globals.prefs.putBoolean("regExpSearch", regExpSearch.isSelected());
index 2517d0283597eb5fb8561b90134a71698d801eae..e42fe127a5bf42f24cbb1d13299716f871f271af 100644 (file)
@@ -28,12 +28,13 @@ package net.sf.jabref;
 
 import java.util.Map;
 
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
 
 public class SimpleSearchRule implements SearchRule {
 
     final boolean m_caseSensitiveSearch;
-    static RemoveBrackets removeBrackets = new RemoveBrackets();
+    //static RemoveBrackets removeBrackets = new RemoveBrackets();
+    static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
 
     public SimpleSearchRule(boolean caseSensitive) {
         m_caseSensitiveSearch = caseSensitive;
index efc49c5b58d53e9e3225f90f53df362e78d9fcec..8e44f077d4fe16bdbbc4eefb49cf17d8638dc2de 100644 (file)
@@ -51,9 +51,7 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URLDecoder;
+import java.net.*;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.text.NumberFormat;
@@ -78,18 +76,12 @@ import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
+import javax.swing.*;
 import javax.swing.undo.UndoableEdit;
 
 import net.sf.jabref.export.layout.LayoutEntry;
 import net.sf.jabref.export.layout.LayoutFormatter;
+import net.sf.jabref.export.SaveSession;
 import net.sf.jabref.external.ExternalFileType;
 import net.sf.jabref.external.ExternalFileTypeEntryEditor;
 import net.sf.jabref.external.UnknownExternalFileType;
@@ -103,6 +95,7 @@ import net.sf.jabref.imports.CiteSeerFetcher;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableFieldChange;
 import net.sf.jabref.labelPattern.LabelPatternUtil;
+import net.sf.jabref.net.URLDownload;
 
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -137,6 +130,8 @@ public class Util {
 
        final static NumberFormat idFormat;
 
+    public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
+
        static {
                idFormat = NumberFormat.getInstance();
                idFormat.setMinimumIntegerDigits(8);
@@ -315,7 +310,21 @@ public class Util {
        public static String checkLegalKey(String key) {
                if (key == null)
                        return null;
-               StringBuffer newKey = new StringBuffer();
+        if (!Globals.prefs.getBoolean("enforceLegalBibtexKey")) {
+            // User doesn't want us to enforce legal characters. We must still look
+            // for whitespace and some characters such as commas, since these would
+            // interfere with parsing:
+            StringBuilder newKey = new StringBuilder();
+            for (int i = 0; i < key.length(); i++) {
+                char c = key.charAt(i);
+                if (!Character.isWhitespace(c) && (c != '{') && (c != '\\') && (c != '"')
+                    && (c != '}') && (c != ','))
+                    newKey.append(c);
+            }
+            return newKey.toString();
+
+        }
+               StringBuilder newKey = new StringBuilder();
                for (int i = 0; i < key.length(); i++) {
                        char c = key.charAt(i);
                        if (!Character.isWhitespace(c) && (c != '#') && (c != '{') && (c != '\\') && (c != '"')
@@ -403,9 +412,9 @@ public class Util {
                return out.toString();// .replaceAll("\n", "\n\t");
        }
 
-       public static HashSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
+       public static TreeSet<String> findDeliminatedWordsInField(BibtexDatabase db, String field,
                String deliminator) {
-               HashSet<String> res = new HashSet<String>();
+               TreeSet<String> res = new TreeSet<String>();
                
                for (String s : db.getKeySet()){
                        BibtexEntry be = db.getEntryById(s);
@@ -414,7 +423,7 @@ public class Util {
                                String fieldValue = o.toString().trim();
                                StringTokenizer tok = new StringTokenizer(fieldValue, deliminator);
                                while (tok.hasMoreTokens())
-                                       res.add(tok.nextToken().trim());
+                                       res.add(nCase(tok.nextToken().trim()));
                        }
                }
                return res;
@@ -434,8 +443,8 @@ public class Util {
         *            a <code>String</code> value
         * @return a <code>HashSet</code> value
         */
-       public static HashSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
-               HashSet<String> res = new HashSet<String>();
+       public static TreeSet<String> findAllWordsInField(BibtexDatabase db, String field, String remove) {
+               TreeSet<String> res = new TreeSet<String>();
                StringTokenizer tok;
                for (String s : db.getKeySet()){
                        BibtexEntry be = db.getEntryById(s);
@@ -443,12 +452,42 @@ public class Util {
                        if (o != null) {
                                tok = new StringTokenizer(o.toString(), remove, false);
                                while (tok.hasMoreTokens())
-                                       res.add(tok.nextToken());
+                                       res.add(nCase(tok.nextToken().trim()));
                        }
                }
                return res;
        }
 
+
+    /**
+     * Finds all authors' last names in all the given fields for the given database.
+     * @param db The database.
+     * @param fields The fields to look in.
+     * @return a set containing the names.
+     */
+    public static Set<String> findAuthorLastNames(BibtexDatabase db, List<String> fields) {
+               Set<String> res = new TreeSet<String>();
+               for (String s : db.getKeySet()){
+                       BibtexEntry be = db.getEntryById(s);
+            for (String field : fields) {
+                String val = be.getField(field);
+                if ((val != null) && (val.length() > 0)) {
+                    AuthorList al = AuthorList.getAuthorList(val);
+                    for (int i=0; i<al.size(); i++) {
+                        AuthorList.Author a = al.getAuthor(i);
+                        String lastName = a.getLast();
+                        if ((lastName != null) && (lastName.length() > 0))
+                            res.add(lastName);
+                    }
+                }
+
+            }
+               }
+
+               return res;
+       }
+    
+
        /**
         * Takes a String array and returns a string with the array's elements
         * delimited by a certain String.
@@ -677,11 +716,32 @@ public class Util {
         *            The file name.
      * @return false if the link couldn't be resolved, true otherwise.
         */
-       public static boolean openExternalFileAnyFormat(MetaData metaData, String link,
-                                                 ExternalFileType fileType) throws IOException {
+       public static boolean openExternalFileAnyFormat(final MetaData metaData, String link,
+                                                 final ExternalFileType fileType) throws IOException {
 
-        boolean httpLink = link.toLowerCase().startsWith("http");
+        boolean httpLink = false;
 
+        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
+            httpLink = true;
+        }
+        /*if (link.toLowerCase().startsWith("file://")) {
+            link = link.substring(7);
+        }
+        final String ln = link;
+        if (remoteLinkPattern.matcher(link.toLowerCase()).matches()) {
+            (new Thread(new Runnable() {
+                public void run() {
+                    openRemoteExternalFile(metaData, ln, fileType);
+                }
+            })).start();
+
+            return true;
+        }*/
+
+        //boolean httpLink = link.toLowerCase().startsWith("http:")
+        //        || link.toLowerCase().startsWith("ftp:");
+
+        
         // For other platforms we'll try to find the file type:
                File file = new File(link);
 
@@ -777,6 +837,34 @@ public class Util {
 
     }
 
+
+    public static void openRemoteExternalFile(final MetaData metaData,
+                                              final String link, final ExternalFileType fileType) {
+        File temp = null;
+        try {
+            temp = File.createTempFile("jabref-link", "."+fileType.getExtension());
+            temp.deleteOnExit();
+            System.out.println("Downloading to '"+temp.getPath()+"'");
+            URLDownload ud = new URLDownload(null, new URL(link), temp);
+            ud.download();
+            System.out.println("Done");
+        } catch (MalformedURLException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+        final String ln = temp.getPath();
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                try {
+                    openExternalFileAnyFormat(metaData, ln, fileType);
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                }
+            }
+        });
+    }
+
 public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry entry, MetaData metaData,
                                            String link, UnknownExternalFileType fileType) throws IOException {
 
@@ -2709,5 +2797,62 @@ public static boolean openExternalFileUnknown(JabRefFrame frame, BibtexEntry ent
         // of execution will not continue until run() is finished.
         clb.update(); // Runs the update() method on the EDT.
     }
-       
+
+    /**
+     * This method checks whether there is a lock file for the given file. If
+     * there is, it waits for 500 ms. This is repeated until the lock is gone
+     * or we have waited the maximum number of times.
+     *
+     * @param file The file to check the lock for.
+     * @param maxWaitCount The maximum number of times to wait.
+     * @return true if the lock file is gone, false if it is still there.
+     */
+    public static boolean waitForFileLock(File file, int maxWaitCount) {
+        // Check if the file is locked by another JabRef user:
+        int lockCheckCount = 0;
+        while (Util.hasLockFile(file)) {
+
+            System.out.println("File locked... waiting");
+            if (lockCheckCount++ == maxWaitCount) {
+                System.out.println("Giving up wait.");
+                return false;
+            }
+            try { Thread.sleep(500); } catch (InterruptedException ex) {}
+        }
+        return true;
+    }
+
+    /**
+     * Check whether a lock file exists for this file.
+     * @param file The file to check.
+     * @return true if a lock file exists, false otherwise.
+     */
+    public static boolean hasLockFile(File file) {
+        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
+        return lock.exists();
+    }
+
+    /**
+     * Find the lock file's last modified time, if it has a lock file.
+     * @param file The file to check.
+     * @return the last modified time if lock file exists, -1 otherwise.
+     */
+    public static long getLockFileTimeStamp(File file) {
+        File lock = new File(file.getPath()+ SaveSession.LOCKFILE_SUFFIX);
+        return lock.exists() ? lock.lastModified() : -1;
+    }
+
+        /**
+     * Check if a lock file exists, and delete it if it does.
+     * @return true if the lock file existed, false otherwise.
+     * @throws IOException if something goes wrong.
+     */
+    public static boolean deleteLockFile(File file) {
+        File lock = new File(file.getPath()+SaveSession.LOCKFILE_SUFFIX);
+        if (!lock.exists()) {
+            return false;
+        }
+        lock.delete();
+        return true;
+    }
 }
\ No newline at end of file
index 342fd8fd459a015dc5c5c5fb270bf012db956f31..754e3924ed590f8b2aa2f49e67ecce68e1fa4bcf 100644 (file)
@@ -2,6 +2,8 @@ package net.sf.jabref.collab;
 
 import net.sf.jabref.Globals;
 import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.JComponent;
 import net.sf.jabref.undo.NamedCompound;
@@ -57,8 +59,10 @@ public abstract class Change extends DefaultMutableTreeNode {
   * Perform the change. This method is responsible for adding a proper undo edit to
   * the NamedCompound, so the change can be undone.
   * @param panel BasePanel The tab where the database lives.
+  * @param secondary BibtexDatabase The "tmp" database for which the change
+  *   should also be made.
   * @param undoEdit NamedCompound The compound to hold the undo edits.
   */
-  abstract void makeChange(BasePanel panel, NamedCompound undoEdit);
+  abstract void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit);
 
 }
index 92aa1b3ca9056b11c7aefe7a124c3019ace1e133..3ddaf27be4f958f6c2fcfbe80f1f5e9352b0a157 100644 (file)
@@ -13,11 +13,13 @@ import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 import java.util.Enumeration;
 import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.undo.NamedCompound;
 
 public class ChangeDisplayDialog extends JDialog implements TreeSelectionListener {
 
-  DefaultMutableTreeNode root;
+    private BibtexDatabase secondary;
+    DefaultMutableTreeNode root;
   JTree tree;
   JPanel infoPanel = new JPanel(),
       buttonPanel = new JPanel(),
@@ -30,9 +32,16 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
   JComponent infoShown = null;
     private boolean okPressed = false;
 
-  public ChangeDisplayDialog(JFrame owner, final BasePanel panel, final DefaultMutableTreeNode root) {
+  public ChangeDisplayDialog(JFrame owner, final BasePanel panel,
+                             BibtexDatabase secondary, final DefaultMutableTreeNode root) {
     super(owner, Globals.lang("External changes"), true);
-    this.root = root;
+      this.secondary = secondary;
+
+      // Just to be sure, put in an empty secondary base if none is given:
+      if (secondary == null) {
+          this.secondary = new BibtexDatabase();
+      }
+      this.root = root;
     tree = new JTree(root);
     tree.addTreeSelectionListener(this);
     JSplitPane pane = new JSplitPane();
@@ -77,7 +86,7 @@ public class ChangeDisplayDialog extends JDialog implements TreeSelectionListene
         for (; enumer.hasMoreElements();) {
           Change c = (Change)enumer.nextElement();
           if (c.isAcceptable() && c.isAccepted())
-            c.makeChange(panel, ce);
+            c.makeChange(panel, ChangeDisplayDialog.this.secondary, ce);
         }
         ce.end();
         panel.undoManager.addEdit(ce);
index 5e18b1a48653a1bc0c50dbba44df0dc8075bd0de..e2969a99c42bda25718ef6b36a089fc98b23d8c8 100644 (file)
@@ -4,12 +4,17 @@ import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Vector;
+import java.util.ArrayList;
 
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.DefaultMutableTreeNode;
 
 import net.sf.jabref.*;
+import net.sf.jabref.export.FileActions;
+import net.sf.jabref.export.SaveException;
+import net.sf.jabref.export.SaveSession;
 import net.sf.jabref.groups.GroupTreeNode;
 import net.sf.jabref.imports.OpenDatabaseAction;
 import net.sf.jabref.imports.ParserResult;
@@ -20,8 +25,8 @@ public class ChangeScanner extends Thread {
     final double MATCH_THRESHOLD = 0.4;
     final String[] sortBy = new String[] {"year", "author", "title" };
     File f;
-    BibtexDatabase inMem;
-    MetaData mdInMem;
+    BibtexDatabase inMem, inTemp = null;
+    MetaData mdInMem, mdInTemp;
     BasePanel panel;
     JabRefFrame frame;
 
@@ -58,8 +63,8 @@ public class ChangeScanner extends Thread {
             File tempFile = Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle());
             ParserResult pr = OpenDatabaseAction.loadDatabase(tempFile,
             Globals.prefs.get("defaultEncoding"));
-            BibtexDatabase inTemp = pr.getDatabase();
-            MetaData mdInTemp = new MetaData(pr.getMetaData(),inTemp);
+            inTemp = pr.getDatabase();
+            mdInTemp = new MetaData(pr.getMetaData(),inTemp);
             // Parse the modified file.
             pr = OpenDatabaseAction.loadDatabase(f, Globals.prefs.get("defaultEncoding"));
             BibtexDatabase onDisk = pr.getDatabase();
@@ -80,7 +85,7 @@ public class ChangeScanner extends Thread {
             EntrySorter sInMem = inMem.getSorter(comp);
 
             // Start looking at changes.
-
+            scanMetaData(mdInMem, mdInTemp, mdOnDisk);
             scanPreamble(inMem, inTemp, onDisk);
             scanStrings(inMem, inTemp, onDisk);
 
@@ -95,6 +100,7 @@ public class ChangeScanner extends Thread {
         }
     }
 
+
     public boolean changesFound() {
         return changes.getChildCount() > 0;
     }
@@ -103,10 +109,14 @@ public class ChangeScanner extends Thread {
         if (changes.getChildCount() > 0) {
             SwingUtilities.invokeLater(new Runnable() {
                 public void run() {
-                    ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, changes);
+                    ChangeDisplayDialog dial = new ChangeDisplayDialog(frame, panel, inTemp, changes);
                     Util.placeDialog(dial, frame);
                     dial.setVisible(true); // dial.show(); -> deprecated since 1.5
                     fup.scanResultsResolved(dial.isOkPressed());
+                    if (dial.isOkPressed()) {
+                        // Overwrite the temp database:
+                        storeTempDatabase();
+                    }
                 }
             });
 
@@ -117,6 +127,60 @@ public class ChangeScanner extends Thread {
         }
     }
 
+    private void storeTempDatabase() {
+        new Thread(new Runnable() {
+            public void run() {
+                System.out.println("Storing temp database");
+                try {
+                    SaveSession ss = FileActions.saveDatabase(inTemp, mdInTemp,
+                        Globals.fileUpdateMonitor.getTempFile(panel.fileMonitorHandle()), Globals.prefs,
+                        false, false, panel.getEncoding(), true);
+                    ss.commit();
+                    System.out.println("done");
+                } catch (SaveException ex) {
+                    System.out.println("Problem updating tmp file after accepting external changes");
+                }
+
+
+            }
+        }).start();
+    }
+
+    private void scanMetaData(MetaData inMem, MetaData inTemp, MetaData onDisk) {
+        MetaDataChange mdc = new MetaDataChange(inMem, inTemp);
+        ArrayList<String> handledOnDisk = new ArrayList<String>();
+        // Loop through the metadata entries of the "tmp" database, looking for
+        // matches
+        for (Iterator i = inTemp.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            // See if the key is missing in the disk database:
+            Vector<String> vod = onDisk.getData(key);
+            if (vod == null) {
+                mdc.insertMetaDataRemoval(key);
+            }
+            else {
+                // Both exist. Check if they are different:
+                Vector<String> vit = inTemp.getData(key);
+                if (!vod.equals(vit))
+                    mdc.insertMetaDataChange(key, vod);
+                // Remember that we've handled this one:
+                handledOnDisk.add(key);
+            }
+        }
+
+        // See if there are unhandled keys in the disk database:
+        for (Iterator i = onDisk.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            if (!handledOnDisk.contains(key)) {
+                mdc.insertMetaDataAddition(key, onDisk.getData(key));
+            }
+        }
+
+        if (mdc.getChangeCount() > 0)
+            changes.add(mdc);
+    }
+
+
     private void scanEntries(EntrySorter mem, EntrySorter tmp, EntrySorter disk) {
 
         // Create pointers that are incremented as the entries of each base are used in
@@ -129,7 +193,7 @@ public class ChangeScanner extends Thread {
         HashSet<String> used = new HashSet<String>(disk.getEntryCount());
         HashSet<Integer> notMatched = new HashSet<Integer>(tmp.getEntryCount());
 
-        // Loop through the entries of the "mem" database, looking for exact matches in the "disk" one.
+        // Loop through the entries of the "tmp" database, looking for exact matches in the "disk" one.
         // We must finish scanning for exact matches before looking for near matches, to avoid an exact
         // match being "stolen" from another entry.
         mainLoop: for (piv1=0; piv1<tmp.getEntryCount(); piv1++) {
@@ -323,11 +387,11 @@ public class ChangeScanner extends Thread {
                             // But they have nonmatching contents, so we've found a change.
                             BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
                             if (mem != null)
-                                changes.add(new StringChange(mem, tmp.getName(),
+                                changes.add(new StringChange(mem, tmp, tmp.getName(),
                                 mem.getContent(),
                                 tmp.getContent(), disk.getContent()));
                             else
-                                changes.add(new StringChange(null, tmp.getName(), null, tmp.getContent(), disk.getContent()));
+                                changes.add(new StringChange(null, tmp, tmp.getName(), null, tmp.getContent(), disk.getContent()));
                         }
                         used.add(diskId);
                         //if (j==piv2)
@@ -370,7 +434,7 @@ public class ChangeScanner extends Thread {
                                 }
                             }
 
-                            changes.add(new StringNameChange(bsMem, bsMem.getName(),
+                            changes.add(new StringNameChange(bsMem, tmp, bsMem.getName(),
                             tmp.getName(), disk.getName(),
                             tmp.getContent()));
                             i.remove();
@@ -389,7 +453,7 @@ public class ChangeScanner extends Thread {
                 BibtexString tmp = onTmp.getString(nmId);
                 BibtexString mem = findString(inMem, tmp.getName(), usedInMem);
                 if (mem != null) { // The removed string is not removed from the mem version.
-                    changes.add(new StringRemoveChange(tmp, mem));
+                    changes.add(new StringRemoveChange(tmp, tmp, mem));
                 }
             }
         }
@@ -434,12 +498,12 @@ public class ChangeScanner extends Thread {
             return;
         if ((groupsTmp != null && groupsDisk == null)
                 || (groupsTmp == null && groupsDisk != null)) {
-            changes.add(new GroupChange(groupsDisk));
+            changes.add(new GroupChange(groupsDisk, groupsTmp));
             return;
         }
         if (groupsTmp.equals(groupsDisk))
             return;
-        changes.add(new GroupChange(groupsDisk));
+        changes.add(new GroupChange(groupsDisk, groupsTmp));
         return;
 
 //
index 50530415a2af8411c3dbba0e8e16412ab2109345..275e8cfec49e59a59ade0ca5ccddc1ab4025636c 100644 (file)
@@ -22,9 +22,10 @@ public class EntryAddChange extends Change {
     sp = new JScrollPane(pp);
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
       diskEntry.setId(Util.createNeutralId());
       panel.database().insertEntry(diskEntry);
+      secondary.insertEntry(diskEntry);
       undoEdit.addEdit(new UndoableInsertEntry(panel.database(), diskEntry, panel));
   }
 
index bfc971909ab39dbb14972988f576e8a1e092141a..01a44f5e55f6c493bc1ef63b587c1fb3967e47be 100644 (file)
@@ -51,15 +51,15 @@ public class EntryChange extends Change {
       if ((tmp != null) && (disk != null)) {
         if (!tmp.equals(disk)) {
           // Modified externally.
-          add(new FieldChange(field, memEntry, mem, tmp, disk));
+          add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
         }
       } else if ((tmp == null) && (disk != null) && !disk.equals("")) {
         // Added externally.
-        add(new FieldChange(field, memEntry, mem, tmp, disk));
+        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
       } else if ((disk == null) && (tmp != null) && !tmp.equals("")
                  && (mem != null) && !mem.equals("")) {
         // Deleted externally and not locally.
-        add(new FieldChange(field, memEntry, mem, tmp, disk));
+        add(new FieldChange(field, memEntry, tmpEntry, mem, tmp, disk));
       }
 
       //Util.pr("Field: "+fld.next());
@@ -67,14 +67,14 @@ public class EntryChange extends Change {
   }
 
   
-public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
        @SuppressWarnings("unchecked")
     Enumeration<Change> e = children();
     for (; e.hasMoreElements();) {
       Change c = e.nextElement();
       if (c.isAcceptable() && c.isAccepted())
-        c.makeChange(panel, undoEdit);
+        c.makeChange(panel, secondary, undoEdit);
     }
 
     /*panel.database().removeEntry(memEntry.getId());
@@ -93,13 +93,14 @@ public void makeChange(BasePanel panel, NamedCompound undoEdit) {
 
   class FieldChange extends Change {
 
-    BibtexEntry entry;
+    BibtexEntry entry, tmpEntry;
     String field, inMem, onTmp, onDisk;
     InfoPane tp = new InfoPane();
     JScrollPane sp = new JScrollPane(tp);
 
-    public FieldChange(String field, BibtexEntry memEntry, String inMem, String onTmp, String onDisk) {
+    public FieldChange(String field, BibtexEntry memEntry, BibtexEntry tmpEntry, String inMem, String onTmp, String onDisk) {
       entry = memEntry;
+      this.tmpEntry = tmpEntry;
       name = field;
       this.field = field;
       this.inMem = inMem;
@@ -117,6 +118,8 @@ public void makeChange(BasePanel panel, NamedCompound undoEdit) {
 
       if ((inMem != null) && !inMem.equals(""))
           text.append("<H3>").append(Globals.lang("Current value")).append(":</H3>" + " ").append(inMem);
+      if ((onTmp != null) && !onTmp.equals(""))
+          text.append("<H3>").append(Globals.lang("Current tmp value")).append(":</H3>" + " ").append(onTmp);
       else {
         // No value in memory.
         /*if ((onTmp != null) && !onTmp.equals(inMem))
@@ -127,10 +130,11 @@ public void makeChange(BasePanel panel, NamedCompound undoEdit) {
       tp.setText(text.toString());
     }
 
-    public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+    public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
       //System.out.println(field+" "+onDisk);
       entry.setField(field, onDisk);
       undoEdit.addEdit(new UndoableFieldChange(entry, field, inMem, onDisk));
+      tmpEntry.setField(field, onDisk);
     }
 
     JComponent description() {
index 121e2cfe44a0ce63ce7481b31724cc3fa9cd203f..d3997bbfaec26aaabba03ac61a6cb11911a16c02 100644 (file)
@@ -34,9 +34,10 @@ public class EntryDeleteChange extends Change {
     sp = new JScrollPane(pp);
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
     panel.database().removeEntry(memEntry.getId());
     undoEdit.addEdit(new UndoableRemoveEntry(panel.database(), memEntry, panel));
+    secondary.removeEntry(tmpEntry.getId());
   }
 
   JComponent description() {
index 92b2624d332ec963d111f9d672e2a3f80b78c657..0f7b43304d17b53114f030b824e14c67a8e3b9e3 100644 (file)
@@ -91,6 +91,20 @@ public class FileUpdateMonitor extends Thread {
        }
     }
 
+    /**
+     * Change the stored timestamp for the given file. If the timestamp equals
+     * the file's timestamp on disk, after this call the file will appear to
+     * have been modified. Used if a file has been modified, and the change
+     * scan fails, in order to ensure successive checks.
+     * @param handle the handle to the correct file.
+     */
+    public void perturbTimestamp(String handle) {
+        Object o = entries.get(handle);
+        if (o == null)
+            return;
+        ((Entry)o).timeStamp--;
+    }
+
   /**
    * Removes a listener from the monitor.
    * @param handle String The handle for the listener to remove.
@@ -213,7 +227,8 @@ public class FileUpdateMonitor extends Thread {
     // Globals.prefs.get("tempDir")
     //while ((f = File.createTempFile("jabref"+(tmpNum++), null)).exists());
     try {
-       f = File.createTempFile("jabref", null);
+           f = File.createTempFile("jabref", null);
+        f.deleteOnExit();
        //System.out.println(f.getPath());
     } catch (IOException ex) {
        ex.printStackTrace();
index 9b81a58712c56527f30e6d30668d2931b3e4d3d1..ed438ba5f696b0f609ce75c5616e1745f8f8da22 100644 (file)
@@ -5,6 +5,7 @@ import javax.swing.JLabel;
 
 import net.sf.jabref.BasePanel;
 import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.groups.AllEntriesGroup;
 import net.sf.jabref.groups.GroupTreeNode;
 import net.sf.jabref.groups.UndoableModifySubtree;
@@ -12,14 +13,17 @@ import net.sf.jabref.undo.NamedCompound;
 
 public class GroupChange extends Change {
     private final GroupTreeNode m_changedGroups;
-    public GroupChange(GroupTreeNode changedGroups) {
+    private GroupTreeNode tmpGroupRoot;
+
+    public GroupChange(GroupTreeNode changedGroups, GroupTreeNode tmpGroupRoot) {
         super(changedGroups != null ? 
                 "Modified groups tree"
                 : "Removed all groups"); // JZTODO lyrics
         m_changedGroups = changedGroups;
+        this.tmpGroupRoot = tmpGroupRoot;
     }
 
-    public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+    public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
         final GroupTreeNode root = panel.getGroupSelector().getGroupTreeRoot();
         final UndoableModifySubtree undo = new UndoableModifySubtree(
                 panel.getGroupSelector(), root, Globals.lang("Modified groups")); // JZTODO lyrics
@@ -39,6 +43,14 @@ public class GroupChange extends Change {
         }
         panel.getGroupSelector().revalidateGroups();
         undoEdit.addEdit(undo);
+        
+        // Update tmp database:
+        GroupTreeNode copied = m_changedGroups.deepCopy();
+        tmpGroupRoot.removeAllChildren();
+        tmpGroupRoot.setGroup(copied.getGroup());
+        for (int i = 0; i < copied.getChildCount(); ++i)
+            tmpGroupRoot.add(((GroupTreeNode) copied.getChildAt(i)).deepCopy());
+        tmpGroupRoot.refreshGroupsForNewDatabase(secondary);
     }
 
     JComponent description() {
diff --git a/src/java/net/sf/jabref/collab/MetaDataChange.java b/src/java/net/sf/jabref/collab/MetaDataChange.java
new file mode 100644 (file)
index 0000000..34f4f17
--- /dev/null
@@ -0,0 +1,108 @@
+package net.sf.jabref.collab;
+
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.BibtexDatabase;
+import net.sf.jabref.MetaData;
+import net.sf.jabref.Globals;
+import net.sf.jabref.undo.NamedCompound;
+
+import javax.swing.*;
+import java.util.Vector;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * 
+ */
+public class MetaDataChange extends Change {
+
+    static final int
+        ADD = 1,
+        REMOVE = 2,
+        MODIFY = 3;
+
+    InfoPane tp = new InfoPane();
+    JScrollPane sp = new JScrollPane(tp);
+    private MetaData md;
+    private MetaData mdSecondary;
+    ArrayList<MetaDataChangeUnit> changes = new ArrayList<MetaDataChangeUnit>();
+
+    public MetaDataChange(MetaData md, MetaData mdSecondary) {
+        super(Globals.lang("Metadata change"));
+        this.md = md;
+        this.mdSecondary = mdSecondary;
+
+        tp.setText("<html>"+Globals.lang("Metadata change")+"</html>");
+    }
+
+    public int getChangeCount() {
+        return changes.size();
+    }
+
+    public void insertMetaDataAddition(String key, Vector<String> value) {
+        changes.add(new MetaDataChangeUnit(ADD, key, value));
+    }
+
+    public void insertMetaDataRemoval(String key) {
+        changes.add(new MetaDataChangeUnit(REMOVE, key, null));
+    }
+
+    public void insertMetaDataChange(String key, Vector<String> value) {
+        changes.add(new MetaDataChangeUnit(MODIFY, key, value));
+    }
+
+    JComponent description() {
+        StringBuilder sb = new StringBuilder("<html>"+Globals.lang("Changes have been made to the following metadata elements")+":<p>");
+        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
+            MetaDataChangeUnit unit = iterator.next();
+            sb.append("<br>&nbsp;&nbsp;");
+            sb.append(unit.key);
+            /*switch (unit.type) {
+                case ADD:
+                    sb.append("<p>Added: "+unit.key);
+                    break;
+                case REMOVE:
+                    sb.append("<p>Removed: "+unit.key);
+                    break;
+                case MODIFY:
+                    sb.append("<p>Modified: "+unit.key);
+                    break;
+            }*/
+        }
+        sb.append("</html>");
+        tp.setText(sb.toString());
+        return sp;
+    }
+
+    void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
+        for (Iterator<MetaDataChangeUnit> iterator = changes.iterator(); iterator.hasNext();) {
+            MetaDataChangeUnit unit = iterator.next();
+            switch (unit.type) {
+                case ADD:
+                    md.putData(unit.key, unit.value);
+                    mdSecondary.putData(unit.key, unit.value);
+                    break;
+                case REMOVE:
+                    md.remove(unit.key);
+                    mdSecondary.remove(unit.key);
+                    break;
+                case MODIFY:
+                    md.putData(unit.key, unit.value);
+                    mdSecondary.putData(unit.key, unit.value);
+                    break;
+            }
+        }
+    }
+
+    class MetaDataChangeUnit {
+        int type;
+        String key;
+        Vector<String> value;
+
+        public MetaDataChangeUnit(int type, String key, Vector<String> value) {
+            this.type = type;
+            this.key = key;
+            this.value = value;
+        }
+    }
+}
index 6234e7224db0ab0bc66b6a7186b2f2ef58911960..d82388da3fe2aafe565c398e137661935f89b9c9 100644 (file)
@@ -5,6 +5,7 @@ import javax.swing.JScrollPane;
 
 import net.sf.jabref.BasePanel;
 import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoablePreambleChange;
 
@@ -36,9 +37,10 @@ public class PreambleChange extends Change {
       tp.setText(text.toString());
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
     panel.database().setPreamble(disk);
     undoEdit.addEdit(new UndoablePreambleChange(panel.database(), panel, mem, disk));
+      secondary.setPreamble(disk);
   }
 
   JComponent description() {
index d2978bf80712d9d720ffd8c9164698e5ff0ec8e5..e1093718afe9c1f4c972445dcc7058e1b4265df2 100644 (file)
@@ -3,10 +3,7 @@ package net.sf.jabref.collab;
 import javax.swing.JComponent;
 import javax.swing.JScrollPane;
 
-import net.sf.jabref.BasePanel;
-import net.sf.jabref.BibtexString;
-import net.sf.jabref.Globals;
-import net.sf.jabref.KeyCollisionException;
+import net.sf.jabref.*;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableInsertString;
 
@@ -35,7 +32,7 @@ public class StringAddChange extends Change {
 
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
     if (panel.database().hasStringLabel(string.getName())) {
       // The name to change to is already in the database, so we can't comply.
@@ -49,7 +46,12 @@ public class StringAddChange extends Change {
     } catch (KeyCollisionException ex) {
       Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
     }
-
+    try {
+        secondary.addString(new BibtexString(Util.createNeutralId(), string.getName(),
+                string.getContent()));
+    } catch (KeyCollisionException ex) {
+        Globals.logger("Error: could not add string '"+string.getName()+"' to tmp database: "+ex.getMessage());
+    }
   }
 
 
index f57729fe71a3d1a0196f357068767040f4aee1bc..ddc320a9b8308b255cc4fe0f7bf993ccd648ddf4 100644 (file)
@@ -15,9 +15,12 @@ public class StringChange extends Change {
 
   InfoPane tp = new InfoPane();
   JScrollPane sp = new JScrollPane(tp);
+    private BibtexString tmpString;
 
-  public StringChange(BibtexString string, String label, String mem, String tmp, String disk) {
-    name = Globals.lang("Modified string")+": '"+label+"'";
+    public StringChange(BibtexString string, BibtexString tmpString, String label,
+                      String mem, String tmp, String disk) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Modified string")+": '"+label+"'";
     this.string = string;
     this.label = label;
     this.mem = mem;
@@ -46,10 +49,12 @@ public class StringChange extends Change {
     tp.setText(sb.toString());
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
     if (string != null) {
       string.setContent(disk);
       undoEdit.addEdit(new UndoableStringChange(panel, string, false, mem, disk));
+        // Update tmp databse:
+
     } else {
       // The string was removed or renamed locally. We guess that it was removed.
        String newId = Util.createNeutralId();
@@ -61,6 +66,15 @@ public class StringChange extends Change {
            Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
        }
     }
+
+      // Update tmp database:
+      if (tmpString != null) {
+          tmpString.setContent(disk);
+      }
+      else {
+          BibtexString bs = new BibtexString(Util.createNeutralId(), label, disk);
+          secondary.addString(bs);
+      }
   }
 
 
index e3ea8bec50cee17ce3c16ba1a345080b6ea232a7..a2ef52dd07f3e8429c42caf7a1ab86e1dc6f5f60 100644 (file)
@@ -12,9 +12,12 @@ public class StringNameChange extends Change {
 
   BibtexString string;
   String mem, tmp, disk, content;
+    private BibtexString tmpString;
 
-  public StringNameChange(BibtexString string, String mem, String tmp, String disk, String content) {
-    name = Globals.lang("Renamed string")+": '"+tmp+"'";
+    public StringNameChange(BibtexString string, BibtexString tmpString,
+                          String mem, String tmp, String disk, String content) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Renamed string")+": '"+tmp+"'";
     this.string = string;
     this.content = content;
     this.mem = mem;
@@ -23,7 +26,7 @@ public class StringNameChange extends Change {
 
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
     if (panel.database().hasStringLabel(disk)) {
       // The name to change to is already in the database, so we can't comply.
@@ -46,6 +49,16 @@ public class StringNameChange extends Change {
         Globals.logger("Error: could not add string '"+bs.getName()+"': "+ex.getMessage());
       }
     }
+
+      // Update tmp database:
+      if (tmpString != null) {
+          tmpString.setName(disk);
+      }
+      else {
+          String newId = Util.createNeutralId();
+             BibtexString bs = new BibtexString(newId, disk, content);
+          secondary.addString(bs);
+      }
   }
 
 
index 3e9be6814f5a497b96afd67c7b189ebbdcb81c3e..c45d00f08a25abc8d02554cf6bf27159fa2c6317 100644 (file)
@@ -6,6 +6,7 @@ import javax.swing.JScrollPane;
 import net.sf.jabref.BasePanel;
 import net.sf.jabref.BibtexString;
 import net.sf.jabref.Globals;
+import net.sf.jabref.BibtexDatabase;
 import net.sf.jabref.undo.NamedCompound;
 import net.sf.jabref.undo.UndoableRemoveString;
 
@@ -15,10 +16,12 @@ public class StringRemoveChange extends Change {
 
   InfoPane tp = new InfoPane();
   JScrollPane sp = new JScrollPane(tp);
+    private BibtexString tmpString;
 
 
-  public StringRemoveChange(BibtexString string, BibtexString inMem) {
-    name = Globals.lang("Removed string")+": '"+string.getName()+"'";
+    public StringRemoveChange(BibtexString string, BibtexString tmpString, BibtexString inMem) {
+        this.tmpString = tmpString;
+        name = Globals.lang("Removed string")+": '"+string.getName()+"'";
     this.string = string;
     this.inMem = inMem; // Holds the version in memory. Check if it has been modified...?
 
@@ -36,7 +39,7 @@ public class StringRemoveChange extends Change {
 
   }
 
-  public void makeChange(BasePanel panel, NamedCompound undoEdit) {
+  public void makeChange(BasePanel panel, BibtexDatabase secondary, NamedCompound undoEdit) {
 
     try {
       panel.database().removeString(inMem.getId());
@@ -45,6 +48,8 @@ public class StringRemoveChange extends Change {
       Globals.logger("Error: could not add string '"+string.getName()+"': "+ex.getMessage());
     }
 
+      // Update tmp database:
+      secondary.removeString(tmpString.getId());
   }
 
 
index 2d28d2d1788b0f68f85faa7ae93f3dab87e4d63f..31cac703f084da3d8d73512a2d94fd9ed4059f59 100644 (file)
@@ -123,8 +123,17 @@ public class FileActions
         }
 
         fw.write("@STRING{" + bs.getName() + " = ");
-        if (!bs.getContent().equals(""))
-            fw.write((new LatexFieldFormatter()).format(bs.getContent(), Globals.BIBTEX_STRING));
+        if (!bs.getContent().equals("")) {
+            try {
+                String formatted = (new LatexFieldFormatter()).format(bs.getContent(), Globals.BIBTEX_STRING);
+                fw.write(formatted);
+            } catch (IllegalArgumentException ex) {
+                throw new IllegalArgumentException(
+                        Globals.lang("The # character is not allowed in BibTeX strings unless escaped as in '\\#'.") + "\n" +
+                        Globals.lang("Before saving, please edit any strings containing the # character."));
+            }
+
+        }
         else
             fw.write("{}");
 
index 7e0a77c0d189f71344384314ace4989cb1410fae..31e275ef541a234d7348906877195cddc6a6bf3e 100644 (file)
@@ -31,9 +31,11 @@ import ca.odell.glazedlists.SortedList;
  */
 public class OpenDocumentRepresentation {
     protected Collection<BibtexEntry> entries;
+    private BibtexDatabase database;
 
     @SuppressWarnings("unchecked")
-       public OpenDocumentRepresentation(BibtexDatabase bibtex, Set<String> keySet) {
+       public OpenDocumentRepresentation(BibtexDatabase database, Set<String> keySet) {
+        this.database = database;
         // Make a list of comparators for sorting the entries:
         List<FieldComparator> comparators = new ArrayList<FieldComparator>();
         comparators.add(new FieldComparator("author"));
@@ -45,10 +47,10 @@ public class OpenDocumentRepresentation {
         // Set up a list of all entries, if keySet==null, or the entries whose
         // ids are in keySet, otherwise:
         if (keySet == null)
-            entryList.addAll(bibtex.getEntries());
+            entryList.addAll(database.getEntries());
         else {
             for (String key : keySet)
-                entryList.add(bibtex.getEntryById(key));
+                entryList.add(database.getEntryById(key));
         }
 
         entries = new SortedList(entryList, new FieldComparatorStack(comparators));
@@ -181,8 +183,8 @@ public class OpenDocumentRepresentation {
     }
 
     protected String getField(BibtexEntry e, String field) {
-        Object o = e.getField(field);
-        return o == null ? "" : o.toString();
+        String s = BibtexDatabase.getResolvedField(field, e, database);
+        return s == null ? "" : s;
     }
 
     protected void addTableCell(Document doc, Element parent, String content) {
index a14cdcd88024e18f443b4b7ed1940a3d05b14743..7876d4dcbc54a36cc020395a3a03b988b2220205 100644 (file)
@@ -22,7 +22,7 @@ import java.util.Vector;
 public class SaveDatabaseAction extends AbstractWorker {
     private BasePanel panel;
     private JabRefFrame frame;
-    private boolean success = false, cancelled = false;
+    private boolean success = false, cancelled = false, fileLockedError = false;
 
     public SaveDatabaseAction(BasePanel panel) {
 
@@ -34,10 +34,12 @@ public class SaveDatabaseAction extends AbstractWorker {
     public void init() throws Throwable {
         success = false;
         cancelled = false;
+        fileLockedError = false;
         if (panel.getFile() == null)
             saveAs();
         else {
 
+            // Check for external modifications:
             if (panel.isUpdatedExternally() || Globals.fileUpdateMonitor.hasBeenModified(panel.getFileMonitorHandle())) {
 
                 String[] opts = new String[]{Globals.lang("Review changes"), Globals.lang("Save"),
@@ -61,6 +63,12 @@ public class SaveDatabaseAction extends AbstractWorker {
 
                     (new Thread(new Runnable() {
                         public void run() {
+
+                            if (!Util.waitForFileLock(panel.getFile(), 10)) {
+                                // TODO: GUI handling of the situation when the externally modified file keeps being locked.
+                                System.err.println("File locked, this will be trouble.");
+                            }
+
                             ChangeScanner scanner = new ChangeScanner(panel.frame(), panel);
                             scanner.changeScan(panel.getFile());
                             try {
@@ -118,7 +126,11 @@ public class SaveDatabaseAction extends AbstractWorker {
             frame.output(Globals.lang("Saved database") + " '"
                     + panel.getFile().getPath() + "'.");
         } else if (!cancelled) {
-            frame.output(Globals.lang("Save failed"));
+            if (fileLockedError) {
+                // TODO: user should have the option to override the lock file.
+                frame.output(Globals.lang("Could not save, file locked by another JabRef instance."));
+            } else
+                frame.output(Globals.lang("Save failed"));
         }
     }
 
@@ -136,19 +148,25 @@ public class SaveDatabaseAction extends AbstractWorker {
             // lacking keys, before saving:
             panel.autoGenerateKeysBeforeSaving();
 
-            // Now save the database:
-            success = saveDatabase(panel.getFile(), false, panel.getEncoding());
-
-            //Util.pr("Testing resolve string... BasePanel line 237");
-            //Util.pr("Resolve aq: "+database.resolveString("aq"));
-            //Util.pr("Resolve text: "+database.resolveForStrings("A text which refers to the string #aq# and #billball#, hurra."));
-
-            try {
-                Globals.fileUpdateMonitor.updateTimeStamp(panel.getFileMonitorHandle());
-            } catch (IllegalArgumentException ex) {
-                // This means the file has not yet been registered, which is the case
-                // when doing a "Save as". Maybe we should change the monitor so no
-                // exception is cast.
+            if (!Util.waitForFileLock(panel.getFile(), 10)) {
+                success = false;
+                fileLockedError = true;
+            }
+            else {
+                // Now save the database:
+                success = saveDatabase(panel.getFile(), false, panel.getEncoding());
+
+                //Util.pr("Testing resolve string... BasePanel line 237");
+                //Util.pr("Resolve aq: "+database.resolveString("aq"));
+                //Util.pr("Resolve text: "+database.resolveForStrings("A text which refers to the string #aq# and #billball#, hurra."));
+
+                try {
+                    Globals.fileUpdateMonitor.updateTimeStamp(panel.getFileMonitorHandle());
+                } catch (IllegalArgumentException ex) {
+                    // This means the file has not yet been registered, which is the case
+                    // when doing a "Save as". Maybe we should change the monitor so no
+                    // exception is cast.
+                }
             }
             panel.setSaving(false);
             if (success) {
@@ -166,6 +184,11 @@ public class SaveDatabaseAction extends AbstractWorker {
                 panel.setUpdatedExternally(false);
             }
         } catch (SaveException ex2) {
+            if (ex2 == SaveException.FILE_LOCKED) {
+                success =false;
+                fileLockedError = true;
+                return;
+            }
             ex2.printStackTrace();
         }
     }
@@ -187,6 +210,9 @@ public class SaveDatabaseAction extends AbstractWorker {
                     Globals.lang("Save database"), JOptionPane.ERROR_MESSAGE);
             throw new SaveException("rt");
         } catch (SaveException ex) {
+            if (ex == SaveException.FILE_LOCKED) {
+                throw ex;
+            }
             if (ex.specificEntry()) {
                 // Error occured during processing of
                 // be. Highlight it:
index bf9c19b251eb95fff2bf6c17b4c708bae1425a19..a6e0990c8ce422297936e6ab0d318005ca2fb400 100644 (file)
@@ -27,6 +27,7 @@ http://www.gnu.org/copyleft/gpl.ja.html
 package net.sf.jabref.export;
 
 import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.Globals;
 
 
 /**
@@ -37,6 +38,9 @@ public class SaveException extends Exception
 {
     //~ Instance fields ////////////////////////////////////////////////////////
 
+    public static final SaveException FILE_LOCKED = new SaveException
+            (Globals.lang("Could not save, file locked by another JabRef instance."));
+
     private BibtexEntry entry;
     private int status;
     //~ Constructors ///////////////////////////////////////////////////////////
index 1f2ddd736d6e8a17217758c6a3e567344cf6eab8..09b885fa74222346ae8dc5fbb83c6441467b4d6a 100644 (file)
@@ -26,17 +26,23 @@ import java.nio.charset.UnsupportedCharsetException;
  */
 public class SaveSession {
 
+    public static final String LOCKFILE_SUFFIX = ".lock";
+    // The age in ms of a lockfile before JabRef will offer to "steal" the locked file:
+    public static final long LOCKFILE_CRITICAL_AGE = 60000;
+
     private static final String TEMP_PREFIX = "jabref";
     private static final String TEMP_SUFFIX = "save.bib";
+
     File file, tmp, backupFile;
     String encoding;
-    boolean backup;
+    boolean backup, useLockFile;
     VerifyingWriter writer;
 
     public SaveSession(File file, String encoding, boolean backup) throws IOException,
         UnsupportedCharsetException {
         this.file = file;
         tmp = File.createTempFile(TEMP_PREFIX, TEMP_SUFFIX);
+        useLockFile = Globals.prefs.getBoolean("useLockFiles");
         this.backup = backup;
         this.encoding = encoding;
         writer = new VerifyingWriter(new FileOutputStream(tmp), encoding);
@@ -64,6 +70,20 @@ public class SaveSession {
             }
         }
         try {
+            if (useLockFile) {
+                try {
+                    if (createLockFile()) {
+                        // Oops, the lock file already existed. Try to wait it out:
+                        if (!Util.waitForFileLock(file, 10))
+                            throw SaveException.FILE_LOCKED;
+
+                    }
+                } catch (IOException ex) {
+                    System.err.println("Error when creating lock file");
+                    ex.printStackTrace();
+                }
+            }
+
             Util.copyFile(tmp, file, true);
         } catch (IOException ex2) {
             // If something happens here, what can we do to correct the problem? The file is corrupted, but we still
@@ -71,6 +91,15 @@ public class SaveSession {
             // repeating the action will have a different result.
             // On the other hand, our temporary file should still be clean, and won't be deleted.
             throw new SaveException(Globals.lang("Save failed while committing changes")+": "+ex2.getMessage());
+        } finally {
+            if (useLockFile) {
+                try {
+                    deleteLockFile();
+                } catch (IOException ex) {
+                    System.err.println("Error when deleting lock file");
+                    ex.printStackTrace();
+                }
+            }
         }
 
         tmp.delete();
@@ -80,6 +109,43 @@ public class SaveSession {
         tmp.delete();
     }
 
+
+    /**
+     * Check if a lock file exists, and create it if it doesn't.
+     * @return true if the lock file already existed
+     * @throws IOException if something happens during creation.
+     */
+    private boolean createLockFile() throws IOException {
+        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
+        if (lock.exists()) {
+            return true;
+        }
+        FileOutputStream out = new FileOutputStream(lock);
+        out.write(0);
+        try {
+            out.close();
+        } catch (IOException ex) {
+            System.err.println("Error when creating lock file");
+            ex.printStackTrace();
+        }
+        lock.deleteOnExit();
+        return false;
+    }
+
+    /**
+     * Check if a lock file exists, and delete it if it does.
+     * @return true if the lock file existed, false otherwise.
+     * @throws IOException if something goes wrong.
+     */
+    private boolean deleteLockFile() throws IOException {
+        File lock = new File(file.getPath()+LOCKFILE_SUFFIX);
+        if (!lock.exists()) {
+            return false;
+        }
+        lock.delete();
+        return true;
+    }
+
     public File getTemporaryFile() {
         return tmp;
     }
index 3e262f10d38d6a761c5782698162117d1ddcd94b..1c14b8e1343dae5b6d68f0675af009bebe264ea0 100755 (executable)
@@ -38,7 +38,7 @@ import wsi.ra.types.StringInt;
  * Main class for formatting DOCUMENT ME!
  *
  * @author $author$
- * @version $Revision: 3018 $
+ * @version $Revision: 3092 $
  */
 public class Layout
 {
@@ -142,6 +142,13 @@ public class Layout
         }
     }
 
+    public void setPostFormatter(LayoutFormatter formatter) {
+        for (int i = 0; i < layoutEntries.length; i++) {
+            LayoutEntry layoutEntry = layoutEntries[i];
+            layoutEntry.setPostFormatter(formatter);
+        }
+    }
+
     /**
      * Returns the processed bibtex entry. If the database argument is
      * null, no string references will be resolved. Otherwise all valid
index 78db159f3621b056b8deac9ac1a81b08275b1a6e..23c66878f170b260eef7ae1b6056c71888f6d21c 100755 (executable)
@@ -43,7 +43,7 @@ import wsi.ra.types.StringInt;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision: 3018 $
+ * @version $Revision: 3092 $
  */
 public class LayoutEntry {
        // ~ Instance fields
@@ -51,6 +51,9 @@ public class LayoutEntry {
 
        private LayoutFormatter[] option;
 
+    // Formatter to be run after other formatters:
+    private LayoutFormatter postFormatter = null;
+
        private String text;
 
        private LayoutEntry[] layoutEntries;
@@ -171,6 +174,10 @@ public class LayoutEntry {
                
        }
 
+    public void setPostFormatter(LayoutFormatter formatter) {
+        this.postFormatter = formatter;
+    }
+
        public String doLayout(BibtexEntry bibtex, BibtexDatabase database) {
 
                switch (type) {
@@ -271,6 +278,10 @@ public class LayoutEntry {
                                }
                        }
 
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                fieldEntry = postFormatter.format(fieldEntry);
+
                        return fieldEntry;
                }
         case LayoutHelper.IS_ENCODING_NAME: {
@@ -311,6 +322,9 @@ public class LayoutEntry {
                                        field = option[i].format(field);
                                }
                        }
+            // If a post formatter has been set, call it:
+            if (postFormatter != null)
+                field = postFormatter.format(field);
 
                        return field;
                } else if (type == LayoutHelper.IS_ENCODING_NAME) {
diff --git a/src/java/net/sf/jabref/export/layout/format/Default.java b/src/java/net/sf/jabref/export/layout/format/Default.java
new file mode 100644 (file)
index 0000000..1fa56a1
--- /dev/null
@@ -0,0 +1,20 @@
+package net.sf.jabref.export.layout.format;
+
+import net.sf.jabref.export.layout.ParamLayoutFormatter;
+
+/**
+ * Layout formatter that puts in a default value (given as argument) if the field is empty.
+ * Empty means null or an empty string.
+ */
+public class Default implements ParamLayoutFormatter {
+
+    String defValue = "";
+
+    public void setArgument(String arg) {
+        this.defValue = arg;
+    }
+
+    public String format(String fieldText) {
+        return fieldText != null && (fieldText.length() > 0) ? fieldText : defValue;
+    }
+}
index 1468d9d0e52ecf886b374c0c427a258c51156d62..bd3de0490a0e6cc75279d810c08b436318de0bc6 100644 (file)
@@ -85,133 +85,133 @@ public class FormatChars implements LayoutFormatter {
 
                // HTML special characters without names (UNICODE Latin Extended-A),
                // indicated by UNICODE number
-               CHARS.put("=A", "&#256;"); // "Amacr"
-               CHARS.put("=a", "&#257;"); // "amacr"
-               CHARS.put("uA", "&#258;"); // "Abreve"
-               CHARS.put("ua", "&#259;"); // "abreve"
-               CHARS.put("kA", "&#260;"); // "Aogon"
-               CHARS.put("ka", "&#261;"); // "aogon"
-               CHARS.put("'C", "&#262;"); // "Cacute"
-               CHARS.put("'c", "&#263;"); // "cacute"
-               CHARS.put("^C", "&#264;"); // "Ccirc"
-               CHARS.put("^c", "&#265;"); // "ccirc"
-               CHARS.put(".C", "&#266;"); // "Cdot"
-               CHARS.put(".c", "&#267;"); // "cdot"
-               CHARS.put("vC", "&#268;"); // "Ccaron"
-               CHARS.put("vc", "&#269;"); // "ccaron"
-               CHARS.put("vD", "&#270;"); // "Dcaron"
+               CHARS.put("=A", "Ā"); // "Amacr"
+               CHARS.put("=a", "ā"); // "amacr"
+               CHARS.put("uA", "Ă"); // "Abreve"
+               CHARS.put("ua", "ă"); // "abreve"
+               CHARS.put("kA", "Ą"); // "Aogon"
+               CHARS.put("ka", "ą"); // "aogon"
+               CHARS.put("'C", "Ć"); // "Cacute"
+               CHARS.put("'c", "ć"); // "cacute"
+               CHARS.put("^C", "Ĉ"); // "Ccirc"
+               CHARS.put("^c", "ĉ"); // "ccirc"
+               CHARS.put(".C", "Ċ"); // "Cdot"
+               CHARS.put(".c", "ċ"); // "cdot"
+               CHARS.put("vC", "Č"); // "Ccaron"
+               CHARS.put("vc", "č"); // "ccaron"
+               CHARS.put("vD", "Ď"); // "Dcaron"
                // Symbol #271 (d�) has no special Latex command
-               CHARS.put("DJ", "&#272;"); // "Dstrok"
-               CHARS.put("dj", "&#273;"); // "dstrok"
-               CHARS.put("=E", "&#274;"); // "Emacr"
-               CHARS.put("=e", "&#275;"); // "emacr"
-               CHARS.put("uE", "&#276;"); // "Ebreve"
-               CHARS.put("ue", "&#277;"); // "ebreve"
-               CHARS.put(".E", "&#278;"); // "Edot"
-               CHARS.put(".e", "&#279;"); // "edot"
-               CHARS.put("kE", "&#280;"); // "Eogon"
-               CHARS.put("ke", "&#281;"); // "eogon"
-               CHARS.put("vE", "&#282;"); // "Ecaron"
-               CHARS.put("ve", "&#283;"); // "ecaron"
-               CHARS.put("^G", "&#284;"); // "Gcirc"
-               CHARS.put("^g", "&#285;"); // "gcirc"
-               CHARS.put("uG", "&#286;"); // "Gbreve"
-               CHARS.put("ug", "&#287;"); // "gbreve"
-               CHARS.put(".G", "&#288;"); // "Gdot"
-               CHARS.put(".g", "&#289;"); // "gdot"
-               CHARS.put("cG", "&#290;"); // "Gcedil"
-               CHARS.put("'g", "&#291;"); // "gacute"
-               CHARS.put("^H", "&#292;"); // "Hcirc"
-               CHARS.put("^h", "&#293;"); // "hcirc"
-               CHARS.put("Hstrok", "&#294;"); // "Hstrok"
-               CHARS.put("hstrok", "&#295;"); // "hstrok"
-               CHARS.put("~I", "&#296;"); // "Itilde"
-               CHARS.put("~i", "&#297;"); // "itilde"
-               CHARS.put("=I", "&#298;"); // "Imacr"
-               CHARS.put("=i", "&#299;"); // "imacr"
-               CHARS.put("uI", "&#300;"); // "Ibreve"
-               CHARS.put("ui", "&#301;"); // "ibreve"
-               CHARS.put("kI", "&#302;"); // "Iogon"
-               CHARS.put("ki", "&#303;"); // "iogon"
-               CHARS.put(".I", "&#304;"); // "Idot"
-               CHARS.put("i", "&#305;"); // "inodot"
+               CHARS.put("DJ", "Đ"); // "Dstrok"
+               CHARS.put("dj", "đ"); // "dstrok"
+               CHARS.put("=E", "Ē"); // "Emacr"
+               CHARS.put("=e", "ē"); // "emacr"
+               CHARS.put("uE", "Ĕ"); // "Ebreve"
+               CHARS.put("ue", "ĕ"); // "ebreve"
+               CHARS.put(".E", "Ė"); // "Edot"
+               CHARS.put(".e", "ė"); // "edot"
+               CHARS.put("kE", "Ę"); // "Eogon"
+               CHARS.put("ke", "ę"); // "eogon"
+               CHARS.put("vE", "Ě"); // "Ecaron"
+               CHARS.put("ve", "ě"); // "ecaron"
+               CHARS.put("^G", "Ĝ"); // "Gcirc"
+               CHARS.put("^g", "ĝ"); // "gcirc"
+               CHARS.put("uG", "Ğ"); // "Gbreve"
+               CHARS.put("ug", "ğ"); // "gbreve"
+               CHARS.put(".G", "Ġ"); // "Gdot"
+               CHARS.put(".g", "ġ"); // "gdot"
+               CHARS.put("cG", "Ģ"); // "Gcedil"
+               CHARS.put("'g", "ģ"); // "gacute"
+               CHARS.put("^H", "Ĥ"); // "Hcirc"
+               CHARS.put("^h", "ĥ"); // "hcirc"
+               CHARS.put("Hstrok", "Ħ"); // "Hstrok"
+               CHARS.put("hstrok", "ħ"); // "hstrok"
+               CHARS.put("~I", "Ĩ"); // "Itilde"
+               CHARS.put("~i", "ĩ"); // "itilde"
+               CHARS.put("=I", "Ī"); // "Imacr"
+               CHARS.put("=i", "ī"); // "imacr"
+               CHARS.put("uI", "Ĭ"); // "Ibreve"
+               CHARS.put("ui", "ĭ"); // "ibreve"
+               CHARS.put("kI", "Į"); // "Iogon"
+               CHARS.put("ki", "į"); // "iogon"
+               CHARS.put(".I", "İ"); // "Idot"
+               CHARS.put("i", "ı"); // "inodot"
                // Symbol #306 (IJ) has no special Latex command
                // Symbol #307 (ij) has no special Latex command
-               CHARS.put("^J", "&#308;"); // "Jcirc"
-               CHARS.put("^j", "&#309;"); // "jcirc"
-               CHARS.put("cK", "&#310;"); // "Kcedil"
-               CHARS.put("ck", "&#311;"); // "kcedil"
+               CHARS.put("^J", "Ĵ"); // "Jcirc"
+               CHARS.put("^j", "ĵ"); // "jcirc"
+               CHARS.put("cK", "Ķ"); // "Kcedil"
+               CHARS.put("ck", "ķ"); // "kcedil"
                // Symbol #312 (k) has no special Latex command
-               CHARS.put("'L", "&#313;"); // "Lacute"
-               CHARS.put("'l", "&#314;"); // "lacute"
-               CHARS.put("cL", "&#315;"); // "Lcedil"
-               CHARS.put("cl", "&#316;"); // "lcedil"
+               CHARS.put("'L", "Ĺ"); // "Lacute"
+               CHARS.put("'l", "ĺ"); // "lacute"
+               CHARS.put("cL", "Ļ"); // "Lcedil"
+               CHARS.put("cl", "ļ"); // "lcedil"
                // Symbol #317 (L�) has no special Latex command
                // Symbol #318 (l�) has no special Latex command
-               CHARS.put("Lmidot", "&#319;"); // "Lmidot"
-               CHARS.put("lmidot", "&#320;"); // "lmidot"
-               CHARS.put("L", "&#321;"); // "Lstrok"
-               CHARS.put("l", "&#322;"); // "lstrok"
-               CHARS.put("'N", "&#323;"); // "Nacute"
-               CHARS.put("'n", "&#324;"); // "nacute"
-               CHARS.put("cN", "&#325;"); // "Ncedil"
-               CHARS.put("cn", "&#326;"); // "ncedil"
-               CHARS.put("vN", "&#327;"); // "Ncaron"
-               CHARS.put("vn", "&#328;"); // "ncaron"
+               CHARS.put("Lmidot", "Ŀ"); // "Lmidot"
+               CHARS.put("lmidot", "ŀ"); // "lmidot"
+               CHARS.put("L", "Ł"); // "Lstrok"
+               CHARS.put("l", "ł"); // "lstrok"
+               CHARS.put("'N", "Ń"); // "Nacute"
+               CHARS.put("'n", "ń"); // "nacute"
+               CHARS.put("cN", "Ņ"); // "Ncedil"
+               CHARS.put("cn", "ņ"); // "ncedil"
+               CHARS.put("vN", "Ň"); // "Ncaron"
+               CHARS.put("vn", "ň"); // "ncaron"
                // Symbol #329 (�n) has no special Latex command
-               CHARS.put("NG", "&#330;"); // "ENG"
-               CHARS.put("ng", "&#331;"); // "eng"
-               CHARS.put("=O", "&#332;"); // "Omacr"
-               CHARS.put("=o", "&#333;"); // "omacr"
-               CHARS.put("uO", "&#334;"); // "Obreve"
-               CHARS.put("uo", "&#335;"); // "obreve"
-               CHARS.put("HO", "&#336;"); // "Odblac"
-               CHARS.put("Ho", "&#337;"); // "odblac"
-               CHARS.put("OE", "&#338;"); // "OElig"
-               CHARS.put("oe", "&#339;"); // "oelig"
-               CHARS.put("'R", "&#340;"); // "Racute"
-               CHARS.put("'r", "&#341;"); // "racute"
-               CHARS.put("cR", "&#342;"); // "Rcedil"
-               CHARS.put("cr", "&#343;"); // "rcedil"
-               CHARS.put("vR", "&#344;"); // "Rcaron"
-               CHARS.put("vr", "&#345;"); // "rcaron"
-               CHARS.put("'S", "&#346;"); // "Sacute"
-               CHARS.put("'s", "&#347;"); // "sacute"
-               CHARS.put("^S", "&#348;"); // "Scirc"
-               CHARS.put("^s", "&#349;"); // "scirc"
-               CHARS.put("cS", "&#350;"); // "Scedil"
-               CHARS.put("cs", "&#351;"); // "scedil"
-               CHARS.put("vS", "&#352;"); // "Scaron"
-               CHARS.put("vs", "&#353;"); // "scaron"
-               CHARS.put("cT", "&#354;"); // "Tcedil"
-               CHARS.put("ct", "&#355;"); // "tcedil"
-               CHARS.put("vT", "&#356;"); // "Tcaron"
+               CHARS.put("NG", "Ŋ"); // "ENG"
+               CHARS.put("ng", "ŋ"); // "eng"
+               CHARS.put("=O", "Ō"); // "Omacr"
+               CHARS.put("=o", "ō"); // "omacr"
+               CHARS.put("uO", "Ŏ"); // "Obreve"
+               CHARS.put("uo", "ŏ"); // "obreve"
+               CHARS.put("HO", "Ő"); // "Odblac"
+               CHARS.put("Ho", "ő"); // "odblac"
+               CHARS.put("OE", "Œ"); // "OElig"
+               CHARS.put("oe", "œ"); // "oelig"
+               CHARS.put("'R", "Ŕ"); // "Racute"
+               CHARS.put("'r", "ŕ"); // "racute"
+               CHARS.put("cR", "Ŗ"); // "Rcedil"
+               CHARS.put("cr", "ŗ"); // "rcedil"
+               CHARS.put("vR", "Ř"); // "Rcaron"
+               CHARS.put("vr", "ř"); // "rcaron"
+               CHARS.put("'S", "Ś"); // "Sacute"
+               CHARS.put("'s", "ś"); // "sacute"
+               CHARS.put("^S", "Ŝ"); // "Scirc"
+               CHARS.put("^s", "ŝ"); // "scirc"
+               CHARS.put("cS", "Ş"); // "Scedil"
+               CHARS.put("cs", "ş"); // "scedil"
+               CHARS.put("vS", "Š"); // "Scaron"
+               CHARS.put("vs", "š"); // "scaron"
+               CHARS.put("cT", "Ţ"); // "Tcedil"
+               CHARS.put("ct", "ţ"); // "tcedil"
+               CHARS.put("vT", "Ť"); // "Tcaron"
                // Symbol #357 (t�) has no special Latex command
-               CHARS.put("Tstrok", "&#358;"); // "Tstrok"
-               CHARS.put("tstrok", "&#359;"); // "tstrok"
-               CHARS.put("~U", "&#360;"); // "Utilde"
-               CHARS.put("~u", "&#361;"); // "utilde"
-               CHARS.put("=U", "&#362;"); // "Umacr"
-               CHARS.put("=u", "&#363;"); // "umacr"
-               CHARS.put("uU", "&#364;"); // "Ubreve"
-               CHARS.put("uu", "&#365;"); // "ubreve"
-               CHARS.put("rU", "&#366;"); // "Uring"
-               CHARS.put("ru", "&#367;"); // "uring"
-               CHARS.put("HU", "&#368;"); // "Odblac"
-               CHARS.put("Hu", "&#369;"); // "odblac"
-               CHARS.put("kU", "&#370;"); // "Uogon"
-               CHARS.put("ku", "&#371;"); // "uogon"
-               CHARS.put("^W", "&#372;"); // "Wcirc"
-               CHARS.put("^w", "&#373;"); // "wcirc"
-               CHARS.put("^Y", "&#374;"); // "Ycirc"
-               CHARS.put("^y", "&#375;"); // "ycirc"
-               CHARS.put("\"Y", "&#376;"); // "Yuml"
-               CHARS.put("'Z", "&#377;"); // "Zacute"
-               CHARS.put("'z", "&#378;"); // "zacute"
-               CHARS.put(".Z", "&#379;"); // "Zdot"
-               CHARS.put(".z", "&#380;"); // "zdot"
-               CHARS.put("vZ", "&#381;"); // "Zcaron"
-               CHARS.put("vz", "&#382;"); // "zcaron"
+               CHARS.put("Tstrok", "Ŧ"); // "Tstrok"
+               CHARS.put("tstrok", "ŧ"); // "tstrok"
+               CHARS.put("~U", "Ũ"); // "Utilde"
+               CHARS.put("~u", "ũ"); // "utilde"
+               CHARS.put("=U", "Ū"); // "Umacr"
+               CHARS.put("=u", "ū"); // "umacr"
+               CHARS.put("uU", "Ŭ"); // "Ubreve"
+               CHARS.put("uu", "ŭ"); // "ubreve"
+               CHARS.put("rU", "Ů"); // "Uring"
+               CHARS.put("ru", "ů"); // "uring"
+               CHARS.put("HU", "ů"); // "Odblac"
+               CHARS.put("Hu", "ű"); // "odblac"
+               CHARS.put("kU", "Ų"); // "Uogon"
+               CHARS.put("ku", "ų"); // "uogon"
+               CHARS.put("^W", "Ŵ"); // "Wcirc"
+               CHARS.put("^w", "ŵ"); // "wcirc"
+               CHARS.put("^Y", "Ŷ"); // "Ycirc"
+               CHARS.put("^y", "ŷ"); // "ycirc"
+               CHARS.put("\"Y", "Ÿ"); // "Yuml"
+               CHARS.put("'Z", "Ź"); // "Zacute"
+               CHARS.put("'z", "ź"); // "zacute"
+               CHARS.put(".Z", "Ż"); // "Zdot"
+               CHARS.put(".z", "ż"); // "zdot"
+               CHARS.put("vZ", "Ž"); // "Zcaron"
+               CHARS.put("vz", "ž"); // "zcaron"
                // Symbol #383 (f) has no special Latex command
         CHARS.put("%", "%"); // percent sign
     }
index 51716b41ce9f213b57a82296dcb83ead7daaea72..2e41117c1c1b0a04884373b5818da2bc65deb07b 100644 (file)
@@ -6,13 +6,14 @@ import net.sf.jabref.export.layout.LayoutFormatter;
 /**
  * This formatter escapes characters so they are suitable for HTML.
  * 
- * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
+ * @version $Revision: 3128 $ ($Date: 2009-11-01 11:38:08 +0100 (Sun, 01 Nov 2009) $)
  */
 public class HTMLChars implements LayoutFormatter {
 
        public String format(String field) {
                int i;
-               field = field.replaceAll("&|\\\\&", "&amp;").replaceAll("[\\n]{1,}", "<p>");
+               field = field.replaceAll("&|\\\\&", "&amp;").replaceAll("[\\n]{2,}", "<p>")
+                .replaceAll("\\n", "<br>");
 
                StringBuffer sb = new StringBuffer();
                StringBuffer currentCommand = null;
index 86db9b5080fdd8db99fd279136cfb1e15e9a019a..c1327f9bcf009ab133fb6112f75fd2ff01c30c05 100644 (file)
@@ -16,7 +16,10 @@ public class LastPage implements LayoutFormatter {
                String[] pageParts = s.split("[\\-]+");
                if (pageParts.length == 2)
             return pageParts[1];
-        else return "";
+        // If we didn't get two parts, it may be that only the number of pages is given.
+        // Return the first part:
+        else return pageParts[0];
+        //else return "";
 
     }
 }
\ No newline at end of file
index 8fbf8ff094a6a309aba65977e387a257f82242d8..5524b919cc81ae7830578bb6718c273816cec882 100644 (file)
@@ -14,10 +14,12 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  *   
  *   3.) Replace emph and textit and textbf with their RTF replacements.
  *   
- *   4.) Take special care to save all unicode characters correctly. 
+ *   4.) Take special care to save all unicode characters correctly.
+ *
+ *   5.) Replace --- by \emdash and -- by \endash.
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2568 $ ($Date: 2008-01-15 18:40:26 +0100 (Tue, 15 Jan 2008) $)
+ * @version $Revision: 3094 $ ($Date: 2009-10-07 22:27:27 +0200 (Wed, 07 Oct 2009) $)
  *
  */
 public class RTFChars implements LayoutFormatter {
@@ -150,7 +152,7 @@ public class RTFChars implements LayoutFormatter {
                                sb.append("\\u").append((long) c).append('?');
                }
 
-               return sb.toString();
+               return sb.toString().replaceAll("---", "{\\\\emdash}").replaceAll("--", "{\\\\endash}");
        }
 
        private IntAndString getPart(String text, int i) {
index fc6a2a50b810e2476722dc849578677e81030d9d..cbcea2984bea5038fc654abedafc7312ae7de6a8 100644 (file)
@@ -11,7 +11,7 @@ import net.sf.jabref.export.layout.LayoutFormatter;
  * must exist).
  * 
  * @author $Author: mortenalver $
- * @version $Revision: 2973 $ ($Date: 2009-04-29 22:09:09 +0200 (Wed, 29 Apr 2009) $)
+ * @version $Revision: 3047 $ ($Date: 2009-08-21 18:32:56 +0200 (Fri, 21 Aug 2009) $)
  */
 public class ResolvePDF implements LayoutFormatter {
 
diff --git a/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java b/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
new file mode 100644 (file)
index 0000000..55dd56e
--- /dev/null
@@ -0,0 +1,111 @@
+package net.sf.jabref.external;
+
+import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.GUIGlobals;
+import net.sf.jabref.Util;
+import net.sf.jabref.BasePanel;
+import net.sf.jabref.gui.FileListTableModel;
+
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * 
+ */
+public class TransferableFileLinkSelection implements Transferable {
+
+    List<File> fileList = new ArrayList<File>();
+
+    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
+        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (s != null)
+            tm.setContent(s);
+        if (tm.getRowCount() > 0) {
+            // Find the default directory for this field type, if any:
+            String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the standard "file" directory:
+            String fileDir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the directory of the bib file:
+            String[] dirs;
+            if (panel.metaData().getFile() != null) {
+                String databaseDir = panel.metaData().getFile().getParent();
+                dirs = new String[] { dir, fileDir, databaseDir };
+            }
+            else
+                dirs = new String[] { dir, fileDir };
+            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
+            fileList.add(expLink);
+
+        }
+
+    }
+
+    public DataFlavor[] getTransferDataFlavors() {
+        return new DataFlavor[] {DataFlavor.javaFileListFlavor};//, DataFlavor.stringFlavor};
+    }
+
+    public boolean isDataFlavorSupported(DataFlavor dataFlavor) {
+        System.out.println("Query: "+dataFlavor.getHumanPresentableName()+" , "+
+            dataFlavor.getDefaultRepresentationClass()+" , "+dataFlavor.getMimeType());
+        return dataFlavor.equals(DataFlavor.javaFileListFlavor)
+                || dataFlavor.equals(DataFlavor.stringFlavor);
+    }
+
+    public Object getTransferData(DataFlavor dataFlavor) throws UnsupportedFlavorException, IOException {
+        //if (dataFlavor.equals(DataFlavor.javaFileListFlavor))
+            return fileList;
+        //else
+        //    return "test";
+    }
+    /*
+    private StringSelection ss;
+
+    public TransferableFileLinkSelection(BasePanel panel, BibtexEntry[] selection) {
+        String s = selection[0].getField(GUIGlobals.FILE_FIELD);
+        FileListTableModel tm = new FileListTableModel();
+        if (s != null)
+            tm.setContent(s);
+        if (tm.getRowCount() > 0) {
+            // Find the default directory for this field type, if any:
+            String dir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the standard "file" directory:
+            String fileDir = panel.metaData().getFileDirectory(GUIGlobals.FILE_FIELD);
+            // Include the directory of the bib file:
+            String[] dirs;
+            if (panel.metaData().getFile() != null) {
+                String databaseDir = panel.metaData().getFile().getParent();
+                dirs = new String[] { dir, fileDir, databaseDir };
+            }
+            else
+                dirs = new String[] { dir, fileDir };
+            System.out.println(tm.getEntry(0).getLink());
+            for (int i = 0; i < dirs.length; i++) {
+                String dir1 = dirs[i];
+                System.out.println("dir:"+dir1);
+            }
+            File expLink = Util.expandFilename(tm.getEntry(0).getLink(), dirs);
+            try { 
+                System.out.println(expLink.toURI().toURL().toString());
+                ss = new StringSelection(expLink.toURI().toURL().toString());
+                
+            } catch (MalformedURLException ex) {
+                ss = new StringSelection("");
+            }
+        }
+        else
+            ss = new StringSelection("");
+
+    }
+
+    public Transferable getTransferable() {
+        return ss;
+    } */
+}
index dae7be8f0f7f26914f27bced8a5a30a66626bda4..68ee76157cc406dc8874447c24639d546d6d2ef0 100644 (file)
@@ -33,6 +33,9 @@ import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
 
 import javax.swing.*;
 import javax.swing.event.CaretEvent;
@@ -43,6 +46,9 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.Util;
 import net.sf.jabref.undo.NamedCompound;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+import com.jgoodies.forms.layout.FormLayout;
 
 /**
  * Dialog for creating or modifying groups. Operates directly on the Vector
@@ -53,6 +59,10 @@ class AutoGroupDialog extends JDialog implements CaretListener {
             deliminator = new JTextField(60);
     JLabel nf = new JLabel(Globals.lang("Field to group by") + ":"),
             nr = new JLabel(Globals.lang("Characters to ignore") + ":");
+    JRadioButton
+        keywords = new JRadioButton(Globals.lang("Generate groups from keywords in a BibTeX field")),
+        authors = new JRadioButton(Globals.lang("Generate groups for author last names")),
+        editors = new JRadioButton(Globals.lang("Generate groups for editor last names"));
     JCheckBox nd = new JCheckBox(Globals.lang(
                "Use the following delimiter character(s)")
             + ":"); // JZTODO lyrics
@@ -93,18 +103,35 @@ class AutoGroupDialog extends JDialog implements CaretListener {
                 GroupTreeNode autoGroupsRoot = new GroupTreeNode(
                         new ExplicitGroup(Globals.lang("Automatically created groups"),
                                        AbstractGroup.INCLUDING));
-                HashSet<String> hs = null;
-                if (nd.isSelected()) {
-                    hs = Util
-                            .findDeliminatedWordsInField(panel.getDatabase(),
-                                    field().toLowerCase().trim(), deliminator
-                                            .getText());
-                } else {
-                    hs = Util.findAllWordsInField(panel.getDatabase(), field()
-                            .toLowerCase().trim(), remove());
+                Set<String> hs = null;
+                String field = field();
+                if (keywords.isSelected()) {
+                    if (nd.isSelected()) {
+                        hs = Util
+                                .findDeliminatedWordsInField(panel.getDatabase(),
+                                        field().toLowerCase().trim(), deliminator
+                                                .getText());
+                    } else {
+                        hs = Util.findAllWordsInField(panel.getDatabase(),
+                                field().toLowerCase().trim(), remove());
+
+                    }
+                }
+                else if (authors.isSelected()) {
+                    List<String> fields = new ArrayList<String>(2);
+                    fields.add("author");
+                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
+                    field = "author";
                 }
+                else if (editors.isSelected()) {
+                    List<String> fields = new ArrayList<String>(2);
+                    fields.add("editor");
+                    hs = Util.findAuthorLastNames(panel.getDatabase(), fields);
+                    field = "editor";
+                }
+
                 for (String keyword : hs){
-                    KeywordGroup group = new KeywordGroup(keyword, field(),
+                    KeywordGroup group = new KeywordGroup(keyword, field,
                             keyword, false, false, AbstractGroup.INDEPENDENT);
                     autoGroupsRoot.add(new GroupTreeNode(group));
                 }
@@ -140,8 +167,42 @@ class AutoGroupDialog extends JDialog implements CaretListener {
         InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
         im.put(frame.prefs().getKey("Close dialog"), "close");
         am.put("close", cancelAction);
+
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(keywords);
+        bg.add(authors);
+        bg.add(editors);
+        keywords.setSelected(true);
+        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout
+                ("left:20dlu, 4dlu, left:pref, 4dlu, fill:60dlu, 4dlu, fill:0dlu", ""), main);
+        b.append(keywords, 5);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(Globals.lang("Field to group by")+":");
+        b.append(field);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(Globals.lang("Characters to ignore")+":");
+        b.append(remove);
+        b.nextLine();
+        b.append(new JPanel());
+        b.append(nd);
+        b.append(deliminator);
+        b.nextLine();
+        b.append(authors, 5);
+        b.nextLine();
+        b.append(editors, 5);
+        b.nextLine();
+        
+        ButtonBarBuilder bb = new ButtonBarBuilder(opt);
+        bb.addGlue();
+        bb.addGridded(ok);
+        bb.addGridded(cancel);
+        bb.addGlue();
+
+
         // Layout starts here.
-        main.setLayout(gbl);
+        /*main.setLayout(gbl);
         opt.setLayout(gbl);
         main.setBorder(BorderFactory.createTitledBorder(BorderFactory
                 .createEtchedBorder(), Globals.lang("Group properties")));
@@ -186,12 +247,14 @@ class AutoGroupDialog extends JDialog implements CaretListener {
         con.anchor = GridBagConstraints.WEST;
         con.gridwidth = GridBagConstraints.REMAINDER;
         gbl.setConstraints(cancel, con);
-        opt.add(cancel);
+        opt.add(cancel);*/
+        main.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        opt.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
         getContentPane().add(main, BorderLayout.CENTER);
         getContentPane().add(opt, BorderLayout.SOUTH);
         // pack();
         updateComponents();
-        setSize(400, 200);
+        pack();
         Util.placeDialog(this, frame);
     }
 
index 517c11246ebdb0ecbb60047e7c0155fae4afe86b..e6a1f060e686496409a241f423f4d6c8ed69a999 100644 (file)
 
 package net.sf.jabref.groups;
 
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.datatransfer.*;
 import java.awt.dnd.DnDConstants;
 import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -47,7 +45,9 @@ import net.sf.jabref.Globals;
 import net.sf.jabref.JabRefFrame;
 import net.sf.jabref.external.DroppedFileHandler;
 import net.sf.jabref.external.ExternalFileType;
+import net.sf.jabref.external.TransferableFileLinkSelection;
 import net.sf.jabref.gui.MainTable;
+import net.sf.jabref.gui.MainTableFormat;
 import net.sf.jabref.imports.ImportMenuItem;
 import net.sf.jabref.imports.OpenDatabaseAction;
 import net.sf.jabref.imports.ParserResult;
@@ -107,8 +107,15 @@ public class EntryTableTransferHandler extends TransferHandler {
         * This method is called when dragging stuff *from* the table.
         */
        public Transferable createTransferable(JComponent c) {
-               /* so we can assume it will never be called if entryTable==null: */
-               return new TransferableEntrySelection(entryTable.getSelectedEntries());
+        if (!draggingFile) {
+            /* so we can assume it will never be called if entryTable==null: */
+            return new TransferableEntrySelection(entryTable.getSelectedEntries());
+        }
+        else {
+            draggingFile = false;
+            return (new TransferableFileLinkSelection
+                    (panel, entryTable.getSelectedEntries()));//.getTransferable();
+        }
        }
 
        /**
@@ -189,10 +196,10 @@ public class EntryTableTransferHandler extends TransferHandler {
                // nope, never heard of this type
                return false;
        }
+    boolean draggingFile = false;
 
        public void exportAsDrag(JComponent comp, InputEvent e, int action) {
-               // action is always LINK
-        /* TODO: add support for dragging file link from table icon into other apps
+               /* TODO: add support for dragging file link from table icon into other apps */
         if (e instanceof MouseEvent) {
             MouseEvent me = (MouseEvent)e;
             int col = entryTable.columnAtPoint(me.getPoint());
@@ -204,8 +211,9 @@ public class EntryTableTransferHandler extends TransferHandler {
             // We have an icon column:
             if (res == MainTableFormat.FILE) {
                 System.out.println("dragging file");
+                draggingFile = true;
             }
-        }*/
+        }
         super.exportAsDrag(comp, e, DnDConstants.ACTION_LINK);
        }
 
@@ -222,7 +230,7 @@ public class EntryTableTransferHandler extends TransferHandler {
        // add-ons -----------------------
 
        protected boolean handleDropTransfer(String dropStr, final int dropRow) throws IOException {
-               if (dropStr.startsWith("file:")) {
+        if (dropStr.startsWith("file:")) {
                        // This appears to be a dragged file link and not a reference
                        // format. Check if we can map this to a set of files:
                        if (handleDraggedFilenames(dropStr, dropRow))
index ce18ace47771524270bd8f5af1176e1ad63c5d1d..21c4ef6761cf241da1b580f6d86e916b4d2e7254 100644 (file)
@@ -22,8 +22,7 @@
 
 package net.sf.jabref.groups;
 
-import java.awt.Color;
-import java.awt.Component;
+import java.awt.*;
 
 import javax.swing.BorderFactory;
 import javax.swing.ImageIcon;
@@ -42,6 +41,9 @@ import net.sf.jabref.Util;
  * @author jzieren
  */
 public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
+
+    public static final int MAX_DISPLAYED_LETTERS = 35;
+
     /** The cell over which the user is currently dragging */
     protected Object highlight1Cell = null;
     protected Object[] highlight2Cells = null;
@@ -69,6 +71,7 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
         if (group == null || !(c instanceof JLabel))
             return c; // sanity check
         JLabel label = (JLabel) c;
+
         if (highlightBorderCell != null && highlightBorderCell == value)
             label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
         else
@@ -94,6 +97,9 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
                 }
             }
         }
+        String name = group.getName();
+        if (name.length() > MAX_DISPLAYED_LETTERS)
+            name = name.substring(0, MAX_DISPLAYED_LETTERS-2)+"...";
         StringBuffer sb = new StringBuffer();
         sb.append("<html>");
         if (red)
@@ -102,7 +108,7 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
             sb.append("<u>");
         if (italics)
             sb.append("<i>");
-        sb.append(Util.quoteForHTML(group.getName()));
+        sb.append(Util.quoteForHTML(name));
         if (italics)
             sb.append("</i>");
         if (underline)
@@ -111,6 +117,7 @@ public class GroupTreeCellRenderer extends DefaultTreeCellRenderer {
             sb.append("</font>");
         sb.append("</html>");
         final String text = sb.toString();
+
         if (!label.getText().equals(text))
             label.setText(text);
         label.setToolTipText("<html>" + group.getShortDescription() + "</html>");
index ec1d4ed27d28089194f627608d3b9ccd2a939668..68402a86e07f35bcddaddf51271fbc6bb75fb8a9 100644 (file)
@@ -62,8 +62,8 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
 
        protected void compilePattern() throws IllegalArgumentException,
                        PatternSyntaxException {
-               m_pattern = m_caseSensitive ? Pattern.compile(m_searchExpression)
-                               : Pattern.compile(m_searchExpression, Pattern.CASE_INSENSITIVE);
+               m_pattern = m_caseSensitive ? Pattern.compile("\\b"+m_searchExpression+"\\b")
+                               : Pattern.compile("\\b"+m_searchExpression+"\\b", Pattern.CASE_INSENSITIVE);
        }
 
        /**
@@ -239,11 +239,33 @@ public class KeywordGroup extends AbstractGroup implements SearchRule {
                if (m_regExp)
                        return m_pattern.matcher(content).find();
                if (m_caseSensitive)
-                       return content.indexOf(m_searchExpression) >= 0;
-               content = content.toLowerCase();
-               return content.indexOf(m_searchExpression.toLowerCase()) >= 0;
+                       return containsWord(m_searchExpression, content);
+               return containsWord(m_searchExpression.toLowerCase(), content.toLowerCase());
        }
 
+    /**
+     * Look for the given non-regexp string in another string, but check whether a
+     * match concerns a complete word, not part of a word.
+     * @param word The word to look for.
+     * @param text The string to look in.
+     * @return true if the word was found, false otherwise.
+     */
+    private static boolean containsWord(String word, String text) {
+        int piv = 0;
+        while (piv < text.length()) {
+            int ind = text.indexOf(word, piv);
+            if (ind < 0)
+                return false;
+            // Found a match. See if it is a complete word:
+            if (((ind == 0) || !Character.isLetterOrDigit(text.charAt(ind-1))) &&
+                ((ind+word.length() == text.length()) || !Character.isLetterOrDigit(text.charAt(ind+word.length())))) {
+                return true;
+            }
+            else piv = ind+1;
+        }
+        return false;
+    }
+
        /**
         * Removes matches of searchString in the entry's field. This is only
         * possible if the search expression is not a regExp.
index 410cfe3d6acd0d579ee29a00115a0c7a5ecac6da..f23e85143656d3820321b77275634f87dc349b8b 100644 (file)
@@ -4,11 +4,13 @@ import javax.swing.text.JTextComponent;
 import javax.swing.text.BadLocationException;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.FocusEvent;
 
 /**
  * Created by Morten O. Alver, 16 Feb. 2007
  */
-public class AutoCompleteListener extends KeyAdapter {
+public class AutoCompleteListener extends KeyAdapter implements FocusListener {
 
 
     AutoCompleter completer;
@@ -18,12 +20,27 @@ public class AutoCompleteListener extends KeyAdapter {
     protected Object[] lastCompletions = null;
     protected int lastShownCompletion = 0;
 
+    // This field is set if the focus listener should call another focus listener
+    // after finishing. This is needed because the autocomplete listener must
+    // run before the focus listener responsible for storing the current edit.
+    protected FocusListener nextFocusListener = null;
+
     // These variables keep track of the situation from time to time.
 
     public AutoCompleteListener(AutoCompleter completer) {
         this.completer = completer;
     }
 
+    /**
+     * This method is used if the focus listener should call another focus listener
+     * after finishing. This is needed because the autocomplete listener must
+     * run before the focus listener responsible for storing the current edit.
+     *
+     * @param listener The listener to call.
+     */
+    public void setNextFocusListener(FocusListener listener) {
+        this.nextFocusListener = listener;
+    }
 
     public void keyPressed(KeyEvent e) {
         if ((toSetIn != null) && (e.getKeyCode() == KeyEvent.VK_ENTER)) {
@@ -190,19 +207,27 @@ public class AutoCompleteListener extends KeyAdapter {
 
         try {
             upToCaret = comp.getText(0, comp.getCaretPosition());
-            if ((comp.getCaretPosition() < comp.getText().length())
-                    && !Character.isWhitespace(comp.getText().charAt(comp.getCaretPosition())))
-                return null;
-            boolean found = false;
-            int piv = upToCaret.length() - 1;
-            while (!found && (piv >= 0)) {
-                if (Character.isWhitespace(upToCaret.charAt(piv)))
-                    found = true;
-                else piv--;
+            // We now have the text from the start of the field up to the caret position.
+            // In most fields, we are only interested in the currently edited word, so we
+            // seek from the caret backward to the closest space:
+            if (!completer.isSingleUnitField()) {
+                if ((comp.getCaretPosition() < comp.getText().length())
+                        && !Character.isWhitespace(comp.getText().charAt(comp.getCaretPosition())))
+                    return null;
+                boolean found = false;
+                int piv = upToCaret.length() - 1;
+                while (!found && (piv >= 0)) {
+                    if (Character.isWhitespace(upToCaret.charAt(piv)))
+                        found = true;
+                    else piv--;
+                }
+                //if (piv < 0)
+                //piv = 0;
+                res.append(upToCaret.substring(piv + 1));
             }
-            //if (piv < 0)
-            //piv = 0;
-            res.append(upToCaret.substring(piv + 1));
+            // For fields such as "journal" it is more reasonable to try to complete on the entire
+            // text field content, so we skip the searching and keep the entire part up to the caret:
+            else res.append(upToCaret);
             //Util.pr("AutoCompListener: "+res.toString());
         } catch (BadLocationException ex) {
         }
@@ -228,4 +253,25 @@ public class AutoCompleteListener extends KeyAdapter {
         }
 
     }
+
+    public void focusGained(FocusEvent event) {
+        if (nextFocusListener != null)
+            nextFocusListener.focusGained(event);
+    }
+
+    public void focusLost(FocusEvent event) {
+        if (lastCompletions != null) {
+            JTextComponent comp = (JTextComponent)event.getSource();
+            int selStart = comp.getSelectionStart();
+            String text = comp.getText();
+            comp.setText(text.substring(0, selStart) + text.substring(comp.getSelectionEnd()));
+            comp.setCaretPosition(selStart);
+            lastCompletions = null;
+            lastShownCompletion = 0;
+            lastCaretPosition = -1;
+            toSetIn = null;
+        }
+        if (nextFocusListener != null)
+            nextFocusListener.focusLost(event);
+    }
 }
index 20a122f06411300a2195582865969e2b55f12ee0..0d98442daeaf282a49f9b2816547765895f19ae4 100644 (file)
@@ -41,6 +41,10 @@ public class AutoCompleter {
         return nameField;
     }
 
+    public boolean isSingleUnitField() {
+        return entireField;
+    }
+
     public void addWord(String word) {
         if (word.length() >= SHORTEST_WORD)
             words.add(word);
index 3611379bb2ad0741d2a4d1ef8cbb230eeccff345..de7aa195ae3fd6059b9e1b3a9780c55a7c8b1fce 100644 (file)
@@ -527,11 +527,11 @@ public class FileListEditor extends JTable implements FieldEditor,
     public static File relativizePath(File f, ArrayList<File> dirs) {
        String pth = f.getPath();
        for (File dir : dirs) {
-           if (pth.startsWith(dir.getPath())) {
-               String subs = pth.substring(dir.getPath().length());
-               if ((subs.length() > 0) && ((subs.charAt(0) == '/') || (subs.charAt(0) == '\\')))
-                   subs = subs.substring(1);
-           return new File(subs);          
+           if ((dir.getPath().length() > 0) && pth.startsWith(dir.getPath())) {
+            String subs = pth.substring(dir.getPath().length());
+            if ((subs.length() > 0) && ((subs.charAt(0) == '/') || (subs.charAt(0) == '\\')))
+                subs = subs.substring(1);
+            return new File(subs);
            }
        }
        return f;
index ab0c74f6833d21f6efbb2e5e95f542b96392db63..c35bbb50fd91cb2d912432bd1eb8c1195a1daa54 100644 (file)
@@ -5,6 +5,7 @@ import java.awt.event.*;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.regex.Pattern;
 
 import javax.swing.*;
 import javax.swing.event.DocumentEvent;
@@