X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCitation.cpp;h=8571a28643b5c14e93c22eedbe47a0110cf7c55b;hb=cf6ff2cac79d09adafa63e3a1ec02dfb09f707b9;hp=9004c9819a38b4ebb1c702bef1137b0f9331d360;hpb=68ab4023ccdf26022a053adc1bfaecef9fef58f4;p=lyx.git diff --git a/src/insets/InsetCitation.cpp b/src/insets/InsetCitation.cpp index 9004c9819a..8571a28643 100644 --- a/src/insets/InsetCitation.cpp +++ b/src/insets/InsetCitation.cpp @@ -55,7 +55,10 @@ InsetCitation::InsetCitation(Buffer * buf, InsetCommandParams const & p) InsetCitation::~InsetCitation() { if (isBufferLoaded()) - buffer().removeBiblioTempFiles(); + /* We do not use buffer() because Coverity believes that this + * may throw an exception. Actually this code path is not + * taken when buffer_ == 0 */ + buffer_->removeBiblioTempFiles(); } @@ -66,11 +69,16 @@ ParamInfo const & InsetCitation::findInfo(string const & /* cmdName */) // we have to allow both here. InsetCitation takes care that // LaTeX output is nevertheless correct. if (param_info_.empty()) { - param_info_.add("after", ParamInfo::LATEX_OPTIONAL); - param_info_.add("before", ParamInfo::LATEX_OPTIONAL); + param_info_.add("after", ParamInfo::LATEX_OPTIONAL, + ParamInfo::HANDLING_LATEXIFY); + param_info_.add("before", ParamInfo::LATEX_OPTIONAL, + ParamInfo::HANDLING_LATEXIFY); param_info_.add("key", ParamInfo::LATEX_REQUIRED); - param_info_.add("pretextlist", ParamInfo::LATEX_OPTIONAL); - param_info_.add("posttextlist", ParamInfo::LATEX_OPTIONAL); + param_info_.add("pretextlist", ParamInfo::LATEX_OPTIONAL, + ParamInfo::HANDLING_LATEXIFY); + param_info_.add("posttextlist", ParamInfo::LATEX_OPTIONAL, + ParamInfo::HANDLING_LATEXIFY); + param_info_.add("literal", ParamInfo::LYX_INTERNAL); } return param_info_; } @@ -144,6 +152,7 @@ void InsetCitation::doDispatch(Cursor & cur, FuncRequest & cmd) cmd = FuncRequest(LFUN_INSET_MODIFY, "changetype " + newcmdname); } } + // fall through default: InsetCommand::doDispatch(cur, cmd); } @@ -451,7 +460,7 @@ void InsetCitation::addToToc(DocIterator const & cpit, bool output_active, UpdateType, TocBackend & backend) const { // NOTE - // BiblioInfo::collectCitedEntries() uses the TOC to collect the citations + // BiblioInfo::collectCitedEntries() uses the TOC to collect the citations // from the document. It is used indirectly, via BiblioInfo::makeCitationLables, // by both XHTML and plaintext output. So, if we change what goes into the TOC, // then we will also need to change that routine. @@ -568,27 +577,22 @@ void InsetCitation::latex(otexstream & os, OutputParams const & runparams) const if (qualified) os << "s"; - docstring before = getParam("before"); - docstring after = getParam("after"); + docstring before = params().prepareCommand(runparams, getParam("before"), + param_info_["before"].handling()); + docstring after = params().prepareCommand(runparams, getParam("after"), + param_info_["after"].handling()); if (!before.empty() && cs.textBefore) { - if (qualified) { - if (contains(before, '(') || contains(before, ')')) - // protect parens - before = '{' + before + '}'; - if (contains(after, '(') || contains(after, ')')) - // protect parens - after = '{' + after + '}'; - os << '(' << before << ")(" << after << ')'; - } else - os << '[' << before << "][" << after << ']'; + if (qualified) + os << '(' << protectArgument(before, '(', ')') + << ")(" << protectArgument(after, '(', ')') << ')'; + else + os << '[' << protectArgument(before) << "][" + << protectArgument(after) << ']'; } else if (!after.empty() && cs.textAfter) { - if (qualified) { - if (contains(after, '(') || contains(after, ')')) - // protect parens - after = '{' + after + '}'; - os << '(' << after << ')'; - } else - os << '[' << after << ']'; + if (qualified) + os << '(' << protectArgument(after, '(', ')') << ')'; + else + os << '[' << protectArgument(after) << ']'; } if (!bi.isBibtex(key)) @@ -599,12 +603,15 @@ void InsetCitation::latex(otexstream & os, OutputParams const & runparams) const map pres = getQualifiedLists(getParam("pretextlist")); map posts = getQualifiedLists(getParam("posttextlist")); for (docstring const & k: keys) { - docstring const bef = pres[k]; - docstring const aft = posts[k]; + docstring bef = params().prepareCommand(runparams, pres[k], + param_info_["pretextlist"].handling()); + docstring aft = params().prepareCommand(runparams, posts[k], + param_info_["posttextlist"].handling()); if (!bef.empty()) - os << '[' << bef << "][" << aft << ']'; + os << '[' << protectArgument(bef) + << "][" << protectArgument(aft) << ']'; else if (!aft.empty()) - os << '[' << aft << ']'; + os << '[' << protectArgument(aft) << ']'; os << '{' << k << '}'; } } else