#include "output_xhtml.h"
#include "OutputParams.h"
#include "PDFOptions.h"
+#include "texstream.h"
#include "TextClass.h"
#include "frontends/alert.h"
Alert::warning(message.title_, message.details_);
cur.noScreenUpdate();
} else
- throw message;
+ throw;
break;
}
docstring InsetBibtex::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/) const
{
- docstring item = from_ascii("* ");
- docstring tip = _("Databases:") + "\n";
+ docstring tip = _("Databases:");
vector<docstring> bibfilelist = getVectorFromString(getParam("bibfiles"));
- if (bibfilelist.empty()) {
- tip += item;
- tip += _("none");
- } else {
- vector<docstring>::const_iterator it = bibfilelist.begin();
- vector<docstring>::const_iterator en = bibfilelist.end();
- for (; it != en; ++it) {
- tip += item;
- tip += *it + "\n";
- }
- }
+ tip += "<ul>";
+ if (bibfilelist.empty())
+ tip += "<li>" + _("none") + "</li>";
+ else
+ for (docstring const & bibfile : bibfilelist)
+ tip += "<li>" + bibfile + "</li>";
+ tip += "</ul>";
// Style-Options
bool toc = false;
style = split(style, bibtotoc, char_type(','));
}
- tip += _("Style File:") +"\n";
- tip += item;
- if (!style.empty())
- tip += style;
- else
- tip += _("none");
+ tip += _("Style File:");
+ tip += "<ul><li>" + (style.empty() ? _("none") : style) + "</li></ul>";
- tip += "\n" + _("Lists:") + " ";
+ tip += _("Lists:") + " ";
docstring btprint = getParam("btprint");
if (btprint == "btPrintAll")
tip += _("all references");
if (style == "default")
style = buffer().params().biblio_style;
- if (!style.empty()) {
+ if (!style.empty() && !buffer().params().use_bibtopic) {
string base = normalizeName(buffer(), runparams, style, ".bst");
FileName const try_in_file =
makeAbsPath(base + ".bst", buffer().filePath());
}
if (!db_out.empty() && buffer().params().use_bibtopic) {
- os << "\\begin{btSect}{" << db_out << "}\n";
+ os << "\\begin{btSect}";
+ if (!style.empty())
+ os << "[" << style << "]";
+ os << "{" << db_out << "}\n";
docstring btprint = getParam("btprint");
if (btprint.empty())
// default
}
-int InsetBibtex::plaintext(odocstream & os, OutputParams const &) const
+int InsetBibtex::plaintext(odocstringstream & os,
+ OutputParams const & op, size_t max_length) const
{
+ docstring const reflabel = buffer().B_("References");
+
+ // We could output more information here, e.g., what databases are included
+ // and information about options. But I don't necessarily see any reason to
+ // do this right now.
+ if (op.for_tooltip || op.for_toc || op.for_search) {
+ os << '[' << reflabel << ']' << '\n';
+ return PLAINTEXT_NEWLINE;
+ }
+
BiblioInfo bibinfo = buffer().masterBibInfo();
bibinfo.makeCitationLabels(buffer());
vector<docstring> const & cites = bibinfo.citedEntries();
- CiteEngineType const engine_type = buffer().params().citeEngineType();
- bool const numbers = (engine_type == ENGINE_TYPE_NUMERICAL);
+ size_t start_size = os.str().size();
docstring refoutput;
- docstring const reflabel = buffer().B_("References");
-
refoutput += reflabel + "\n\n";
// Now we loop over the entries
vector<docstring>::const_iterator vit = cites.begin();
vector<docstring>::const_iterator const ven = cites.end();
for (; vit != ven; ++vit) {
+ if (start_size + refoutput.size() >= max_length)
+ break;
BiblioInfo::const_iterator const biit = bibinfo.find(*vit);
if (biit == bibinfo.end())
continue;
BibTeXInfo const & entry = biit->second;
- docstring citekey;
- if (numbers)
- citekey = entry.citeNumber();
- else {
- docstring const auth = entry.getAbbreviatedAuthor(buffer(), false);
- // we do it this way so as to access the xref, if necessary
- // note that this also gives us the modifier
- docstring const year = bibinfo.getYear(*vit, buffer(), true);
- if (!auth.empty() && !year.empty())
- citekey = auth + ' ' + year;
- }
- if (citekey.empty()) {
- citekey = entry.label();
- if (citekey.empty())
- citekey = entry.key();
- }
- refoutput += "[" + citekey + "] ";
+ refoutput += "[" + entry.label() + "] ";
// FIXME Right now, we are calling BibInfo::getInfo on the key,
// which will give us all the cross-referenced info. But for every
// entry, so there's a lot of repitition. This should be fixed.
docstring InsetBibtex::xhtml(XHTMLStream & xs, OutputParams const &) const
{
BiblioInfo const & bibinfo = buffer().masterBibInfo();
- vector<docstring> const & cites = bibinfo.citedEntries();
- CiteEngineType const engine_type = buffer().params().citeEngineType();
- bool const numbers = (engine_type == ENGINE_TYPE_NUMERICAL);
+ bool const all_entries = getParam("btprint") == "btPrintAll";
+ vector<docstring> const & cites =
+ all_entries ? bibinfo.getKeys() : bibinfo.citedEntries();
docstring const reflabel = buffer().B_("References");
BiblioInfo::const_iterator const biit = bibinfo.find(*vit);
if (biit == bibinfo.end())
continue;
+
BibTeXInfo const & entry = biit->second;
- xs << html::StartTag("div", "class='bibtexentry'");
- // FIXME XHTML
- // The same name/id problem we have elsewhere.
- string const attr =
- "id='LyXCite-" + to_utf8(html::cleanAttr(entry.key())) + "'";
- xs << html::CompTag("a", attr);
- docstring citekey;
- if (numbers)
- citekey = entry.citeNumber();
- else {
- docstring const auth = entry.getAbbreviatedAuthor(buffer(), false);
- // we do it this way so as to access the xref, if necessary
- // note that this also gives us the modifier
- docstring const year = bibinfo.getYear(*vit, buffer(), true);
- if (!auth.empty() && !year.empty())
- citekey = auth + ' ' + year;
+ string const attr = "class='bibtexentry' id='LyXCite-"
+ + to_utf8(html::cleanAttr(entry.key())) + "'";
+ xs << html::StartTag("div", attr);
+
+ // don't print labels if we're outputting all entries
+ if (!all_entries) {
+ xs << html::StartTag("span", "class='bibtexlabel'")
+ << entry.label()
+ << html::EndTag("span");
}
- if (citekey.empty()) {
- citekey = entry.label();
- if (citekey.empty())
- citekey = entry.key();
- }
- xs << html::StartTag("span", "class='bibtexlabel'")
- << citekey
- << html::EndTag("span");
+
// FIXME Right now, we are calling BibInfo::getInfo on the key,
// which will give us all the cross-referenced info. But for every
// entry, so there's a lot of repitition. This should be fixed.
}
+void InsetBibtex::write(ostream & os) const
+{
+ params().Write(os, &buffer());
+}
+
+
string InsetBibtex::contextMenuName() const
{
return "context-bibtex";