Do not owerwrite specific CiteFormat def with default def

amends 5996b2e373 and fixes natbib numerical display
This commit is contained in:
Juergen Spitzmueller 2019-04-19 09:04:23 +02:00
parent d8afb81832
commit df0d7c0049

View File

@ -1280,36 +1280,58 @@ bool TextClass::readCiteFormat(Lexer & lexrc, ReadType rt)
continue; continue;
if (initchar == '!' || initchar == '_' || prefixIs(etype, "B_")) { if (initchar == '!' || initchar == '_' || prefixIs(etype, "B_")) {
bool defined = false; bool defined = false;
bool aydefined = false;
bool numdefined = 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 (!(type & cm.first)) if (!(type & cm.first))
continue; continue;
if (cm.second.find(etype) != cm.second.end()) if (cm.second.find(etype) != cm.second.end()) {
if (type == cm.first)
// defined as default or specific type
defined = true; defined = true;
if (cm.first == ENGINE_TYPE_AUTHORYEAR)
// defined for author-year
aydefined = true;
else if (cm.first == ENGINE_TYPE_NUMERICAL)
// defined for numerical
numdefined = true;
}
} }
if (!defined || overwrite) { if (!defined || overwrite) {
if (type & ENGINE_TYPE_AUTHORYEAR) if (type & ENGINE_TYPE_AUTHORYEAR && (type != ENGINE_TYPE_DEFAULT || !aydefined))
cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; cite_macros_[ENGINE_TYPE_AUTHORYEAR][etype] = definition;
if (type & ENGINE_TYPE_NUMERICAL) if (type & ENGINE_TYPE_NUMERICAL && (type != ENGINE_TYPE_DEFAULT || !numdefined))
cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition; cite_macros_[ENGINE_TYPE_NUMERICAL][etype] = definition;
if (type & ENGINE_TYPE_DEFAULT) if (type == ENGINE_TYPE_DEFAULT)
cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition; cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition;
} }
} else { } else {
bool defined = false; bool defined = false;
bool aydefined = false;
bool numdefined = 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 (!(type & cm.first)) if (!(type & cm.first))
continue; continue;
if (cm.second.find(etype) != cm.second.end()) if (cm.second.find(etype) != cm.second.end()) {
if (type == cm.first)
// defined as default or specific type
defined = true; defined = true;
if (cm.first == ENGINE_TYPE_AUTHORYEAR)
// defined for author-year
aydefined = true;
else if (cm.first == ENGINE_TYPE_NUMERICAL)
// defined for numerical
numdefined = true;
}
} }
if (!defined || overwrite){ if (!defined || overwrite){
if (type & ENGINE_TYPE_AUTHORYEAR) if (type & ENGINE_TYPE_AUTHORYEAR && (type != ENGINE_TYPE_DEFAULT || !aydefined))
cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition; cite_formats_[ENGINE_TYPE_AUTHORYEAR][etype] = definition;
if (type & ENGINE_TYPE_NUMERICAL) if (type & ENGINE_TYPE_NUMERICAL && (type != ENGINE_TYPE_DEFAULT || !numdefined))
cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition; cite_formats_[ENGINE_TYPE_NUMERICAL][etype] = definition;
if (type & ENGINE_TYPE_DEFAULT) if (type == ENGINE_TYPE_DEFAULT)
cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition; cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition;
} }
} }