X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetNomencl.cpp;h=880f0fff52aec86df97c015b3ef9995e00c6af15;hb=9176e60b7bcab3e355521a86ddb4c2778cd9b29e;hp=f7f740aa6f4673fbde19818cee36ff27f2141c11;hpb=4a6efbb102c98ce319bf3a00dd4883b67b7b4b57;p=lyx.git diff --git a/src/insets/InsetNomencl.cpp b/src/insets/InsetNomencl.cpp index f7f740aa6f..880f0fff52 100644 --- a/src/insets/InsetNomencl.cpp +++ b/src/insets/InsetNomencl.cpp @@ -31,6 +31,7 @@ #include "OutputParams.h" #include "output_xhtml.h" #include "sgml.h" +#include "texstream.h" #include "TocBackend.h" #include "frontends/FontMetrics.h" @@ -64,9 +65,12 @@ ParamInfo const & InsetNomencl::findInfo(string const & /* cmdName */) if (param_info_.empty()) { param_info_.add("prefix", ParamInfo::LATEX_OPTIONAL); param_info_.add("symbol", ParamInfo::LATEX_REQUIRED, - ParamInfo::HANDLING_LATEXIFY); + ParamInfo::ParamHandling(ParamInfo::HANDLING_LATEXIFY + | ParamInfo::HANDLING_INDEX_ESCAPE)); param_info_.add("description", ParamInfo::LATEX_REQUIRED, - ParamInfo::HANDLING_LATEXIFY); + ParamInfo::ParamHandling(ParamInfo::HANDLING_LATEXIFY + | ParamInfo::HANDLING_INDEX_ESCAPE)); + param_info_.add("literal", ParamInfo::LYX_INTERNAL); } return param_info_; } @@ -75,12 +79,8 @@ ParamInfo const & InsetNomencl::findInfo(string const & /* cmdName */) docstring InsetNomencl::screenLabel() const { size_t const maxLabelChars = 25; - docstring label = _("Nom: ") + getParam("symbol"); - if (label.size() > maxLabelChars) { - label.erase(maxLabelChars - 3); - label += "..."; - } + support::truncateWithEllipsis(label, maxLabelChars); return label; } @@ -96,6 +96,14 @@ docstring InsetNomencl::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/) } +int InsetNomencl::plaintext(odocstringstream & os, + OutputParams const &, size_t) const +{ + docstring s = "[" + getParam("symbol") + ": " + getParam("description") + "]"; + os << s; + return s.size(); +} + int InsetNomencl::docbook(odocstream & os, OutputParams const &) const { @@ -129,13 +137,17 @@ int InsetNomencl::docbookGlossary(odocstream & os) const void InsetNomencl::validate(LaTeXFeatures & features) const { features.require("nomencl"); + InsetCommand::validate(features); } -void InsetNomencl::addToToc(DocIterator const & cpit, bool output_active) const +void InsetNomencl::addToToc(DocIterator const & cpit, bool output_active, + UpdateType, TocBackend & backend) const { docstring const str = getParam("symbol"); - buffer().tocBackend().toc("nomencl").push_back(TocItem(cpit, 0, str, output_active)); + TocBuilder & b = backend.builder("nomencl"); + b.pushItem(cpit, str, output_active); + b.pop(); } @@ -152,7 +164,7 @@ InsetPrintNomencl::InsetPrintNomencl(Buffer * buf, InsetCommandParams const & p) ParamInfo const & InsetPrintNomencl::findInfo(string const & /* cmdName */) { - // The symbol width is set via nomencl's \nomlabelwidth in + // The symbol width is set via nomencl's \nomlabelwidth in // InsetPrintNomencl::latex and not as optional parameter of // \printnomenclature static ParamInfo param_info_; @@ -174,7 +186,7 @@ docstring InsetPrintNomencl::screenLabel() const struct NomenclEntry { - NomenclEntry() {} + NomenclEntry() : par(0) {} NomenclEntry(docstring s, docstring d, Paragraph const * p) : symbol(s), desc(d), par(p) {} @@ -190,11 +202,11 @@ typedef map EntryMap; docstring InsetPrintNomencl::xhtml(XHTMLStream &, OutputParams const & op) const { - Toc const & toc = buffer().tocBackend().toc("nomencl"); + shared_ptr toc = buffer().tocBackend().toc("nomencl"); EntryMap entries; - Toc::const_iterator it = toc.begin(); - Toc::const_iterator const en = toc.end(); + Toc::const_iterator it = toc->begin(); + Toc::const_iterator const en = toc->end(); for (; it != en; ++it) { DocIterator dit = it->dit(); Paragraph const & par = dit.innerParagraph(); @@ -204,26 +216,26 @@ docstring InsetPrintNomencl::xhtml(XHTMLStream &, OutputParams const & op) const InsetCommand const * ic = inset->asInsetCommand(); if (!ic) return docstring(); - + // FIXME We need a link to the paragraph here, so we // need some kind of struct. docstring const symbol = ic->getParam("symbol"); docstring const desc = ic->getParam("description"); docstring const prefix = ic->getParam("prefix"); docstring const sortas = prefix.empty() ? symbol : prefix; - + entries[sortas] = NomenclEntry(symbol, desc, &par); } - + if (entries.empty()) return docstring(); - + // we'll use our own stream, because we are going to defer everything. // that's how we deal with the fact that we're probably inside a standard // paragraph, and we don't want to be. odocstringstream ods; XHTMLStream xs(ods); - + InsetLayout const & il = getLayout(); string const & tag = il.htmltag(); docstring toclabel = translateIfPossible(from_ascii("Nomenclature"), @@ -231,12 +243,12 @@ docstring InsetPrintNomencl::xhtml(XHTMLStream &, OutputParams const & op) const xs << html::StartTag("div", "class='nomencl'") << html::StartTag(tag, "class='nomencl'") - << toclabel + << toclabel << html::EndTag(tag) << html::CR() << html::StartTag("dl") << html::CR(); - + EntryMap::const_iterator eit = entries.begin(); EntryMap::const_iterator const een = entries.end(); for (; eit != een; ++eit) { @@ -352,8 +364,11 @@ docstring nomenclWidest(Buffer const & buffer, OutputParams const & runparams) if (inset->lyxCode() != NOMENCL_CODE) continue; nomencl = static_cast(inset); - docstring const symbol = - nomencl->getParam("symbol"); + // Use proper formatting. We do not escape makeindex chars here + docstring const symbol = nomencl ? + nomencl->params().prepareCommand(runparams, nomencl->getParam("symbol"), + ParamInfo::HANDLING_LATEXIFY) + : docstring(); // This is only an approximation, // but the best we can get. int const wx = use_gui ? @@ -366,19 +381,9 @@ docstring nomenclWidest(Buffer const & buffer, OutputParams const & runparams) } } // return the widest (or an empty) string - if (symb.empty()) - return symb; - - // we have to encode the string properly - pair latex_symb = - runparams.encoding->latexString(symb, runparams.dryrun); - if (!latex_symb.second.empty()) - LYXERR0("Omitting uncodable characters '" - << latex_symb.second - << "' in nomencl widest string!"); - return latex_symb.first; + return symb; } -} // namespace anon +} // namespace void InsetPrintNomencl::latex(otexstream & os, OutputParams const & runparams_in) const @@ -401,7 +406,8 @@ void InsetPrintNomencl::latex(otexstream & os, OutputParams const & runparams_in << from_ascii(getCmdName()) << '[' << from_ascii(width) - << "]{}"; + << "]" + << termcmd; return; } // output the command \printnomenclature @@ -411,6 +417,7 @@ void InsetPrintNomencl::latex(otexstream & os, OutputParams const & runparams_in void InsetPrintNomencl::validate(LaTeXFeatures & features) const { + features.useInsetLayout(getLayout()); features.require("nomencl"); }