Make the complexLabel and basicLabel functions in InsetCitation into

private member functions. This will be useful later.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32923 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2010-01-09 22:30:12 +00:00
parent 68edfdafc3
commit 62b23ac0be
2 changed files with 98 additions and 97 deletions

View File

@ -133,16 +133,93 @@ string asValidLatexCommand(string const & input, CiteEngine const engine)
} }
docstring complexLabel(Buffer const & buffer, } // anon namespace
string const & citetype, docstring const & keylist,
docstring const & before, docstring const & after,
CiteEngine engine) ParamInfo InsetCitation::param_info_;
InsetCitation::InsetCitation(Buffer * buf, InsetCommandParams const & p)
: InsetCommand(buf, p, "citation")
{}
ParamInfo const & InsetCitation::findInfo(string const & /* cmdName */)
{ {
// Only start the process off after the buffer is loaded from file. // standard cite does only take one argument if jurabib is
if (!buffer.isFullyLoaded()) // not used, but jurabib extends this to two arguments, so
// we have to allow both here. InsetCitation takes care that
// LaTeX output is nevertheless correct.
if (param_info_.empty()) {
param_info_.add("after", ParamInfo::LATEX_OPTIONAL);
param_info_.add("before", ParamInfo::LATEX_OPTIONAL);
param_info_.add("key", ParamInfo::LATEX_REQUIRED);
}
return param_info_;
}
bool InsetCitation::isCompatibleCommand(string const & cmd)
{
vector<string> const & possibles = possibleCiteCommands();
vector<string>::const_iterator const end = possibles.end();
return find(possibles.begin(), end, cmd) != end;
}
docstring InsetCitation::toolTip(BufferView const & bv, int, int) const
{
Buffer const & buf = bv.buffer();
// Only after the buffer is loaded from file...
if (!buf.isFullyLoaded())
return docstring(); return docstring();
BiblioInfo const & biblist = buffer.masterBibInfo(); BiblioInfo const & bi = buf.masterBibInfo();
if (bi.empty())
return _("No bibliography defined!");
docstring const & key = getParam("key");
if (key.empty())
return _("No citations selected!");
vector<docstring> keys = getVectorFromString(key);
vector<docstring>::const_iterator it = keys.begin();
vector<docstring>::const_iterator en = keys.end();
docstring tip;
for (; it != en; ++it) {
docstring const key_info = bi.getInfo(*it);
if (key_info.empty())
continue;
if (!tip.empty())
tip += "\n";
tip += wrap(key_info, -4);
}
return tip;
}
docstring InsetCitation::generateLabel() const
{
docstring label;
label = complexLabel();
// Fallback to fail-safe
if (label.empty())
label = basicLabel();
return label;
}
docstring InsetCitation::complexLabel() const
{
Buffer const & buf = buffer();
// Only start the process off after the buffer is loaded from file.
if (!buf.isFullyLoaded())
return docstring();
BiblioInfo const & biblist = buf.masterBibInfo();
if (biblist.empty()) if (biblist.empty())
return docstring(); return docstring();
@ -157,8 +234,9 @@ docstring complexLabel(Buffer const & buffer,
// jurabib supports these plus // jurabib supports these plus
// CITE: author/<before field> // CITE: author/<before field>
CiteEngine const engine = buffer().params().citeEngine();
// We don't currently use the full or forceUCase fields. // We don't currently use the full or forceUCase fields.
string cite_type = asValidLatexCommand(citetype, engine); string cite_type = asValidLatexCommand(getCmdName(), engine);
if (cite_type[0] == 'C') if (cite_type[0] == 'C')
// If we were going to use them, this would mean ForceUCase // If we were going to use them, this would mean ForceUCase
cite_type = string(1, 'c') + cite_type.substr(1); cite_type = string(1, 'c') + cite_type.substr(1);
@ -166,6 +244,7 @@ docstring complexLabel(Buffer const & buffer,
// and this would mean FULL // and this would mean FULL
cite_type = cite_type.substr(0, cite_type.size() - 1); cite_type = cite_type.substr(0, cite_type.size() - 1);
docstring const & before = getParam("before");
docstring before_str; docstring before_str;
if (!before.empty()) { if (!before.empty()) {
// In CITET and CITEALT mode, the "before" string is // In CITET and CITEALT mode, the "before" string is
@ -186,6 +265,7 @@ docstring complexLabel(Buffer const & buffer,
before_str = '/' + before; before_str = '/' + before;
} }
docstring const & after = getParam("after");
docstring after_str; docstring after_str;
// The "after" key is appended only to the end of the whole. // The "after" key is appended only to the end of the whole.
if (cite_type == "nocite") if (cite_type == "nocite")
@ -212,7 +292,7 @@ docstring complexLabel(Buffer const & buffer,
docstring const sep_str = from_ascii(sep) + ' '; docstring const sep_str = from_ascii(sep) + ' ';
docstring label; docstring label;
vector<docstring> keys = getVectorFromString(keylist); vector<docstring> keys = getVectorFromString(getParam("key"));
vector<docstring>::const_iterator it = keys.begin(); vector<docstring>::const_iterator it = keys.begin();
vector<docstring>::const_iterator end = keys.end(); vector<docstring>::const_iterator end = keys.end();
for (; it != end; ++it) { for (; it != end; ++it) {
@ -327,9 +407,9 @@ docstring complexLabel(Buffer const & buffer,
} }
docstring basicLabel(docstring const & keyList, docstring const & after) docstring InsetCitation::basicLabel() const
{ {
docstring keys = keyList; docstring keys = getParam("key");
docstring label; docstring label;
if (contains(keys, ',')) { if (contains(keys, ',')) {
@ -344,96 +424,13 @@ docstring basicLabel(docstring const & keyList, docstring const & after)
label = keys; label = keys;
} }
docstring const & after = getParam("after");
if (!after.empty()) if (!after.empty())
label += ", " + after; label += ", " + after;
return '[' + label + ']'; return '[' + label + ']';
} }
} // anon namespace
ParamInfo InsetCitation::param_info_;
InsetCitation::InsetCitation(Buffer * buf, InsetCommandParams const & p)
: InsetCommand(buf, p, "citation")
{}
ParamInfo const & InsetCitation::findInfo(string const & /* cmdName */)
{
// standard cite does only take one argument if jurabib is
// not used, but jurabib extends this to two arguments, so
// we have to allow both here. InsetCitation takes care that
// LaTeX output is nevertheless correct.
if (param_info_.empty()) {
param_info_.add("after", ParamInfo::LATEX_OPTIONAL);
param_info_.add("before", ParamInfo::LATEX_OPTIONAL);
param_info_.add("key", ParamInfo::LATEX_REQUIRED);
}
return param_info_;
}
bool InsetCitation::isCompatibleCommand(string const & cmd)
{
vector<string> const & possibles = possibleCiteCommands();
vector<string>::const_iterator const end = possibles.end();
return find(possibles.begin(), end, cmd) != end;
}
docstring InsetCitation::toolTip(BufferView const & bv, int, int) const
{
Buffer const & buf = bv.buffer();
// Only after the buffer is loaded from file...
if (!buf.isFullyLoaded())
return docstring();
BiblioInfo const & bi = buf.masterBibInfo();
if (bi.empty())
return _("No bibliography defined!");
docstring const & key = getParam("key");
if (key.empty())
return _("No citations selected!");
vector<docstring> keys = getVectorFromString(key);
vector<docstring>::const_iterator it = keys.begin();
vector<docstring>::const_iterator en = keys.end();
docstring tip;
for (; it != en; ++it) {
docstring const key_info = bi.getInfo(*it);
if (key_info.empty())
continue;
if (!tip.empty())
tip += "\n";
tip += wrap(key_info, -4);
}
return tip;
}
docstring InsetCitation::generateLabel() const
{
docstring const & before = getParam("before");
docstring const & after = getParam("after");
docstring label;
CiteEngine const engine = buffer().params().citeEngine();
label = complexLabel(buffer(), getCmdName(), getParam("key"),
before, after, engine);
// Fallback to fail-safe
if (label.empty())
label = basicLabel(getParam("key"), after);
return label;
}
docstring InsetCitation::screenLabel() const docstring InsetCitation::screenLabel() const
{ {
return cache.screen_label; return cache.screen_label;

View File

@ -74,11 +74,15 @@ public:
private: private:
/// ///
Inset * clone() const { return new InsetCitation(*this); } Inset * clone() const { return new InsetCitation(*this); }
/// This function does the donkey work of creating the pretty label
docstring generateLabel() const;
///
docstring complexLabel() const;
///
docstring basicLabel() const;
/// we'll eventually want to be able to get info on this from the /// we'll eventually want to be able to get info on this from the
/// various CiteEngines /// various CiteEngines
static ParamInfo param_info_; static ParamInfo param_info_;
/// This function does the donkey work of creating the pretty label
docstring generateLabel() const;
/// ///
class Cache { class Cache {