]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBibitem.cpp
Pure HTML output for math macros.
[lyx.git] / src / insets / InsetBibitem.cpp
index 5eb0d448b4f646ef93430fcf7a3dcbda698eb1f8..434bd4c8b748c7721218ec362a2f7c455d40d6ca 100644 (file)
 #include "BufferView.h"
 #include "Counters.h"
 #include "DispatchResult.h"
+#include "Encoding.h"
 #include "FuncRequest.h"
 #include "InsetIterator.h"
 #include "InsetList.h"
 #include "Language.h" 
 #include "Lexer.h"
 #include "output_xhtml.h"
+#include "OutputParams.h"
 #include "Paragraph.h"
 #include "ParagraphList.h"
 #include "ParIterator.h"
@@ -34,6 +36,7 @@
 #include "frontends/alert.h"
 
 #include "support/convert.h"
+#include "support/debug.h"
 #include "support/docstream.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
@@ -59,7 +62,7 @@ InsetBibitem::InsetBibitem(Buffer * buf, InsetCommandParams const & p)
 
 InsetBibitem::~InsetBibitem()
 {
-       if (isBufferValid())
+       if (isBufferLoaded())
                buffer_->invalidateBibinfoCache();
 }
 
@@ -72,7 +75,6 @@ void InsetBibitem::initView()
 
 void InsetBibitem::updateCommand(docstring const & new_key, bool)
 {
-       docstring const old_key = getParam("key");
        docstring key = new_key;
 
        vector<docstring> bibkeys = buffer().masterBibInfo().getKeys();
@@ -92,7 +94,7 @@ void InsetBibitem::updateCommand(docstring const & new_key, bool)
        }
        setParam("key", key);
 
-       buffer().updateLabels();
+       buffer().updateBuffer();
 }
 
 
@@ -100,8 +102,10 @@ ParamInfo const & InsetBibitem::findInfo(string const & /* cmdName */)
 {
        static ParamInfo param_info_;
        if (param_info_.empty()) {
-               param_info_.add("label", ParamInfo::LATEX_OPTIONAL);
-               param_info_.add("key", ParamInfo::LATEX_REQUIRED);
+               param_info_.add("label", ParamInfo::LATEX_OPTIONAL,
+                               ParamInfo::HANDLING_LATEXIFY);
+               param_info_.add("key", ParamInfo::LATEX_REQUIRED,
+                               ParamInfo::HANDLING_ESCAPE);
        }
        return param_info_;
 }
@@ -173,7 +177,7 @@ int InsetBibitem::plaintext(odocstream & os, OutputParams const &) const
 
 
 // ale070405
-docstring bibitemWidest(Buffer const & buffer)
+docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
 {
        int w = 0;
 
@@ -234,8 +238,22 @@ docstring bibitemWidest(Buffer const & buffer)
                }
        }
 
-       if (!lbl.empty())
-               return lbl;
+       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;
+       }
 
        return from_ascii("99");
 }
@@ -254,13 +272,13 @@ void InsetBibitem::fillWithBibKeys(BiblioInfo & keys, InsetIterator const & it)
 
 
 // Update the counters of this inset and of its contents
-void InsetBibitem::updateLabels(ParIterator const & it, bool)
+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 (counters.hasCounter(bibitem) && getParam("label").empty()) {
-               counters.step(bibitem);
+               counters.step(bibitem, utype);
                string const & lang = it.paragraph().getParLanguage(bp)->code();
                autolabel_ = counters.theCounter(bibitem, lang);
        } else {
@@ -278,10 +296,10 @@ docstring InsetBibitem::xhtml(XHTMLStream & xs, OutputParams const &) const
        // 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("key")) + "'";
-       xs << CompTag("a", attrs);
-       xs << StartTag("span", "class='bibitemlabel'");
+       xs << html::CompTag("a", attrs);
+       xs << html::StartTag("span", "class='bibitemlabel'");
        xs << bibLabel();
-       xs << EndTag("span");
+       xs << html::EndTag("span");
        return docstring();
 }