]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetcite.C
parlist-a-1.diff
[lyx.git] / src / insets / insetcite.C
index 0105ddac3650503b22e5b667a38000360f7c55bf..8bd95bfdbea5f73c6cad53c8bd0767386521126c 100644 (file)
@@ -1,35 +1,24 @@
 /**
  * \file insetcite.C
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author Angus Leeming, a.leeming@ic.ac.uk
- * \author Herbert Voss, voss@lyx.org 2002-03-17
+ * \author Angus Leeming
+ * \author Herbert Voss
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "insetcite.h"
 #include "buffer.h"
 #include "BufferView.h"
 #include "LaTeXFeatures.h"
-#include "frontends/LyXView.h"
-#include "debug.h"
-#include "gettext.h"
 
 #include "frontends/controllers/biblio.h"
-#include "frontends/Dialogs.h"
 
-#include "support/filetools.h"
 #include "support/lstrings.h"
-#include "support/path.h"
-#include "support/os.h"
-#include "support/lstrings.h"
-#include "support/LAssert.h"
 
 #include <map>
 
@@ -49,20 +38,26 @@ string const getNatbibLabel(Buffer const * buffer,
                            string const & before, string const & after,
                            bool numerical)
 {
-       // Only reload the bibkeys if we have to...
-       map<Buffer const *, bool>::iterator lit = loading_buffer.find(buffer);
-       if (lit != loading_buffer.end())
-               loading_buffer[buffer] = true;
-
        typedef std::map<Buffer const *, biblio::InfoMap> CachedMap;
        static CachedMap cached_keys;
 
-       CachedMap::iterator kit = cached_keys.find(buffer);
+       // Only load the bibkeys once if we're loading up the buffer,
+       // else load them afresh each time.
+       map<Buffer const *, bool>::iterator lit = loading_buffer.find(buffer);
+       if (lit == loading_buffer.end())
+               loading_buffer[buffer] = true;
+
+       bool loadkeys = !loading_buffer[buffer];
+       if (!loadkeys) {
+               CachedMap::iterator kit = cached_keys.find(buffer);
+               loadkeys = kit == cached_keys.end();
+       }
 
-       if (!loading_buffer[buffer] || kit == cached_keys.end()) {
+       if (loadkeys) {
                // build the keylist
                typedef vector<std::pair<string, string> > InfoType;
-               InfoType bibkeys = buffer->getBibkeyList();
+               InfoType bibkeys;
+               buffer->fillWithBibKeys(bibkeys);
 
                InfoType::const_iterator bit  = bibkeys.begin();
                InfoType::const_iterator bend = bibkeys.end();
@@ -72,7 +67,7 @@ string const getNatbibLabel(Buffer const * buffer,
                        infomap[bit->first] = bit->second;
                }
                if (infomap.empty())
-               return string();
+                       return string();
 
                cached_keys[buffer] = infomap;
        }
@@ -123,9 +118,9 @@ string const getNatbibLabel(Buffer const * buffer,
        // puctuation mark separating citation entries.
        char const * const sep = ";";
 
-       string const op_str(string(1, ' ')  + string(1, op));
-       string const cp_str(string(1, cp)   + string(1, ' '));
-       string const sep_str(string(sep) + " ");
+       string const op_str(' ' + string(1, op));
+       string const cp_str(string(1, cp) + ' ');
+       string const sep_str(string(sep) + ' ');
 
        string label;
        vector<string> keys = getVectorFromString(keyList);
@@ -207,7 +202,7 @@ string const getBasicLabel(string const & keyList, string const & after)
 
        if (contains(keys, ",")) {
                // Final comma allows while loop to cover all keys
-               keys = ltrim(split(keys, label, ',')) + ",";
+               keys = ltrim(split(keys, label, ',')) + ',';
                while (contains(keys, ",")) {
                        string key;
                        keys = ltrim(split(keys, key, ','));
@@ -219,7 +214,7 @@ string const getBasicLabel(string const & keyList, string const & after)
        if (!after.empty())
                label += ", " + after;
 
-       return "[" + label + "]";
+       return '[' + label + ']';
 }
 
 } // anon namespace
@@ -230,6 +225,13 @@ InsetCitation::InsetCitation(InsetCommandParams const & p, bool)
 {}
 
 
+InsetCitation::~InsetCitation()
+{
+       InsetCommandMailer mailer("citation", *this);
+       mailer.hideDialog();
+}
+
+
 string const InsetCitation::generateLabel(Buffer const * buffer) const
 {
        string const before = string();
@@ -308,14 +310,21 @@ string const InsetCitation::getScreenLabel(Buffer const * buffer) const
 }
 
 
+void InsetCitation::setLoadingBuffer(Buffer const * buffer, bool state) const
+{
+       // Doesn't matter if there is no bv->buffer() entry in the map.
+       loading_buffer[buffer] = state;
+}
+
+
 void InsetCitation::edit(BufferView * bv, int, int, mouse_button::state)
 {
        // A call to edit() indicates that we're no longer loading the
        // buffer but doing some real work.
-       // Doesn't matter if there is no bv->buffer() entry in the map.
-       loading_buffer[bv->buffer()] = false;
+       setLoadingBuffer(bv->buffer(), false);
 
-       bv->owner()->getDialogs().showCitation(this);
+       InsetCommandMailer mailer("citation", *this);
+       mailer.showDialog(bv);
 }
 
 
@@ -353,6 +362,8 @@ int InsetCitation::latex(Buffer const * buffer, ostream & os,
                os << "cite";
 
 #warning What is this code supposed to do? (Lgb)
+// my guess is that this is just waiting for when we support before,
+// so it's a oneliner. But this is very silly ! - jbl
 
 #if 1
        // The current strange code
@@ -360,14 +371,14 @@ int InsetCitation::latex(Buffer const * buffer, ostream & os,
        string const before = string();
        string const after  = getOptions();
        if (!before.empty() && buffer->params.use_natbib)
-               os << "[" << before << "][" << after << "]";
+               os << '[' << before << "][" << after << ']';
        else if (!after.empty())
-               os << "[" << after << "]";
+               os << '[' << after << ']';
 #else
        // and the cleaned up equvalent, should it just be changed? (Lgb)
        string const after  = getOptions();
        if (!after.empty())
-               os << "[" << after << "]";
+               os << '[' << after << ']';
 #endif
        string::const_iterator it  = getContents().begin();
        string::const_iterator end = getContents().end();
@@ -381,7 +392,7 @@ int InsetCitation::latex(Buffer const * buffer, ostream & os,
                        content += *it;
        }
 
-       os << "{" << content << "}";
+       os << '{' << content << '}';
 
        return 0;
 }