mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-26 06:15:16 +00:00
fix bibkey writing, avoid a few copies, whitespace changes..
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6196 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
2b99c9b189
commit
ff1355a08a
@ -865,12 +865,12 @@ bool BufferView::ChangeRefsIfUnique(string const & from, string const & to)
|
||||
}
|
||||
|
||||
|
||||
bool BufferView::ChangeCitationsIfUnique(string const & from,
|
||||
string const & to)
|
||||
bool BufferView::ChangeCitationsIfUnique(string const & from, string const & to)
|
||||
{
|
||||
typedef pair<string, string> StringPair;
|
||||
|
||||
vector<StringPair> keys = buffer()->getBibkeyList();
|
||||
vector<StringPair> keys;
|
||||
buffer()->fillWithBibKeys(keys);
|
||||
if (count_if(keys.begin(), keys.end(),
|
||||
lyx::equal_1st_in_pair<StringPair>(from))
|
||||
> 1)
|
||||
|
37
src/buffer.C
37
src/buffer.C
@ -130,7 +130,6 @@ using std::pair;
|
||||
using std::make_pair;
|
||||
using std::vector;
|
||||
using std::map;
|
||||
using std::max;
|
||||
using std::stack;
|
||||
using std::list;
|
||||
using std::for_each;
|
||||
@ -923,7 +922,8 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
|
||||
params.float_placement = lex.getString();
|
||||
} else if (token == "\\align") {
|
||||
int tmpret = lex.findToken(string_align);
|
||||
if (tmpret == -1) ++tmpret;
|
||||
if (tmpret == -1)
|
||||
++tmpret;
|
||||
int const tmpret2 = int(pow(2.0, tmpret));
|
||||
par->params().align(LyXAlignment(tmpret2));
|
||||
} else if (token == "\\added_space_top") {
|
||||
@ -1586,7 +1586,7 @@ string const Buffer::asciiParagraph(Paragraph const & par,
|
||||
|
||||
// this is to change the linebreak to do it by word a bit more
|
||||
// intelligent hopefully! (only in the case where we have a
|
||||
// max linelenght!) (Jug)
|
||||
// max linelength!) (Jug)
|
||||
|
||||
string word;
|
||||
|
||||
@ -2872,40 +2872,33 @@ vector<string> const Buffer::getLabelList() const
|
||||
|
||||
|
||||
// This is also a buffer property (ale)
|
||||
vector<pair<string, string> > const Buffer::getBibkeyList() const
|
||||
void Buffer::fillWithBibKeys(vector<pair<string, string> > & keys) const
|
||||
{
|
||||
typedef pair<string, string> StringPair;
|
||||
/// if this is a child document and the parent is already loaded
|
||||
/// Use the parent's list instead [ale990412]
|
||||
/// use the parent's list instead [ale990412]
|
||||
if (!params.parentname.empty() && bufferlist.exists(params.parentname)) {
|
||||
Buffer const * tmp = bufferlist.getBuffer(params.parentname);
|
||||
if (tmp)
|
||||
return tmp->getBibkeyList();
|
||||
if (tmp) {
|
||||
tmp->fillWithBibKeys(keys);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
vector<StringPair> keys;
|
||||
for (inset_iterator it = inset_const_iterator_begin();
|
||||
it != inset_const_iterator_end(); ++it) {
|
||||
// Search for Bibtex or Include inset
|
||||
if (it->lyxCode() == Inset::BIBTEX_CODE) {
|
||||
vector<StringPair> tmp =
|
||||
static_cast<InsetBibtex &>(*it).getKeys(this);
|
||||
keys.insert(keys.end(), tmp.begin(), tmp.end());
|
||||
} else if (it->lyxCode() == Inset::INCLUDE_CODE) {
|
||||
vector<StringPair> const tmp =
|
||||
static_cast<InsetInclude &>(*it).getKeys();
|
||||
keys.insert(keys.end(), tmp.begin(), tmp.end());
|
||||
} else if (it->lyxCode() == Inset::BIBKEY_CODE) {
|
||||
if (it->lyxCode() == Inset::BIBTEX_CODE)
|
||||
static_cast<InsetBibtex &>(*it).fillWithBibKeys(this, keys);
|
||||
else if (it->lyxCode() == Inset::INCLUDE_CODE)
|
||||
static_cast<InsetInclude &>(*it).fillWithBibKeys(keys);
|
||||
else if (it->lyxCode() == Inset::BIBKEY_CODE) {
|
||||
InsetBibKey & bib = static_cast<InsetBibKey &>(*it);
|
||||
string const key = bib.getContents();
|
||||
string const opt = bib.getOptions();
|
||||
string const ref; // = pit->asString(this, false);
|
||||
string const info = opt + "TheBibliographyRef" + ref;
|
||||
keys.push_back(StringPair(key, info));
|
||||
keys.push_back(pair<string, string>(key, info));
|
||||
}
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
||||
|
@ -247,8 +247,8 @@ public:
|
||||
*/
|
||||
void validate(LaTeXFeatures &) const;
|
||||
|
||||
///
|
||||
std::vector<std::pair<string, string> > const getBibkeyList() const;
|
||||
/// return all bibkeys from buffer and its childs
|
||||
void fillWithBibKeys(vector<pair<string, string> > & keys) const;
|
||||
///
|
||||
std::vector<string> const getLabelList() const;
|
||||
|
||||
|
@ -34,7 +34,8 @@ void ControlCitation::clearDaughterParams()
|
||||
|
||||
void ControlCitation::setDaughterParams()
|
||||
{
|
||||
vector<pair<string,string> > blist = buffer()->getBibkeyList();
|
||||
vector<pair<string,string> > blist;
|
||||
buffer()->fillWithBibKeys(blist);
|
||||
|
||||
typedef std::map<string, string>::value_type InfoMapValue;
|
||||
|
||||
|
@ -71,11 +71,10 @@ void InsetBibKey::setCounter(int c)
|
||||
// of time cause LyX3 won't use lyxlex anyway. (ale)
|
||||
void InsetBibKey::write(Buffer const *, ostream & os) const
|
||||
{
|
||||
os << "\n\\layout Bibliography\n\\bibitem ";
|
||||
if (! getOptions().empty())
|
||||
os << "\n\\bibitem ";
|
||||
if (!getOptions().empty())
|
||||
os << '[' << getOptions() << ']';
|
||||
os << '{'
|
||||
<< getContents() << "}\n";
|
||||
os << '{' << getContents() << "}\n";
|
||||
}
|
||||
|
||||
|
||||
@ -84,8 +83,7 @@ void InsetBibKey::write(Buffer const *, ostream & os) const
|
||||
void InsetBibKey::read(Buffer const *, LyXLex & lex)
|
||||
{
|
||||
if (lex.eatLine()) {
|
||||
string const token = lex.getString();
|
||||
scanCommand(token);
|
||||
scanCommand(lex.getString());
|
||||
} else {
|
||||
lex.printError("InsetCommand: Parse error: `$$Token'");
|
||||
}
|
||||
@ -200,7 +198,7 @@ int InsetBibtex::latex(Buffer const * buffer, ostream & os,
|
||||
adb = os::external_path(MakeAbsPath(adb, buffer->filePath()));
|
||||
db_out += adb;
|
||||
db_out += ',';
|
||||
db_in= split(db_in, adb,',');
|
||||
db_in = split(db_in, adb,',');
|
||||
}
|
||||
db_out = rtrim(db_out, ",");
|
||||
os << "\\bibliography{" << db_out << "}\n";
|
||||
@ -235,11 +233,9 @@ vector<string> const InsetBibtex::getFiles(Buffer const & buffer) const
|
||||
|
||||
|
||||
// This method returns a comma separated list of Bibtex entries
|
||||
vector<pair<string, string> > const
|
||||
InsetBibtex::getKeys(Buffer const * buffer) const
|
||||
void InsetBibtex::fillWithBibKeys
|
||||
(Buffer const * buffer, vector<pair<string, string> > & keys) const
|
||||
{
|
||||
vector<pair<string,string> > keys;
|
||||
|
||||
lyx::Assert(buffer);
|
||||
vector<string> const files = getFiles(*buffer);
|
||||
for (vector<string>::const_iterator it = files.begin();
|
||||
@ -271,7 +267,6 @@ vector<pair<string, string> > const
|
||||
}
|
||||
}
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
||||
|
@ -93,7 +93,8 @@ public:
|
||||
int latex(Buffer const *, std::ostream &,
|
||||
bool fragile, bool freespace) const;
|
||||
///
|
||||
std::vector<std::pair<string,string> > const getKeys(Buffer const *) const;
|
||||
void fillWithBibKeys(Buffer const *,
|
||||
std::vector<std::pair<string,string> > &) const;
|
||||
///
|
||||
std::vector<string> const getFiles(Buffer const &) const;
|
||||
///
|
||||
|
@ -66,7 +66,8 @@ string const getNatbibLabel(Buffer const * buffer,
|
||||
if (loadkeys) {
|
||||
// build the keylist
|
||||
typedef vector<std::pair<string, string> > InfoType;
|
||||
InfoType bibkeys = buffer->getBibkeyList();
|
||||
InfoType bibkeys;
|
||||
buffer->fillWithBibKeys(bibkeys);
|
||||
|
||||
InfoType::const_iterator bit = bibkeys.begin();
|
||||
InfoType::const_iterator bend = bibkeys.end();
|
||||
|
@ -483,18 +483,14 @@ vector<string> const InsetInclude::getLabelList() const
|
||||
}
|
||||
|
||||
|
||||
vector<pair<string,string> > const InsetInclude::getKeys() const
|
||||
void InsetInclude::fillWithBibKeys(vector<pair<string,string> > & keys) const
|
||||
{
|
||||
vector<pair<string,string> > keys;
|
||||
|
||||
if (loadIfNeeded()) {
|
||||
Buffer * tmp = bufferlist.getBuffer(getFileName());
|
||||
tmp->setParentName("");
|
||||
keys = tmp->getBibkeyList();
|
||||
tmp->fillWithBibKeys(keys);
|
||||
tmp->setParentName(getMasterFilename());
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
||||
|
@ -79,7 +79,7 @@ public:
|
||||
/// This returns the list of labels on the child buffer
|
||||
std::vector<string> const getLabelList() const;
|
||||
/// This returns the list of bibkeys on the child buffer
|
||||
std::vector< std::pair<string,string> > const getKeys() const;
|
||||
void fillWithBibKeys(vector<pair<string,string> > & keys) const;
|
||||
///
|
||||
void edit(BufferView *, int x, int y, mouse_button::state button);
|
||||
///
|
||||
|
@ -1264,14 +1264,13 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
|
||||
textclass.counters().step("bibitem");
|
||||
int number = textclass.counters().value("bibitem");
|
||||
//if (!par->bibkey()) {
|
||||
// Inset * inset = new InsetBibKey(InsetCommandParams("bibitem"));
|
||||
// //par->insertInset(0, inset);
|
||||
//}
|
||||
if (par->bibkey()) {
|
||||
par->bibkey()->setCounter(number);
|
||||
par->params().labelString(layout->labelstring());
|
||||
}
|
||||
// else {
|
||||
// InsetCommandParams p("bibitem");
|
||||
// par->bibkey() = new InsetBibKey(p);
|
||||
//}
|
||||
// In biblio should't be following counters but...
|
||||
} else {
|
||||
string s = layout->labelstring();
|
||||
|
Loading…
Reference in New Issue
Block a user