#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"
#include "TextClass.h"
#include "frontends/alert.h"
#include "support/convert.h"
+#include "support/debug.h"
#include "support/docstream.h"
#include "support/gettext.h"
#include "support/lstrings.h"
docstring const key_prefix = from_ascii("key-");
-InsetBibitem::InsetBibitem(Buffer const & buf, InsetCommandParams const & p)
- : InsetCommand(p, "bibitem")
+InsetBibitem::InsetBibitem(Buffer * buf, InsetCommandParams const & p)
+ : InsetCommand(buf, p, "bibitem")
{
- Inset::setBuffer(const_cast<Buffer &>(buf));
buffer_->invalidateBibinfoCache();
if (getParam("key").empty())
setParam("key", key_prefix + convert<docstring>(++key_counter));
}
setParam("key", key);
- buffer().updateLabels();
+ buffer().updateBuffer();
}
{
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_;
}
// ale070405
-docstring bibitemWidest(Buffer const & buffer)
+docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams)
{
int w = 0;
}
}
- 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");
}
{
docstring const key = getParam("key");
BibTeXInfo keyvalmap(false);
- keyvalmap[from_ascii("label")] = getParam("label");
+ keyvalmap.label(bibLabel());
DocIterator doc_it(it);
doc_it.forwardPos();
keyvalmap[from_ascii("ref")] = doc_it.paragraph().asString();
}
-/// Update the counters of this inset and of its contents
-void InsetBibitem::updateLabels(ParIterator const &)
+// Update the counters of this inset and of its contents
+void InsetBibitem::updateBuffer(ParIterator const & it, UpdateType utype)
{
- Counters & counters = buffer().masterBuffer()->params().documentClass().counters();
+ 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);
- autolabel_ = counters.theCounter(bibitem);
+ counters.step(bibitem, utype);
+ string const & lang = it.paragraph().getParLanguage(bp)->code();
+ autolabel_ = counters.theCounter(bibitem, lang);
} else {
autolabel_ = from_ascii("??");
}
}
+docstring InsetBibitem::xhtml(XHTMLStream & xs, OutputParams const &) const
+{
+ // FIXME XHTML
+ // XHTML 1.1 doesn't have the "name" attribute for <a>, so we have to use
+ // the "id" atttribute to get the document to validate. Probably, we will
+ // 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("key")) + "'";
+ xs << html::CompTag("a", attrs);
+ xs << html::StartTag("span", "class='bibitemlabel'");
+ xs << bibLabel();
+ xs << html::EndTag("span");
+ return docstring();
+}
+
+
} // namespace lyx