mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-14 06:57:01 +00:00
Unbreak bibitem citations
ENGINE_TYPE_DEFAULT includes the other two types. Thus we need to check for multiple engines in parallel (and reintroduce the binary operators)
This commit is contained in:
parent
a4c416a03d
commit
5996b2e373
@ -1050,21 +1050,31 @@ vector<CitationStyle> const & TextClass::getCiteStyles(
|
|||||||
bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add)
|
bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add)
|
||||||
{
|
{
|
||||||
int const type = readCiteEngineType(lexrc);
|
int const type = readCiteEngineType(lexrc);
|
||||||
CiteEngineType cetype = ENGINE_TYPE_DEFAULT;
|
bool authoryear = (type & ENGINE_TYPE_AUTHORYEAR);
|
||||||
if (type & ENGINE_TYPE_AUTHORYEAR)
|
bool numerical = (type & ENGINE_TYPE_NUMERICAL);
|
||||||
cetype = ENGINE_TYPE_AUTHORYEAR;
|
bool defce = (type & ENGINE_TYPE_DEFAULT);
|
||||||
else if (type & ENGINE_TYPE_NUMERICAL)
|
|
||||||
cetype = ENGINE_TYPE_NUMERICAL;
|
|
||||||
|
|
||||||
if (rt == CITE_ENGINE && !getCiteStyles(cetype).empty())
|
if (rt == CITE_ENGINE) {
|
||||||
// The cite engines are not supposed to overwrite
|
// The cite engines are not supposed to overwrite
|
||||||
// CiteStyle defined by the class or a module.
|
// CiteStyle defined by the class or a module.
|
||||||
return true;
|
if (authoryear)
|
||||||
|
authoryear = getCiteStyles(ENGINE_TYPE_AUTHORYEAR).empty();
|
||||||
|
if (numerical)
|
||||||
|
numerical = getCiteStyles(ENGINE_TYPE_NUMERICAL).empty();
|
||||||
|
if (defce)
|
||||||
|
defce = getCiteStyles(ENGINE_TYPE_DEFAULT).empty();
|
||||||
|
}
|
||||||
|
|
||||||
if (rt != CITE_ENGINE && !add)
|
if (rt != CITE_ENGINE && !add) {
|
||||||
// Reset if we defined CiteStyle
|
// Reset if we defined CiteStyle
|
||||||
// from the class or a module
|
// from the class or a module
|
||||||
cite_styles_[cetype].clear();
|
if (authoryear)
|
||||||
|
cite_styles_[ENGINE_TYPE_AUTHORYEAR].clear();
|
||||||
|
if (numerical)
|
||||||
|
cite_styles_[ENGINE_TYPE_NUMERICAL].clear();
|
||||||
|
if (defce)
|
||||||
|
cite_styles_[ENGINE_TYPE_DEFAULT].clear();
|
||||||
|
}
|
||||||
|
|
||||||
string def;
|
string def;
|
||||||
bool getout = false;
|
bool getout = false;
|
||||||
@ -1156,21 +1166,41 @@ bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add)
|
|||||||
cs.stardesc = stardescs[0];
|
cs.stardesc = stardescs[0];
|
||||||
if (size > 1)
|
if (size > 1)
|
||||||
cs.startooltip = stardescs[1];
|
cs.startooltip = stardescs[1];
|
||||||
if (add)
|
if (add) {
|
||||||
class_cite_styles_[cetype].push_back(cs);
|
if (authoryear)
|
||||||
else
|
class_cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs);
|
||||||
cite_styles_[cetype].push_back(cs);
|
if (numerical)
|
||||||
|
class_cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(cs);
|
||||||
|
if (defce)
|
||||||
|
class_cite_styles_[ENGINE_TYPE_DEFAULT].push_back(cs);
|
||||||
|
} else {
|
||||||
|
if (authoryear)
|
||||||
|
cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(cs);
|
||||||
|
if (numerical)
|
||||||
|
cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(cs);
|
||||||
|
if (defce)
|
||||||
|
cite_styles_[ENGINE_TYPE_DEFAULT].push_back(cs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Stop here if we do AddToCiteEngine,
|
// If we do AddToCiteEngine, do not apply yet,
|
||||||
// except if we have already a style to add something to
|
// except if we have already a style to add something to
|
||||||
if (add && getCiteStyles(cetype).empty())
|
bool apply_ay = !add;
|
||||||
return getout;
|
bool apply_num = !add;
|
||||||
|
bool apply_def = !add;
|
||||||
|
if (add) {
|
||||||
|
if (type & ENGINE_TYPE_AUTHORYEAR)
|
||||||
|
apply_ay = !getCiteStyles(ENGINE_TYPE_AUTHORYEAR).empty();
|
||||||
|
if (type & ENGINE_TYPE_NUMERICAL)
|
||||||
|
apply_num = !getCiteStyles(ENGINE_TYPE_NUMERICAL).empty();
|
||||||
|
if (type & ENGINE_TYPE_DEFAULT)
|
||||||
|
apply_def = !getCiteStyles(ENGINE_TYPE_DEFAULT).empty();
|
||||||
|
}
|
||||||
|
|
||||||
// Add the styles from AddToCiteEngine to the class' styles
|
// Add the styles from AddToCiteEngine to the class' styles
|
||||||
// (but only if they are not yet defined)
|
// (but only if they are not yet defined)
|
||||||
for (auto const cis : class_cite_styles_) {
|
for (auto const cis : class_cite_styles_) {
|
||||||
// Only consider the current CiteEngineType
|
// Only consider the current CiteEngineType
|
||||||
if (cis.first != cetype)
|
if (!(type & cis.first))
|
||||||
continue;
|
continue;
|
||||||
for (auto const ciss : cis.second) {
|
for (auto const ciss : cis.second) {
|
||||||
bool defined = false;
|
bool defined = false;
|
||||||
@ -1178,11 +1208,22 @@ bool TextClass::readCiteEngine(Lexer & lexrc, ReadType rt, bool const add)
|
|||||||
for (auto const av : getCiteStyles(cis.first))
|
for (auto const av : getCiteStyles(cis.first))
|
||||||
if (av.name == ciss.name)
|
if (av.name == ciss.name)
|
||||||
defined = true;
|
defined = true;
|
||||||
if (!defined)
|
if (!defined) {
|
||||||
cite_styles_[cis.first].push_back(ciss);
|
if (cis.first == ENGINE_TYPE_AUTHORYEAR && apply_ay)
|
||||||
|
cite_styles_[ENGINE_TYPE_AUTHORYEAR].push_back(ciss);
|
||||||
|
else if (cis.first == ENGINE_TYPE_NUMERICAL && apply_num)
|
||||||
|
cite_styles_[ENGINE_TYPE_NUMERICAL].push_back(ciss);
|
||||||
|
else if (cis.first == ENGINE_TYPE_DEFAULT && apply_def)
|
||||||
|
cite_styles_[ENGINE_TYPE_DEFAULT].push_back(ciss);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class_cite_styles_[cetype].clear();
|
if (type & ENGINE_TYPE_AUTHORYEAR && apply_ay)
|
||||||
|
class_cite_styles_[ENGINE_TYPE_AUTHORYEAR].clear();
|
||||||
|
if (type & ENGINE_TYPE_NUMERICAL && apply_num)
|
||||||
|
class_cite_styles_[ENGINE_TYPE_NUMERICAL].clear();
|
||||||
|
if (type & ENGINE_TYPE_DEFAULT && apply_def)
|
||||||
|
class_cite_styles_[ENGINE_TYPE_DEFAULT].clear();
|
||||||
return getout;
|
return getout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1213,12 +1254,6 @@ int TextClass::readCiteEngineType(Lexer & lexrc) const
|
|||||||
bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt)
|
bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt)
|
||||||
{
|
{
|
||||||
int const type = readCiteEngineType(lexrc);
|
int const type = readCiteEngineType(lexrc);
|
||||||
CiteEngineType cetype = ENGINE_TYPE_DEFAULT;
|
|
||||||
if (type & ENGINE_TYPE_AUTHORYEAR)
|
|
||||||
cetype = ENGINE_TYPE_AUTHORYEAR;
|
|
||||||
else if (type & ENGINE_TYPE_NUMERICAL)
|
|
||||||
cetype = ENGINE_TYPE_NUMERICAL;
|
|
||||||
|
|
||||||
string etype;
|
string etype;
|
||||||
string definition;
|
string definition;
|
||||||
// Cite engine definitions do not overwrite existing
|
// Cite engine definitions do not overwrite existing
|
||||||
@ -1240,24 +1275,36 @@ bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt)
|
|||||||
bool defined = false;
|
bool defined = false;
|
||||||
// Check if the macro is already def'ed
|
// Check if the macro is already def'ed
|
||||||
for (auto const cm : cite_macros_) {
|
for (auto const cm : cite_macros_) {
|
||||||
if (cm.first != cetype)
|
if (!(type & cm.first))
|
||||||
continue;
|
continue;
|
||||||
if (cm.second.find(etype) != cm.second.end())
|
if (cm.second.find(etype) != cm.second.end())
|
||||||
defined = true;
|
defined = true;
|
||||||
}
|
}
|
||||||
if (!defined || overwrite)
|
if (!defined || overwrite) {
|
||||||
cite_macros_[cetype][etype] = definition;
|
if (type & ENGINE_TYPE_AUTHORYEAR)
|
||||||
|
cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition;
|
||||||
|
if (type & ENGINE_TYPE_NUMERICAL)
|
||||||
|
cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition;
|
||||||
|
if (type & ENGINE_TYPE_DEFAULT)
|
||||||
|
cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
bool defined = false;
|
bool defined = false;
|
||||||
// Check if the format is already def'ed
|
// Check if the format is already def'ed
|
||||||
for (auto const cm : cite_formats_) {
|
for (auto const cm : cite_formats_) {
|
||||||
if (cm.first != cetype)
|
if (!(type & cm.first))
|
||||||
continue;
|
continue;
|
||||||
if (cm.second.find(etype) != cm.second.end())
|
if (cm.second.find(etype) != cm.second.end())
|
||||||
defined = true;
|
defined = true;
|
||||||
}
|
}
|
||||||
if (!defined || overwrite)
|
if (!defined || overwrite){
|
||||||
cite_formats_[cetype][etype] = definition;
|
if (type & ENGINE_TYPE_AUTHORYEAR)
|
||||||
|
cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition;
|
||||||
|
if (type & ENGINE_TYPE_NUMERICAL)
|
||||||
|
cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition;
|
||||||
|
if (type & ENGINE_TYPE_DEFAULT)
|
||||||
|
cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user