From df0d7c00499546c2cddf92d8385f372df1973ae6 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Fri, 19 Apr 2019 09:04:23 +0200 Subject: [PATCH] Do not owerwrite specific CiteFormat def with default def amends 5996b2e373544 and fixes natbib numerical display --- src/TextClass.cpp | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 8003888635..0dd44340dc 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; } }