InsetBibtex::~InsetBibtex()
{
if (isBufferLoaded()) {
- buffer().invalidateBibfileCache();
- buffer().removeBiblioTempFiles();
+ /* We do not use buffer() because Coverity believes that this
+ * may throw an exception. Actually this code path is not
+ * taken when buffer_ == 0 */
+ buffer_-> invalidateBibfileCache();
+ buffer_->removeBiblioTempFiles();
}
}
int nr_databases = bibfilelist.size();
if (nr_databases > 1) {
- docstring const engine = usingBiblatex() ? _("Biblatex") : _("BibTex");
+ docstring const engine = usingBiblatex() ? _("Biblatex") : _("BibTeX");
docstring message = bformat(_("The %1$s[[BibTeX/Biblatex]] inset includes %2$s databases.\n"
"If you proceed, all of them will be opened."),
engine, convert<docstring>(nr_databases));
vector<docstring>::const_iterator en = bibfilelist.end();
for (; it != en; ++it) {
FileName const bibfile = getBibTeXPath(*it, buffer());
- formats.edit(buffer(), bibfile,
- formats.getFormatFromFile(bibfile));
+ theFormats().edit(buffer(), bibfile,
+ theFormats().getFormatFromFile(bibfile));
}
}
bool InsetBibtex::usingBiblatex() const
{
- return buffer().params().useBiblatex();
+ return buffer().masterParams().useBiblatex();
}
style = split(style, bibtotoc, char_type(','));
}
+ docstring const btprint = getParam("btprint");
if (!usingBiblatex()) {
tip += _("Style File:");
tip += "<ul><li>" + (style.empty() ? _("none") : style) + "</li></ul>";
tip += _("Lists:") + " ";
- docstring btprint = getParam("btprint");
if (btprint == "btPrintAll")
tip += _("all references");
else if (btprint == "btPrintNotCited")
tip += ", ";
tip += _("included in TOC");
}
+ if (!buffer().parent()
+ && buffer().params().multibib == "child") {
+ tip += "<br />";
+ tip += _("Note: This bibliography is not output, since bibliographies in the master file "
+ "are not allowed with the setting 'Multiple bibliographies per child document'");
+ }
} else {
- if (toc)
- tip += _("Included in TOC");
+ tip += _("Lists:") + " ";
+ if (btprint == "bibbysection")
+ tip += _("all reference units");
+ else if (btprint == "btPrintAll")
+ tip += _("all references");
+ else
+ tip += _("all cited references");
+ if (toc) {
+ tip += ", ";
+ tip += _("included in TOC");
+ }
if (!getParam("biblatexopts").empty()) {
if (toc)
tip += "<br />";
// 4. \end{btSect}
// With Biblatex:
// \printbibliography[biblatexopts]
+ // or
+ // \bibbysection[biblatexopts] - if btprint is "bibbysection"
+
+ // chapterbib does not allow bibliographies in the master
+ if (!usingBiblatex() && !runparams.is_child
+ && buffer().params().multibib == "child")
+ return;
string style = to_utf8(getParam("options")); // maybe empty! and with bibtotoc
string bibtotoc;
docstring btprint = getParam("btprint");
if (btprint == "btPrintAll")
os << "\\nocite{*}\n";
- os << "\\printbibliography";
+ if (btprint == "bibbysection" && !buffer().masterParams().multibib.empty())
+ os << "\\bibbysection";
+ else
+ os << "\\printbibliography";
if (!opts.empty())
os << "[" << opts << "]";
os << "\n";
buffer().prepareBibFilePaths(runparams, getBibFiles(), false);
// Style options
if (style == "default")
- style = buffer().params().defaultBiblioStyle();
- if (!style.empty() && !buffer().params().use_bibtopic) {
- string base = buffer().prepareFileNameForLaTeX(style, ".bst", runparams.nice);
+ style = buffer().masterParams().defaultBiblioStyle();
+ if (!style.empty() && !buffer().masterParams().useBibtopic()) {
+ string base = buffer().masterBuffer()->prepareFileNameForLaTeX(style, ".bst", runparams.nice);
FileName const try_in_file =
makeAbsPath(base + ".bst", buffer().filePath());
bool const not_from_texmf = try_in_file.isReadableFile();
"BibTeX will be unable to find it."));
}
// Handle the bibtopic case
- if (!db_out.empty() && buffer().params().use_bibtopic) {
+ if (!db_out.empty() && buffer().masterParams().useBibtopic()) {
os << "\\begin{btSect}";
if (!style.empty())
os << "[" << style << "]";
<< "\\end{btSect}\n";
}
// bibtotoc option
- if (!bibtotoc.empty() && !buffer().params().use_bibtopic) {
+ if (!bibtotoc.empty() && !buffer().masterParams().useBibtopic()) {
// set label for hyperref, see http://www.lyx.org/trac/ticket/6470
- if (buffer().params().pdfoptions().use_hyperref)
+ if (buffer().masterParams().pdfoptions().use_hyperref)
os << "\\phantomsection";
- if (buffer().params().documentClass().hasLaTeXLayout("chapter"))
+ if (buffer().masterParams().documentClass().hasLaTeXLayout("chapter"))
os << "\\addcontentsline{toc}{chapter}{\\bibname}";
- else if (buffer().params().documentClass().hasLaTeXLayout("section"))
+ else if (buffer().masterParams().documentClass().hasLaTeXLayout("section"))
os << "\\addcontentsline{toc}{section}{\\refname}";
}
// The bibliography command
- if (!db_out.empty() && !buffer().params().use_bibtopic) {
+ if (!db_out.empty() && !buffer().masterParams().useBibtopic()) {
docstring btprint = getParam("btprint");
if (btprint == "btPrintAll") {
os << "\\nocite{*}\n";
support::FileNamePairList::const_iterator en = files.end();
for (; it != en; ++ it) {
ifdocstream ifs(it->second.toFilesystemEncoding().c_str(),
- ios_base::in, buffer().params().encoding().iconvName());
+ ios_base::in, buffer().masterParams().encoding().iconvName());
char_type ch;
VarMap strings;
void InsetBibtex::validate(LaTeXFeatures & features) const
{
- if (features.bufferParams().use_bibtopic)
+ BufferParams const & mparams = features.buffer().masterParams();
+ if (mparams.useBibtopic())
features.require("bibtopic");
+ else if (!mparams.useBiblatex() && mparams.multibib == "child")
+ features.require("chapterbib");
// FIXME XHTML
// It'd be better to be able to get this from an InsetLayout, but at present
// InsetLayouts do not seem really to work for things that aren't InsetTexts.
{
BiblioInfo const & bibinfo = buffer().masterBibInfo();
bool const all_entries = getParam("btprint") == "btPrintAll";
- vector<docstring> const & cites =
+ vector<docstring> const & cites =
all_entries ? bibinfo.getKeys() : bibinfo.citedEntries();
docstring const reflabel = buffer().B_("References");
continue;
BibTeXInfo const & entry = biit->second;
- string const attr = "class='bibtexentry' id='LyXCite-"
+ 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");
}
-
+
// 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.