]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetBibtex.cpp
Cocoa based Qt-4.6 needs to paint every character separately to match metrics computa...
[lyx.git] / src / insets / InsetBibtex.cpp
index ae20d9f22d9cc922be908488fe9268894c6fac19..c54abb7624c240d37e294596e8866fd47c74e13a 100644 (file)
@@ -16,6 +16,7 @@
 #include "BiblioInfo.h"
 #include "Buffer.h"
 #include "BufferParams.h"
+#include "Cursor.h"
 #include "DispatchResult.h"
 #include "Encoding.h"
 #include "Format.h"
@@ -102,7 +103,8 @@ void InsetBibtex::doDispatch(Cursor & cur, FuncRequest & cmd)
                                throw message;
                        break;
                }
-               //
+
+               cur.recordUndo();
                setParams(p);
                buffer().invalidateBibfileCache();
                cur.forceBufferUpdate();
@@ -233,7 +235,7 @@ static string normalizeName(Buffer const & buffer,
 }
 
 
-int InsetBibtex::latex(odocstream & os, OutputParams const & runparams) const
+void InsetBibtex::latex(otexstream & os, OutputParams const & runparams) const
 {
        // the sequence of the commands:
        // 1. \bibliographystyle{style}
@@ -326,9 +328,6 @@ int InsetBibtex::latex(odocstream & os, OutputParams const & runparams) const
                        style = split(style, bibtotoc, ',');
        }
 
-       // line count
-       int nlines = 0;
-
        if (!style.empty()) {
                string base = normalizeName(buffer(), runparams, style, ".bst");
                FileName const try_in_file = 
@@ -356,7 +355,6 @@ int InsetBibtex::latex(odocstream & os, OutputParams const & runparams) const
                os << "\\bibliographystyle{"
                   << from_utf8(latex_path(normalizeName(buffer(), runparams, base, ".bst")))
                   << "}\n";
-               nlines += 1;
        }
 
        // Post this warning only once.
@@ -376,7 +374,6 @@ int InsetBibtex::latex(odocstream & os, OutputParams const & runparams) const
                        btprint = from_ascii("btPrintCited");
                os << "\\" << btprint << "\n"
                   << "\\end{btSect}\n";
-               nlines += 3;
        }
 
        // bibtotoc-Option
@@ -394,13 +391,9 @@ int InsetBibtex::latex(odocstream & os, OutputParams const & runparams) const
                docstring btprint = getParam("btprint");
                if (btprint == "btPrintAll") {
                        os << "\\nocite{*}\n";
-                       nlines += 1;
                }
                os << "\\bibliography{" << db_out << "}\n";
-               nlines += 1;
        }
-
-       return nlines;
 }
 
 
@@ -554,13 +547,13 @@ namespace {
                                return false;
 
                        // check for field type
-                       if (isDigit(ch)) {
+                       if (isDigitASCII(ch)) {
 
                                // read integer value
                                do {
                                        val += ch;
                                        ifs.get(ch);
-                               } while (ifs && isDigit(ch));
+                               } while (ifs && isDigitASCII(ch));
 
                                if (!ifs)
                                        return false;
@@ -668,9 +661,13 @@ namespace {
 }
 
 
-// This method returns a comma separated list of Bibtex entries
-void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist,
-       InsetIterator const & /*di*/) const
+void InsetBibtex::collectBibKeys(InsetIterator const & /*di*/) const
+{
+       parseBibTeXFiles();
+}
+
+
+void InsetBibtex::parseBibTeXFiles() const
 {
        // This bibtex parser is a first step to parse bibtex files
        // more precisely.
@@ -690,6 +687,9 @@ void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist,
        // We don't restrict keys to ASCII in LyX, since our own
        // InsetBibitem can generate non-ASCII keys, and nonstandard
        // 8bit clean bibtex forks exist.
+
+       BiblioInfo keylist;
+
        support::FileNameList const files = getBibFiles();
        support::FileNameList::const_iterator it = files.begin();
        support::FileNameList::const_iterator en = files.end();
@@ -855,6 +855,8 @@ void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist,
                        } //< else (citation entry)
                } //< searching '@'
        } //< for loop over files
+
+       buffer().addBiblioInfo(keylist);
 }
 
 
@@ -975,18 +977,18 @@ docstring InsetBibtex::xhtml(XHTMLStream & xs, OutputParams const &) const
                // which will give us all the cross-referenced info. But for every
                // entry, so there's a lot of repitition. This should be fixed.
                xs << html::StartTag("span", "class='bibtexinfo'") 
-                       << XHTMLStream::NextRaw()
-                       << bibinfo.getInfo(entry.key(), buffer(), true)
-                       << html::EndTag("span")
-                       << html::EndTag("div");
-               xs.cr();
+                  << XHTMLStream::ESCAPE_AND
+                  << bibinfo.getInfo(entry.key(), buffer(), true)
+                  << html::EndTag("span")
+                  << html::EndTag("div")
+                  << html::CR();
        }
        xs << html::EndTag("div");
        return docstring();
 }
 
 
-docstring InsetBibtex::contextMenu(BufferView const &, int, int) const
+docstring InsetBibtex::contextMenuName() const
 {
        return from_ascii("context-bibtex");
 }