Those parts of Herbert's natbib patch that either fix bugs or just move

functions around.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3995 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Angus Leeming 2002-04-15 12:05:07 +00:00
parent c9265e7ccb
commit 9b3f8c9819
11 changed files with 95 additions and 58 deletions

View File

@ -1,3 +1,13 @@
2002-04-14 Herbert Voss <voss@perce.de>
* helper_funcs.[Ch]: move the getVectorFromString and the vice versa
into the support/lstrings for better use in other programs.
* biblio.[Ch] (getYear, getAbbreviatedAuthor, familyName): move out of
namespace anon and make globally accessible.
(familyName): test for the presence of a LaTeX Space at the front of
of a name; strip it if it exists.
2002-04-11 Herbert Voss <voss@perce.de> 2002-04-11 Herbert Voss <voss@perce.de>
* ControlGraphics.C: expand "browse-string" to all available formats * ControlGraphics.C: expand "browse-string" to all available formats

View File

@ -142,6 +142,10 @@ regexSearch(InfoMap const & theMap,
return keys.end(); return keys.end();
} }
} // namespace anon
string const familyName(string const & name) string const familyName(string const & name)
{ {
// Very simple parser // Very simple parser
@ -158,6 +162,9 @@ string const familyName(string const & name)
idx = fname.rfind("."); idx = fname.rfind(".");
if (idx != string::npos) if (idx != string::npos)
fname = frontStrip(fname.substr(idx+1)); fname = frontStrip(fname.substr(idx+1));
// test if we have a LaTeX Space in front
if (fname[0] == '\\')
return fname.substr(2);
return fname; return fname;
} }
@ -217,9 +224,6 @@ string const getYear(InfoMap const & map, string const & key)
return year; return year;
} }
} // namespace anon
// A functor for use with std::sort, leading to case insensitive sorting // A functor for use with std::sort, leading to case insensitive sorting
struct compareNoCase: public std::binary_function<string, string, bool> struct compareNoCase: public std::binary_function<string, string, bool>

View File

@ -60,6 +60,15 @@ namespace biblio
Empty if no info exists. */ Empty if no info exists. */
string const getInfo(InfoMap const &, string const &); string const getInfo(InfoMap const &, string const &);
// rturn the year from the bibtex data record
string const getYear(InfoMap const & map, string const & key);
/// return the short form of an authorlist
string const getAbbreviatedAuthor(InfoMap const & map, string const & key);
// return only the family name
string const familyName(string const & name);
/** Search a BibTeX info field for the given key and return the /** Search a BibTeX info field for the given key and return the
associated field. */ associated field. */
string const parseBibTeX(string data, string const & findkey); string const parseBibTeX(string data, string const & findkey);

View File

@ -31,50 +31,6 @@ using std::pair;
using std::vector; using std::vector;
using std::make_pair; using std::make_pair;
string const getStringFromVector(vector<string> const & vec,
string const & delim)
{
string str;
int i = 0;
for (vector<string>::const_iterator it = vec.begin();
it != vec.end(); ++it) {
string item = strip(frontStrip(*it));
if (item.empty()) continue;
if (i++ > 0) str += delim;
str += item;
}
return str;
}
vector<string> const getVectorFromString(string const & str,
string const & delim)
{
vector<string> vec;
if (str.empty())
return vec;
string keys(strip(str));
for(;;) {
string::size_type const idx = keys.find(delim);
if (idx == string::npos) {
vec.push_back(frontStrip(keys));
break;
}
string const key = strip(frontStrip(keys.substr(0, idx)));
if (!key.empty())
vec.push_back(key);
string::size_type const start = idx + delim.size();
keys = keys.substr(start);
}
return vec;
}
string const browseFile(LyXView * lv, string const & filename, string const browseFile(LyXView * lv, string const & filename,
string const & title, string const & title,
string const & pattern, string const & pattern,

View File

@ -21,16 +21,6 @@
#pragma interface #pragma interface
#endif #endif
/** Functions to convert a string to/from a vector. */
///
string const
getStringFromVector(std::vector<string> const & vec, string const & delim=",");
///
std::vector<string> const
getVectorFromString(string const & str, string const & delim=",");
class LyXView; class LyXView;
/** Launch a file dialog and return the chosen file. /** Launch a file dialog and return the chosen file.

View File

@ -1,3 +1,9 @@
2002-04-14 Herbert Voss <voss@perce.de>
* FormCharacter.C
* FormExternal.C: adding #include "support/lstrings.h"
for the getStringFromVector and vice versa
2002-04-12 Angus Leeming <a.leeming@ic.ac.uk> 2002-04-12 Angus Leeming <a.leeming@ic.ac.uk>
* FormParagraph.C (changedParagraph): ensure that the warning message * FormParagraph.C (changedParagraph): ensure that the warning message

View File

@ -23,6 +23,8 @@
#include "combox.h" #include "combox.h"
#include "helper_funcs.h" #include "helper_funcs.h"
#include "support/lstrings.h"
using std::vector; using std::vector;
using std::find; using std::find;

View File

@ -22,6 +22,8 @@
#include "xforms_helpers.h" #include "xforms_helpers.h"
#include "helper_funcs.h" #include "helper_funcs.h"
#include "support/lstrings.h"
typedef FormCB<ControlExternal, FormDB<FD_form_external> > base_class; typedef FormCB<ControlExternal, FormDB<FD_form_external> > base_class;
FormExternal::FormExternal(ControlExternal & c) FormExternal::FormExternal(ControlExternal & c)

View File

@ -1,3 +1,9 @@
2002-04-14 Herbert Voss <voss@perce.de>
* lstrings.[Ch]: move the getVectorFromString and the vice versa
from frontends/controllers/helper_funcs for better use in other
programs
2002-04-15 Angus Leeming <a.leeming@ic.ac.uk> 2002-04-15 Angus Leeming <a.leeming@ic.ac.uk>
* tempname.C (make_tempfile): simplify the #ifdef block by using * tempname.C (make_tempfile): simplify the #ifdef block by using

View File

@ -27,6 +27,7 @@
using std::count; using std::count;
using std::transform; using std::transform;
using std::vector;
#ifndef CXX_GLOBAL_CSTD #ifndef CXX_GLOBAL_CSTD
using std::tolower; using std::tolower;
@ -632,3 +633,45 @@ string const escape(string const & lab)
} }
return enc; return enc;
} }
/// gives a vector of stringparts which have the delimiter delim
vector<string> const getVectorFromString(string const & str,
string const & delim)
{
vector<string> vec;
if (str.empty())
return vec;
string keys(strip(str));
for(;;) {
string::size_type const idx = keys.find(delim);
if (idx == string::npos) {
vec.push_back(frontStrip(keys));
break;
}
string const key = strip(frontStrip(keys.substr(0, idx)));
if (!key.empty())
vec.push_back(key);
string::size_type const start = idx + delim.size();
keys = keys.substr(start);
}
return vec;
}
// the same vice versa
string const getStringFromVector(vector<string> const & vec,
string const & delim)
{
string str;
int i = 0;
for (vector<string>::const_iterator it = vec.begin();
it != vec.end(); ++it) {
string item = strip(frontStrip(*it));
if (item.empty()) continue;
if (i++ > 0) str += delim;
str += item;
}
return str;
}

View File

@ -18,12 +18,13 @@
//#include <cstring> //#include <cstring>
//#include <cctype> //#include <cctype>
//#include <cctype>
#include <vector>
#include "Lsstream.h" #include "Lsstream.h"
#include "LString.h" #include "LString.h"
/// ///
int compare_no_case(string const & s, string const & s2); int compare_no_case(string const & s, string const & s2);
@ -250,4 +251,12 @@ string const rsplit(string const & a, string & piece, char delim);
/// Escapes non ASCII chars /// Escapes non ASCII chars
string const escape(string const & lab); string const escape(string const & lab);
/// gives a vector of stringparts which have the delimiter delim
std::vector<string> const getVectorFromString(string const & str,
string const & delim = ",");
// the same vice versa
string const getStringFromVector(std::vector<string> const & vec,
string const & delim = ",");
#endif #endif