[jabref] 214/459: [svn-upgrade] Integrating new upstream version, jabref (2.6~beta2)
gregor herrmann
gregoa at debian.org
Thu Sep 15 20:40:26 UTC 2016
This is an automated email from the git hooks/post-receive script.
gregoa pushed a commit to branch master
in repository jabref.
commit e6b79f891fe0708bd3f08a8a650ae9c9e0a121cf
Author: gregor herrmann <gregoa at debian.org>
Date: Tue Dec 1 16:45:51 2009 +0000
[svn-upgrade] Integrating new upstream version, jabref (2.6~beta2)
---
.classpath | 2 +-
JabRef.ipr | 188 ------
JabRef.iws | 655 ---------------------
build.number | 4 +-
build.xml | 8 +-
src/{Jabref.iml => Jabref_trunk.iml} | 191 +-----
src/help/About.html | 1 +
src/help/BaseFrameHelp.html | 21 +-
src/help/CustomExports.html | 5 +
src/help/EntryEditorHelp.html | 10 +-
src/help/RevisionHistory.html | 104 +++-
src/help/da/About.html | 1 +
src/help/de/About.html | 1 +
src/help/fr/About.html | 1 +
src/help/fr/BaseFrameHelp.html | 27 +-
src/help/fr/CustomExports.html | 9 +
src/help/fr/EntryEditorHelp.html | 7 +-
src/help/fr/RevisionHistory.html | 64 +-
src/images/absIcon.png | Bin 0 -> 180 bytes
src/images/add.png | Bin 0 -> 455 bytes
src/images/autumn.png | Bin 0 -> 307468 bytes
src/images/completeItem.png | Bin 0 -> 458 bytes
src/images/contents.png | Bin 0 -> 1073 bytes
src/images/database_connect.png | Bin 0 -> 763 bytes
src/images/database_save.png | Bin 0 -> 755 bytes
src/images/document-save-as.png | Bin 0 -> 1337 bytes
src/images/document-save.png | Bin 0 -> 1255 bytes
src/images/doismall.png | Bin 0 -> 738 bytes
src/images/duplicate.png | Bin 0 -> 359 bytes
src/images/edit-copy.png | Bin 0 -> 979 bytes
src/images/edit-cut.png | Bin 0 -> 985 bytes
src/images/edit-delete.png | Bin 0 -> 1339 bytes
src/images/edit-find.png | Bin 0 -> 1347 bytes
src/images/edit-paste.png | Bin 0 -> 956 bytes
src/images/edit-redo.png | Bin 0 -> 909 bytes
src/images/edit-undo.png | Bin 0 -> 957 bytes
src/images/editor.png | Bin 0 -> 1196 bytes
src/images/emacs.png | Bin 0 -> 267 bytes
src/images/emblem-web-small.png | Bin 0 -> 960 bytes
src/images/emblem-web.png | Bin 0 -> 1419 bytes
src/images/fileclose.png | Bin 0 -> 238 bytes
src/images/fileclose2.png | Bin 0 -> 250 bytes
src/images/filenew.png | Bin 0 -> 968 bytes
src/images/fileopen.png | Bin 0 -> 1123 bytes
src/images/genIcon.png | Bin 0 -> 180 bytes
src/images/go-down.png | Bin 0 -> 1216 bytes
src/images/go-next.png | Bin 0 -> 1203 bytes
src/images/go-previous.png | Bin 0 -> 1157 bytes
src/images/go-up.png | Bin 0 -> 1092 bytes
src/images/groupIncluding.png | Bin 0 -> 105 bytes
src/images/groupRefining.png | Bin 0 -> 160 bytes
src/images/grouping_morten.png | Bin 0 -> 875 bytes
src/images/groupsHighlightAll.png | Bin 0 -> 280 bytes
src/images/groupsHighlightAny.png | Bin 0 -> 276 bytes
src/images/help-about.png | Bin 0 -> 986 bytes
src/images/help-browser.png | Bin 0 -> 1541 bytes
src/images/integrity.png | Bin 0 -> 748 bytes
src/images/lyx2.png | Bin 0 -> 927 bytes
src/images/mark.png | Bin 0 -> 928 bytes
src/images/messageFail.png | Bin 0 -> 937 bytes
src/images/messageInfo.png | Bin 0 -> 978 bytes
src/images/messageWarn.png | Bin 0 -> 1014 bytes
src/images/optIcon.png | Bin 0 -> 200 bytes
src/images/pdf-new.png | Bin 0 -> 936 bytes
src/images/pdf.png | Bin 0 -> 349 bytes
src/images/postscript.png | Bin 0 -> 233 bytes
src/images/preamble.png | Bin 0 -> 266 bytes
src/images/preferences.png | Bin 0 -> 1381 bytes
src/images/remove.png | Bin 0 -> 288 bytes
src/images/reqIcon.png | Bin 0 -> 182 bytes
src/images/search.png | Bin 0 -> 1433 bytes
src/images/splash-2.1.svg | 229 +++++++
src/images/splash-2.1beta.png | Bin 0 -> 179073 bytes
src/images/{splash-2.5.svg => splash-2.3.svg} | 36 +-
src/images/{splash-2.5.svg => splash-2.4.svg} | 6 +-
src/images/splash-2.5.svg | 6 +-
src/images/{splash-2.5.svg => splash-2.6beta.svg} | 45 +-
src/images/splash.png | Bin 171490 -> 175305 bytes
src/images/splashBackground.png | Bin 0 -> 157549 bytes
src/images/strings.png | Bin 0 -> 233 bytes
src/images/unmark.png | Bin 0 -> 1025 bytes
src/images/user-home.png | Bin 0 -> 1290 bytes
src/images/view-refresh.png | Bin 0 -> 1591 bytes
src/images/viewsource.gif | Bin 0 -> 119 bytes
src/images/winedt.png | Bin 0 -> 1495 bytes
src/images/wizard.png | Bin 0 -> 238 bytes
src/images/wrongItem.png | Bin 0 -> 776 bytes
src/images/wwwciteseer.png | Bin 0 -> 526 bytes
src/java/net/sf/jabref/BasePanel.java | 45 ++
src/java/net/sf/jabref/ContentSelectorDialog2.java | 2 +
src/java/net/sf/jabref/DuplicateCheck.java | 10 +-
src/java/net/sf/jabref/EntryEditor.java | 102 +++-
src/java/net/sf/jabref/EntryEditorTab.java | 29 +-
src/java/net/sf/jabref/GeneralTab.java | 7 +-
src/java/net/sf/jabref/Globals.java | 2 +-
src/java/net/sf/jabref/JabRef.java | 18 +-
src/java/net/sf/jabref/JabRefPreferences.java | 8 +-
src/java/net/sf/jabref/PreviewPanel.java | 2 +-
src/java/net/sf/jabref/RegExpRule.java | 5 +-
src/java/net/sf/jabref/SearchManager2.java | 4 +-
src/java/net/sf/jabref/SimpleSearchRule.java | 5 +-
src/java/net/sf/jabref/Util.java | 189 +++++-
src/java/net/sf/jabref/collab/Change.java | 6 +-
.../net/sf/jabref/collab/ChangeDisplayDialog.java | 17 +-
src/java/net/sf/jabref/collab/ChangeScanner.java | 90 ++-
src/java/net/sf/jabref/collab/EntryAddChange.java | 3 +-
src/java/net/sf/jabref/collab/EntryChange.java | 20 +-
.../net/sf/jabref/collab/EntryDeleteChange.java | 3 +-
.../net/sf/jabref/collab/FileUpdateMonitor.java | 17 +-
src/java/net/sf/jabref/collab/GroupChange.java | 16 +-
src/java/net/sf/jabref/collab/MetaDataChange.java | 108 ++++
src/java/net/sf/jabref/collab/PreambleChange.java | 4 +-
src/java/net/sf/jabref/collab/StringAddChange.java | 14 +-
src/java/net/sf/jabref/collab/StringChange.java | 20 +-
.../net/sf/jabref/collab/StringNameChange.java | 19 +-
.../net/sf/jabref/collab/StringRemoveChange.java | 11 +-
src/java/net/sf/jabref/export/FileActions.java | 13 +-
.../jabref/export/OpenDocumentRepresentation.java | 12 +-
.../net/sf/jabref/export/SaveDatabaseAction.java | 56 +-
src/java/net/sf/jabref/export/SaveException.java | 4 +
src/java/net/sf/jabref/export/SaveSession.java | 68 ++-
src/java/net/sf/jabref/export/layout/Layout.java | 9 +-
.../net/sf/jabref/export/layout/LayoutEntry.java | 16 +-
.../sf/jabref/export/layout/format/Default.java | 20 +
.../jabref/export/layout/format/FormatChars.java | 238 ++++----
.../sf/jabref/export/layout/format/HTMLChars.java | 5 +-
.../sf/jabref/export/layout/format/LastPage.java | 5 +-
.../sf/jabref/export/layout/format/RTFChars.java | 8 +-
.../sf/jabref/export/layout/format/ResolvePDF.java | 2 +-
.../external/TransferableFileLinkSelection.java | 111 ++++
src/java/net/sf/jabref/groups/AutoGroupDialog.java | 89 ++-
.../jabref/groups/EntryTableTransferHandler.java | 28 +-
.../sf/jabref/groups/GroupTreeCellRenderer.java | 13 +-
src/java/net/sf/jabref/groups/KeywordGroup.java | 32 +-
.../net/sf/jabref/gui/AutoCompleteListener.java | 72 ++-
src/java/net/sf/jabref/gui/AutoCompleter.java | 4 +
src/java/net/sf/jabref/gui/FileListEditor.java | 10 +-
.../net/sf/jabref/gui/FileListEntryEditor.java | 28 +-
.../net/sf/jabref/gui/ImportInspectionDialog.java | 3 +-
.../sf/jabref/gui/MainTableSelectionListener.java | 39 +-
src/java/net/sf/jabref/gui/VerticalLabelUI.java | 191 ++++++
src/java/net/sf/jabref/imports/CsaImporter.java | 48 +-
.../net/sf/jabref/imports/EndnoteImporter.java | 9 +-
src/java/net/sf/jabref/imports/IsiImporter.java | 4 +-
.../net/sf/jabref/imports/OpenDatabaseAction.java | 29 +-
src/java/net/sf/jabref/imports/ParserResult.java | 1 +
.../net/sf/jabref/imports/ScifinderImporter.java | 15 +-
.../sf/jabref/journals/ManageJournalsPanel.java | 6 +
src/java/net/sf/jabref/net/Cookie.java | 5 +-
src/java/net/sf/jabref/search/BasicSearch.java | 6 +-
.../jabref/search/SearchExpressionTreeParser.java | 12 +-
src/java/net/sf/jabref/sql/SQLutil.java | 13 +-
src/resource/JabRef_da.properties | 19 +-
src/resource/JabRef_de.properties | 36 +-
src/resource/JabRef_en.properties | 20 +-
src/resource/JabRef_fr.properties | 24 +-
src/resource/JabRef_it.properties | 219 +++----
src/resource/JabRef_nl.properties | 19 +-
src/resource/JabRef_no.properties | 19 +-
src/resource/JabRef_tr.properties | 126 ++--
src/resource/JabRef_zh.properties | 19 +-
src/resource/JabRef_zh.properties.UTF8 | 19 +
src/resource/Menu_tr.properties | 8 +-
src/resource/build.properties | 6 +-
src/resource/layout/endnote/EndNote.article.layout | 2 +-
src/resource/layout/endnote/EndNote.book.layout | 2 +-
src/resource/layout/endnote/EndNote.booklet.layout | 2 +-
src/resource/layout/endnote/EndNote.inbook.layout | 2 +-
.../layout/endnote/EndNote.incollection.layout | 2 +-
.../layout/endnote/EndNote.inproceedings.layout | 2 +-
src/resource/layout/endnote/EndNote.layout | 2 +-
src/resource/layout/endnote/EndNote.manual.layout | 2 +-
.../layout/endnote/EndNote.mastersthesis.layout | 2 +-
src/resource/layout/endnote/EndNote.misc.layout | 2 +-
src/resource/layout/endnote/EndNote.other.layout | 2 +-
.../layout/endnote/EndNote.phdthesis.layout | 2 +-
.../layout/endnote/EndNote.proceedings.layout | 2 +-
.../layout/endnote/EndNote.techreport.layout | 2 +-
.../layout/endnote/EndNote.unpublished.layout | 2 +-
src/resource/layout/harvard/harvard.book.layout | 3 +-
src/resource/layout/harvard/harvard.inbook.layout | 2 +
.../layout/harvard/harvard.incollection.layout | 3 +-
.../layout/harvard/harvard.inproceedings.layout | 3 +-
src/resource/layout/harvard/harvard.layout | 3 +-
.../layout/harvard/harvard.proceedings.layout | 3 +-
src/txt/CHANGELOG | 71 ++-
src/txt/README | 4 +-
src/txt/README~ | 100 ----
src/txt/TODO | 8 +-
src/windows/nsis/launcher.nsi | 4 +-
190 files changed, 2575 insertions(+), 1814 deletions(-)
diff --git a/.classpath b/.classpath
index c66a907..16e0e16 100644
--- a/.classpath
+++ b/.classpath
@@ -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
index f15c148..0000000
--- a/JabRef.ipr
+++ /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
index b1b87af..0000000
--- a/JabRef.iws
+++ /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="<template>" 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>
-
diff --git a/build.number b/build.number
index 3827efa..9f34c41 100644
--- a/build.number
+++ b/build.number
@@ -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
diff --git a/build.xml b/build.xml
index e6f9b7c..5a7bd0a 100644
--- a/build.xml
+++ b/build.xml
@@ -22,8 +22,8 @@
Compiler: Ant
Authors: Joerg K. Wegner, wegnerj at 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 -->
@@ -180,7 +180,7 @@
<!-- 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_trunk.iml
similarity index 50%
rename from src/Jabref.iml
rename to src/Jabref_trunk.iml
index cab9dcf..5049fe7 100644
--- a/src/Jabref.iml
+++ b/src/Jabref_trunk.iml
@@ -19,33 +19,6 @@
<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 />
@@ -64,34 +37,7 @@
<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!/" />
+ <root url="jar://$MODULE_DIR$/../lib/plugin/commons-logging.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -100,7 +46,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/ccl.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/plugin/jpf-boot.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -109,7 +55,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/javancss.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/plugin/JPFCodeGenerator.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -118,7 +64,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/jaxen-core-1.0-fcs.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/substance-4.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -136,7 +82,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/jdom-1.0b8.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/JempBox-0.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -154,78 +100,6 @@
<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 />
@@ -235,43 +109,7 @@
<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!/" />
+ <root url="jar://$MODULE_DIR$/../lib/antlr.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -280,7 +118,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/oro-2.0.6.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/glazedlists-1.7.0_java15.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -289,7 +127,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/aelfred-1.2.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/PDFBox-0.7.3-dev-reduced.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -298,7 +136,7 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/../lib/jaxp-1.2.jar!/" />
+ <root url="jar://$MODULE_DIR$/../lib/antlr-3.0b5.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
@@ -316,16 +154,7 @@
<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!/" />
+ <root url="jar://$MODULE_DIR$/../lib/mysql-connector-java-5.0.7-bin.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
diff --git a/src/help/About.html b/src/help/About.html
index 1246bc9..92d8cc8 100755
--- a/src/help/About.html
+++ b/src/help/About.html
@@ -35,6 +35,7 @@
Joerg K. Wegner,
Michael Wrighton,
Egon Willighagen,
+ Wenbo Yang,
Jörg Zieren</p>
<h2>Contributions from:</h2>
diff --git a/src/help/BaseFrameHelp.html b/src/help/BaseFrameHelp.html
index b83d338..8522fdd 100755
--- a/src/help/BaseFrameHelp.html
+++ b/src/help/BaseFrameHelp.html
@@ -27,25 +27,20 @@
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 -> 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>
@@ -96,10 +91,10 @@
<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>
diff --git a/src/help/CustomExports.html b/src/help/CustomExports.html
index c7c2ba1..c8d8694 100644
--- a/src/help/CustomExports.html
+++ b/src/help/CustomExports.html
@@ -303,6 +303,11 @@
<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.
diff --git a/src/help/EntryEditorHelp.html b/src/help/EntryEditorHelp.html
index 734b55c..9120ace 100755
--- a/src/help/EntryEditorHelp.html
+++ b/src/help/EntryEditorHelp.html
@@ -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>
@@ -64,18 +64,14 @@
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
diff --git a/src/help/RevisionHistory.html b/src/help/RevisionHistory.html
index 87ce748..ced61f5 100644
--- a/src/help/RevisionHistory.html
+++ b/src/help/RevisionHistory.html
@@ -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
+ <br>, while multiple newlines are displayed as <p>.
+ <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>
@@ -12,7 +113,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 "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
+ <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" 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 ".in" is included or omitted.</li>
<li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
@@ -63,7 +164,6 @@
<li>Fixed bug 2157664: Current edit is now treated as an undoable edit in itself.</li>
</ul>
-
<h3>Version 2.4.1 (October 8th, 2008)</h3>
<ul>
diff --git a/src/help/da/About.html b/src/help/da/About.html
index a00300a..fbf40c4 100755
--- a/src/help/da/About.html
+++ b/src/help/da/About.html
@@ -37,6 +37,7 @@
Joerg K. Wegner,
Michael Wrighton,
Egon Willighagen,
+ Wenbo Yang,
Jörg Zieren</p>
<h2>Bidrag fra:</h2>
diff --git a/src/help/de/About.html b/src/help/de/About.html
index 721cf8e..5bf8769 100644
--- a/src/help/de/About.html
+++ b/src/help/de/About.html
@@ -35,6 +35,7 @@
Joerg K. Wegner,
Michael Wrighton,
Egon Willighagen,
+ Wenbo Yang,
Jörg Zieren</p>
<h2>Beiträge von:</h2>
diff --git a/src/help/fr/About.html b/src/help/fr/About.html
index a4d36d1..2a3ab4c 100644
--- a/src/help/fr/About.html
+++ b/src/help/fr/About.html
@@ -35,6 +35,7 @@
Joerg K. Wegner,
Michael Wrighton,
Egon Willighagen,
+ Wenbo Yang,
Jörg Zieren</p>
<h2>Contributions de :</h2>
diff --git a/src/help/fr/BaseFrameHelp.html b/src/help/fr/BaseFrameHelp.html
index b005647..47351c4 100644
--- a/src/help/fr/BaseFrameHelp.html
+++ b/src/help/fr/BaseFrameHelp.html
@@ -34,10 +34,10 @@
flèches du clavier.</li>
<li>Le tableau est trié selon une série de
- champs de votre choix. L'ordre de tri par défaut est
+ champs de votre choix. L'ordre de tri par défaut peut être
configuré dans <strong>Options ->
Préférences -> Table des
- entrées</strong> mais pour changer rapidement cet
+ entrées</strong> mais pour changer plus rapidement cet
ordre, cliquez l'entête d'une colonne pour la
définir comme critère de tri principal, ou
inverser l'ordre du tri s'il est déjà
@@ -47,19 +47,13 @@
enfoncée et cliquez sur un autre entête de
colonne pour l'ajouter, l'inverser ou l'enlever comme
critère de tri auxiliaire. Vous pouvez ajouter un
- nombre arbitraire de critères auxiliaires.</li>
+ nombre arbitraire de critères auxiliaires, mais uniquement
+ trois niveaux seront mémorisés pour
+ le démarrage suivant de JabRef.</li>
<li>Vous pouvez ajuster la largeur des colonnes en faisant
glisser les limites entre les entêtes.</li>
- <li>Dans la fenêtre de dialogue
- <strong>Préférences</strong>, choisissez si
- le tableau doit être redimensionné pour
- s'ajuster à la fenêtre. Sélectionnez
- cette option pour toujours voir l'ensemble du tableau, et
- désélectionnez là pour permettre
- l'affichage de plus d'informations.</li>
-
<li>
Les codes de couleurs vous aident à visualiser
l'état de votre base de données. Les
@@ -109,8 +103,8 @@
les types les plus courants.</p>
<p>Lorsqu'une nouvelle entrée est ajoutée, par
- défaut, une <a href="EntryEditorHelp.html">fenêtre
- d'édition</a> s'ouvre. Ce comportement peut être
+ défaut, l'<a href="EntryEditorHelp.html">éditeur
+ d'entrées</a> s'ouvre. Ce comportement peut être
modifié dans la fenêtre de dialogue
<strong>Préférences</strong>.</p>
@@ -121,12 +115,11 @@
<h2>Editer une entrée</h2>
- <p>Pour ouvrir la
- <a href="EntryEditorHelp.html">fenêtre
- d'édition</a> sur une entrée existante,
+ <p>Pour ouvrir l'<a href="EntryEditorHelp.html">éditeur
+ d'entrées</a> sur une entrée existante,
double-cliquez simplement sur la ligne correspondant à
l'entrée (ou appuyez sur ENTREE après avoir
- sélectionner l'entrée).</p>
+ sélectionné l'entrée).</p>
<h2>Référencer une chaîne <em>BibTeX</em>
dans un champ</h2>
diff --git a/src/help/fr/CustomExports.html b/src/help/fr/CustomExports.html
index 54b364d..39e0685 100644
--- a/src/help/fr/CustomExports.html
+++ b/src/help/fr/CustomExports.html
@@ -349,6 +349,15 @@
date peut-être adapté. Par exemple,
<code>\format[CurrentDate]{yyyy.MM.dd}</code> renverra
uniquement la date, comme par exemple 2005.11.30.</li>
+
+ <li><code>Default</code> : prend un seul argument, qui sert comme
+ valeur par défaut. Si la chaîne à formatter
+ n'est pas vide, elle est renvoyée sans changement.
+ Si elle est vide, la valeur par défaut est renvoyée.
+ Par exemple,
+ <code>\format[Default(unknown)]{\year}</code>
+ renverra l'année de l'entrée si elle existe,
+ et "unknown" si l'année n'est pas précisée.</li>
<li><code>FileLink(TypeDeFichier)</code> : sans argument, ce formateur renvoie
le premier lien apparaissant dans le champ. Pour fonctionner, ce formateur doit
diff --git a/src/help/fr/EntryEditorHelp.html b/src/help/fr/EntryEditorHelp.html
index 48c7f24..d448afe 100644
--- a/src/help/fr/EntryEditorHelp.html
+++ b/src/help/fr/EntryEditorHelp.html
@@ -78,10 +78,6 @@
d'utiliser les quatre autres onglets, vous devez cocher cette
option.</p>
- <p><strong>Astuce :</strong> Si votre base contient des
- champs que JabRef ne connaît pas, ils seront visibles
- dans l'onglet <em>Source BibTeX</em>.</p>
-
<p><strong>Astuce :</strong> les champs <i>pdf</i> et
<i>url</i> supportent les opérations de
Glisser-Déplacer. Vous pouvez faire glisser une url
@@ -97,7 +93,8 @@
Pour les champs qui sont utilisés par <em>BibTeX</em>,
le contenu est vérifié par rapport à
l'utilisation du caractére '#'. Le symbole dièse
- doit <em>toujours</em> être utilisé par paires,
+ doit <em>toujours</em> être utilisé par paires
+ (excepté pour la forme d'échappement '\#'),
encadrant le nom d'une chaîne <em>BibTeX</em> existante.
Notez que JabRef ne vérifie pas si la chaîne
<em>BibTeX</em> est vraiment définie (ce n'est pas
diff --git a/src/help/fr/RevisionHistory.html b/src/help/fr/RevisionHistory.html
index 59bf77b..05e95e1 100644
--- a/src/help/fr/RevisionHistory.html
+++ b/src/help/fr/RevisionHistory.html
@@ -5,6 +5,65 @@
<h1>Historique des ré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 "alpha" BibTeX style. Patch submitted by Oliver Kopp.</li>
+ <li> Added [authorsAlpha] key marker that formats authors according to the "alpha" 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 ".in" is included or omitted.</li>
<li> Modified ISI importer so the words "of", "and" and "the" will not be capitalized in the title, journal or publisher fields.</li>
@@ -64,7 +123,6 @@
<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>
@@ -1204,4 +1262,4 @@
</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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
index 0000000..1f931f6
--- /dev/null
+++ b/src/images/splash-2.1.svg
@@ -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
index 0000000..4304131
Binary files /dev/null and b/src/images/splash-2.1beta.png differ
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.3.svg
similarity index 91%
copy from src/images/splash-2.5.svg
copy to src/images/splash-2.3.svg
index 55e8e0e..d519da8 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.3.svg
@@ -2,7 +2,7 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
+ 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"
@@ -12,9 +12,9 @@
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
- sodipodi:docname="splash-2.5.svg"
- sodipodi:docbase="/home/alver/jabref_trunk/src/images"
- inkscape:version="0.46"
+ sodipodi: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"
@@ -22,13 +22,6 @@
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
@@ -148,8 +141,7 @@
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
- id="base"
- showgrid="false" />
+ id="base" />
<metadata
id="metadata2143">
<rdf:RDF>
@@ -168,7 +160,7 @@
<rect
inkscape:export-ydpi="75.000000"
inkscape:export-xdpi="75.000000"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
y="170.36218"
x="77.500000"
height="432.00000"
@@ -183,13 +175,13 @@
xlink:href="splashBackground.png"
x="79"
y="172.36218"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
inkscape:export-xdpi="75"
inkscape:export-ydpi="75" />
<flowRoot
inkscape:export-ydpi="75.000000"
inkscape:export-xdpi="75.000000"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
style="opacity:1.0000000;fill:#635578;fill-opacity:1.0000000;stroke:#b5b5c7;stroke-width:0.48137558;stroke-linejoin:bevel;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
transform="matrix(1.875133,0.000000,0.000000,2.542210,-129.6969,-372.8897)"
id="flowRoot2189"
@@ -210,7 +202,7 @@
</flowRoot> <flowRoot
inkscape:export-ydpi="75.000000"
inkscape:export-xdpi="75.000000"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
transform="matrix(0.972246,0,0,1.325301,6.054966,-126.1181)"
style="font-size:12px;font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#797580;fill-opacity:1;font-family:Bitstream Vera Sans"
id="flowRoot3076"
@@ -225,10 +217,10 @@
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-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_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
transform="scale(0.853347,1.171856)"
sodipodi:linespacing="100%"
id="text2179"
@@ -244,7 +236,7 @@
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-filename="/home/alver/jabref/src/images/splash.png"
inkscape:export-xdpi="75"
inkscape:export-ydpi="75">
<path
@@ -272,13 +264,13 @@
id="text2911"
sodipodi:linespacing="100%"
transform="scale(0.917932,1.089405)"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref/src/images/splash.png"
inkscape:export-xdpi="75"
inkscape:export-ydpi="75"><tspan
sodipodi:role="line"
id="tspan2913"
x="462.20135"
y="426.2529"
- style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.5</tspan></text>
+ 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.5.svg b/src/images/splash-2.4.svg
similarity index 99%
copy from src/images/splash-2.5.svg
copy to src/images/splash-2.4.svg
index 55e8e0e..8eaf7e1 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.4.svg
@@ -12,7 +12,7 @@
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
- sodipodi:docname="splash-2.5.svg"
+ sodipodi:docname="splash-2.4.svg"
sodipodi:docbase="/home/alver/jabref_trunk/src/images"
inkscape:version="0.46"
sodipodi:version="0.32"
@@ -137,7 +137,7 @@
inkscape:window-y="25"
inkscape:window-x="0"
inkscape:window-height="949"
- inkscape:window-width="1280"
+ inkscape:window-width="1279"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="677.8697"
@@ -279,6 +279,6 @@
id="tspan2913"
x="462.20135"
y="426.2529"
- style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.5</tspan></text>
+ style="font-size:119.00263214px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#727888;stroke-width:1.80000031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-family:Bitstream Vera Sans">2.4</tspan></text>
</g>
</svg>
diff --git a/src/images/splash-2.5.svg b/src/images/splash-2.5.svg
index 55e8e0e..f571b08 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.5.svg
@@ -135,8 +135,8 @@
</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"
@@ -225,7 +225,7 @@
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.5.svg b/src/images/splash-2.6beta.svg
similarity index 85%
copy from src/images/splash-2.5.svg
copy to src/images/splash-2.6beta.svg
index 55e8e0e..af82162 100644
--- a/src/images/splash-2.5.svg
+++ b/src/images/splash-2.6beta.svg
@@ -12,7 +12,7 @@
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/alver/jabref_head/jabref/src/images/jabref_splash-2.2.png"
- sodipodi:docname="splash-2.5.svg"
+ sodipodi:docname="splash-2.6beta.svg"
sodipodi:docbase="/home/alver/jabref_trunk/src/images"
inkscape:version="0.46"
sodipodi:version="0.32"
@@ -134,14 +134,14 @@
r="135.88549" />
</defs>
<sodipodi:namedview
- inkscape:window-y="25"
+ inkscape:window-y="0"
inkscape:window-x="0"
- inkscape:window-height="949"
- inkscape:window-width="1280"
+ inkscape:window-height="768"
+ inkscape:window-width="1272"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="677.8697"
- inkscape:cx="414.10531"
+ inkscape:cx="238.10531"
inkscape:zoom="1"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
@@ -168,7 +168,7 @@
<rect
inkscape:export-ydpi="75.000000"
inkscape:export-xdpi="75.000000"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
y="170.36218"
x="77.500000"
height="432.00000"
@@ -183,13 +183,13 @@
xlink:href="splashBackground.png"
x="79"
y="172.36218"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ 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_beta/src/images/splash.png"
+ 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"
@@ -210,7 +210,7 @@
</flowRoot> <flowRoot
inkscape:export-ydpi="75.000000"
inkscape:export-xdpi="75.000000"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ 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"
@@ -225,10 +225,10 @@
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"
+ inkscape:export-filename="/home/alver/jabref_trunk/src/images/splash.png"
transform="scale(0.853347,1.171856)"
sodipodi:linespacing="100%"
id="text2179"
@@ -244,7 +244,7 @@
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-filename="/home/alver/jabref_trunk/src/images/splash.png"
inkscape:export-xdpi="75"
inkscape:export-ydpi="75">
<path
@@ -272,13 +272,28 @@
id="text2911"
sodipodi:linespacing="100%"
transform="scale(0.917932,1.089405)"
- inkscape:export-filename="/home/alver/jabref_beta/src/images/splash.png"
+ 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.5</tspan></text>
- </g>
+ 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>
diff --git a/src/images/splash.png b/src/images/splash.png
index efc1828..5b71a8a 100644
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
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
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
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
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
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
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
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
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
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
index 0000000..1885445
Binary files /dev/null and b/src/images/wwwciteseer.png differ
diff --git a/src/java/net/sf/jabref/BasePanel.java b/src/java/net/sf/jabref/BasePanel.java
index 8ed5da6..054b44e 100644
--- a/src/java/net/sf/jabref/BasePanel.java
+++ b/src/java/net/sf/jabref/BasePanel.java
@@ -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();
diff --git a/src/java/net/sf/jabref/ContentSelectorDialog2.java b/src/java/net/sf/jabref/ContentSelectorDialog2.java
index 27869d4..66e9900 100644
--- a/src/java/net/sf/jabref/ContentSelectorDialog2.java
+++ b/src/java/net/sf/jabref/ContentSelectorDialog2.java
@@ -292,6 +292,8 @@ public class ContentSelectorDialog2 extends JDialog {
else {
panel.rebuildAllEntryEditors();
}
+ panel.addContentSelectorValuesToAutoCompleters();
+
}
/**
diff --git a/src/java/net/sf/jabref/DuplicateCheck.java b/src/java/net/sf/jabref/DuplicateCheck.java
index ad4148d..467db65 100644
--- a/src/java/net/sf/jabref/DuplicateCheck.java
+++ b/src/java/net/sf/jabref/DuplicateCheck.java
@@ -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);
}
diff --git a/src/java/net/sf/jabref/EntryEditor.java b/src/java/net/sf/jabref/EntryEditor.java
index 5b3b4fc..8de6827 100644
--- a/src/java/net/sf/jabref/EntryEditor.java
+++ b/src/java/net/sf/jabref/EntryEditor.java
@@ -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);
+ }
+ }
}
diff --git a/src/java/net/sf/jabref/EntryEditorTab.java b/src/java/net/sf/jabref/EntryEditorTab.java
index 42f4f4f..2028928 100644
--- a/src/java/net/sf/jabref/EntryEditorTab.java
+++ b/src/java/net/sf/jabref/EntryEditorTab.java
@@ -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();
diff --git a/src/java/net/sf/jabref/GeneralTab.java b/src/java/net/sf/jabref/GeneralTab.java
index 42e33e6..5d8ced5 100644
--- a/src/java/net/sf/jabref/GeneralTab.java
+++ b/src/java/net/sf/jabref/GeneralTab.java
@@ -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."),
diff --git a/src/java/net/sf/jabref/Globals.java b/src/java/net/sf/jabref/Globals.java
index 856dae8..d6625ff 100644
--- a/src/java/net/sf/jabref/Globals.java
+++ b/src/java/net/sf/jabref/Globals.java
@@ -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>();
diff --git a/src/java/net/sf/jabref/JabRef.java b/src/java/net/sf/jabref/JabRef.java
index 3e8578b..125fd41 100644
--- a/src/java/net/sf/jabref/JabRef.java
+++ b/src/java/net/sf/jabref/JabRef.java
@@ -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) {
diff --git a/src/java/net/sf/jabref/JabRefPreferences.java b/src/java/net/sf/jabref/JabRefPreferences.java
index 4b51df8..fe02fde 100644
--- a/src/java/net/sf/jabref/JabRefPreferences.java
+++ b/src/java/net/sf/jabref/JabRefPreferences.java
@@ -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 {
diff --git a/src/java/net/sf/jabref/PreviewPanel.java b/src/java/net/sf/jabref/PreviewPanel.java
index 036099c..1b5148c 100644
--- a/src/java/net/sf/jabref/PreviewPanel.java
+++ b/src/java/net/sf/jabref/PreviewPanel.java
@@ -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) $)
*
*/
diff --git a/src/java/net/sf/jabref/RegExpRule.java b/src/java/net/sf/jabref/RegExpRule.java
index 5f591e5..4183f99 100644
--- a/src/java/net/sf/jabref/RegExpRule.java
+++ b/src/java/net/sf/jabref/RegExpRule.java
@@ -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;
diff --git a/src/java/net/sf/jabref/SearchManager2.java b/src/java/net/sf/jabref/SearchManager2.java
index 43c041e..4a9b1c9 100644
--- a/src/java/net/sf/jabref/SearchManager2.java
+++ b/src/java/net/sf/jabref/SearchManager2.java
@@ -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());
diff --git a/src/java/net/sf/jabref/SimpleSearchRule.java b/src/java/net/sf/jabref/SimpleSearchRule.java
index 2517d02..e42fe12 100644
--- a/src/java/net/sf/jabref/SimpleSearchRule.java
+++ b/src/java/net/sf/jabref/SimpleSearchRule.java
@@ -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;
diff --git a/src/java/net/sf/jabref/Util.java b/src/java/net/sf/jabref/Util.java
index efc49c5..8e44f07 100644
--- a/src/java/net/sf/jabref/Util.java
+++ b/src/java/net/sf/jabref/Util.java
@@ -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
diff --git a/src/java/net/sf/jabref/collab/Change.java b/src/java/net/sf/jabref/collab/Change.java
index 342fd8f..754e392 100644
--- a/src/java/net/sf/jabref/collab/Change.java
+++ b/src/java/net/sf/jabref/collab/Change.java
@@ -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);
}
diff --git a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
index 92aa1b3..3ddaf27 100644
--- a/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
+++ b/src/java/net/sf/jabref/collab/ChangeDisplayDialog.java
@@ -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);
diff --git a/src/java/net/sf/jabref/collab/ChangeScanner.java b/src/java/net/sf/jabref/collab/ChangeScanner.java
index 5e18b1a..e2969a9 100644
--- a/src/java/net/sf/jabref/collab/ChangeScanner.java
+++ b/src/java/net/sf/jabref/collab/ChangeScanner.java
@@ -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;
//
diff --git a/src/java/net/sf/jabref/collab/EntryAddChange.java b/src/java/net/sf/jabref/collab/EntryAddChange.java
index 5053041..275e8cf 100644
--- a/src/java/net/sf/jabref/collab/EntryAddChange.java
+++ b/src/java/net/sf/jabref/collab/EntryAddChange.java
@@ -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));
}
diff --git a/src/java/net/sf/jabref/collab/EntryChange.java b/src/java/net/sf/jabref/collab/EntryChange.java
index bfc9719..01a44f5 100644
--- a/src/java/net/sf/jabref/collab/EntryChange.java
+++ b/src/java/net/sf/jabref/collab/EntryChange.java
@@ -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() {
diff --git a/src/java/net/sf/jabref/collab/EntryDeleteChange.java b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
index 121e2cf..d3997bb 100644
--- a/src/java/net/sf/jabref/collab/EntryDeleteChange.java
+++ b/src/java/net/sf/jabref/collab/EntryDeleteChange.java
@@ -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() {
diff --git a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
index 92b2624..0f7b433 100644
--- a/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
+++ b/src/java/net/sf/jabref/collab/FileUpdateMonitor.java
@@ -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();
diff --git a/src/java/net/sf/jabref/collab/GroupChange.java b/src/java/net/sf/jabref/collab/GroupChange.java
index 9b81a58..ed438ba 100644
--- a/src/java/net/sf/jabref/collab/GroupChange.java
+++ b/src/java/net/sf/jabref/collab/GroupChange.java
@@ -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
index 0000000..34f4f17
--- /dev/null
+++ b/src/java/net/sf/jabref/collab/MetaDataChange.java
@@ -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> ");
+ 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;
+ }
+ }
+}
diff --git a/src/java/net/sf/jabref/collab/PreambleChange.java b/src/java/net/sf/jabref/collab/PreambleChange.java
index 6234e72..d82388d 100644
--- a/src/java/net/sf/jabref/collab/PreambleChange.java
+++ b/src/java/net/sf/jabref/collab/PreambleChange.java
@@ -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() {
diff --git a/src/java/net/sf/jabref/collab/StringAddChange.java b/src/java/net/sf/jabref/collab/StringAddChange.java
index d2978bf..e109371 100644
--- a/src/java/net/sf/jabref/collab/StringAddChange.java
+++ b/src/java/net/sf/jabref/collab/StringAddChange.java
@@ -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());
+ }
}
diff --git a/src/java/net/sf/jabref/collab/StringChange.java b/src/java/net/sf/jabref/collab/StringChange.java
index f57729f..ddc320a 100644
--- a/src/java/net/sf/jabref/collab/StringChange.java
+++ b/src/java/net/sf/jabref/collab/StringChange.java
@@ -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);
+ }
}
diff --git a/src/java/net/sf/jabref/collab/StringNameChange.java b/src/java/net/sf/jabref/collab/StringNameChange.java
index e3ea8be..a2ef52d 100644
--- a/src/java/net/sf/jabref/collab/StringNameChange.java
+++ b/src/java/net/sf/jabref/collab/StringNameChange.java
@@ -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);
+ }
}
diff --git a/src/java/net/sf/jabref/collab/StringRemoveChange.java b/src/java/net/sf/jabref/collab/StringRemoveChange.java
index 3e9be68..c45d00f 100644
--- a/src/java/net/sf/jabref/collab/StringRemoveChange.java
+++ b/src/java/net/sf/jabref/collab/StringRemoveChange.java
@@ -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());
}
diff --git a/src/java/net/sf/jabref/export/FileActions.java b/src/java/net/sf/jabref/export/FileActions.java
index 2d28d2d..31cac70 100644
--- a/src/java/net/sf/jabref/export/FileActions.java
+++ b/src/java/net/sf/jabref/export/FileActions.java
@@ -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("{}");
diff --git a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
index 7e0a77c..31e275e 100644
--- a/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
+++ b/src/java/net/sf/jabref/export/OpenDocumentRepresentation.java
@@ -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) {
diff --git a/src/java/net/sf/jabref/export/SaveDatabaseAction.java b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
index a14cdcd..7876d4d 100644
--- a/src/java/net/sf/jabref/export/SaveDatabaseAction.java
+++ b/src/java/net/sf/jabref/export/SaveDatabaseAction.java
@@ -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:
diff --git a/src/java/net/sf/jabref/export/SaveException.java b/src/java/net/sf/jabref/export/SaveException.java
index bf9c19b..a6e0990 100644
--- a/src/java/net/sf/jabref/export/SaveException.java
+++ b/src/java/net/sf/jabref/export/SaveException.java
@@ -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 ///////////////////////////////////////////////////////////
diff --git a/src/java/net/sf/jabref/export/SaveSession.java b/src/java/net/sf/jabref/export/SaveSession.java
index 1f2ddd7..09b885f 100644
--- a/src/java/net/sf/jabref/export/SaveSession.java
+++ b/src/java/net/sf/jabref/export/SaveSession.java
@@ -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;
}
diff --git a/src/java/net/sf/jabref/export/layout/Layout.java b/src/java/net/sf/jabref/export/layout/Layout.java
index 3e262f1..1c14b8e 100755
--- a/src/java/net/sf/jabref/export/layout/Layout.java
+++ b/src/java/net/sf/jabref/export/layout/Layout.java
@@ -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
diff --git a/src/java/net/sf/jabref/export/layout/LayoutEntry.java b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
index 78db159..23c6687 100755
--- a/src/java/net/sf/jabref/export/layout/LayoutEntry.java
+++ b/src/java/net/sf/jabref/export/layout/LayoutEntry.java
@@ -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
index 0000000..1fa56a1
--- /dev/null
+++ b/src/java/net/sf/jabref/export/layout/format/Default.java
@@ -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;
+ }
+}
diff --git a/src/java/net/sf/jabref/export/layout/format/FormatChars.java b/src/java/net/sf/jabref/export/layout/format/FormatChars.java
index 1468d9d..bd3de04 100644
--- a/src/java/net/sf/jabref/export/layout/format/FormatChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/FormatChars.java
@@ -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", "Ā"); // "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"
+ 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", "Đ"); // "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"
+ 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", "Ĵ"); // "Jcirc"
- CHARS.put("^j", "ĵ"); // "jcirc"
- CHARS.put("cK", "Ķ"); // "Kcedil"
- CHARS.put("ck", "ķ"); // "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", "Ĺ"); // "Lacute"
- CHARS.put("'l", "ĺ"); // "lacute"
- CHARS.put("cL", "Ļ"); // "Lcedil"
- CHARS.put("cl", "ļ"); // "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", "Ŀ"); // "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"
+ 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", "Ŋ"); // "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"
+ 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", "Ŧ"); // "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"
+ 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
}
diff --git a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
index 51716b4..2e41117 100644
--- a/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/HTMLChars.java
@@ -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("&|\\\\&", "&").replaceAll("[\\n]{1,}", "<p>");
+ field = field.replaceAll("&|\\\\&", "&").replaceAll("[\\n]{2,}", "<p>")
+ .replaceAll("\\n", "<br>");
StringBuffer sb = new StringBuffer();
StringBuffer currentCommand = null;
diff --git a/src/java/net/sf/jabref/export/layout/format/LastPage.java b/src/java/net/sf/jabref/export/layout/format/LastPage.java
index 86db9b5..c1327f9 100644
--- a/src/java/net/sf/jabref/export/layout/format/LastPage.java
+++ b/src/java/net/sf/jabref/export/layout/format/LastPage.java
@@ -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
diff --git a/src/java/net/sf/jabref/export/layout/format/RTFChars.java b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
index 8fbf8ff..5524b91 100644
--- a/src/java/net/sf/jabref/export/layout/format/RTFChars.java
+++ b/src/java/net/sf/jabref/export/layout/format/RTFChars.java
@@ -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) {
diff --git a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
index fc6a2a5..cbcea29 100644
--- a/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
+++ b/src/java/net/sf/jabref/export/layout/format/ResolvePDF.java
@@ -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
index 0000000..55dd56e
--- /dev/null
+++ b/src/java/net/sf/jabref/external/TransferableFileLinkSelection.java
@@ -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;
+ } */
+}
diff --git a/src/java/net/sf/jabref/groups/AutoGroupDialog.java b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
index dae7be8..68ee761 100644
--- a/src/java/net/sf/jabref/groups/AutoGroupDialog.java
+++ b/src/java/net/sf/jabref/groups/AutoGroupDialog.java
@@ -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);
}
diff --git a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
index 517c112..e6a1f06 100644
--- a/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
+++ b/src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
@@ -22,12 +22,10 @@
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))
diff --git a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
index ce18ace..21c4ef6 100644
--- a/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
+++ b/src/java/net/sf/jabref/groups/GroupTreeCellRenderer.java
@@ -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>");
diff --git a/src/java/net/sf/jabref/groups/KeywordGroup.java b/src/java/net/sf/jabref/groups/KeywordGroup.java
index ec1d4ed..68402a8 100644
--- a/src/java/net/sf/jabref/groups/KeywordGroup.java
+++ b/src/java/net/sf/jabref/groups/KeywordGroup.java
@@ -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.
diff --git a/src/java/net/sf/jabref/gui/AutoCompleteListener.java b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
index 410cfe3..f23e851 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleteListener.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleteListener.java
@@ -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);
+ }
}
diff --git a/src/java/net/sf/jabref/gui/AutoCompleter.java b/src/java/net/sf/jabref/gui/AutoCompleter.java
index 20a122f..0d98442 100644
--- a/src/java/net/sf/jabref/gui/AutoCompleter.java
+++ b/src/java/net/sf/jabref/gui/AutoCompleter.java
@@ -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);
diff --git a/src/java/net/sf/jabref/gui/FileListEditor.java b/src/java/net/sf/jabref/gui/FileListEditor.java
index 3611379..de7aa19 100644
--- a/src/java/net/sf/jabref/gui/FileListEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEditor.java
@@ -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;
diff --git a/src/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
index ab0c74f..c35bbb5 100644
--- a/src/java/net/sf/jabref/gui/FileListEntryEditor.java
+++ b/src/java/net/sf/jabref/gui/FileListEntryEditor.java
@@ -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;
@@ -53,6 +54,8 @@ public class FileListEntryEditor {
private boolean okPressed = false, okDisabledExternally = false,
openBrowseWhenShown = false, dontOpenBrowseUntilDisposed = false;
+ public static Pattern remoteLinkPattern = Pattern.compile("[a-z]+://.*");
+
public FileListEntryEditor(JabRefFrame frame, FileListEntry entry, boolean showProgressBar,
boolean showOpenButton, MetaData metaData) {
this.entry = entry;
@@ -183,6 +186,16 @@ public class FileListEntryEditor {
private void checkExtension() {
if ((types.getSelectedIndex() == -1) &&
(link.getText().trim().length() > 0)) {
+
+ // Check if this looks like a remote link:
+ if (remoteLinkPattern.matcher(link.getText()).matches()) {
+ ExternalFileType type = Globals.prefs.getExternalFileTypeByExt("html");
+ if (type != null) {
+ types.setSelectedItem(type);
+ return;
+ }
+ }
+
// Try to guess the file type:
String theLink = link.getText().trim();
int index = theLink.lastIndexOf('.');
@@ -266,12 +279,15 @@ public class FileListEntryEditor {
} else {
String canPath = (new File(fileDir)).getCanonicalPath();
File fl = new File(link.getText().trim());
- String flPath = fl.getCanonicalPath();
- if ((flPath.length() > canPath.length()) && (flPath.startsWith(canPath))) {
- String relFileName = fl.getCanonicalPath().substring(canPath.length()+1);
- entry.setLink(relFileName);
- } else
- entry.setLink(link.getText().trim());
+ if (fl.isAbsolute()) {
+ String flPath = fl.getCanonicalPath();
+ if ((flPath.length() > canPath.length()) && (flPath.startsWith(canPath))) {
+ String relFileName = fl.getCanonicalPath().substring(canPath.length()+1);
+ entry.setLink(relFileName);
+ } else
+ entry.setLink(link.getText().trim());
+ }
+ else entry.setLink(link.getText().trim());
}
} catch (java.io.IOException ex)
{
diff --git a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
index 59bcad4..5665740 100644
--- a/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
+++ b/src/java/net/sf/jabref/gui/ImportInspectionDialog.java
@@ -111,7 +111,7 @@ import com.jgoodies.uif_lite.component.UIFSplitPane;
*
* @author alver
* @author $Author: mortenalver $
- * @version $Revision: 2919 $ ($Date: 2007-11-14 01:25:31 +0100 (Mi, 14 Nov
+ * @version $Revision: 3047 $ ($Date: 2007-11-14 01:25:31 +0100 (Mi, 14 Nov
* 2007) $)
*
*/
@@ -1369,6 +1369,7 @@ public class ImportInspectionDialog extends JDialog implements ImportInspector {
public EntryTable(TableModel model) {
super(model);
+ getTableHeader().setReorderingAllowed(false);
}
public TableCellRenderer getCellRenderer(int row, int column) {
diff --git a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
index 2a31ac2..2cc1044 100644
--- a/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
+++ b/src/java/net/sf/jabref/gui/MainTableSelectionListener.java
@@ -106,10 +106,17 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
if ((mode == BasePanel.WILL_SHOW_EDITOR) || (mode == BasePanel.SHOWING_EDITOR)) {
// An entry is currently being edited.
EntryEditor oldEditor = panel.getCurrentEditor();
+ String visName = null;
+ if (oldEditor != null)
+ visName = oldEditor.getVisiblePanelName();
+
// Get an old or new editor for the entry to edit:
EntryEditor newEditor = panel.getEntryEditor(toShow);
// Show the new editor unless it was already visible:
if ((newEditor != oldEditor) || (mode != BasePanel.SHOWING_EDITOR)) {
+
+ if (visName != null)
+ newEditor.setVisiblePanel(visName);
panel.showEntryEditor(newEditor);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
@@ -206,22 +213,14 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
}
}
- public void mousePressed(MouseEvent e) {
-
+ public void mousePressed(MouseEvent e) {
// First find the column on which the user has clicked.
final int col = table.columnAtPoint(e.getPoint()),
row = table.rowAtPoint(e.getPoint());
- // A double click on an entry should open the entry's editor.
- if (e.getClickCount() == 2) {
-
- BibtexEntry toShow = tableRows.get(row);
- editSignalled(toShow);
- }
-
// Check if the user has clicked on an icon cell to open url or pdf.
final String[] iconType = table.getIconTypeForColumn(col);
-
+
// Check if the user has right-clicked. If so, open the right-click menu.
if (e.isPopupTrigger()) {
if (iconType == null)
@@ -231,6 +230,24 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
return;
}
+ }
+
+ public void mouseClicked(MouseEvent e) {
+
+ // First find the column on which the user has clicked.
+ final int col = table.columnAtPoint(e.getPoint()),
+ row = table.rowAtPoint(e.getPoint());
+
+ // A double click on an entry should open the entry's editor.
+ if (e.getClickCount() == 2) {
+
+ BibtexEntry toShow = tableRows.get(row);
+ editSignalled(toShow);
+ }
+
+ // Check if the user has clicked on an icon cell to open url or pdf.
+ final String[] iconType = table.getIconTypeForColumn(col);
+
// Workaround for Windows. Right-click is not popup trigger on mousePressed, but
// on mouseReleased. Therefore we need to avoid taking action at this point, because
@@ -381,9 +398,7 @@ public class MainTableSelectionListener implements ListEventListener<BibtexEntry
}
- public void mouseClicked(MouseEvent e) {
- }
public void mouseEntered(MouseEvent e) {
diff --git a/src/java/net/sf/jabref/gui/VerticalLabelUI.java b/src/java/net/sf/jabref/gui/VerticalLabelUI.java
new file mode 100644
index 0000000..1ce33f9
--- /dev/null
+++ b/src/java/net/sf/jabref/gui/VerticalLabelUI.java
@@ -0,0 +1,191 @@
+/**
+ * @(#)VerticalLabelUI.java 1.0 02/18/09
+ */
+package net.sf.jabref.gui;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.basic.BasicLabelUI;
+
+/**
+ * A UI delegate for JLabel that rotates the label 90�
+ * <P>
+ * Extends {@link BasicLabelUI}.
+ * <P>
+ * The only difference between the appearance of labels in the Basic and Metal
+ * L&Fs is the manner in which diabled text is painted. As VerticalLabelUI
+ * does not override the method paintDisabledText, this class can be adapted
+ * for Metal L&F by extending MetalLabelUI instead of BasicLabelUI.
+ * <P>
+ * No other changes are required.
+ *
+ * @author Darryl
+ */
+public class VerticalLabelUI extends BasicLabelUI {
+
+ private boolean clockwise = false;
+ // see comment in BasicLabelUI
+ Rectangle verticalViewR = new Rectangle();
+ Rectangle verticalIconR = new Rectangle();
+ Rectangle verticalTextR = new Rectangle();
+ protected static VerticalLabelUI verticalLabelUI =
+ new VerticalLabelUI();
+ private final static VerticalLabelUI SAFE_VERTICAL_LABEL_UI =
+ new VerticalLabelUI();
+
+ /**
+ * Constructs a <code>VerticalLabelUI</code> with the default anticlockwise
+ * rotation
+ */
+ public VerticalLabelUI() {
+ }
+
+ /**
+ * Constructs a <code>VerticalLabelUI</code> with the desired rotation.
+ * <P>
+ * @param clockwise true to rotate clockwise, false for anticlockwise
+ */
+ public VerticalLabelUI(boolean clockwise) {
+ this.clockwise = clockwise;
+ }
+
+ /**
+ * @see ComponentUI#createUI(javax.swing.JComponent)
+ */
+ public static ComponentUI createUI(JComponent c) {
+ if (System.getSecurityManager() != null) {
+ return SAFE_VERTICAL_LABEL_UI;
+ } else {
+ return verticalLabelUI;
+ }
+ }
+
+ /**
+ * Overridden to always return -1, since a vertical label does not have a
+ * meaningful baseline.
+ *
+ * @see ComponentUI#getBaseline(JComponent, int, int)
+ */
+ @Override
+ public int getBaseline(JComponent c, int width, int height) {
+ super.getBaseline(c, width, height);
+ return -1;
+ }
+
+ /**
+ * Overridden to always return Component.BaselineResizeBehavior.OTHER,
+ * since a vertical label does not have a meaningful baseline
+ *
+ * @see ComponentUI#getBaselineResizeBehavior(javax.swing.JComponent)
+ */
+ @Override
+ public Component.BaselineResizeBehavior getBaselineResizeBehavior(
+ JComponent c) {
+ super.getBaselineResizeBehavior(c);
+ return Component.BaselineResizeBehavior.OTHER;
+ }
+
+ /**
+ * Transposes the view rectangles as appropriate for a vertical view
+ * before invoking the super method and copies them after they have been
+ * altered by {@link SwingUtilities#layoutCompoundLabel(FontMetrics, String,
+ * Icon, int, int, int, int, Rectangle, Rectangle, Rectangle, int)}
+ */
+ @Override
+ protected String layoutCL(JLabel label, FontMetrics fontMetrics,
+ String text, Icon icon, Rectangle viewR, Rectangle iconR,
+ Rectangle textR) {
+
+ verticalViewR = transposeRectangle(viewR, verticalViewR);
+ verticalIconR = transposeRectangle(iconR, verticalIconR);
+ verticalTextR = transposeRectangle(textR, verticalTextR);
+
+ text = super.layoutCL(label, fontMetrics, text, icon,
+ verticalViewR, verticalIconR, verticalTextR);
+
+ viewR = copyRectangle(verticalViewR, viewR);
+ iconR = copyRectangle(verticalIconR, iconR);
+ textR = copyRectangle(verticalTextR, textR);
+ return text;
+ }
+
+ /**
+ * Transforms the Graphics for vertical rendering and invokes the
+ * super method.
+ */
+ @Override
+ public void paint(Graphics g, JComponent c) {
+ Graphics2D g2 = (Graphics2D) g.create();
+ if (clockwise) {
+ g2.rotate(Math.PI / 2, c.getSize().width / 2, c.getSize().width / 2);
+ } else {
+ g2.rotate(-Math.PI / 2, c.getSize().height / 2, c.getSize().height / 2);
+ }
+ super.paint(g2, c);
+ }
+
+ /**
+ * Returns a Dimension appropriate for vertical rendering
+ *
+ * @see ComponentUI#getPreferredSize(javax.swing.JComponent)
+ */
+ @Override
+ public Dimension getPreferredSize(JComponent c) {
+ return transposeDimension(super.getPreferredSize(c));
+ }
+
+ /**
+ * Returns a Dimension appropriate for vertical rendering
+ *
+ * @see ComponentUI#getMaximumSize(javax.swing.JComponent)
+ */
+ @Override
+ public Dimension getMaximumSize(JComponent c) {
+ return transposeDimension(super.getMaximumSize(c));
+ }
+
+ /**
+ * Returns a Dimension appropriate for vertical rendering
+ *
+ * @see ComponentUI#getMinimumSize(javax.swing.JComponent)
+ */
+ @Override
+ public Dimension getMinimumSize(JComponent c) {
+ return transposeDimension(super.getMinimumSize(c));
+ }
+
+ private Dimension transposeDimension(Dimension from) {
+ return new Dimension(from.height, from.width + 2);
+ }
+
+ private Rectangle transposeRectangle(Rectangle from, Rectangle to) {
+ if (to == null) {
+ to = new Rectangle();
+ }
+ to.x = from.y;
+ to.y = from.x;
+ to.width = from.height;
+ to.height = from.width;
+ return to;
+ }
+
+ private Rectangle copyRectangle(Rectangle from, Rectangle to) {
+ if (to == null) {
+ to = new Rectangle();
+ }
+ to.x = from.x;
+ to.y = from.y;
+ to.width = from.width;
+ to.height = from.height;
+ return to;
+ }
+}
diff --git a/src/java/net/sf/jabref/imports/CsaImporter.java b/src/java/net/sf/jabref/imports/CsaImporter.java
index 1e930e4..1039216 100644
--- a/src/java/net/sf/jabref/imports/CsaImporter.java
+++ b/src/java/net/sf/jabref/imports/CsaImporter.java
@@ -288,28 +288,31 @@ public class CsaImporter extends ImportFormat {
Type = null;
String flow = fstr.toLowerCase();
String[] types = flow.split("; ");
- if (types[0].equals("article") ||
- types[0].equals("journal article")) {
- Type = "article";
- } else if (types[0].equals("dissertation")) {
- Type = "phdthesis";
- } else {
- for (int ii = 0; ii < types.length; ++ii) {
- if (types[ii].equals("conference")) {
- Type = "inproceedings";
- break;
- } else if (types[ii].equals("book monograph") &&
- Type == null) {
- Type = "book";
- } else if (types[ii].equals("report") &&
- Type == null) {
- Type = "techreport";
- }
- }
- if (Type == null) {
- Type = "misc";
+ for (int ii = 0; ii < types.length; ++ii) {
+ if ((types[ii].indexOf("article")>=0) ||
+ (types[ii].indexOf("journal article")>=0)) {
+ Type = "article";
+ break;
+ } else if (types[ii].equals("dissertation")) {
+ Type = "phdthesis";
+ break;
+ } else if (types[ii].equals("conference")) {
+ Type = "inproceedings";
+ break;
+ } else if (types[ii].equals("book monograph") &&
+ Type == null) {
+ Type = "book";
+ break;
+ } else if (types[ii].equals("report") &&
+ Type == null) {
+ Type = "techreport";
+ break;
}
}
+ if (Type == null) {
+ Type = "misc";
+ }
+
}
String ftype = null;
@@ -317,8 +320,11 @@ public class CsaImporter extends ImportFormat {
ftype = "abstract";
else if (fabbr.equals("AF"))
ftype = "affiliation";
- else if (fabbr.equals("AU"))
+ else if (fabbr.equals("AU")) {
ftype = "author";
+ if (fstr.indexOf(";") >= 0)
+ fstr = fstr.replaceAll("; ", " and ");
+ }
else if (fabbr.equals("CA"))
ftype = "organization";
else if (fabbr.equals("DE"))
diff --git a/src/java/net/sf/jabref/imports/EndnoteImporter.java b/src/java/net/sf/jabref/imports/EndnoteImporter.java
index 3e17141..c36644e 100644
--- a/src/java/net/sf/jabref/imports/EndnoteImporter.java
+++ b/src/java/net/sf/jabref/imports/EndnoteImporter.java
@@ -162,7 +162,12 @@ public class EndnoteImporter extends ImportFormat {
else if (prefix.equals("V")) hm.put("volume", val);
else if (prefix.equals("N")) hm.put("number", val);
else if (prefix.equals("U")) hm.put("url", val);
- else if (prefix.equals("R")) hm.put("doi", val);
+ else if (prefix.equals("R")) {
+ String doi = val;
+ if (doi.startsWith("doi:"))
+ doi = doi.substring(4);
+ hm.put("doi", doi);
+ }
else if (prefix.equals("O")) {
// Notes may contain Article number
if (val.startsWith("Artn")) {
@@ -194,7 +199,7 @@ public class EndnoteImporter extends ImportFormat {
if (!author.equals("")) hm.put("author", fixAuthor(author));
if (!editor.equals("")) hm.put("editor", fixAuthor(editor));
//if pages missing and article number given, use the article number
- if ((hm.get("pages") == null) || hm.get("pages").equals("-") && !artnum.equals(""))
+ if (((hm.get("pages") == null) || hm.get("pages").equals("-")) && !artnum.equals(""))
hm.put("pages", artnum);
BibtexEntry b = new BibtexEntry(BibtexFields.DEFAULT_BIBTEXENTRY_ID, Globals
diff --git a/src/java/net/sf/jabref/imports/IsiImporter.java b/src/java/net/sf/jabref/imports/IsiImporter.java
index 3e7fae4..f2e9629 100644
--- a/src/java/net/sf/jabref/imports/IsiImporter.java
+++ b/src/java/net/sf/jabref/imports/IsiImporter.java
@@ -34,7 +34,7 @@ import net.sf.jabref.util.CaseChanger;
* </ul>
*
* @author $Author: mortenalver $
- * @version $Revision: 2900 $ ($Date: 2009-02-24 18:29:11 +0100 (Tue, 24 Feb 2009) $)
+ * @version $Revision: 3047 $ ($Date: 2009-08-21 18:32:56 +0200 (Fri, 21 Aug 2009) $)
*
*/
public class IsiImporter extends ImportFormat {
@@ -265,6 +265,8 @@ public class IsiImporter extends ImportFormat {
hm.put("volume", value);
else if (beg.equals("PU"))
hm.put("publisher", value);
+ else if (beg.equals("DI"))
+ hm.put("doi", value);
else if (beg.equals("PD")) {
String month = parseMonth(value);
diff --git a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
index 02940f8..75be6dd 100644
--- a/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
+++ b/src/java/net/sf/jabref/imports/OpenDatabaseAction.java
@@ -21,6 +21,7 @@ import net.sf.jabref.JabRefFrame;
import net.sf.jabref.MnemonicAwareAction;
import net.sf.jabref.Util;
import net.sf.jabref.export.AutoSaveManager;
+import net.sf.jabref.export.SaveSession;
import net.sf.jabref.gui.FileDialogs;
import net.sf.jabref.external.FileLinksUpgradeWarning;
@@ -172,6 +173,30 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
Globals.prefs.put("workingDirectory", file.getPath());
// Should this be done _after_ we know it was successfully opened?
String encoding = Globals.prefs.get("defaultEncoding");
+
+ if (Util.hasLockFile(file)) {
+ long modTime = Util.getLockFileTimeStamp(file);
+ if ((modTime != -1) && (System.currentTimeMillis() - modTime
+ > SaveSession.LOCKFILE_CRITICAL_AGE)) {
+ // The lock file is fairly old, so we can offer to "steal" the file:
+ int answer = JOptionPane.showConfirmDialog(null, "<html>"+Globals.lang("Error opening file")
+ +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance.")
+ +"<p>"+Globals.lang("Do you want to override the file lock?"),
+ Globals.lang("File locked"), JOptionPane.YES_NO_OPTION);
+ if (answer == JOptionPane.YES_OPTION) {
+ Util.deleteLockFile(file);
+ }
+ else return;
+ }
+ else if (!Util.waitForFileLock(file, 10)) {
+ JOptionPane.showMessageDialog(null, Globals.lang("Error opening file")
+ +" '"+fileName+"'. "+Globals.lang("File is locked by another JabRef instance."),
+ Globals.lang("Error"), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+
+ }
ParserResult pr;
String errorMessage = null;
try {
@@ -182,7 +207,9 @@ public class OpenDatabaseAction extends MnemonicAwareAction {
pr = null;
}
if ((pr == null) || (pr == ParserResult.INVALID_FORMAT)) {
- //Util.showQuickErrorDialog(frame, Globals.lang("Open database"), exception);
+ JOptionPane.showMessageDialog(null, Globals.lang("Error opening file") + " '" + fileName + "'",
+ Globals.lang("Error"),
+ JOptionPane.ERROR_MESSAGE);
String message = "<html>"+errorMessage+"<p>"+
(tryingAutosave ? Globals.lang("Error opening autosave of '%0'. Trying to load '%0' instead.", file.getName())
diff --git a/src/java/net/sf/jabref/imports/ParserResult.java b/src/java/net/sf/jabref/imports/ParserResult.java
index 513f8b8..b450379 100644
--- a/src/java/net/sf/jabref/imports/ParserResult.java
+++ b/src/java/net/sf/jabref/imports/ParserResult.java
@@ -37,6 +37,7 @@ import net.sf.jabref.BibtexEntry;
public class ParserResult {
public static ParserResult INVALID_FORMAT = new ParserResult(null, null, null);
+ public static ParserResult FILE_LOCKED = new ParserResult(null, null, null);
private BibtexDatabase base;
private HashMap<String, String> metaData;
private HashMap<String, BibtexEntryType> entryTypes;
diff --git a/src/java/net/sf/jabref/imports/ScifinderImporter.java b/src/java/net/sf/jabref/imports/ScifinderImporter.java
index c314af0..08e7026 100644
--- a/src/java/net/sf/jabref/imports/ScifinderImporter.java
+++ b/src/java/net/sf/jabref/imports/ScifinderImporter.java
@@ -73,6 +73,7 @@ public class ScifinderImporter extends ImportFormat {
HashMap<String, String> hm = new HashMap<String, String>();
for (int i = 1; i < entries.length; i++){
String[] fields = entries[i].split("FIELD ");
+ String journal = null;
String Type = "";
hm.clear(); // reset
for (int j = 0; j < fields.length; j++)
@@ -83,7 +84,9 @@ public class ScifinderImporter extends ImportFormat {
if (tmp.length > 1){//==2
if (tmp[0].equals("Author")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
else if (tmp[0].equals("Title")) hm.put("title", tmp[1]);
- else if (tmp[0].equals("Journal Title")) hm.put("journal", tmp[1]);
+ else if (tmp[0].equals("Journal Title")) {
+ journal = tmp[1];
+ }
else if (tmp[0].equals("Volume")) hm.put("volume", tmp[1]);
@@ -92,7 +95,7 @@ public class ScifinderImporter extends ImportFormat {
else if (tmp[0].equals("Abstract")) hm.put("abstract", tmp[1]);
else if (tmp[0].equals("Supplementary Terms")) hm.put("keywords",
tmp[1]);
- else if (tmp[0].equals("Inventor Name")) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
+ else if (tmp[0].equals("Inventor Name") && (tmp[1].trim().length() > 0)) hm.put("author", AuthorList.fixAuthor_lastNameFirst(tmp[1].replaceAll(";", " and ")));
else if (tmp[0].equals("Patent Assignee")) hm.put("institution", tmp[1]);
else if (tmp[0].equals("Patent Kind Code")) kindcode = " " + tmp[1];
else if (tmp[0].equals("Patent Country")) country = tmp[1] + " ";
@@ -106,6 +109,8 @@ public class ScifinderImporter extends ImportFormat {
Type = "phdthesis";
else if (tmp[1].equals("Patent"))
Type = "patent";
+ else if (tmp[1].startsWith("Conference"))
+ Type = "conference";
else
Type = tmp[1];
}
@@ -116,6 +121,12 @@ public class ScifinderImporter extends ImportFormat {
.getEntryType(Type)); // id assumes an existing database so don't
// create one here
b.setField(hm);
+ if (journal != null) {
+ if (Type.equals("conference"))
+ b.setField("booktitle", journal);
+ else
+ b.setField("journal", journal);
+ }
bibitems.add(b);
}
diff --git a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
index 46eac1e..4b98400 100644
--- a/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
+++ b/src/java/net/sf/jabref/journals/ManageJournalsPanel.java
@@ -373,6 +373,12 @@ public class ManageJournalsPanel extends JPanel{
Globals.initializeJournalNames();
+ // Update the autocompleter for the "journal" field in all base panels,
+ // so added journal names are available:
+ for (int i=0; i<frame.baseCount(); i++) {
+ frame.baseAt(i).addJournalListToAutoCompleter();
+ }
+
}
class DownloadAction extends AbstractAction {
diff --git a/src/java/net/sf/jabref/net/Cookie.java b/src/java/net/sf/jabref/net/Cookie.java
index 66341e0..e2266a1 100644
--- a/src/java/net/sf/jabref/net/Cookie.java
+++ b/src/java/net/sf/jabref/net/Cookie.java
@@ -55,9 +55,8 @@ public class Cookie {
}
uriDomain = uriDomain.substring(
uriDomain.indexOf('.'));
- if (!uriDomain.equals(value)) {
- throw new IllegalArgumentException(
- "Trying to set foreign cookie");
+ if (!uriDomain.equals(value) && !uriDomain.endsWith(value)) {
+ throw new IllegalArgumentException("Trying to set foreign cookie");
}
this.domain = value;
}
diff --git a/src/java/net/sf/jabref/search/BasicSearch.java b/src/java/net/sf/jabref/search/BasicSearch.java
index cbecdfe..c0fea72 100644
--- a/src/java/net/sf/jabref/search/BasicSearch.java
+++ b/src/java/net/sf/jabref/search/BasicSearch.java
@@ -8,7 +8,7 @@ import java.util.regex.Pattern;
import net.sf.jabref.BibtexEntry;
import net.sf.jabref.SearchRule;
-import net.sf.jabref.export.layout.format.RemoveBrackets;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
/**
* Search rule for simple search.
@@ -17,8 +17,8 @@ public class BasicSearch implements SearchRule {
private boolean caseSensitive;
private boolean regExp;
Pattern[] pattern;
- static RemoveBrackets removeBrackets = new RemoveBrackets();
-
+ //static RemoveBrackets removeLatexCommands = new RemoveBrackets();
+ static RemoveLatexCommands removeBrackets = new RemoveLatexCommands();
public BasicSearch(boolean caseSensitive, boolean regExp) {
diff --git a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
index 00093bb..e6778da 100644
--- a/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
+++ b/src/java/net/sf/jabref/search/SearchExpressionTreeParser.java
@@ -6,6 +6,7 @@ import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import net.sf.jabref.BibtexEntry;
+import net.sf.jabref.export.layout.format.RemoveLatexCommands;
import antlr.MismatchedTokenException;
import antlr.NoViableAltException;
import antlr.RecognitionException;
@@ -15,7 +16,11 @@ import antlr.collections.AST;
public class SearchExpressionTreeParser extends antlr.TreeParser implements SearchExpressionTreeParserTokenTypes
{
- private static final int MATCH_EXACT = 0;
+ // Formatter used on every field before searching. Removes Latex commands that
+ // may interfere with the search:
+ static RemoveLatexCommands removeLatexCommands = new RemoveLatexCommands();
+
+ private static final int MATCH_EXACT = 0;
private static final int MATCH_CONTAINS = 1;
private static final int MATCH_DOES_NOT_CONTAIN = 2;
@@ -24,7 +29,7 @@ public class SearchExpressionTreeParser extends antlr.TreeParser implement
private static final int PSEUDOFIELD_TYPE = 1;
- public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
+ public int apply(AST ast, BibtexEntry bibtexEntry) throws antlr.RecognitionException {
this.bibtexEntry = bibtexEntry;
// specification of fields to search is done in the search expression itself
this.searchKeys = bibtexEntry.getAllFields().toArray();
@@ -174,7 +179,8 @@ public SearchExpressionTreeParser() {
default: // regular field
if (!fieldSpec.matcher(searchKeys[i].toString()).matches())
continue;
- content = bibtexEntry.getField(searchKeys[i].toString());
+ content = removeLatexCommands.format(
+ bibtexEntry.getField(searchKeys[i].toString()));
}
noSuchField = false;
if (content == null)
diff --git a/src/java/net/sf/jabref/sql/SQLutil.java b/src/java/net/sf/jabref/sql/SQLutil.java
index 2236de3..7d65217 100644
--- a/src/java/net/sf/jabref/sql/SQLutil.java
+++ b/src/java/net/sf/jabref/sql/SQLutil.java
@@ -776,18 +776,19 @@ public class SQLutil {
+ ", \n"
+ "PRIMARY KEY (entry_types_id) \n"
+ ");" );
-
+
processDML(out,"CREATE TABLE entries ( \n"
+ "entries_id INTEGER NOT NULL AUTO_INCREMENT, \n"
+ "jabref_eid VARCHAR("
+ Util.getMinimumIntegerDigits()
+ ") DEFAULT NULL, \n"
- + "entry_types_id INTEGER DEFAULT NULL, \n"
+ + "entry_types_id INT UNSIGNED DEFAULT NULL, \n"
+ "cite_key VARCHAR(100) DEFAULT NULL, \n"
+ dml2
+ ",\n"
+ "PRIMARY KEY (entries_id), \n"
- + "FOREIGN KEY (entry_types_id) REFERENCES entry_type(entry_types_id) \n"
+ + "INDEX(entry_types_id), \n"
+ + "FOREIGN KEY (entry_types_id) REFERENCES entry_types(entry_types_id) \n"
+ ");");
processDML(out,"CREATE TABLE strings ( \n"
@@ -819,7 +820,9 @@ public class SQLutil {
processDML(out,"CREATE TABLE entry_group ( \n"
+ "entries_id INTEGER NOT NULL AUTO_INCREMENT, \n"
+ "groups_id INTEGER DEFAULT NULL, \n"
- + "FOREIGN KEY (entries_id) REFERENCES entry_fields(entries_id), \n"
+ + "INDEX(entries_id), \n"
+ + "INDEX(groups_id), \n"
+ + "FOREIGN KEY (entries_id) REFERENCES entries(entries_id), \n"
+ "FOREIGN KEY (groups_id) REFERENCES groups(groups_id) \n"
+ ");");
@@ -859,7 +862,7 @@ public class SQLutil {
+ ")");
processDML(out,"ALTER TABLE entries ADD CONSTRAINT entries_fk "
- + "FOREIGN KEY (\"entry_types_id\") REFERENCES \"entry_type\" (\"entry_types_id\")");
+ + "FOREIGN KEY (\"entry_types_id\") REFERENCES \"entry_types\" (\"entry_types_id\")");
processDML(out,"CREATE TABLE group_types ( "
+ "group_types_id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, "
diff --git a/src/resource/JabRef_da.properties b/src/resource/JabRef_da.properties
index 0f7239e..9e900da 100644
--- a/src/resource/JabRef_da.properties
+++ b/src/resource/JabRef_da.properties
@@ -1298,4 +1298,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin'en_slettes,_n\u00E6ste
Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=\u00C6ldre_plugin-versioner_slettes,_n\u00E6ste_gang_JabRef_starter.
Formatter_not_found\:_%0=Formatering_ikke_fundet:_%0
-The_following_formatters_could_not_be_found=De_f\u00f8lgende_formateringer_kunne_ikke_findes
+The_following_formatters_could_not_be_found=De_f\u00F8lgende_formateringer_kunne_ikke_findes
+
+Clear_inputarea=Ryd_inputomr\u00E5de
+Automatically_set_file_links_for_this_entry=S\u00E6t_automatisk_fil-links_for_denne_post
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kunne_ikke_gemme,_filen_er_l\u00E5st_af_en_anden_k\u00F8rende_JabRef.
+File_is_locked_by_another_JabRef_instance.=Filen_er_l\u00E5st_af_en_anden_k\u00F8rende_JabRef.
+Do_you_want_to_override_the_file_lock?=Vil_du_ignorere,_at_filen_er_l\u00E5st?
+File_locked=Fil_l\u00E5st
+Current_tmp_value=Aktuel_tmp-v\u00E6rdi
+Metadata_change=Metadata-\u00E6ndring
+Changes_have_been_made_to_the_following_metadata_elements=Der_er_\u00E6ndringer_i_f\u00F8lgende_metadata-elementer
+
+Generate_groups_for_author_last_names=Generer_grupper_for_forfatteres_efternavne
+Generate_groups_for_editor_last_names=Generer_grupper_for_redakt\u00f8rers_efternavne
+Generate_groups_from_keywords_in_a_BibTeX_field=Generer_grupper_ud_fra_n\u00f8gleord_i_et_BibTeX-felt
+Enforce_legal_characters_in_BibTeX_keys=H\u00e5ndh\u00e6v_tilladte_tegn_i_BibTex-n\u00f8gler
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Tegnet_#_er_ikke_tilladt_i_BibTeX-tekststrenge,_medmindre_det_skrives_som_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Ret_venligst_tekststrenge_indeholdende_#-tegnet,_f\u00f8r_du_gemmer.
diff --git a/src/resource/JabRef_de.properties b/src/resource/JabRef_de.properties
index 29828fd..7e8f727 100644
--- a/src/resource/JabRef_de.properties
+++ b/src/resource/JabRef_de.properties
@@ -1045,13 +1045,13 @@ localhost=localhost
Look_and_feel=Aussehen
Looking_for_pdf...=Suche_nach_pdf...
lower=kleinbuchstaben
-Main_file_directory=Standard-Verzeichnis_f\u00fcr_Dateien
+Main_file_directory=Standard-Verzeichnis_f\u00FCr_Dateien
Main_layout_file=Haupt-Layoutdatei
-Main_PDF_directory=Standard-Verzeichnis_f\u00fcr_PDF-Dateien
+Main_PDF_directory=Standard-Verzeichnis_f\u00FCr_PDF-Dateien
-Main_PS_directory=Standard-Verzeichnis_f\u00fcr_PS-Dateien
+Main_PS_directory=Standard-Verzeichnis_f\u00FCr_PS-Dateien
Manage=Verwalten
@@ -1594,7 +1594,7 @@ Set_field=Setze_Feld
Set_fields=Felder_setzen
Set_general_fields=Allgemeine_Felder_festlegen
-Set_main_external_file_directory=Standard-Verzeichnis_f\u00fcr_externe_Dateien_bestimmen
+Set_main_external_file_directory=Standard-Verzeichnis_f\u00FCr_externe_Dateien_bestimmen
Set_table_font=Tabellenschriftart_ausw\u00E4hlen
@@ -1969,7 +1969,7 @@ You_must_restart_JabRef_for_the_new_key_bindings_to_work_properly.=Sie_m\u00FCss
You_must_select_at_least_one_row_to_perform_this_operation.=Sie_m\u00FCssen_mindestens_eine_Zeile_ausw\u00E4hlen,_um_diesen_Vorgang_durchzuf\u00FChren.
-You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00fcssen_sowohl_den_BibTeX-Key_als_auch_das_%0-Verzeichnis_angeben
+You_must_set_both_BibTeX_key_and_%0_directory=Sie_m\u00FCssen_sowohl_den_BibTeX-Key_als_auch_das_%0-Verzeichnis_angeben
Your_new_key_bindings_have_been_stored.=Ihre_neuen_Tastenk\u00FCrzel_wurden_gespeichert.
The_following_fetchers_are_available\:=Folgende_Recherchetools_stehen_zur_Verf\u00FCgung:
@@ -2030,7 +2030,7 @@ Move_the_keyboard_focus_to_the_entry_table=Tastatur-Fokus_auf_die_Tabelle_setzen
MIME_type=MIME-Typ
This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef<BR>instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef<br>from_your_web_browser.<BR>Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.=Diese_Funktion_\u00F6ffnet_neue_oder_importierte_Dateien_in_einer_bereits_laufenden_Instanz_von_JabRef<BR>und_nicht_in_einem_neuen_Fenster._Das_ist_beispielsweise_n\u00FCtzlich,<BR>we [...]
-Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Beachten_Sie,_dass_diese_Einstellungen_nur_f\u00fcr_die_obsoleten_<b>pdf</b>-_und_<b>ps</b>-Felder_genutzt_werden.<BR>F\u00fcr_die_meisten_Benutzer_reicht_es_aus,_den_<b>Standard-Verzeichnis_f\u00fcr_Dateien</b>_zu_setzen.
+Note_that_these_settings_are_used_for_the_legacy_<b>pdf</b>_and_<b>ps</b>_fields_only.<br>For_most_users,_setting_the_<b>Main_file_directory</b>_above_should_be_sufficient.=Beachten_Sie,_dass_diese_Einstellungen_nur_f\u00FCr_die_obsoleten_<b>pdf</b>-_und_<b>ps</b>-Felder_genutzt_werden.<BR>F\u00FCr_die_meisten_Benutzer_reicht_es_aus,_den_<b>Standard-Verzeichnis_f\u00FCr_Dateien</b>_zu_setzen.
Legacy_file_fields=Obsolete_Datei-Felder
%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_Eintr\u00E4ge_gefunden._Um_die_Serverlast_zu_mindern,_werden_nur_%1_heruntergeladen.
@@ -2130,8 +2130,26 @@ Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Fehler_beim_\u00D6f
Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugins,_die_in_Ihrem_Plugin-Verzeichnis_(%0)_installiert_wurden:
Plugins_installed_in_other_locations\:=Plugins,_die_in_anderen_Verzeichnissen_installiert_wurden:
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=Die_Plugins_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=Das_Plugin_wird_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Alte_Plugin-Versionen_werden_beim_n\u00e4chsten_Start_von_JabRef_entfernt.
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=Die_Plugins_werden_beim_n\u00E4chsten_Start_von_JabRef_entfernt.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Das_Plugin_wird_beim_n\u00E4chsten_Start_von_JabRef_entfernt.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Alte_Plugin-Versionen_werden_beim_n\u00E4chsten_Start_von_JabRef_entfernt.
Formatter_not_found\:_%0=Formatierer_nicht_gefunden:_%0
The_following_formatters_could_not_be_found=Die_folgenden_Formatierer_konnten_nicht_gefunden_werden
+
+Clear_inputarea=Eingabefeld_l\u00F6schen
+
+Automatically_set_file_links_for_this_entry=Dateilinks_f\u00FCr_diesen_Eintrag_automatisch_festlegen
+Could_not_save,_file_locked_by_another_JabRef_instance.=Speichern_nicht_m\u00F6glich,_die_Datei_wird_von_einer_anderen_JabRef-Instanz_verwendet.
+File_is_locked_by_another_JabRef_instance.=Die_Datei_ist_durch_eine_andere_JabRef-Instanz_gesperrt.
+Do_you_want_to_override_the_file_lock?=Wollen_Sie_die_Datei_trotz_Sperre_\u00FCberschreiben?
+File_locked=Datei_gesperrt
+Current_tmp_value=Derzeitiger_tmp-Wert
+Metadata_change=Metadaten-\u00C4nderung
+Changes_have_been_made_to_the_following_metadata_elements=An_den_folgenden_Metadaten_wurden_\u00C4nderungen_vorgenommen
+
+Generate_groups_for_author_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Autoren
+Generate_groups_for_editor_last_names=Erstelle_Gruppen_f\u00fcr_Nachnamen_der_Herausgeber
+Generate_groups_from_keywords_in_a_BibTeX_field=Erstelle_Gruppen_aus_den_Stichw\u00f6rtern_eines_BibTeX-Feldes
+Enforce_legal_characters_in_BibTeX_keys=Erzwinge_erlaubte_Zeichen_in_BibTeX-Keys
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Das_Zeichen_#_ist_in_BibTeX-Keys_nicht_erlaubt,_au\u00dfer_es_ist_mit_einem_Escape-Zeichen_versehen_wie_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Entfernen_Sie_vor_dem_Speichern_alle_Ausdr\u00fccke,_in_denen_das_Zeichen_#_vorkommt.
diff --git a/src/resource/JabRef_en.properties b/src/resource/JabRef_en.properties
index f01c6b0..ce6c795 100644
--- a/src/resource/JabRef_en.properties
+++ b/src/resource/JabRef_en.properties
@@ -2117,4 +2117,22 @@ Plugins_will_be_deleted_next_time_JabRef_starts_up.=Plugins_will_be_deleted_next
Plugin_will_be_deleted_next_time_JabRef_starts_up.=Plugin_will_be_deleted_next_time_JabRef_starts_up.
Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.
Formatter_not_found\:_%0=Formatter_not_found\:_%0
-The_following_formatters_could_not_be_found=The_following_formatters_could_not_be_found
\ No newline at end of file
+The_following_formatters_could_not_be_found=The_following_formatters_could_not_be_found
+
+Clear_inputarea=Clear_inputarea
+
+Automatically_set_file_links_for_this_entry=Automatically_set_file_links_for_this_entry
+Could_not_save,_file_locked_by_another_JabRef_instance.=Could_not_save,_file_locked_by_another_JabRef_instance.
+File_is_locked_by_another_JabRef_instance.=File_is_locked_by_another_JabRef_instance.
+Do_you_want_to_override_the_file_lock?=Do_you_want_to_override_the_file_lock?
+File_locked=File_locked
+Current_tmp_value=Current_tmp_value
+Metadata_change=Metadata_change
+Changes_have_been_made_to_the_following_metadata_elements=Changes_have_been_made_to_the_following_metadata_elements
+
+Generate_groups_for_author_last_names=Generate_groups_for_author_last_names
+Generate_groups_for_editor_last_names=Generate_groups_for_editor_last_names
+Generate_groups_from_keywords_in_a_BibTeX_field=Generate_groups_from_keywords_in_a_BibTeX_field
+Enforce_legal_characters_in_BibTeX_keys=Enforce_legal_characters_in_BibTeX_keys
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Before_saving,_please_edit_any_strings_containing_the_#_character.
\ No newline at end of file
diff --git a/src/resource/JabRef_fr.properties b/src/resource/JabRef_fr.properties
index 85de995..d6b6811 100644
--- a/src/resource/JabRef_fr.properties
+++ b/src/resource/JabRef_fr.properties
@@ -600,7 +600,7 @@ Manage_custom_imports=G\u00E9rer_les_importations_personnalis\u00E9es
Manage_external_file_types=G\u00E9rer_les_types_de_fichiers_externes
Manage_journal_abbreviations=G\u00E9rer_les_abr\u00E9viations_de_journaux
Manage=G\u00E9rer
-Mark_entries=Etiqueter_des_entr\u00E9es
+Mark_entries=Etiqueter_ces_entr\u00E9es
Mark_entry=Etiqueter_l'entr\u00E9e
Mark_new_entries_with_addition_date=Enregistrer_la_date_d'ajout_pour_les_nouvelles_entr\u00E9es
Mark_new_entries_with_owner_name=Nouvelles_entr\u00E9es_attribu\u00E9es_au_propri\u00E9taire_
@@ -705,7 +705,7 @@ Open_PDF_or_PS=Ouvrir_PDF_ou_PS
Open_right-click_menu_with_Ctrl+left_button=D\u00E9rouler_le_menu_contextuel_avec_Ctrl+clic_gauche
Open_SPIRES_entry=Ouvrir_l'entr\u00E9e_SPIRES
Open_URL_or_DOI=Ouvrir_URL_ou_DOI
-Open=Cliquer_pour_ouvrir_le
+Open=Ouvrir
OpenDocument_Spreadsheet=Tableur_OpenDocument
Opened_database=Base_ouverte
Opening_preferences...=Ouverture_des_pr\u00E9f\u00E9rences_en_cours...
@@ -1065,7 +1065,7 @@ unknown_edit=\u00E9dition_inconnue
unknown_entry_type=type_d'entr\u00E9e_inconnue
Unknown_export_format=Format_d'exportation_inconnu
Unmark_all=Tout_d\u00E9s\u00E9tiqueter
-Unmark_entries=D\u00E9s\u00E9tiqueter_des_entr\u00E9es
+Unmark_entries=D\u00E9s\u00E9tiqueter_ces_entr\u00E9es
Unmark_entry=D\u00E9s\u00E9tiqueter_l'entr\u00E9e
Unmarked_selected=D\u00E9s\u00E9tiquetage_de_la_s\u00E9lection
Unpack_EndNote_filter_set=D\u00E9compacter_la_s\u00E9rie_de_filtres_EndNote
@@ -1228,3 +1228,21 @@ Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Les_anciennes_ve
Formatter_not_found\:_%0=Formateur_non_trouv\u00E9_:_%0
The_following_formatters_could_not_be_found=Les_formateurs_suivants_n'ont_pas_\u00E9t\u00E9_trouv\u00E9s
+
+Clear_inputarea=Vider_la_zone_de_saisie
+
+Automatically_set_file_links_for_this_entry=D\u00E9finir_automatiquement_les_liens_de_fichier_pour_cette_entr\u00E9e
+Could_not_save,_file_locked_by_another_JabRef_instance.=Echec_de_la_sauvegarde,_le_fichier_est_verrouill\u00E9_par_une_autre_instance_de_JabRef.
+File_is_locked_by_another_JabRef_instance.=Le_fichier_est_verrouill\u00E9_par_une_autre_instance_de_JabRef.
+Do_you_want_to_override_the_file_lock?=Voulez-vous_outrepasser_le_verrouillage_du_fichier_?
+File_locked=Fichier_verrouill\u00E9
+Current_tmp_value=Valeur_tmp_actuelle
+Metadata_change=Changement_dans_les_m\u00E9tadonn\u00E9es
+Changes_have_been_made_to_the_following_metadata_elements=Des_modifications_ont_\u00E9t\u00E9_faites_aux_\u00E9l\u00E9ments_de_m\u00E9tadonn\u00E9es_suivants
+
+Generate_groups_for_author_last_names=Cr\u00E9ation_de_groupes_pour_les_noms_d'auteurs
+Generate_groups_for_editor_last_names=Cr\u00E9ation_de_groupes_pour_les_noms_d'\u00E9diteurs
+Generate_groups_from_keywords_in_a_BibTeX_field=Cr\u00E9ation_de_groupes_\u00E0_partir_de_mots-clefs_d'un_champ_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Imposer_des_caract\u00E8res_l\u00E9gaux_dans_les_clefs_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Le_caract\u00E8re_#_n'est_pas_autoris\u00E9_dans_les_cha\u00EEnes_BibTeX_\u00E0_moins_d'\u00EAtre_\u00E9chapp\u00E9_comme_dans_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Avant_l'enregistrement,_SVP,_\u00E9ditez_toute_cha\u00EEne_contenant_le_caract\u00E8re_#.
diff --git a/src/resource/JabRef_it.properties b/src/resource/JabRef_it.properties
index fc56e41..d4d8e17 100644
--- a/src/resource/JabRef_it.properties
+++ b/src/resource/JabRef_it.properties
@@ -298,7 +298,7 @@ Do_not_overwrite_existing_keys=Non_sovrascrivere_chiavi_esistenti
Do_not_show_splash_window_at_startup=Non_mostrare_la_schermata_d'avvio
Do_not_show_these_options_in_the_future=Non_mostrare_queste_opzioni_in_futuro
Do_not_wrap_the_following_fields_when_saving=Non_mandare_a_capo_i_campi_seguenti_salvando_il_file
-# key below already already present with colon "escaped" by a backslash
+
Do_not_write_the_following_fields_to_XMP_Metadata\:=Non_scrivere_i_dati_dei_campi_seguenti_nei_metadati_XMP:
Do_you_want_JabRef_to_do_the_following_operations?=Vuoi_che_JabRef_esegua_le_operazioni_seguenti?
@@ -322,7 +322,7 @@ Duplicate_string_name=Nome_di_stringa_duplicato
Duplicates_found=Trovati_doppioni
Duplicates_removed=Doppioni_rimossi
Dynamic_groups=Gruppi_dinamici
-# not sure of the translation below
+
Dynamically_group_entries_by_a_free-form_search_expression=Raggruppa_dinamicamente_le_voci_utilizzando_una_espressione_di_ricerca_in_formato_libero
Dynamically_group_entries_by_searching_a_field_for_a_keyword=Raggruppa_dinamicamente_le_voci_ricercando_una_parola_chiave_in_un_campo
Each_line_must_be_on_the_following_form=Ciascuna_linea_deve_essere_nel_formato_seguente
@@ -444,7 +444,7 @@ Files_opened=File_aperti
Filter=Filtro
Finished_autosetting_external_links.=Impostazione_automatica_dei_collegamenti_esterni_terminata.
-## check below: is %0 a number?
+
Finished_synchronizing_%0_links._Entries_changed%c_%1.=Sincronizzazione_di_%0_collegamenti:_Voci_cambiate%c_%1.
Finished_writing_XMP-metadata._Wrote_to_%0_file(s).=Scrittura_dei_metadati_XMP_terminata._Scrittura_eseguita_su_%0_file.
Finished_writing_XMP_for_%0_file_(%1_skipped,_%2_errors).=Terminata_la_scrittura_di_metadati_XMP_per_%0_file_(%1_saltati,_%2_errori).
@@ -499,7 +499,7 @@ Help_on_Preview_Settings=Aiuto_sui_parametri_di_anteprima
Help_on_Regular_Expression_Search=Aiuto_sulla_ricerca_di_un'espressione_regolare
Hide_non-hits=Nascondi_le_voci_non_corrispondenti
Hide_non-matching_entries=Nascondi_le_voci_non_corrispondenti
-## check below
+
Hierarchical_context=Contesto_gerarchico
Highlight=Evidenzia
Highlight_groups_matching_all_selected_entries=Evidenzia_i_gruppi_corrispondenti_a_tutte_le_voci_selezionate
@@ -587,9 +587,7 @@ Language=Lingua
Last_modified=Ultimo_modificato
LaTeX_AUX_file=File_AUX_LaTeX
Leave_file_in_its_current_directory.=Lascia_il_file_nella_cartella_corrente
-# Extension: What does it means exactly??
-# FDAR (French translation): no idea...
-# FDAR: I contacted the programmer. Now simplified...
+
Leave_files_in_their_current_directory.=Lascia_i_file_nella_cartella_corrente
Left=Sinistra
License=Licenza
@@ -755,7 +753,7 @@ Path_to_HTML_viewer=Percorso_per_il_visualizzatore_HTML
Path_to_LatexEditor_(LEd.exe)=Percorso_per_LatexEditor_(LEd.exe)
Path_to_LyX_pipe=Percorso_per_la_pipe_LyX
-# key below duplicate, also with colon "escaped" by a backslash
+
Path_to_Vim=Percorso_per_Vim
Path_to_WinEdt.exe=Percorso_per_WinEdt.exe
PDF_directory=Cartella_dei_file_PDF
@@ -994,7 +992,7 @@ Strings_for_database=Stringhe_per_il_database
Subdatabase_from_aux=Subdatabase_da_file_LaTeX_AUX
Suggest=Suggerisci
Switches_between_full_and_abbreviated_journal_name_if_the_journal_name_is_known.=Alterna_nomi_completi_e_nomi_abbreviati_per_le_riviste_delle_quali_\u00E8_noto_il_nome.
-## Removed? Switches_between_full_and_abbreviated_journal_name=Alterna_tra_nomi_delle_riviste_completi_e_abbreviati
+
Synchronize_%0_links=Sincronizza_%0_collegamenti
Synchronize_file_links=Sincronizza_il_collegamento_ai_file
Synchronizing_%0_links...=Sincronizzazione_di_%0_collegamenti_in_corso...
@@ -1220,103 +1218,120 @@ Legacy_file_fields=Campi_file_obsoleti
%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_voci_trovate._Per_ridurre_il_carico_sul_server_verranno_scaricate_solo_%1_voci.
This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Per_ciascuna_delle_%0_estensioni,_JabRef_verificher\u00E0_l'esistenza_del_file.<BR>In_caso_negativo_proporr\u00E0_delle_opzioni_per_la_risoluzione_del_problema.
+## Check if the = sign must be escaped. In both sides?
Run_Fetcher,_e.g._"--fetch=Medline\:cancer"=Lanciare_una_ricerca,_es._"--fetch=Medline\:cancer"
+##
Override_legacy_file_fields=Ignora_i_campi_di_file_obsoleti
The_ACM_Digital_Library=ACM_Digital_Library
-Use_IEEE_LaTeX_abbreviations=
-The_Guide_to_Computing_Literature=
-Search_ACM_Portal=
-Connection_to_ACM_Portal_failed=
-
-
-Run_Fetcher,_e.g._"--fetch\=
-When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=
-Settings_for_%0=
-Insert_selected_citations_into_Vim=
+Use_IEEE_LaTeX_abbreviations=Usa_le_abbreviazioni_LaTeX_IEEE
+The_Guide_to_Computing_Literature=The_Guide_to_Computing_Literature
+Search_ACM_Portal=Ricerca_nel_portale_ACM
+Connection_to_ACM_Portal_failed=Connessione_al_portale_ACM_fallita
+When_opening_file_link,_search_for_matching_file_if_no_link_is_defined=All'apertura_di_un_collegamento_ad_un_file,_ricercare_un_file_corrispondente_se_non_ne_\u00e8_definito_uno.
+Settings_for_%0=Parametri__per_%0
+Insert_selected_citations_into_Vim=Inviare_le_citazioni_selezionate_a_Vim
RIS=RIS
-Assign_exclusively_to_group=
-Bad_Request_'%0'.=
-Mark_entries_imported_into_an_existing_database=
-Unmark_all_entries_before_importing_new_entries_into_an_existing_database=
-Forward=
-Back=
-Sort_the_following_fields_as_numeric_fields=
-Error_fetching_from_Citeseer\:\n=
-Line_%0\:_Found_corrupted_BibTeX-key.=
-Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=
-Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=
-Finished_downloading_full_text_document=
-Unable_to_find_full_text_document_in_the_linked_web_page.=
-Connection_error_when_trying_to_find_full_text_document.=
-This_entry_provides_no_URL_or_DOI_links.=
-Full_text_article_download_failed=
-Down_up=
-Update_to_current_column_order=
-
-Rename_field=
-Set/clear/rename_fields=
-Rename_field_to\:=
-Move_contents_of_a_field_into_a_field_with_a_different_name=
-
-You_can_only_rename_one_field_at_a_time=
-Remove_all_broken_links=
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=
-
-Plugin_installer=
-Unable_to_create_plugin_directory=
-Unable_to_copy_file=
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=
-Unable_to_create_user_plugin_directory=
-Plugin_installation_failed.=
-The_same_version_of_this_plugin_is_already_installed.=
-A_newer_version_of_this_plugin_is_already_installed.=
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=
-Old_versions_deleted_successfully.=
-
-Install_plugin=
-Download_plugin=
-Plugin_manager=
-Delete_the_%0_selected_plugins?=
-Delete_plugins=
-Delete_the_selected_plugin?=
-Delete_plugin=
-Enter_download_URL=
-Plugin_name=
-Version=
-Unknown=
-Not_loaded=
-Loaded=
-Could_not_determine_version_of_=
-Install_anyway?=
-
-Looking_for_full_text_document...=
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=
-
-Autosave=
-Prompt_before_recovering_a_database_from_an_autosave_file=
-Autosave_interval_(minutes)=
-Do_you_want_to_recover_the_database_from_the_autosave_file?=
-Recover_from_autosave=
-%0_warnings=
-
-Save_in_current_table_sort_order=
-Export_in_current_table_sort_order=
-Export_ordered_by_author/editor/year=
-Export_entries_in_their_original_order=
-Error_opening_file_'%0'.=
-Autosave_of_file_'%0'=
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=
-
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=
-Plugins_installed_in_other_locations\:=
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
-
-Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+Assign_exclusively_to_group=Assegna_esclusivamente_al_gruppo
+Bad_Request_'%0'.=Richiesta_erronea_'%0'.
+Mark_entries_imported_into_an_existing_database=Contrassegna_le_voci_importate_in_un_database_preesistente
+Unmark_all_entries_before_importing_new_entries_into_an_existing_database=Rimuovi_tutti_i_contrassegni_prima_di_importare_nuove_voci_in_un_database_preesistente
+Forward=Successivo
+Back=Precedente
+Sort_the_following_fields_as_numeric_fields=Ordina_i_campi_seguenti_come_campi_numerici
+Error_fetching_from_Citeseer\:\n=Errore_nel_corso_della_ricerca_Citeseer\:\n
+Line_%0\:_Found_corrupted_BibTeX-key.=Riga_%0\:_chiave_BibTeX_corrotta.
+Line_%0\:_Found_corrupted_BibTeX-key_(contains_whitespaces).=Riga_%0\:_chiave_BibTeX_corrotta_(contiene_spazi).
+Line_%0\:_Found_corrupted_BibTeX-key_(comma_missing).=Riga_%0\:_chiave_BibTeX_corrotta_(virgola_mancante).
+Finished_downloading_full_text_document=Terminato_il_download_del_documento_citato
+Unable_to_find_full_text_document_in_the_linked_web_page.=Impossibile_trovare_il_documento_citato_nella_pagina_web_collegata.
+Connection_error_when_trying_to_find_full_text_document.=Errore_di_connessione_nel_corso_della_ricerca_del_documento_citato
+This_entry_provides_no_URL_or_DOI_links.=Questa_voce_non_fornisce_collegamenti_URL_o_DOI.
+Full_text_article_download_failed=Fallito_il_download_del_documento_citato
+Down_up=Sposta_in_gi\u00f9
+Update_to_current_column_order=Salvare_l'ordine_delle_colonne_attuale
+
+Rename_field=Rinomina_il_campo
+Set/clear/rename_fields=Imposta/svuota/rinomina_i_campi
+Rename_field_to\:=Rinomina_il_campo_in\:
+Move_contents_of_a_field_into_a_field_with_a_different_name=Sposta_il_contenuto_di_un_campo_in_un_campo_con_nome_diverso
+
+You_can_only_rename_one_field_at_a_time=\u00c8_possibile_rinominare_solo_un_campo_per_volta
+Remove_all_broken_links=Rimuovere_tutti_i_collegamenti_non_validi
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Impossibile_utilizzare_la_porta_%0_per_operazioni_remote;_la_porta_potrebbe_essere_in_uso_da_parte_di_un'altra_applicazione._Provare_a_specificare_una_porta_diversa.
+
+Plugin_installer=Installazione_di_plugin
+Unable_to_create_plugin_directory=Impossibile_creare_una_cartella_dei_plugin
+Unable_to_copy_file=Impossibile_copiare_un_file
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Plugin_installato_correttamente._\u00c8_necessario_riavviare_JabRef_per_caricare_il_nuovo_plugin.
+Unable_to_create_user_plugin_directory=Impossibile_creare_una_cartella_utente_del_plugin
+Plugin_installation_failed.=Installazione_del_plugn_fallita.
+The_same_version_of_this_plugin_is_already_installed.=La_stessa_versione_del_plugin_\u00e8_gi\u00e0_installata.
+A_newer_version_of_this_plugin_is_already_installed.=Una_versione_pi\u00f9_recente_del_plugin_\u00e8_gi\u00e0_installata.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Una_o_pi\u00f9_versioni_pi\u00f9_vecchie_del_plugin_sono_installate._Cancellare_le_vecchie_versioni?
+Old_versions_deleted_successfully.=La_cancellazione_delle_vecchie_versioni_\u00e8_riuscita.
+
+Install_plugin=Installa_plugin
+Download_plugin=Scarica_plugin
+Plugin_manager=Gestione_plugin
+Delete_the_%0_selected_plugins?=Cancellare_i_%0_plugin_selezionati?
+Delete_plugins=Cancella_plugin
+Delete_the_selected_plugin?=Cancellare_i_plugin_selezionati?
+Delete_plugin=Cancella_plugin
+Enter_download_URL=Inserire_lo_URL_di_download
+Plugin_name=Nome_del_plugin
+Version=Versione
+Unknown=Sconosciuto
+Not_loaded=Non_caricato
+Loaded=Caricato
+Could_not_determine_version_of_=Impossibile_determinare_la_versione_di_
+Install_anyway?=Installare_comunque?
+
+Looking_for_full_text_document...=Ricerca_del_documento_citato
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=Segui_i_collegamenti_DOI_e_URL_prova_a_localizzare_il_file_PDF_del_documento_citato
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Impossibile_torvare_il_file_PDF_del_documento_citato._Nessun_algoritmo_di_ricerca_definito_per_il_sito_internet_'%0'.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Trovato_il_collegamento_al_file_PDF,_ma_il_tipo_MIME_ricevuto_non_\u00e8_corretto._Ci\u00f2_potrebbe_indicare_che_non_si_ha_permessi_di_accesso_al_file_PDF_del_documento_citato.
+
+Autosave=Salvataggio_automatico
+Prompt_before_recovering_a_database_from_an_autosave_file=Richiedere_conferma_prima_del_recupero_di_un_database_da_un_salvataggio_automatico
+Autosave_interval_(minutes)=Intervallo_di_salvataggio_automatico_(minuti)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Recuperare_il_database_dal_salvataggio_automatico?
+Recover_from_autosave=Recupero_da_salvataggio_automatico
+%0_warnings=%0_avvertimenti
+
+Save_in_current_table_sort_order=Salvare_nell'ordine_corrente_della_tabella
+Export_in_current_table_sort_order=Esportare_nell'ordine_corrente_della_tabella
+Export_ordered_by_author/editor/year=Esportare_secondo_l'ordine_author/editor/year
+Export_entries_in_their_original_order=Esportare_le_voci_nell'ordine_originale
+Error_opening_file_'%0'.=Errore_nell'apertura_del_file_'%0'.
+Autosave_of_file_'%0'=Salvataggio_automatico_del_file_'%0'
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=Errore_nell'apertura_del_salvataggio_automatico_di_'%0'._Tentativo_di_apertura_di_'%0'.
+
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Plugin_installati_nella_cartella_dei_plugin_dell'utente_(%0):
+Plugins_installed_in_other_locations\:=Plugin_installati_in_altre_cartelle:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=I_plugin_verranno_cancellati_al_prossimo_avvio_di_JabRef.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=Il_plugin_verr\u00e0_cancellato_al_prossimo_avvio_di_JabRef.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Le_vecchie_versioni_del_plugin_verranno_cancellate_al_prossimo_avvio_di_JabRef.
+
+Formatter_not_found\:_%0=Formattazione_non_trovata\:_%0
+The_following_formatters_could_not_be_found=Le_seguenti_formattazioni_non_sono_state_trovate
+
+Clear_inputarea=Svuota_l'area_di_inserimento
+
+Automatically_set_file_links_for_this_entry=Definire_automaticamente_i_collegamenti_ai_file_per_questa_voce
+Could_not_save,_file_locked_by_another_JabRef_instance.=Impossibile_salvare,_il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
+File_is_locked_by_another_JabRef_instance.=Il_file_\u00e8_bloccato_da_un'altra_istanza_di_JabRef.
+Do_you_want_to_override_the_file_lock?=Vuoi_ignorare_il_blocco_del_file?
+File_locked=File_bloccato
+Current_tmp_value=Variabile_"tmp"_corrente
+Metadata_change=Modifica_dei_metadati
+Changes_have_been_made_to_the_following_metadata_elements=Sono_stati_modificati_i_seguenti_elementi_dei_metadati
+
+Generate_groups_for_author_last_names=Genera_gruppi_in_base_al_cognome_dell'autore
+Generate_groups_for_editor_last_names=Genera_gruppi_in_base_al_cognome_del_curatore
+Generate_groups_from_keywords_in_a_BibTeX_field=Genera_gruppi_in_base_alle_parole_chiave_in_un_campo_BibTeX
+Enforce_legal_characters_in_BibTeX_keys=Imponi_l'utilizzo_dei_soli_caratteri_conformi_alla_sintassi_nelle_chiavi_BibTeX
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=Il_carattere_#_non_\u00e8_consentito_nelle_stringhe_BibTeX_se_non_protetto_da_un_carattere_di_"escape"_come_in_'\\#'.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Prima_di_salvare,_modificare_le_stringhe_contenenti_il_carattere_#.
diff --git a/src/resource/JabRef_nl.properties b/src/resource/JabRef_nl.properties
index 7a66dad..c7fd98e 100644
--- a/src/resource/JabRef_nl.properties
+++ b/src/resource/JabRef_nl.properties
@@ -2121,4 +2121,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=
Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
\ No newline at end of file
diff --git a/src/resource/JabRef_no.properties b/src/resource/JabRef_no.properties
index da7b153..7d1b603 100644
--- a/src/resource/JabRef_no.properties
+++ b/src/resource/JabRef_no.properties
@@ -1294,4 +1294,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=
Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
diff --git a/src/resource/JabRef_tr.properties b/src/resource/JabRef_tr.properties
index 8e5c4d3..c34ced3 100644
--- a/src/resource/JabRef_tr.properties
+++ b/src/resource/JabRef_tr.properties
@@ -1134,6 +1134,8 @@ Legacy_file_fields=Eski_s\u00FCr\u00FCm_dosya_alanlar\u0131
%0_entries_found._To_reduce_server_load,_only_%1_will_be_downloaded.=%0_girdi_bulundu._Sunucu_y\u00FCk\u00FCn\u00FC_azaltmak_i\u00E7in_yaln\u0131zca_%1_indirilecektir.
This_makes_JabRef_look_up_each_%0_extension_and_check_if_the_file_exists._If_not,_you_will_be_given_options<BR>to_resolve_the_problem.=Bu,_JabRef'in_her_bir_%0_uzant\u0131s\u0131n\u0131_bulup_dosyan\u0131n_var_olup_olmad\u0131\u011F\u0131n\u0131_kontrol_etmesini_sa\u011Flar._E\u011Fer_dosya_yoksa,_sorunu_\u00E7\u00F6zmek_i\u00E7in_se\u00E7enekler<BR>_sunulacakt\u0131r.
+Run_Fetcher,_e.g._"--fetch=Getiriciyi_\u00C7al\u0131\u015Ft\u0131r,_\u00D6rnek_"--fetch
+
Override_legacy_file_fields=Eski_s\u00FCr\u00FCm_dosya_alanlar\u0131n\u0131_\u00F6nemseme
The_ACM_Digital_Library=ACM_Say\u0131sal_K\u00FCt\u00FCphane
@@ -1169,65 +1171,83 @@ Rename_field=Alan\u0131n_ad\u0131n\u0131_de\u011Fi\u015Ftir
Set/clear/rename_fields=Alanlar\u0131_kur/sil/yeniden_adland\u0131r
Rename_field_to\:=Alan_ad\u0131n\u0131_\u015Funa_de\u011Fi\u015Ftir\:
Move_contents_of_a_field_into_a_field_with_a_different_name=Alan_i\u00E7eri\u011Fini_ba\u015Fka_isimli_bir_alan\u0131n_i\u00E7ine_ta\u015F\u0131
-
-Run_Fetcher,_e.g._"--fetch=Getiriciyi_\u00C7al\u0131\u015Ft\u0131r,_\u00D6rnek_"--fetch
You_can_only_rename_one_field_at_a_time=Bir_seferde_yaln\u0131zca_bir_alan\u0131n_ad\u0131n\u0131_de\u011Fi\u015Ftirebilirsiniz
-Remove_all_broken_links=
-Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=
+Remove_all_broken_links=T\u00FCm_bozuk_linkleri_sil
+Cannot_use_port_%0_for_remote_operation;_another_application_may_be_using_it._Try_specifying_another_port.=Uzak_operasyon_i\u00E7in_ba\u011Flant\u0131_noktas\u0131_%0_kullan\u0131lam\u0131yor;_bir_ba\u015Fka_program_kullan\u0131yor_olabilir._Ba\u015Fka_bir_ba\u011Flant\u0131_noktas\u0131_deneyin.
+
+Plugin_installer=Eklenti_kurucu
+Unable_to_create_plugin_directory=Eklenti_dizini_olu\u015Fturulam\u0131yor
+Unable_to_copy_file=Dosya_kopyalanam\u0131yor
+Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=Eklenti_ba\u015Far\u0131yla_kuruldu._Yeni_eklentiyi_y\u00FCklemek_i\u00E7in_JabRefi'i_yeniden_ba\u015Flatmal\u0131s\u0131n\u0131z.
+Unable_to_create_user_plugin_directory=Kullan\u0131c\u0131_eklenti_dizini_olu\u015Fturulam\u0131yor
+Plugin_installation_failed.=Eklenti_kurulumu_ba\u015Far\u0131s\u0131z.
+The_same_version_of_this_plugin_is_already_installed.=Bu_eklentinin_ayn\u0131_s\u00FCr\u00FCm\u00FC_zaten_kurulu.
+A_newer_version_of_this_plugin_is_already_installed.=Bu_eklentinin_daha_yeni_bir_s\u00FCr\u00FCm\u00FC_zaten_kurulu.
+One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=Bu_eklentinin_bir_ya_da_daha_fazla_eski_s\u00FCr\u00FCm\u00FC_kurulu._Eski_s\u00FCr\u00FCmler_silinsin_mi?
+Old_versions_deleted_successfully.=Eski_s\u00FCr\u00FCmler_ba\u015Far\u0131yla_silindi.
+Install_plugin=Eklenti_kur
+Download_plugin=Eklenti_indir
+Plugin_manager=Eklenti_y\u00F6neticisi
+Delete_the_%0_selected_plugins?=%0_se\u00E7ili_eklenti_silinsin_mi?
+Delete_plugins=Eklentileri_sil
+Delete_the_selected_plugin?=Se\u00E7ili_eklenti_silinsin_mi?
+Delete_plugin=Eklenti_sil
+Enter_download_URL=\u0130ndirme_URL'si_giriniz
+Plugin_name=Eklenti_ad\u0131
+Version=S\u00FCr\u00FCm
+Unknown=Bilinmeyen
+Not_loaded=Y\u00FCklenmedi
+Loaded=Y\u00FCklendi
+Could_not_determine_version_of_=\u015Eunun_s\u00FCr\u00FCm\u00FC_belirlenemedi_
+Install_anyway?=Yine_de_kurulsun_mu?
+
+Looking_for_full_text_document...=Tam_metin_belge_aran\u0131yor...
+Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=DOI_ya_da_URL_linki_izle_ve_tam_metin_PDF_belgesini_bulmaya_\u00E7al\u0131\u015F
+Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=Tam_metin_makal_bulunamad\u0131._'%0'_web_sitesi_i\u00E7in_bir_arama_algoritmas\u0131_tan\u0131mlanmam\u0131\u015F.
+Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=Pdf_link_bulundu,_ama_yanl\u0131\u015F_MIME_t\u00FCr\u00FC_al\u0131nd\u0131._Bu,_tam_metin_makaleye_eri\u015Fiminiz_olmad\u0131\u011F\u0131_anlam\u0131na_gelebilir.
+
+Autosave=Otomatik_kaydet
+Prompt_before_recovering_a_database_from_an_autosave_file=Otomatik_kaydedilmi\u015F_bir_dosyadan_veri_taban\u0131n\u0131_kurtarmaya_ba\u015Flamadan_\u00F6nce_sor
+Autosave_interval_(minutes)=Otomatik_kay\u0131t_aral\u0131\u011F\u0131_(dakika)
+Do_you_want_to_recover_the_database_from_the_autosave_file?=Otomatik_kay\u0131t_dosyas\u0131ndan_veritaban\u0131n\u0131_kurtarmak_ister_misiniz?
+Recover_from_autosave=Otomatik_kay\u0131ttan_kurtar
+%0_warnings=%0_uyar\u0131
-Plugin_installer=
-Unable_to_create_plugin_directory=
-Unable_to_copy_file=
-Plugin_installed_successfully._You_must_restart_JabRef_to_load_the_new_plugin.=
-Unable_to_create_user_plugin_directory=
-Plugin_installation_failed.=
-The_same_version_of_this_plugin_is_already_installed.=
-A_newer_version_of_this_plugin_is_already_installed.=
-One_or_more_older_versions_of_this_plugin_is_installed._Delete_old_versions?=
-Old_versions_deleted_successfully.=
+Save_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00FCzeninde_kaydet
+Export_in_current_table_sort_order=Mevcut_tablo_s\u0131ralama_d\u00FCzeninde_d\u0131\u015Fa_aktar
+Export_ordered_by_author/editor/year=Yazar/edit\u00F6r/y\u0131l_d\u00FCzeninde_s\u0131ralayarak_d\u0131\u015Fa_aktar
+Export_entries_in_their_original_order=Girdileri_orijinal_s\u0131ras\u0131nda_d\u0131\u015Fa_aktar
+Error_opening_file_'%0'.=Dosya_a\u00E7mada_hata_'%0'.
+Autosave_of_file_'%0'='%0'_dosyas\u0131n\u0131n_otomatik_kayd\u0131
+Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.='%0''in_otomatik_kayd\u0131n\u0131_a\u00E7mada_hata._Onun_yerine_'%0'_y\u00FCklenmeye_\u00E7al\u0131\u015F\u0131yor.
-Install_plugin=
-Download_plugin=
-Plugin_manager=
-Delete_the_%0_selected_plugins?=
-Delete_plugins=
-Delete_the_selected_plugin?=
-Delete_plugin=
-Enter_download_URL=
-Plugin_name=
-Version=
-Unknown=
-Not_loaded=
-Loaded=
-Could_not_determine_version_of_=
-Install_anyway?=
+Plugins_installed_in_your_user_plugin_directory_(%0)\:=Kullan\u0131c\u0131_eklenti_dizininizde_(%0)\_kurulu_eklentiler:
+Plugins_installed_in_other_locations\:=Di\u011Fer_yerlerde_kurulu_eklentiler\:
+Plugins_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015Flad\u0131\u011F\u0131nda_eklentiler_silinecek.
+Plugin_will_be_deleted_next_time_JabRef_starts_up.=JabRef_tekrar_ba\u015Flad\u0131\u011F\u0131nda_eklenti_silinecek.
+Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=Eski_eklenti_s\u00FCr\u00FCmleri,_JabRef_tekrar_ba\u015Flad\u0131\u011F\u0131nda_silinecek.
-Looking_for_full_text_document...=
-Follow_DOI_or_URL_link_and_try_to_locate_PDF_full_text_document=
-Unable_to_find_full_text_article._No_search_algorithm_defined_for_the_'%0'_web_site.=
-Found_pdf_link,_but_received_the_wrong_MIME_type._This_could_indicate_that_you_don't_have_access_to_the_fulltext_article.=
+Formatter_not_found\:_%0=Bi\u00E7imleyici_bulunamad\u0131\:_%0
+The_following_formatters_could_not_be_found=A\u015Fa\u011F\u0131daki_bi\u00E7imleyiciler_bulunamad\u0131
-Autosave=
-Prompt_before_recovering_a_database_from_an_autosave_file=
-Autosave_interval_(minutes)=
-Do_you_want_to_recover_the_database_from_the_autosave_file?=
-Recover_from_autosave=
-%0_warnings=
+Clear_inputarea=Girdi_alan\u0131n\u0131_temizle
+Automatically_set_file_links_for_this_entry=Bu_girdi_i\u00e7in_dosya_ba\u011flant\u0131lar\u0131n\u0131_otomatikman_kur
+Could_not_save,_file_locked_by_another_JabRef_instance.=Kaydedilemiyor,_dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
+File_is_locked_by_another_JabRef_instance.=Dosya_ba\u015fka_bir_JabRef_oturumunca_kilitlenmi\u015f.
+Do_you_want_to_override_the_file_lock?=Dosya_kilidini_ge\u00e7ersiz_k\u0131lmak_ister_misiniz?
+File_locked=Dosya_kilitli
+Current_tmp_value=Mevcut_tmp_de\u011feri
+Metadata_change=Metadata_de\u011fi\u015fikli\u011fi
+Changes_have_been_made_to_the_following_metadata_elements=A\u015fa\u011f\u0131daki_metadata_\u00f6gelerinde_de\u011fi\u015fiklik_yap\u0131ld\u0131
-Save_in_current_table_sort_order=
-Export_in_current_table_sort_order=
-Export_ordered_by_author/editor/year=
-Export_entries_in_their_original_order=
-Error_opening_file_'%0'.=
-Autosave_of_file_'%0'=
-Error_opening_autosave_of_'%0'._Trying_to_load_'%0'_instead.=
+Generate_groups_for_author_last_names=Yazar_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
+Generate_groups_for_editor_last_names=Edit\u00f6r_soyadlar\u0131_i\u00e7in_grup_olu\u015ftur
+Generate_groups_from_keywords_in_a_BibTeX_field=Bir_BibTeX_alan\u0131ndaki_anahtar_s\u00f6zc\u00fcklerden_grup_olu\u015ftur
+Enforce_legal_characters_in_BibTeX_keys=BibTeX_anahtarlar\u0131nda_yasal_karakterleri_zorla
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.='\\#'_\u015feklinde_belirtilmedik\u00e7e_BibTeX_dizgelerinde_#_karakterine_izin_verilmez.
+Before_saving,_please_edit_any_strings_containing_the_#_character.=Kaydetmeden_\u00f6nce_l\u00fctfen_#_karakterini_i\u00e7eren_t\u00fcm_dizgeleri_d\u00fczeltin.
+Deletion_of_old_versions_failed.=Eski_s\u00FCr\u00FCmlerin_silinmesi_ba\u015Far\u0131s\u0131z.
-Plugins_installed_in_your_user_plugin_directory_(%0)\:=
-Plugins_installed_in_other_locations\:=
-Plugins_will_be_deleted_next_time_JabRef_starts_up.=
-Plugin_will_be_deleted_next_time_JabRef_starts_up.=
-Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
-Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+Highlight_groups_that_contain_entries_contained_in_any_currently_selected_group=Se\u00E7ili_herhangi_bir_gruptaki_girdileri_i\u00E7eren_gruplar\u0131_i\u015Faretle
diff --git a/src/resource/JabRef_zh.properties b/src/resource/JabRef_zh.properties
index a937266..42f73b3 100644
--- a/src/resource/JabRef_zh.properties
+++ b/src/resource/JabRef_zh.properties
@@ -2110,4 +2110,21 @@ Plugin_will_be_deleted_next_time_JabRef_starts_up.=
Old_plugin_versions_will_be_deleted_next_time_JabRef_starts_up.=
Formatter_not_found\:_%0=
-The_following_formatters_could_not_be_found=
\ No newline at end of file
+The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
\ No newline at end of file
diff --git a/src/resource/JabRef_zh.properties.UTF8 b/src/resource/JabRef_zh.properties.UTF8
index c9f1c51..cb7c6fa 100644
--- a/src/resource/JabRef_zh.properties.UTF8
+++ b/src/resource/JabRef_zh.properties.UTF8
@@ -2114,3 +2114,22 @@ Unknown=
Version=
Formatter_not_found\:_%0=
The_following_formatters_could_not_be_found=
+
+Clear_inputarea=
+
+Automatically_set_file_links_for_this_entry=
+Could_not_save,_file_locked_by_another_JabRef_instance.=
+File_is_locked_by_another_JabRef_instance.=
+Do_you_want_to_override_the_file_lock?=
+File_locked=
+Current_tmp_value=
+Metadata_change=
+Changes_have_been_made_to_the_following_metadata_elements=
+
+Generate_groups_for_author_last_names=
+Generate_groups_for_editor_last_names=
+Generate_groups_from_keywords_in_a_BibTeX_field=
+Enforce_legal_characters_in_BibTeX_keys=
+
+The_#_character_is_not_allowed_in_BibTeX_strings_unless_escaped_as_in_'\\#'.=
+Before_saving,_please_edit_any_strings_containing_the_#_character.=
\ No newline at end of file
diff --git a/src/resource/Menu_tr.properties b/src/resource/Menu_tr.properties
index 716248e..7c92971 100644
--- a/src/resource/Menu_tr.properties
+++ b/src/resource/Menu_tr.properties
@@ -117,7 +117,9 @@ Increase_table_font_size=Tablo_yaz\u0131tipi_boyutunu_artt\u0131r
Decrease_table_font_size=Tablo_yaz\u0131tipi_boyutunu_azalt
Forward=\u0130leri
Back=Geri
+Manage_plugins=Eklentileri_y\u00f6net
+Synchronize_file_links=Dosya_linklerini_e\u015fzamanla
+Set/clear/rename_fields=Alanlar\u0131_ata/sil/yeniden_adland\u0131r
+Look_up_full_text_document=Tam_metin_belge_bul
+Push_entries_to_external_application_(LyX/Kile)=Girdileri_harici_uygulamaya_(LyX/Kile)_itele
-Manage_plugins=
-Look_up_full_text_document=
-Set/clear/rename_fields=
\ No newline at end of file
diff --git a/src/resource/build.properties b/src/resource/build.properties
index 7899b78..c6a6462 100644
--- a/src/resource/build.properties
+++ b/src/resource/build.properties
@@ -1,3 +1,3 @@
-builddate=June 22 2009
-build=66
-version=2.5
\ No newline at end of file
+builddate=November 1 2009
+build=39
+version=2.6b2
\ No newline at end of file
diff --git a/src/resource/layout/endnote/EndNote.article.layout b/src/resource/layout/endnote/EndNote.article.layout
index decbf22..f52bee1 100755
--- a/src/resource/layout/endnote/EndNote.article.layout
+++ b/src/resource/layout/endnote/EndNote.article.layout
@@ -10,7 +10,7 @@
%V \volume
%6
%N \number
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.book.layout b/src/resource/layout/endnote/EndNote.book.layout
index 86f5b1d..92cb46b 100755
--- a/src/resource/layout/endnote/EndNote.book.layout
+++ b/src/resource/layout/endnote/EndNote.book.layout
@@ -10,7 +10,7 @@
%V \volume
%6
%N \number
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.booklet.layout b/src/resource/layout/endnote/EndNote.booklet.layout
index adb5a35..9635c2d 100755
--- a/src/resource/layout/endnote/EndNote.booklet.layout
+++ b/src/resource/layout/endnote/EndNote.booklet.layout
@@ -10,7 +10,7 @@
%V
%6
%N \lastchecked
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.inbook.layout b/src/resource/layout/endnote/EndNote.inbook.layout
index 5f72995..dca0ff3 100755
--- a/src/resource/layout/endnote/EndNote.inbook.layout
+++ b/src/resource/layout/endnote/EndNote.inbook.layout
@@ -10,7 +10,7 @@
%V \volume
%6
%N
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
%& \chapter
%Y
%S \series
diff --git a/src/resource/layout/endnote/EndNote.incollection.layout b/src/resource/layout/endnote/EndNote.incollection.layout
index df32a90..0956822 100755
--- a/src/resource/layout/endnote/EndNote.incollection.layout
+++ b/src/resource/layout/endnote/EndNote.incollection.layout
@@ -10,7 +10,7 @@
%V \volume
%6
%N
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
%& \chapter
%Y
%S \series
diff --git a/src/resource/layout/endnote/EndNote.inproceedings.layout b/src/resource/layout/endnote/EndNote.inproceedings.layout
index be42424..7ca4100 100755
--- a/src/resource/layout/endnote/EndNote.inproceedings.layout
+++ b/src/resource/layout/endnote/EndNote.inproceedings.layout
@@ -10,7 +10,7 @@
%V \volume
%6
%N
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y \organization
%S \series
diff --git a/src/resource/layout/endnote/EndNote.layout b/src/resource/layout/endnote/EndNote.layout
index dfcdfea..3ef5296 100755
--- a/src/resource/layout/endnote/EndNote.layout
+++ b/src/resource/layout/endnote/EndNote.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.manual.layout b/src/resource/layout/endnote/EndNote.manual.layout
index ee216b3..084b94e 100755
--- a/src/resource/layout/endnote/EndNote.manual.layout
+++ b/src/resource/layout/endnote/EndNote.manual.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.mastersthesis.layout b/src/resource/layout/endnote/EndNote.mastersthesis.layout
index 192b93f..86af2d9 100755
--- a/src/resource/layout/endnote/EndNote.mastersthesis.layout
+++ b/src/resource/layout/endnote/EndNote.mastersthesis.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.misc.layout b/src/resource/layout/endnote/EndNote.misc.layout
index ae7c447..7df4a94 100755
--- a/src/resource/layout/endnote/EndNote.misc.layout
+++ b/src/resource/layout/endnote/EndNote.misc.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.other.layout b/src/resource/layout/endnote/EndNote.other.layout
index 08233ae..bd45e46 100755
--- a/src/resource/layout/endnote/EndNote.other.layout
+++ b/src/resource/layout/endnote/EndNote.other.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.phdthesis.layout b/src/resource/layout/endnote/EndNote.phdthesis.layout
index 1519870..3fe2498 100755
--- a/src/resource/layout/endnote/EndNote.phdthesis.layout
+++ b/src/resource/layout/endnote/EndNote.phdthesis.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.proceedings.layout b/src/resource/layout/endnote/EndNote.proceedings.layout
index 503c1f6..9133c41 100755
--- a/src/resource/layout/endnote/EndNote.proceedings.layout
+++ b/src/resource/layout/endnote/EndNote.proceedings.layout
@@ -10,7 +10,7 @@
%V \volume
%6
%N
-%P \pages
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y \organization
%S \series
diff --git a/src/resource/layout/endnote/EndNote.techreport.layout b/src/resource/layout/endnote/EndNote.techreport.layout
index 29f794d..4a78bcb 100755
--- a/src/resource/layout/endnote/EndNote.techreport.layout
+++ b/src/resource/layout/endnote/EndNote.techreport.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/endnote/EndNote.unpublished.layout b/src/resource/layout/endnote/EndNote.unpublished.layout
index ec926b5..556fe11 100755
--- a/src/resource/layout/endnote/EndNote.unpublished.layout
+++ b/src/resource/layout/endnote/EndNote.unpublished.layout
@@ -10,7 +10,7 @@
%V
%6
%N
-%P
+%P \format[FormatPagesForHTML]{\pages}
%&
%Y
%S
diff --git a/src/resource/layout/harvard/harvard.book.layout b/src/resource/layout/harvard/harvard.book.layout
index 9f74a7d..78748e9 100644
--- a/src/resource/layout/harvard/harvard.book.layout
+++ b/src/resource/layout/harvard/harvard.book.layout
@@ -2,8 +2,7 @@
\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
\end{author}
\begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed.
-\end{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed. \end{editor}
(\year),
}{\\i \format[RTFChars]{\title}}{
\begin{volume}
diff --git a/src/resource/layout/harvard/harvard.inbook.layout b/src/resource/layout/harvard/harvard.inbook.layout
index 743176b..5a6c549 100644
--- a/src/resource/layout/harvard/harvard.inbook.layout
+++ b/src/resource/layout/harvard/harvard.inbook.layout
@@ -1,6 +1,8 @@
\begin{author}
\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
\end{author}
+\begin{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
(\year),
}{\\i \format[RTFChars]{\title}}{
\begin{publisher}
diff --git a/src/resource/layout/harvard/harvard.incollection.layout b/src/resource/layout/harvard/harvard.incollection.layout
index d052b2b..239241d 100644
--- a/src/resource/layout/harvard/harvard.incollection.layout
+++ b/src/resource/layout/harvard/harvard.incollection.layout
@@ -1,8 +1,7 @@
\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author} (\year),
}{\format[RTFChars]{\title}}{
\begin{editor}
-, }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed.,
-\end{editor}
+, }{\\i in }{\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
\begin{booktitle}
'\format[RTFChars]{\booktitle}'
\end{booktitle}
diff --git a/src/resource/layout/harvard/harvard.inproceedings.layout b/src/resource/layout/harvard/harvard.inproceedings.layout
index b064c14..d76fcf0 100644
--- a/src/resource/layout/harvard/harvard.inproceedings.layout
+++ b/src/resource/layout/harvard/harvard.inproceedings.layout
@@ -2,8 +2,7 @@
\format[RTFChars]{\title}
, }{\\i in }{
\begin{editor}
-\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed.,
-\end{editor}
+\format[RTFChars,AuthorFirstFirst,AuthorAndsReplacer]{\editor}, ed., \end{editor}
\begin{booktitle}
'\format[RTFChars]{\booktitle}'
\end{booktitle}
diff --git a/src/resource/layout/harvard/harvard.layout b/src/resource/layout/harvard/harvard.layout
index 5155d71..181b316 100644
--- a/src/resource/layout/harvard/harvard.layout
+++ b/src/resource/layout/harvard/harvard.layout
@@ -7,8 +7,7 @@
(\number)
\end{number}
\begin{editor}
-, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed.,
-\end{editor}
+, }{\\i in }{\format[AuthorFirstFirst,AuthorAndsReplacer,RTFChars]{\editor}, ed., \end{editor}
\begin{booktitle}
'\format[RTFChars]{\booktitle}'
\end{booktitle}
diff --git a/src/resource/layout/harvard/harvard.proceedings.layout b/src/resource/layout/harvard/harvard.proceedings.layout
index 9f74a7d..34768d3 100644
--- a/src/resource/layout/harvard/harvard.proceedings.layout
+++ b/src/resource/layout/harvard/harvard.proceedings.layout
@@ -2,8 +2,7 @@
\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\author}
\end{author}
\begin{editor}
-\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed.
-\end{editor}
+\format[RTFChars,AuthorLastFirst,AuthorAbbreviator,AuthorAndsReplacer]{\editor}, ed., \end{editor}
(\year),
}{\\i \format[RTFChars]{\title}}{
\begin{volume}
diff --git a/src/txt/CHANGELOG b/src/txt/CHANGELOG
index eba0463..dd1c566 100644
--- a/src/txt/CHANGELOG
+++ b/src/txt/CHANGELOG
@@ -1,3 +1,72 @@
+ - Added export formatter "Default" which takes a single argument. Outputs the string to format
+ unchanged if it is non-empty, otherwise outputs the argument.
+ - 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.
+ - Modified launcher script for Windows installer to give higher heap size limit.
+ - 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.
+ - Added support for postformatter in Layout. The postformatter will be run after
+ the formatters called from a layout.
+ - Improved group autogeneration. Added option to generate groups based on author or editor
+ last names. Autogenerated groups are now alphabetized.
+ - Modified Endnote export filter so "--" gets converted to "-" in the "pages" field.
+ - 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".
+ - Improved entry type determination and author parsing for some varieties of CSA files.
+ - Minor change to Harvard RTF export. Added space after "ed.", and added editor to output for
+ inbook entries.
+ - Set limit to the number of displayed characters in group names in groups tree in order to
+ avoid group panel width problems.
+ - 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.
+ - Modified Endnote/refer import filter to strip "doi:" from the %R field.
+ - Modified HTML conversion so single newline is displayed in the preview (and HTML exports) as
+ <br>, while multiple newlines are displayed as <p>.
+ - Fixed bug: switching entry editor between entries of different type may result in switching
+ of entry editor tabs.
+ - Fixed bug: adding external file link leads to relative path from root directory if file
+ directory is set to an empty string.
+ - 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.
+ - Fixed bug: ODS export doesn't resolve BibTeX strings.
+ - Fixed bug: content selector for "editor" field uses "," instead of " and " as delimiter.
+ - Fixed bug: editing source doesn't allow change of entry type.
+ - RTFChars formatter now converts --- to \emdash and -- to \endash.
+
+2.6b
+ - Added pages information to several entry types in Endnote export.
+ - Modified LastPage formatter so it returns the number when only the number of pages is given.
+ - 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".
+ - Changed default table font family to "SansSerif".
+ - 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.
+ - Added support for dragging a file link from the file column to another application.
+ - Added toolbar button and shortcut (Alt-F) in entry editor for autosetting file links.
+ - Improved ISI import filter so DOI information is included.
+ - Fixed bug: metadata changes would not be detected as external changes to a database.
+ - Fixed bug: when accepting external changes and not saving before new changes are
+ detected, the previously accepted changes would also be listed.
+ - Fixed bug in Scifinder import where an empty Inventor field could overwrite the
+ author field.
+ - 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.
+ - Fixed problem with exporting to some MySql versions. Patch by François Dorin.
+ - Fixed bug in handling of LaTeX character sequences - now sequences with = as command
+ character (e.g. "\={A}") are recognized.
+ - 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.
+ - Fixed bug: cookie manager installed by Download button in file field editor throws
+ an exception when trying to fetch from Medline.
+ - Fixed bug: temporary files don't get deleted on shutdown.
+ - Disabled table column reordering in import inspection window, since a user reported
+ problems when using this.
+ - Changed years from 2008 to 2009 in splash image.
2.5
- Modified export layout procedure so missing formatters can be reported in the error
output. Export now succeeds with warnings added where formatters are missing.
@@ -25,7 +94,7 @@
- Added ~/.jabref/plugins as user-specific plugin directory.
- Added \r marker to WrapFileLinks formatter that outputs file links without expanding
relative links.
- - Added [authorAlpha] key marker that formats authors according to the "alpha" BibTeX style.
+ - Added [authorsAlpha] key marker that formats authors according to the "alpha" BibTeX style.
Patch submitted by Oliver Kopp.
- Table sort order set by clicking and Ctrl-clicking table columns is now immediately set
as default sort order in preferences.
diff --git a/src/txt/README b/src/txt/README
index 0d5d968..fdbc2d5 100644
--- a/src/txt/README
+++ b/src/txt/README
@@ -1,6 +1,6 @@
-JabRef 2.5
-----------
+JabRef 2.6 beta 2
+-----------------
Introduction:
diff --git a/src/txt/README~ b/src/txt/README~
deleted file mode 100644
index 04f473c..0000000
--- a/src/txt/README~
+++ /dev/null
@@ -1,100 +0,0 @@
-
-JabRef 2.5 beta
----------------
-
-Introduction:
-
-JabRef is a graphical Java application for editing bibtex (.bib)
-databases. JabRef lets you organize your entries into overlapping
-logical groups, and with a single click limit your view to a single
-group or an intersection or union of several groups. You can customize
-the entry information shown in the main window, and sort by any of the
-standard Bibtex fields. JabRef can autogenerate bibtex keys for your
-entries. JabRef also lets you easily link to PDF or web sources for your
-reference entries.
-
-JabRef can import from and export to several formats, and you can
-customize export filters. JabRef can be run as a command line application
-to convert from any import format to any export format.
-
-
-License:
-JabRef is free open source software, distributed under the GNU General
-Public Licence. See the enclosed text file 'gpl.txt', or the About
-dialog, for details about the GPL.
-
-JabRef also uses libraries distributed by other porties; see the About
-box for details.
-
-
-Requirements:
-JabRef runs on any system equipped with the Java Virtual Machine
-(1.5 or newer), which can be downloaded at no cost from
-http://java.sun.com. If you do not plan to compile JabRef, the Java
-Runtime Environment may be a better choice than the Java Development
-Kit.
-
-
-Installing and running, Windows:
-JabRef is available in Windows Installer (.msi) format. To install,
-double-click the .msi file. A shortcut to JabRef will be added to your
-start menu.
-
-The Windows installation was made by Dale Visser, using the following open-source tools:
-JSmooth (.exe wrapper for Java apps), available at http://jsmooth.sf.net/
-Wix (tool for compiling MSI files from an XML specification), available at http://wix.sf.net/
-
-
-Installing and running, general:
-JabRef can be downloaded as an executable .jar file. Run the
-program as follows:
-If you are using the Java Development Kit:
- java -jar <path to jar>
-or, if you are using the Java Runtime Environment:
- jre -new -jar <path to jar> or
- jrew -new -jar <path to jar>
-
-If you run JabRef under Java 1.5, you can add the option "-Dswing.aatext=true" before the
-"-jar" option, to activate antialiased text throughout the application.
-
-
-The jar file containing JabRef can be unpacked with the command:
- jar xf <path to jar>
-or jar xf <path to jar> <list of files to extract>
-Unpacking the jar file is not necessary to run the program.
-
-
-
-Building JabRef from source:
-Please see the INSTALL file for instructions for building from source.
-
-Documentation:
-JabRef comes with an online help function, accessed by pressing F1 or
-clicking on a question mark icon. The help files are probably not
-exhaustive enough to satisfy everyone yet, but they should help sort
-out the most important issues about using the program. The help files
-can also be viewed outside the program with a standard HTML browser.
-If you choose languages other than English, some or all help pages may
-appear in your chosen languages.
-
-
-Bug reports, suggestions, other feedback:
-We are thankful for any bug reports or other feedback. If there are
-features you want included in JabRef, tell us!
-
-
-JabRef homepage:
-http://jabref.sourceforge.net
-
-You can always get the very latest version of the program from our SVN
-repository; instructions for downloading are found on the
-homepage. Note that the SVN version may contain untested features, or
-have other stability issues.
-
-Bug submission and Open Discussions and Help forums are found at:
-http://sourceforge.net/projects/jabref
-
-
-Corresponding authors:
-mortenalver _ users.sourceforge.net
-nbatada _ users.sourceforge.net
diff --git a/src/txt/TODO b/src/txt/TODO
index 0bd5178..b053de6 100644
--- a/src/txt/TODO
+++ b/src/txt/TODO
@@ -9,13 +9,16 @@ Chris:
Morten:
+* Look into whether incremental search could be made more persistent when search panel loses focus.
+* Fix handling of Jr particle in names.
+* Problem: when looking at group with hiding non-hits, newly created entry doesn't appear in entry editor.
+* Improve handling of SO field in CSA import (csaresults-12.txt).
+
* Plugins like SVN plugin might need hooks for performing actions before a database is
closed, and may need the ability to cancel the closing, and to avoid questions about
saving changes.
* Revisions merged into trunk after 2.4 release: 2620-2733
-* Documentation export formatters
-
* Enable "Open spires entry" ("openSpires" action)? Think about better integration of this?
Look into which viewer is used.
* Add "Copy all externally linked files for this set of entries"-feature.
@@ -25,6 +28,5 @@ Morten:
* [MADE WORKAROUND] Native FileDialog does not work for selecting a directory.
- workaround is to autodisable native file dialog for dir selection.
-* [OK? Extension fields only] MODS exports "file" in raw form.
* [POSTPONE] Icon selection for external file types: - select arbitrary images from disk?
* [POSTPONE] Fix Save/Export file dialog stuff
diff --git a/src/windows/nsis/launcher.nsi b/src/windows/nsis/launcher.nsi
index 19ac3f6..9de141b 100644
--- a/src/windows/nsis/launcher.nsi
+++ b/src/windows/nsis/launcher.nsi
@@ -33,7 +33,7 @@ Section ""
Call GetParameters
Pop $R1
- StrCpy $R0 '"$R0" -jar "${JARFILE}" $R1'
+ StrCpy $R0 '"$R0" -Xms32m -Xmx512m -jar "${JARFILE}" $R1'
SetOutPath $EXEDIR
Exec "$R0"
@@ -104,4 +104,4 @@ Function GetJRE
JreFound:
Pop $R1
Exch $R0
-FunctionEnd
\ No newline at end of file
+FunctionEnd
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jabref.git
More information about the pkg-java-commits
mailing list