From: Angus Leeming Date: Wed, 22 Aug 2001 15:34:39 +0000 (+0000) Subject: Herbert's latest patch + some tweaking to ensure that no X-Git-Tag: 1.6.10~20773 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ebc9d762060a8cb178ec77953e265c4bb81eb53b;p=features.git Herbert's latest patch + some tweaking to ensure that no database is stored more than once. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2572 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 37979deee8..45b016dc96 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,11 @@ +2001-08-21 Angus Leeming + + * FormBibtex.C: make sure that any database is stored only once. + +2001-08-22 Herbert Voss + + * FormBibtex.C (input): fix for multiple databases + 2001-08-21 Herbert Voss * FormBibtex.C (input): extension handling for ".bst" diff --git a/src/frontends/xforms/FormBibtex.C b/src/frontends/xforms/FormBibtex.C index 7d1842aa6a..d8d800d36d 100644 --- a/src/frontends/xforms/FormBibtex.C +++ b/src/frontends/xforms/FormBibtex.C @@ -19,6 +19,7 @@ #include "form_bibtex.h" #include "gettext.h" #include "debug.h" +#include "helper_funcs.h" #include "support/lstrings.h" #include "support/filetools.h" @@ -52,17 +53,20 @@ void FormBibtex::build() ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long) { if (ob == dialog_->database_browse) { - string const in_name = fl_get_input(dialog_->database); + // When browsing, take the first file only + string const in_name = fl_get_input(dialog_->database); + string first; + split(in_name, first, ','); + first = strip(first); + string out_name = - controller().Browse(in_name, + controller().Browse(first, "Select Database", "*.bib| BibTeX Databases (*.bib)"); if (!out_name.empty()) { - if (suffixIs(out_name,".bib")) { - // to prevent names like xxxbib.bib - // (because latex needs it without suffix) - out_name = ChangeExtension(out_name,""); - } + // add the database to any existing ones + if (!in_name.empty()) + out_name = in_name + ", " + out_name; fl_freeze_form(form()); fl_set_input(dialog_->database, out_name.c_str()); @@ -77,13 +81,6 @@ ButtonPolicy::SMInput FormBibtex::input(FL_OBJECT * ob, long) "Select BibTeX-Style", "*.bst| BibTeX Styles (*.bst)"); if (!out_name.empty()) { - out_name = OnlyFilename(out_name); - if (suffixIs(out_name,".bst")) { - // to prevent names like xxxbst.bst - // (because bibtex needs it without the suffix) - out_name = ChangeExtension(out_name,""); - } - fl_freeze_form(form()); fl_set_input(dialog_->style, out_name.c_str()); fl_unfreeze_form(form()); @@ -120,11 +117,42 @@ void FormBibtex::update() } } +namespace { + +// Remove all duplicate entries in c. +// Taken stright out of Stroustrup +template void eliminate_duplicates(C & c) +{ + std::sort(c.begin(), c.end()); // sort + typename C::iterator p = std::unique(c.begin(), c.end()); // compact + c.erase(p, c.end()); // shrink +} + +string const unique_and_no_extensions(string const & str_in) +{ + std::vector dbase = getVectorFromString(str_in); + for (std::vector::iterator it = dbase.begin(); + it != dbase.end(); ++it) { + *it = ChangeExtension(*it, ""); + } + eliminate_duplicates(dbase); + return getStringFromVector(dbase); +} + +} // namespace anon + void FormBibtex::apply() { - controller().params().setContents(fl_get_input(dialog_->database)); - string const bibstyle = fl_get_input(dialog_->style); // may be empty! + string db = fl_get_input(dialog_->database); + controller().params().setContents(unique_and_no_extensions(db)); + + // empty is valid! + string bibstyle = fl_get_input(dialog_->style); + if (!bibstyle.empty()) { + // save the BibTeX style without any ".bst" extension + bibstyle = ChangeExtension(OnlyFilename(bibstyle), ""); + } if ((fl_get_button(dialog_->radio_bibtotoc) > 0) && (!bibstyle.empty())) {