]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetBibtex.cpp
Support for multiple bibliographies
[features.git] / src / insets / InsetBibtex.cpp
index 4ead8663492ef6ac631715b5997323210af1052b..05a154466a642a62eb75d02ba714161efc0bccc5 100644 (file)
@@ -149,7 +149,7 @@ void InsetBibtex::editDatabases() const
 
        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));
@@ -172,7 +172,7 @@ void InsetBibtex::editDatabases() const
 
 bool InsetBibtex::usingBiblatex() const
 {
-       return buffer().params().useBiblatex();
+       return buffer().masterParams().useBiblatex();
 }
 
 
@@ -206,12 +206,12 @@ docstring InsetBibtex::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/)
                        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")
@@ -223,8 +223,17 @@ docstring InsetBibtex::toolTip(BufferView const & /*bv*/, int /*x*/, int /*y*/)
                        tip += _("included in TOC");
                }
        } 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 />";
@@ -250,6 +259,8 @@ void InsetBibtex::latex(otexstream & os, OutputParams const & runparams) const
        // 4. \end{btSect}
        // With Biblatex:
        // \printbibliography[biblatexopts]
+       // or
+       // \bibbysection[biblatexopts] - if btprint is "bibbysection"
 
        string style = to_utf8(getParam("options")); // maybe empty! and with bibtotoc
        string bibtotoc;
@@ -269,7 +280,10 @@ void InsetBibtex::latex(otexstream & os, OutputParams const & runparams) const
                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";
@@ -279,9 +293,9 @@ void InsetBibtex::latex(otexstream & os, OutputParams const & runparams) const
                        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();
@@ -316,7 +330,7 @@ void InsetBibtex::latex(otexstream & os, OutputParams const & runparams) const
                                                      "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 << "]";
@@ -329,17 +343,17 @@ void InsetBibtex::latex(otexstream & os, OutputParams const & runparams) const
                           << "\\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";
@@ -651,7 +665,7 @@ void InsetBibtex::parseBibTeXFiles() const
        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;
@@ -862,7 +876,7 @@ bool InsetBibtex::delDatabase(docstring const & db)
 
 void InsetBibtex::validate(LaTeXFeatures & features) const
 {
-       if (features.bufferParams().use_bibtopic)
+       if (features.buffer().masterParams().useBibtopic())
                features.require("bibtopic");
        // FIXME XHTML
        // It'd be better to be able to get this from an InsetLayout, but at present