#include "support/docstream.h"
#include "support/gettext.h"
#include "support/lstrings.h"
+#include "support/mutex.h"
using namespace std;
using namespace lyx::support;
int InsetBibitem::key_counter = 0;
+static Mutex counter_mutex;
docstring const key_prefix = from_ascii("key-");
: InsetCommand(buf, p)
{
buffer().invalidateBibinfoCache();
- if (getParam("key").empty())
+ if (getParam("key").empty()) {
+ Mutex::Locker lock(&counter_mutex);
setParam("key", key_prefix + convert<docstring>(++key_counter));
+ }
}
void InsetBibitem::updateCommand(docstring const & new_key, bool)
{
docstring key = new_key;
-
vector<docstring> bibkeys = buffer().masterBibInfo().getKeys();
- int i = 1;
-
if (find(bibkeys.begin(), bibkeys.end(), key) != bibkeys.end()) {
+ int i = 1;
// generate unique label
key = new_key + '-' + convert<docstring>(i);
while (find(bibkeys.begin(), bibkeys.end(), key) != bibkeys.end()) {
docstring label = p["label"];
// definitions for escaping
- int previous;
static docstring const backslash = from_ascii("\\");
static docstring const lbrace = from_ascii("{");
static docstring const rbrace = from_ascii("}");
static char_type const brackets_escape[2] = {'[', ']'};
if (!label.empty()) {
+ int previous;
// The characters in chars_name[] need to be changed to a command when
// they are in the name field.
for (int k = 0; k < 6; k++)
if (prefixIs(getParam("key"), key_prefix)) {
int const key = convert<int>(getParam("key").substr(key_prefix.length()));
+ Mutex::Locker lock(&counter_mutex);
key_counter = max(key_counter, key);
}
}