commit df0d7c00499546c2cddf92d8385f372df1973ae6
Author: Juergen Spitzmueller <[email protected]>
Date: Fri Apr 19 09:04:23 2019 +0200
Do not owerwrite specific CiteFormat def with default def
amends 5996b2e373544 and fixes natbib numerical display
---
src/TextClass.cpp | 42 ++++++++++++++++++++++++++++++++----------
1 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/src/TextClass.cpp b/src/TextClass.cpp
index 8003888..0dd4434 100644
--- a/src/TextClass.cpp
+++ b/src/TextClass.cpp
@@ -1280,36 +1280,58 @@ bool TextClass::readCiteFormat(Lexer & lexrc, ReadType
rt)
continue;
if (initchar == '!' || initchar == '_' || prefixIs(etype,
"B_")) {
bool defined = false;
+ bool aydefined = false;
+ bool numdefined = false;
// Check if the macro is already def'ed
for (auto const & cm : cite_macros_) {
if (!(type & cm.first))
continue;
- if (cm.second.find(etype) != cm.second.end())
- defined = true;
+ if (cm.second.find(etype) != cm.second.end()) {
+ if (type == cm.first)
+ // defined as default or
specific type
+ 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 (type & ENGINE_TYPE_AUTHORYEAR)
+ if (type & ENGINE_TYPE_AUTHORYEAR && (type !=
ENGINE_TYPE_DEFAULT || !aydefined))
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;
- if (type & ENGINE_TYPE_DEFAULT)
+ if (type == ENGINE_TYPE_DEFAULT)
cite_macros_[ENGINE_TYPE_DEFAULT][etype] = definition;
}
} else {
bool defined = false;
+ bool aydefined = false;
+ bool numdefined = false;
// Check if the format is already def'ed
for (auto const & cm : cite_formats_) {
if (!(type & cm.first))
continue;
- if (cm.second.find(etype) != cm.second.end())
- defined = true;
+ if (cm.second.find(etype) != cm.second.end()) {
+ if (type == cm.first)
+ // defined as default or
specific type
+ 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 (type & ENGINE_TYPE_AUTHORYEAR)
+ if (type & ENGINE_TYPE_AUTHORYEAR && (type !=
ENGINE_TYPE_DEFAULT || !aydefined))
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;
- if (type & ENGINE_TYPE_DEFAULT)
+ if (type == ENGINE_TYPE_DEFAULT)
cite_formats_[ENGINE_TYPE_DEFAULT][etype] = definition;
}
}