]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBibitem.cpp
Fix empty width support for Box inset
[lyx.git] / src / insets / InsetBibitem.cpp
index 3aaaceacbdd8d954fb53fcd1b692b4f3f75e8dd9..2840ad5c8fff621f51992f53c8595845513940d3 100644 (file)
@@ -177,8 +177,7 @@ void InsetBibitem::doDispatch(Cursor & cur, FuncRequest & cmd)
                setParam("label", p["label"]);
                if (p["key"] != old_key) {
                        updateCommand(p["key"]);
-                       cur.bv().buffer().changeRefsIfUnique(old_key,
-                               params()["key"], CITE_CODE);
+                       cur.bv().buffer().changeRefsIfUnique(old_key, params()["key"]);
                        cur.forceBufferUpdate();
                        buffer().invalidateBibinfoCache();
                }
@@ -205,6 +204,9 @@ void InsetBibitem::read(Lexer & lex)
 
 docstring InsetBibitem::bibLabel() const
 {
+       BufferParams const & bp = buffer().masterBuffer()->params();
+       if (bp.citeEngineType() == ENGINE_TYPE_NUMERICAL)
+               return autolabel_;
        docstring const & label = getParam("label");
        return label.empty() ? autolabel_ : label;
 }
@@ -216,7 +218,8 @@ docstring InsetBibitem::screenLabel() const
 }
 
 
-int InsetBibitem::plaintext(odocstream & os, OutputParams const &) const
+int InsetBibitem::plaintext(odocstringstream & os,
+        OutputParams const &, size_t) const
 {
        odocstringstream oss;
        oss << '[' << bibLabel() << "] ";
@@ -231,6 +234,10 @@ int InsetBibitem::plaintext(odocstream & os, OutputParams const &) const
 // ale070405
 docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
 {
+       BufferParams const & bp = buffer.masterBuffer()->params();
+       if (bp.citeEngineType() == ENGINE_TYPE_NUMERICAL)
+               return from_ascii("99");
+
        int w = 0;
 
        InsetBibitem const * bitem = 0;
@@ -291,20 +298,9 @@ docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
        }
 
        if (!lbl.empty()) {
-               docstring latex_lbl;
-               for (size_t n = 0; n < lbl.size(); ++n) {
-                       try {
-                               latex_lbl += runparams.encoding->latexChar(lbl[n]);
-                       } catch (EncodingException & /* e */) {
-                               if (runparams.dryrun) {
-                                       latex_lbl += "<" + _("LyX Warning: ")
-                                                 + _("uncodable character") + " '";
-                                       latex_lbl += docstring(1, lbl[n]);
-                                       latex_lbl += "'>";
-                               }
-                       }
-               }
-               return latex_lbl;
+               pair<docstring, docstring> latex_lbl =
+                       runparams.encoding->latexString(lbl, runparams.dryrun);
+               return latex_lbl.first;
        }
 
        return from_ascii("99");
@@ -318,6 +314,17 @@ void InsetBibitem::collectBibKeys(InsetIterator const & it) const
        BibTeXInfo keyvalmap(false);
        keyvalmap.key(key);
        keyvalmap.label(label);
+
+       BufferParams const & bp = buffer().masterBuffer()->params();
+       Counters & counters = bp.documentClass().counters();
+       docstring const bibitem = from_ascii("bibitem");
+       if (bp.citeEngineType() == ENGINE_TYPE_NUMERICAL || getParam("label").empty()) {
+               if (counters.hasCounter(bibitem))
+                       counters.step(bibitem, InternalUpdate);
+               string const & lang = it.paragraph().getParLanguage(bp)->code();
+               keyvalmap.setCiteNumber(counters.theCounter(bibitem, lang));
+       }
+
        DocIterator doc_it(it);
        doc_it.forwardPos();
        keyvalmap[from_ascii("ref")] = doc_it.paragraph().asString(
@@ -332,7 +339,7 @@ void InsetBibitem::updateBuffer(ParIterator const & it, UpdateType utype)
        BufferParams const & bp = buffer().masterBuffer()->params();
        Counters & counters = bp.documentClass().counters();
        docstring const bibitem = from_ascii("bibitem");
-       if (getParam("label").empty()) {
+       if (bp.citeEngineType() == ENGINE_TYPE_NUMERICAL || getParam("label").empty()) {
                if (counters.hasCounter(bibitem))
                        counters.step(bibitem, utype);
                string const & lang = it.paragraph().getParLanguage(bp)->code();
@@ -351,7 +358,8 @@ docstring InsetBibitem::xhtml(XHTMLStream & xs, OutputParams const &) const
        // need to use "name" anyway, eventually, because some browsers do not
        // handle jumping to ids. If we don't do that, though, we can just put the
        // id into the span tag.
-       string const attrs = "id='" + to_utf8(getParam("label")) + "'";
+       string const attrs =
+               "id='LyXCite-" + to_utf8(html::cleanAttr(getParam("key"))) + "'";
        xs << html::CompTag("a", attrs);
        xs << html::StartTag("span", "class='bibitemlabel'");
        xs << bibLabel();