X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=0dd44340dcf2ee861e589b17dcfe1b5f05f73cea;hb=175711046db2b986550318fa78d901628de28cb8;hp=2fb1bd28a2139b1986ed3519a648141682aa4cb5;hpb=5e385d0513069d53e18ff0254ecf3cdf92fb4587;p=lyx.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 2fb1bd28a2..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; } } @@ -1927,7 +1949,9 @@ Layout const & DocumentClass::htmlTOCLayout() const string const DocumentClass::getCiteFormat(CiteEngineType const & type, string const & entry, bool const punct, string const & fallback) const { - string default_format = "{%fullnames:author%[[%fullnames:author%, ]][[{%fullnames:editor%[[%fullnames:editor%, ed., ]]}]]}\"%title%\"{%journal%[[, {!!}%journal%{!!}]][[{%publisher%[[, %publisher%]][[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}"; + string default_format = "{%fullnames:author%[[%fullnames:author%, ]][[{%fullnames:editor%[[%fullnames:editor%, ed., ]]}]]}" + "\"%title%\"{%journal%[[, {!!}%journal%{!!}]][[{%publisher%[[, %publisher%]]" + "[[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}"; if (punct) default_format += ".";