update to citeproc-js 1.0.105

From 1.0.100:

Allow institutional names to collapse correctly when cite collapsing
options are in effect.

Add an option to identify Vietnamese names and format them correctly
(i.e. always family name first). There is a small possibility of false
positives, so the option is off by default. See the processor manual
for details: http://gsl-nagoya-u.net/http/pub/citeproc-doc.html

From 1.0.101:

Add sortkeys array to skeleton items received during
restoreProcessorState() if it is undefined. Avoids a processor crash
on the first Zotero 2.1 connection to a Zotero 2.0.9 document.

From 1.0.102:

When rendering non-ranged cites collapsed  with collapse="year-
suffix", and the year suffix is implicit (not being rendered through a
cs:text node with variable="year-suffix"), add the necessary splice
delimiter details to the number object.

Protect against undefined name.multi.main when checking headline names
for a name tag.

From 1.0.103:

Add a reference to item data in registry objects.

Provide a registry method getSortedRegistryObjects() to return current
bibliography data.

Document new registry method in processor manual.

From 1.0.104:

Make restoreProcessorState() notice that the sequence of citations has
changed, and assign fresh citation IDs to duplicate citations in the
input.

From 1.0.105:

Assure that all ids passed into an array or as a straight variable are
stringified. Loosen condition statements where appropriate to treat
numeric IDs of string and numeric type as equivalent.
This commit is contained in:
Simon Kornblith 2011-02-02 06:49:20 +00:00
parent ab07d02de0
commit 0a4fe5725e

View File

@ -99,7 +99,7 @@ var CSL = {
DATE_PARTS: ["year", "month", "day"], DATE_PARTS: ["year", "month", "day"],
DATE_PARTS_ALL: ["year", "month", "day", "season"], DATE_PARTS_ALL: ["year", "month", "day", "season"],
DATE_PARTS_INTERNAL: ["year", "month", "day", "year_end", "month_end", "day_end"], DATE_PARTS_INTERNAL: ["year", "month", "day", "year_end", "month_end", "day_end"],
NAME_PARTS: ["family", "given", "dropping-particle", "non-dropping-particle", "suffix"], NAME_PARTS: ["family", "given", "dropping-particle", "non-dropping-particle", "suffix", "literal"],
DECORABLE_NAME_PARTS: ["given", "family", "suffix"], DECORABLE_NAME_PARTS: ["given", "family", "suffix"],
DISAMBIGUATE_OPTIONS: [ DISAMBIGUATE_OPTIONS: [
"disambiguate-add-names", "disambiguate-add-names",
@ -140,6 +140,8 @@ var CSL = {
STARTSWITH_ROMANESQUE_REGEXP: /^[&a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]/, STARTSWITH_ROMANESQUE_REGEXP: /^[&a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]/,
ENDSWITH_ROMANESQUE_REGEXP: /[&a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]$/, ENDSWITH_ROMANESQUE_REGEXP: /[&a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]$/,
ALL_ROMANESQUE_REGEXP: /^[a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]+$/, ALL_ROMANESQUE_REGEXP: /^[a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]+$/,
VIETNAMESE_SPECIALS: /[\u00c0-\u00c3\u00c8-\u00ca\u00cc\u00cd\u00d2-\u00d5\u00d9\u00da\u00dd\u00e0-\u00e3\u00e8-\u00ea\u00ec\u00ed\u00f2-\u00f5\u00f9\u00fa\u00fd\u0101\u0103\u0110\u0111\u0128\u0129\u0168\u0169\u01a0\u01a1\u01af\u01b0\u1ea0-\u1ef9]/,
VIETNAMESE_NAMES: /^(?:(?:[.AaBbCcDdEeGgHhIiKkLlMmNnOoPpQqRrSsTtUuVvXxYy \u00c0-\u00c3\u00c8-\u00ca\u00cc\u00cd\u00d2-\u00d5\u00d9\u00da\u00dd\u00e0-\u00e3\u00e8-\u00ea\u00ec\u00ed\u00f2-\u00f5\u00f9\u00fa\u00fd\u0101\u0103\u0110\u0111\u0128\u0129\u0168\u0169\u01a0\u01a1\u01af\u01b0\u1ea0-\u1ef9]{2,6})(\s+|$))+$/,
NOTE_FIELDS_REGEXP: /{:[-a-z]+:[^}]+}/g, NOTE_FIELDS_REGEXP: /{:[-a-z]+:[^}]+}/g,
NOTE_FIELD_REGEXP: /{:([-a-z]+):([^}]+)}/, NOTE_FIELD_REGEXP: /{:([-a-z]+):([^}]+)}/,
DISPLAY_CLASSES: ["block", "left-margin", "right-inline", "indent"], DISPLAY_CLASSES: ["block", "left-margin", "right-inline", "indent"],
@ -1220,7 +1222,7 @@ CSL.compareAmbigConfig = function(a, b) {
} }
return 0; return 0;
}; };
CSL.cloneAmbigConfig = function (config, oldconfig, itemID, tainters) { CSL.cloneAmbigConfig = function (config, oldconfig, tainters) {
var ret, param, pos, ppos, len, llen; var ret, param, pos, ppos, len, llen;
ret = {}; ret = {};
ret.names = []; ret.names = [];
@ -1725,7 +1727,7 @@ CSL.DateParser = function (txt) {
}; };
CSL.Engine = function (sys, style, lang, forceLang) { CSL.Engine = function (sys, style, lang, forceLang) {
var attrs, langspec, localexml, locale; var attrs, langspec, localexml, locale;
this.processor_version = "1.0.99"; this.processor_version = "1.0.105";
this.csl_version = "1.0"; this.csl_version = "1.0";
this.sys = sys; this.sys = sys;
this.sys.xml = new CSL.System.Xml.Parsing(); this.sys.xml = new CSL.System.Xml.Parsing();
@ -2017,13 +2019,13 @@ CSL.Engine.prototype.retrieveItems = function (ids) {
ret = []; ret = [];
len = ids.length; len = ids.length;
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
ret.push(this.retrieveItem(ids[pos])); ret.push(this.retrieveItem("" + ids[pos]));
} }
return ret; return ret;
}; };
CSL.Engine.prototype.retrieveItem = function (id) { CSL.Engine.prototype.retrieveItem = function (id) {
var Item, m, pos, len, mm; var Item, m, pos, len, mm;
Item = this.sys.retrieveItem(id); Item = this.sys.retrieveItem("" + id);
if (Item.note) { if (Item.note) {
m = CSL.NOTE_FIELDS_REGEXP.exec(Item.note); m = CSL.NOTE_FIELDS_REGEXP.exec(Item.note);
if (m) { if (m) {
@ -2131,6 +2133,13 @@ CSL.Engine.prototype.setOriginalCreatorNameFormatOption = function (arg) {
this.opt["locale-use-original-name-format"] = false; this.opt["locale-use-original-name-format"] = false;
} }
}; };
CSL.Engine.prototype.setAutoVietnameseNamesOption = function (arg) {
if (arg) {
this.opt["auto-vietnamese-names"] = true;
} else {
this.opt["auto-vietnamese-names"] = false;
}
};
CSL.Engine.Opt = function () { CSL.Engine.Opt = function () {
this.has_disambiguate = false; this.has_disambiguate = false;
this.mode = "html"; this.mode = "html";
@ -2280,7 +2289,7 @@ CSL.Engine.prototype.setCitationId = function (citation, force) {
id += -1; id += -1;
} }
} }
ret = id; ret = "" + id;
} }
this.registry.citationreg.citationById[citation.citationID] = citation; this.registry.citationreg.citationById[citation.citationID] = citation;
return ret; return ret;
@ -2292,30 +2301,61 @@ CSL.Engine.prototype.restoreProcessorState = function (citations) {
if (!citations) { if (!citations) {
citations = []; citations = [];
} }
var indexNumbers = [];
var citationIds = {};
for (var i = 0, ilen = citations.length; i < ilen; i += 1) { for (var i = 0, ilen = citations.length; i < ilen; i += 1) {
if (citationIds[citations[i].citationID]) {
this.setCitationId(citations[i], true);
}
citationIds[citations[i].citationID] = true;
indexNumbers.push(citations[i].properties.index);
}
var oldCitations = citations.slice();
oldCitations.sort(
function (a,b) {
if (a.properties.index < b.properties.index) {
return -1;
} else if (a.properties.index > b.properties.index) {
return 1;
} else {
return 0;
}
}
);
for (var i = 0, ilen = oldCitations.length; i < ilen; i += 1) {
oldCitations[i].properties.index = i;
}
for (var i = 0, ilen = oldCitations.length; i < ilen; i += 1) {
sortedItems = []; sortedItems = [];
for (var j = 0, jlen = citations[i].citationItems.length; j < jlen; j += 1) { for (var j = 0, jlen = oldCitations[i].citationItems.length; j < jlen; j += 1) {
item = citations[i].citationItems[j]; item = oldCitations[i].citationItems[j];
Item = this.retrieveItem(item.id); if ("undefined" === typeof item.sortkeys) {
item.sortkeys = [];
}
Item = this.retrieveItem("" + item.id);
newitem = [Item, item]; newitem = [Item, item];
sortedItems.push(newitem); sortedItems.push(newitem);
citations[i].citationItems[j].item = Item; oldCitations[i].citationItems[j].item = Item;
itemList.push(item.id); itemList.push("" + item.id);
} }
if (!citations[i].properties.unsorted) { if (!oldCitations[i].properties.unsorted) {
sortedItems.sort(this.citation.srt.compareCompositeKeys); sortedItems.sort(this.citation.srt.compareCompositeKeys);
} }
citations[i].sortedItems = sortedItems; oldCitations[i].sortedItems = sortedItems;
this.registry.citationreg.citationById[citations[i].citationID] = citations[i]; this.registry.citationreg.citationById[oldCitations[i].citationID] = oldCitations[i];
citationList.push([citations[i].citationID, citations[i].properties.noteIndex]);
} }
this.updateItems(itemList); this.updateItems(itemList);
for (var i = 0, ilen = citations.length; i < ilen; i += 1) {
citationList.push(["" + citations[i].citationID, citations[i].properties.noteIndex]);
}
var ret = [];
if (citations && citations.length) { if (citations && citations.length) {
this.processCitationCluster(citations[0], [], citationList.slice(1)); ret = this.processCitationCluster(citations[0], [], citationList.slice(1));
} else { } else {
this.registry = new CSL.Registry(this); this.registry = new CSL.Registry(this);
this.tmp = new CSL.Engine.Tmp(); this.tmp = new CSL.Engine.Tmp();
} }
return ret;
}; };
CSL.Engine.prototype.updateItems = function (idList, nosort) { CSL.Engine.prototype.updateItems = function (idList, nosort) {
var debug = false; var debug = false;
@ -2490,25 +2530,25 @@ CSL.getBibliographyEntries = function (bibsection) {
bib_entry = new CSL.Token("group", CSL.START); bib_entry = new CSL.Token("group", CSL.START);
bib_entry.decorations = [["@bibliography", "entry"]].concat(this[this.build.area].opt.layout_decorations); bib_entry.decorations = [["@bibliography", "entry"]].concat(this[this.build.area].opt.layout_decorations);
this.output.startTag("bib_entry", bib_entry); this.output.startTag("bib_entry", bib_entry);
sortedItems = [[{id: item.id}, item]]; sortedItems = [[{id: "" + item.id}, item]];
entry_item_ids = []; entry_item_ids = [];
if (this.registry.registry[item.id].master) { if (this.registry.registry[item.id].master) {
collapse_parallel = true; collapse_parallel = true;
this.parallel.StartCitation(sortedItems); this.parallel.StartCitation(sortedItems);
this.output.queue[0].strings.delimiter = ", "; this.output.queue[0].strings.delimiter = ", ";
entry_item_ids.push(CSL.getCite.call(this, item)); entry_item_ids.push("" + CSL.getCite.call(this, item));
skips[item.id] = true; skips[item.id] = true;
siblings = this.registry.registry[item.id].siblings; siblings = this.registry.registry[item.id].siblings;
for (ppos = 0, llen = siblings.length; ppos < llen; ppos += 1) { for (ppos = 0, llen = siblings.length; ppos < llen; ppos += 1) {
i = this.registry.registry[item.id].siblings[ppos]; i = this.registry.registry[item.id].siblings[ppos];
eyetem = this.retrieveItem(i); eyetem = this.retrieveItem(i);
entry_item_ids.push(CSL.getCite.call(this, eyetem)); entry_item_ids.push("" + CSL.getCite.call(this, eyetem));
skips[eyetem.id] = true; skips[eyetem.id] = true;
} }
this.parallel.ComposeSet(); this.parallel.ComposeSet();
this.parallel.PruneOutputQueue(); this.parallel.PruneOutputQueue();
} else if (!this.registry.registry[item.id].siblings) { } else if (!this.registry.registry[item.id].siblings) {
entry_item_ids.push(CSL.getCite.call(this, item)); entry_item_ids.push("" + CSL.getCite.call(this, item));
} }
entry_item_data.push(""); entry_item_data.push("");
this.tmp.bibliography_pos += 1; this.tmp.bibliography_pos += 1;
@ -2559,7 +2599,7 @@ CSL.Engine.prototype.appendCitationCluster = function (citation) {
len = this.registry.citationreg.citationByIndex.length; len = this.registry.citationreg.citationByIndex.length;
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
c = this.registry.citationreg.citationByIndex[pos]; c = this.registry.citationreg.citationByIndex[pos];
citationsPre.push([c.citationID, c.properties.noteIndex]); citationsPre.push(["" + c.citationID, c.properties.noteIndex]);
} }
return this.processCitationCluster(citation, citationsPre, [])[1]; return this.processCitationCluster(citation, citationsPre, [])[1];
}; };
@ -2573,14 +2613,14 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
if (flag === CSL.PREVIEW) { if (flag === CSL.PREVIEW) {
var oldCitationList = this.registry.citationreg.citationByIndex.slice(); var oldCitationList = this.registry.citationreg.citationByIndex.slice();
var oldItemList = this.registry.reflist.slice(); var oldItemList = this.registry.reflist.slice();
var newCitationList = citationsPre.concat([[citation.citationID, citation.properties.noteIndex]]).concat(citationsPost); var newCitationList = citationsPre.concat([["" + citation.citationID, citation.properties.noteIndex]]).concat(citationsPost);
var newItemIds = {}; var newItemIds = {};
var newItemIdsList = []; var newItemIdsList = [];
for (pos = 0, len = newCitationList.length; pos < len; pos += 1) { for (pos = 0, len = newCitationList.length; pos < len; pos += 1) {
c = this.registry.citationreg.citationById[newCitationList[pos][0]]; c = this.registry.citationreg.citationById[newCitationList[pos][0]];
for (ppos = 0, llen = c.citationItems.length; ppos < llen; ppos += 1) { for (ppos = 0, llen = c.citationItems.length; ppos < llen; ppos += 1) {
newItemIds[c.citationItems[ppos].id] = true; newItemIds[c.citationItems[ppos].id] = true;
newItemIdsList.push(c.citationItems[ppos].id); newItemIdsList.push("" + c.citationItems[ppos].id);
} }
} }
var oldAmbigs = {}; var oldAmbigs = {};
@ -2602,7 +2642,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
len = citation.citationItems.length; len = citation.citationItems.length;
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
item = citation.citationItems[pos]; item = citation.citationItems[pos];
Item = this.retrieveItem(item.id); Item = this.retrieveItem("" + item.id);
newitem = [Item, item]; newitem = [Item, item];
sortedItems.push(newitem); sortedItems.push(newitem);
citation.citationItems[pos].item = Item; citation.citationItems[pos].item = Item;
@ -2646,7 +2686,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
item = citationByIndex[pos].sortedItems[ppos]; item = citationByIndex[pos].sortedItems[ppos];
if (!this.registry.citationreg.citationsByItemId[item[1].id]) { if (!this.registry.citationreg.citationsByItemId[item[1].id]) {
this.registry.citationreg.citationsByItemId[item[1].id] = []; this.registry.citationreg.citationsByItemId[item[1].id] = [];
update_items.push(item[1].id); update_items.push("" + item[1].id);
} }
if (this.registry.citationreg.citationsByItemId[item[1].id].indexOf(citationByIndex[pos]) === -1) { if (this.registry.citationreg.citationsByItemId[item[1].id].indexOf(citationByIndex[pos]) === -1) {
this.registry.citationreg.citationsByItemId[item[1].id].push(citationByIndex[pos]); this.registry.citationreg.citationsByItemId[item[1].id].push(citationByIndex[pos]);
@ -2678,7 +2718,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
for (pppos = 0; pppos < lllen; pppos += 1) { for (pppos = 0; pppos < lllen; pppos += 1) {
item = citations[ppos].sortedItems[pppos]; item = citations[ppos].sortedItems[pppos];
if (flag === CSL.PREVIEW) { if (flag === CSL.PREVIEW) {
if (onecitation.citationID !== citation.citationID) { if (onecitation.citationID != citation.citationID) {
if ("undefined" === typeof first_ref[item[1].id]) { if ("undefined" === typeof first_ref[item[1].id]) {
first_ref[item[1].id] = onecitation.properties.noteIndex; first_ref[item[1].id] = onecitation.properties.noteIndex;
last_ref[item[1].id] = onecitation.properties.noteIndex; last_ref[item[1].id] = onecitation.properties.noteIndex;
@ -2704,13 +2744,13 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
if (ppos > 0 && parseInt(pppos, 10) === 0) { if (ppos > 0 && parseInt(pppos, 10) === 0) {
items = citations[(ppos - 1)].sortedItems; items = citations[(ppos - 1)].sortedItems;
useme = false; useme = false;
if ((citations[(ppos - 1)].sortedItems[0][1].id == item[1].id && citations[ppos - 1].properties.noteIndex >= (citations[ppos].properties.noteIndex - 1)) || citations[(ppos - 1)].sortedItems[0][1].id == this.registry.registry[item[1].id].parallel) { if ((citations[(ppos - 1)].sortedItems[0][1].id == item[1].id && citations[ppos - 1].properties.noteIndex >= (citations[ppos].properties.noteIndex - 1)) || citations[(ppos - 1)].sortedItems[0][1].id == this.registry.registry[item[1].id].parallel) {
useme = true; useme = true;
} }
llllen = items.slice(1).length; llllen = items.slice(1).length;
for (ppppos = 0; ppppos < llllen; ppppos += 1) { for (ppppos = 0; ppppos < llllen; ppppos += 1) {
i = items.slice(1)[ppppos]; i = items.slice(1)[ppppos];
if (!this.registry.registry[i[1].id].parallel || this.registry.registry[i[1].id].parallel === this.registry.registry[i[1].id]) { if (!this.registry.registry[i[1].id].parallel || this.registry.registry[i[1].id].parallel == this.registry.registry[i[1].id]) {
useme = false; useme = false;
} }
} }
@ -2719,7 +2759,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
} else { } else {
suprame = true; suprame = true;
} }
} else if (pppos > 0 && onecitation.sortedItems[(pppos - 1)][1].id === item[1].id) { } else if (pppos > 0 && onecitation.sortedItems[(pppos - 1)][1].id == item[1].id) {
ibidme = true; ibidme = true;
} else { } else {
suprame = true; suprame = true;
@ -2752,19 +2792,19 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
} }
if (suprame) { if (suprame) {
item[1].position = CSL.POSITION_SUBSEQUENT; item[1].position = CSL.POSITION_SUBSEQUENT;
if (first_ref[item[1].id] !== onecitation.properties.noteIndex) { if (first_ref[item[1].id] != onecitation.properties.noteIndex) {
item[1]["first-reference-note-number"] = first_ref[item[1].id]; item[1]["first-reference-note-number"] = first_ref[item[1].id];
} }
} }
} }
if (onecitation.properties.noteIndex) { if (onecitation.properties.noteIndex) {
note_distance = onecitation.properties.noteIndex - last_ref[item[1].id]; note_distance = parseInt(onecitation.properties.noteIndex, 10) - parseInt(last_ref[item[1].id], 10);
if (note_distance <= this.citation.opt["near-note-distance"]) { if (note_distance <= this.citation.opt["near-note-distance"]) {
item[1]["near-note"] = true; item[1]["near-note"] = true;
} }
last_ref[item[1].id] = onecitation.properties.noteIndex; last_ref[item[1].id] = onecitation.properties.noteIndex;
} }
if (onecitation.citationID !== citation.citationID) { if (onecitation.citationID != citation.citationID) {
llllen = CSL.POSITION_TEST_VARS.length; llllen = CSL.POSITION_TEST_VARS.length;
for (ppppos = 0; ppppos < llllen; ppppos += 1) { for (ppppos = 0; ppppos < llllen; ppppos += 1) {
param = CSL.POSITION_TEST_VARS[ppppos]; param = CSL.POSITION_TEST_VARS[ppppos];
@ -2804,7 +2844,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
} }
oldItemIds = []; oldItemIds = [];
for (pos = 0, len = oldItemList.length; pos < len; pos += 1) { for (pos = 0, len = oldItemList.length; pos < len; pos += 1) {
oldItemIds.push(oldItemList[pos].id); oldItemIds.push("" + oldItemList[pos].id);
} }
this.updateItems(oldItemIds); this.updateItems(oldItemIds);
for (key in oldAmbigs) { for (key in oldAmbigs) {
@ -2813,13 +2853,13 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
} else { } else {
for (key in this.tmp.taintedCitationIDs) { for (key in this.tmp.taintedCitationIDs) {
if (this.tmp.taintedCitationIDs.hasOwnProperty(key)) { if (this.tmp.taintedCitationIDs.hasOwnProperty(key)) {
if (key === citation.citationID) { if (key == citation.citationID) {
continue; continue;
} }
var mycitation = this.registry.citationreg.citationById[key]; var mycitation = this.registry.citationreg.citationById[key];
this.tmp.citation_pos = mycitation.properties.index; this.tmp.citation_pos = mycitation.properties.index;
this.tmp.citation_note_index = mycitation.properties.noteIndex; this.tmp.citation_note_index = mycitation.properties.noteIndex;
this.tmp.citation_id = mycitation.citationID; this.tmp.citation_id = "" + mycitation.citationID;
obj = []; obj = [];
obj.push(mycitation.properties.index); obj.push(mycitation.properties.index);
obj.push(this.process_CitationCluster.call(this, mycitation.sortedItems)); obj.push(this.process_CitationCluster.call(this, mycitation.sortedItems));
@ -2831,7 +2871,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre,
this.tmp.taintedCitationIDs = false; this.tmp.taintedCitationIDs = false;
this.tmp.citation_pos = citation.properties.index; this.tmp.citation_pos = citation.properties.index;
this.tmp.citation_note_index = citation.properties.noteIndex; this.tmp.citation_note_index = citation.properties.noteIndex;
this.tmp.citation_id = citation.citationID; this.tmp.citation_id = "" + citation.citationID;
obj = []; obj = [];
obj.push(citationsPre.length); obj.push(citationsPre.length);
obj.push(this.process_CitationCluster.call(this, sortedItems)); obj.push(this.process_CitationCluster.call(this, sortedItems));
@ -2861,7 +2901,7 @@ CSL.Engine.prototype.makeCitationCluster = function (rawList) {
len = rawList.length; len = rawList.length;
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
item = rawList[pos]; item = rawList[pos];
Item = this.retrieveItem(item.id); Item = this.retrieveItem("" + item.id);
newitem = [Item, item]; newitem = [Item, item];
inputList.push(newitem); inputList.push(newitem);
} }
@ -2932,17 +2972,17 @@ CSL.getCitationCluster = function (inputList, citationID) {
last_collapsed = this.tmp.have_collapsed; last_collapsed = this.tmp.have_collapsed;
params = {}; params = {};
if (pos > 0) { if (pos > 0) {
CSL.getCite.call(this, Item, item, inputList[(pos - 1)][1].id); CSL.getCite.call(this, Item, item, "" + inputList[(pos - 1)][1].id);
} else { } else {
this.tmp.term_predecessor = false; this.tmp.term_predecessor = false;
CSL.getCite.call(this, Item, item); CSL.getCite.call(this, Item, item);
} }
if (!this.tmp.cite_renders_content) { if (!this.tmp.cite_renders_content) {
error_object = { error_object = {
citationID: this.tmp.citation_id, citationID: "" + this.tmp.citation_id,
index: this.tmp.citation_pos, index: this.tmp.citation_pos,
noteIndex: this.tmp.citation_note_index, noteIndex: this.tmp.citation_note_index,
itemID: Item.id, itemID: "" + Item.id,
citationItems_pos: pos, citationItems_pos: pos,
error_code: CSL.ERROR_NO_RENDERED_FORM error_code: CSL.ERROR_NO_RENDERED_FORM
}; };
@ -3078,13 +3118,13 @@ CSL.getCite = function (Item, item, prevItemID) {
if (this.tmp.area === "bibliography") { if (this.tmp.area === "bibliography") {
error_object = { error_object = {
index: this.tmp.bibliography_pos, index: this.tmp.bibliography_pos,
itemID: Item.id, itemID: "" + Item.id,
error_code: CSL.ERROR_NO_RENDERED_FORM error_code: CSL.ERROR_NO_RENDERED_FORM
}; };
this.tmp.bibliography_errors.push(error_object); this.tmp.bibliography_errors.push(error_object);
} }
} }
return Item.id; return "" + Item.id;
}; };
CSL.citeStart = function (Item) { CSL.citeStart = function (Item) {
this.tmp.lastchr = ""; this.tmp.lastchr = "";
@ -3588,6 +3628,12 @@ CSL.Node["date-part"] = {
number = new CSL.NumericBlob(num, this); number = new CSL.NumericBlob(num, this);
formatter = new CSL.Util.Suffixator(CSL.SUFFIX_CHARS); formatter = new CSL.Util.Suffixator(CSL.SUFFIX_CHARS);
number.setFormatter(formatter); number.setFormatter(formatter);
if (state[state.tmp.area].opt.collapse === "year-suffix-ranged") {
number.range_prefix = "-";
}
if (state[state.tmp.area].opt["year-suffix-delimiter"]) {
number.successor_prefix = state[state.build.area].opt["year-suffix-delimiter"];
}
state.output.append(number, "literal"); state.output.append(number, "literal");
} }
} }
@ -3911,9 +3957,8 @@ CSL.Node.key = {
if ("undefined" === typeof dp) { if ("undefined" === typeof dp) {
dp = {}; dp = {};
} }
len = CSL.DATE_PARTS_INTERNAL.length; for (var i = 0, ilen = CSL.DATE_PARTS_INTERNAL.length; i < ilen; i += 1) {
for (pos = 0; pos < len; pos += 1) { elem = CSL.DATE_PARTS_INTERNAL[i];
elem = CSL.DATE_PARTS_INTERNAL[pos];
value = 0; value = 0;
e = elem; e = elem;
if (e.slice(-4) === "_end") { if (e.slice(-4) === "_end") {
@ -3956,11 +4001,10 @@ CSL.Node.key = {
tlen = target.length; tlen = target.length;
keypos = false; keypos = false;
CSL.expandMacro.call(state, token); CSL.expandMacro.call(state, token);
len = target.slice(tlen).length; for (var i = 0, ilen = target.slice(tlen).length; i < ilen; i += 1) {
for (pos = 0; pos < len; pos += 1) { tok = target.slice(tlen)[i];
tok = target.slice(tlen)[pos];
if (tok && tok.name === "text" && tok.dateparts) { if (tok && tok.name === "text" && tok.dateparts) {
keypos = pos; keypos = i;
break; break;
} }
} }
@ -4361,7 +4405,7 @@ CSL.Node.names = {
} }
lllen = lllst.length; lllen = lllst.length;
for (pppos = 0; pppos < lllen; pppos += 1) { for (pppos = 0; pppos < lllen; pppos += 1) {
name = {literal: lllst[pppos]}; name = {literal: lllst[pppos], family:'', given:''};
nameset.names.push(name); nameset.names.push(name);
} }
tnamesets.push(nameset); tnamesets.push(nameset);
@ -4731,7 +4775,7 @@ CSL.Node.names = {
local_count += display_names.length; local_count += display_names.length;
llen = nameset.names.length; llen = nameset.names.length;
for (ppos = 0; ppos < llen; ppos += 1) { for (ppos = 0; ppos < llen; ppos += 1) {
state.registry.namereg.addname(Item.id, nameset.names[ppos], ppos); state.registry.namereg.addname("" + Item.id, nameset.names[ppos], ppos);
chk = state.tmp.disambig_settings.givens[state.tmp.nameset_counter]; chk = state.tmp.disambig_settings.givens[state.tmp.nameset_counter];
if ("undefined" === typeof chk) { if ("undefined" === typeof chk) {
state.tmp.disambig_settings.givens.push([]); state.tmp.disambig_settings.givens.push([]);
@ -4740,12 +4784,12 @@ CSL.Node.names = {
if ("undefined" === typeof chk) { if ("undefined" === typeof chk) {
myform = state.output.getToken("name").strings.form; myform = state.output.getToken("name").strings.form;
myinitials = this.strings["initialize-with"]; myinitials = this.strings["initialize-with"];
param = state.registry.namereg.evalname(Item.id, nameset.names[ppos], ppos, 0, myform, myinitials); param = state.registry.namereg.evalname("" + Item.id, nameset.names[ppos], ppos, 0, myform, myinitials);
state.tmp.disambig_settings.givens[state.tmp.nameset_counter].push(param); state.tmp.disambig_settings.givens[state.tmp.nameset_counter].push(param);
} }
myform = state.output.getToken("name").strings.form; myform = state.output.getToken("name").strings.form;
myinitials = this.strings["initialize-with"]; myinitials = this.strings["initialize-with"];
paramx = state.registry.namereg.evalname(Item.id, nameset.names[ppos], ppos, 0, myform, myinitials); paramx = state.registry.namereg.evalname("" + Item.id, nameset.names[ppos], ppos, 0, myform, myinitials);
if (state.tmp.sort_key_flag) { if (state.tmp.sort_key_flag) {
state.tmp.disambig_settings.givens[state.tmp.nameset_counter][ppos] = 2; state.tmp.disambig_settings.givens[state.tmp.nameset_counter][ppos] = 2;
param = 2; param = 2;
@ -4758,7 +4802,7 @@ CSL.Node.names = {
} }
param = val; param = val;
if (state.opt["disambiguate-add-givenname"]) { if (state.opt["disambiguate-add-givenname"]) {
param = state.registry.namereg.evalname(Item.id, nameset.names[ppos], ppos, param, state.output.getToken("name").strings.form, this.strings["initialize-with"]); param = state.registry.namereg.evalname("" + Item.id, nameset.names[ppos], ppos, param, state.output.getToken("name").strings.form, this.strings["initialize-with"]);
} }
} else { } else {
param = paramx; param = paramx;
@ -5054,7 +5098,7 @@ CSL.Node.text = {
this.successor_prefix = state[state.build.area].opt.layout_delimiter; this.successor_prefix = state[state.build.area].opt.layout_delimiter;
this.splice_prefix = state[state.build.area].opt.layout_delimiter; this.splice_prefix = state[state.build.area].opt.layout_delimiter;
func = function (state, Item, item) { func = function (state, Item, item) {
id = Item.id; id = "" + Item.id;
if (!state.tmp.just_looking) { if (!state.tmp.just_looking) {
if (item && item["author-only"]) { if (item && item["author-only"]) {
state.tmp.element_trace.replace("do-not-suppress-me"); state.tmp.element_trace.replace("do-not-suppress-me");
@ -6209,6 +6253,23 @@ CSL.Transform = function (state) {
} }
} }
this.output = output; this.output = output;
function getStaticOrder (name, refresh) {
var static_ordering_val = false;
if (!refresh && name["static-ordering"]) {
static_ordering_val = true;
} else if (!(name.family.replace('"', '', 'g') + name.given).match(CSL.ROMANESQUE_REGEXP)) {
static_ordering_val = true;
} else if (name.multi && name.multi.main && name.multi.main.slice(0,2) == 'vn') {
static_ordering_val = true;
} else {
if (state.opt['auto-vietnamese-names']
&& (CSL.VIETNAMESE_NAMES.exec(name.family + " " + name.given)
&& CSL.VIETNAMESE_SPECIALS.exec(name.family + name.given))) {
static_ordering_val = true;
}
}
return static_ordering_val;
}
function name (state, name, langTags) { function name (state, name, langTags) {
var i, ret, optLangTag, ilen, key, langTag; var i, ret, optLangTag, ilen, key, langTag;
if (state.tmp.area.slice(-5) === "_sort") { if (state.tmp.area.slice(-5) === "_sort") {
@ -6223,15 +6284,10 @@ CSL.Transform = function (state) {
if (!name.given) { if (!name.given) {
name.given = ""; name.given = "";
} }
var static_ordering_val = false;
var static_ordering_freshcheck = false; var static_ordering_freshcheck = false;
var block_initialize = false; var block_initialize = false;
var transliterated = false; var transliterated = false;
if (name["static-ordering"]) { var static_ordering_val = getStaticOrder(name);
static_ordering_val = true;
} else if (!(name.family.replace('"', '', 'g') + name.given).match(CSL.ROMANESQUE_REGEXP)) {
static_ordering_val = true;
}
if (langTags && name.multi) { if (langTags && name.multi) {
for (i = 0, ilen = langTags.length; i < ilen; i += 1) { for (i = 0, ilen = langTags.length; i < ilen; i += 1) {
langTag = langTags[i]; langTag = langTags[i];
@ -6262,7 +6318,7 @@ CSL.Transform = function (state) {
block_initialize:block_initialize block_initialize:block_initialize
} }
if (static_ordering_freshcheck && if (static_ordering_freshcheck &&
(name.family.replace('"','','g') + name.given).match(CSL.ROMANESQUE_REGEXP)) { !getStaticOrder(name, true)) {
name["static-ordering"] = false; name["static-ordering"] = false;
} }
if (state.opt["parse-names"] if (state.opt["parse-names"]
@ -6311,7 +6367,7 @@ CSL.Parallel.prototype.StartCitation = function (sortedItems, out) {
CSL.Parallel.prototype.StartCite = function (Item, item, prevItemID) { CSL.Parallel.prototype.StartCite = function (Item, item, prevItemID) {
var position, len, pos, x, curr, master, last_id, prev_locator, curr_locator, is_master, parallel; var position, len, pos, x, curr, master, last_id, prev_locator, curr_locator, is_master, parallel;
if (this.use_parallels) { if (this.use_parallels) {
if (this.sets.value().length && this.sets.value()[0].itemId === Item.id) { if (this.sets.value().length && this.sets.value()[0].itemId == Item.id) {
this.ComposeSet(); this.ComposeSet();
} }
this.sortedItemsPos += 1; this.sortedItemsPos += 1;
@ -6338,18 +6394,18 @@ CSL.Parallel.prototype.StartCite = function (Item, item, prevItemID) {
this.cite.back_forceme = []; this.cite.back_forceme = [];
this.cite.position = position; this.cite.position = position;
this.cite.Item = Item; this.cite.Item = Item;
this.cite.itemId = Item.id; this.cite.itemId = "" + Item.id;
this.cite.prevItemID = prevItemID; this.cite.prevItemID = "" + prevItemID;
this.target = "front"; this.target = "front";
if (this.sortedItems && this.sortedItemsPos > 0 && this.sortedItemsPos < this.sortedItems.length) { if (this.sortedItems && this.sortedItemsPos > 0 && this.sortedItemsPos < this.sortedItems.length) {
curr = this.sortedItems[this.sortedItemsPos][1]; curr = this.sortedItems[this.sortedItemsPos][1];
last_id = this.sortedItems[(this.sortedItemsPos - 1)][1].id; last_id = "" + this.sortedItems[(this.sortedItemsPos - 1)][1].id;
master = this.state.registry.registry[last_id].parallel; master = this.state.registry.registry[last_id].parallel;
prev_locator = false; prev_locator = false;
if (master === curr.id) { if (master == curr.id) {
len = this.sortedItemsPos - 1; len = this.sortedItemsPos - 1;
for (pos = len; pos > -1; pos += -1) { for (pos = len; pos > -1; pos += -1) {
if (this.sortedItems[pos][1].id === Item.id) { if (this.sortedItems[pos][1].id == Item.id) {
prev_locator = this.sortedItems[pos][1].locator; prev_locator = this.sortedItems[pos][1].locator;
break; break;
} }
@ -7050,7 +7106,7 @@ CSL.Util.Names.compareNamesets = function (base_nameset, nameset) {
llen = CSL.NAME_PARTS.length; llen = CSL.NAME_PARTS.length;
for (ppos = 0; ppos < llen; ppos += 1) { for (ppos = 0; ppos < llen; ppos += 1) {
part = CSL.NAME_PARTS[ppos]; part = CSL.NAME_PARTS[ppos];
if (!base_nameset.names[pos] || base_nameset.names[pos][part] !== name[part]) { if (!base_nameset.names[pos] || base_nameset.names[pos][part] != name[part]) {
return false; return false;
} }
} }
@ -8319,9 +8375,15 @@ CSL.Registry = function (state) {
this.sorter = new CSL.Registry.Comparifier(state, "bibliography_sort"); this.sorter = new CSL.Registry.Comparifier(state, "bibliography_sort");
this.getSortedIds = function () { this.getSortedIds = function () {
ret = []; ret = [];
len = this.reflist.length; for (i = 0, ilen = this.reflist.length; i < ilen; i += 1) {
for (pos = 0; pos < len; pos += 1) { ret.push("" + this.reflist[i].id);
ret.push(this.reflist[pos].id); }
return ret;
};
this.getSortedRegistryItems = function () {
ret = [];
for (i = 0, ilen = this.reflist.length; i < ilen; i += 1) {
ret.push(this.reflist[i]);
} }
return ret; return ret;
}; };
@ -8371,7 +8433,7 @@ CSL.Registry.prototype.dodeletes = function (myhash) {
} }
len = this.ambigcites[ambig].length; len = this.ambigcites[ambig].length;
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
id = this.ambigcites[ambig][pos]; id = "" + this.ambigcites[ambig][pos];
this.refreshes[id] = true; this.refreshes[id] = true;
} }
delete this.registry[key]; delete this.registry[key];
@ -8392,13 +8454,14 @@ CSL.Registry.prototype.doinserts = function (mylist) {
akey = CSL.getAmbiguousCite.call(this.state, Item); akey = CSL.getAmbiguousCite.call(this.state, Item);
this.akeys[akey] = true; this.akeys[akey] = true;
newitem = { newitem = {
"id": item, "id": "" + item,
"seq": 0, "seq": 0,
"offset": 0, "offset": 0,
"sortkeys": false, "sortkeys": false,
"ambig": false, "ambig": false,
"rendered": false, "rendered": false,
"disambig": false "disambig": false,
"ref": Item
}; };
this.registry[item] = newitem; this.registry[item] = newitem;
abase = CSL.getAmbigConfig.call(this.state); abase = CSL.getAmbigConfig.call(this.state);
@ -8469,7 +8532,7 @@ CSL.Registry.prototype.renumber = function () {
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
item = this.reflist[pos]; item = this.reflist[pos];
item.seq = (pos + 1); item.seq = (pos + 1);
if (this.state.tmp.taintedItemIDs && item.seq !== this.oldseq[item.id]) { if (this.state.tmp.taintedItemIDs && item.seq != this.oldseq[item.id]) {
if (this.state.opt.update_mode === CSL.NUMERIC) { if (this.state.opt.update_mode === CSL.NUMERIC) {
this.state.tmp.taintedItemIDs[item.id] = true; this.state.tmp.taintedItemIDs[item.id] = true;
} }
@ -8542,7 +8605,7 @@ CSL.Registry.prototype.registerAmbigToken = function (akey, id, ambig_config, ta
this.registry[id].ambig = akey; this.registry[id].ambig = akey;
var dome = false; var dome = false;
if (tainters) { if (tainters) {
this.registry[id].disambig = CSL.cloneAmbigConfig.call(this.state, ambig_config, this.registry[id].disambig, id, tainters); this.registry[id].disambig = CSL.cloneAmbigConfig.call(this.state, ambig_config, this.registry[id].disambig, tainters);
} else { } else {
this.registry[id].disambig = CSL.cloneAmbigConfig(ambig_config); this.registry[id].disambig = CSL.cloneAmbigConfig(ambig_config);
} }
@ -8590,13 +8653,13 @@ CSL.Registry.NameReg = function (state) {
} }
ikey = CSL.Util.Names.initializeWith(state, skey, "%s"); ikey = CSL.Util.Names.initializeWith(state, skey, "%s");
if (state.opt["givenname-disambiguation-rule"] === "by-cite") { if (state.opt["givenname-disambiguation-rule"] === "by-cite") {
pkey = itemid + pkey; pkey = "" + itemid + pkey;
} }
}; };
evalname = function (item_id, nameobj, namenum, request_base, form, initials) { evalname = function (item_id, nameobj, namenum, request_base, form, initials) {
var pos, len, items, param; var pos, len, items, param;
var nameobj = state.transform.name(state, nameobj, state.opt["locale-pri"]); var nameobj = state.transform.name(state, nameobj, state.opt["locale-pri"]);
set_keys(this.state, item_id, nameobj); set_keys(this.state, "" + item_id, nameobj);
if ("undefined" === typeof this.namereg[pkey] || "undefined" === typeof this.namereg[pkey].ikey[ikey]) { if ("undefined" === typeof this.namereg[pkey] || "undefined" === typeof this.namereg[pkey].ikey[ikey]) {
return request_base; return request_base;
} }
@ -8633,7 +8696,7 @@ CSL.Registry.NameReg = function (state) {
} }
} }
if (param === 0) { if (param === 0) {
pos = this.namereg[pkey].ikey[ikey].items.indexOf(item_id); pos = this.namereg[pkey].ikey[ikey].items.indexOf("" + item_id);
items = this.namereg[pkey].ikey[ikey].items; items = this.namereg[pkey].ikey[ikey].items;
if (pos > -1) { if (pos > -1) {
items = items.slice(0, pos).concat(items.slice(pos + 1)); items = items.slice(0, pos).concat(items.slice(pos + 1));
@ -8641,7 +8704,7 @@ CSL.Registry.NameReg = function (state) {
for (pos = 0, len = items.length; pos < len; pos += 1) { for (pos = 0, len = items.length; pos < len; pos += 1) {
this.state.tmp.taintedItemIDs[items[pos]] = true; this.state.tmp.taintedItemIDs[items[pos]] = true;
} }
pos = this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf(item_id); pos = this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf("" + item_id);
items = this.namereg[pkey].ikey[ikey].skey[skey].items; items = this.namereg[pkey].ikey[ikey].skey[skey].items;
if (pos > -1) { if (pos > -1) {
items = items.slice(0, pos).concat(items.slice(pos + 1)); items = items.slice(0, pos).concat(items.slice(pos + 1));
@ -8649,11 +8712,11 @@ CSL.Registry.NameReg = function (state) {
for (pos = 0, len = items.length; pos < len; pos += 1) { for (pos = 0, len = items.length; pos < len; pos += 1) {
this.state.tmp.taintedItemIDs[items[pos]] = true; this.state.tmp.taintedItemIDs[items[pos]] = true;
} }
if (this.namereg[pkey].items.indexOf(item_id) === -1) { if (this.namereg[pkey].items.indexOf("" + item_id) === -1) {
this.namereg[pkey].items.push(item_id); this.namereg[pkey].items.push("" + item_id);
} }
} else if (param === 1) { } else if (param === 1) {
pos = this.namereg[pkey].items.indexOf(item_id); pos = this.namereg[pkey].items.indexOf("" + item_id);
items = this.namereg[pkey].items; items = this.namereg[pkey].items;
if (pos > -1) { if (pos > -1) {
items = items.slice(0, pos).concat(items.slice(pos + 1)); items = items.slice(0, pos).concat(items.slice(pos + 1));
@ -8661,7 +8724,7 @@ CSL.Registry.NameReg = function (state) {
for (pos = 0, len = items.length; pos < len; pos += 1) { for (pos = 0, len = items.length; pos < len; pos += 1) {
this.state.tmp.taintedItemIDs[items[pos]] = true; this.state.tmp.taintedItemIDs[items[pos]] = true;
} }
pos = this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf(item_id); pos = this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf("" + item_id);
items = this.namereg[pkey].ikey[ikey].skey[skey].items; items = this.namereg[pkey].ikey[ikey].skey[skey].items;
if (pos > -1) { if (pos > -1) {
items = items.slice(0, pos).concat(items.slice(pos + 1)); items = items.slice(0, pos).concat(items.slice(pos + 1));
@ -8669,11 +8732,11 @@ CSL.Registry.NameReg = function (state) {
for (pos = 0, len = items.length; pos < len; pos += 1) { for (pos = 0, len = items.length; pos < len; pos += 1) {
this.state.tmp.taintedItemIDs[items[pos]] = true; this.state.tmp.taintedItemIDs[items[pos]] = true;
} }
if (this.namereg[pkey].ikey[ikey].items.indexOf(item_id) === -1) { if (this.namereg[pkey].ikey[ikey].items.indexOf("" + item_id) === -1) {
this.namereg[pkey].ikey[ikey].items.push(item_id); this.namereg[pkey].ikey[ikey].items.push("" + item_id);
} }
} else if (param === 2) { } else if (param === 2) {
pos = this.namereg[pkey].items.indexOf(item_id); pos = this.namereg[pkey].items.indexOf("" + item_id);
items = this.namereg[pkey].items; items = this.namereg[pkey].items;
if (pos > -1) { if (pos > -1) {
items = items.slice(0, pos).concat(items.slice(pos + 1)); items = items.slice(0, pos).concat(items.slice(pos + 1));
@ -8681,7 +8744,7 @@ CSL.Registry.NameReg = function (state) {
for (pos = 0, len = items.length; pos < len; pos += 1) { for (pos = 0, len = items.length; pos < len; pos += 1) {
this.state.tmp.taintedItemIDs[items[pos]] = true; this.state.tmp.taintedItemIDs[items[pos]] = true;
} }
pos = this.namereg[pkey].ikey[ikey].items.indexOf(item_id); pos = this.namereg[pkey].ikey[ikey].items.indexOf("" + item_id);
items = this.namereg[pkey].ikey[ikey].items; items = this.namereg[pkey].ikey[ikey].items;
if (pos > -1) { if (pos > -1) {
items = items.slice(0, pos).concat(items.slice(pos + 1)); items = items.slice(0, pos).concat(items.slice(pos + 1));
@ -8689,8 +8752,8 @@ CSL.Registry.NameReg = function (state) {
for (pos = 0, len = items.length; pos < len; pos += 1) { for (pos = 0, len = items.length; pos < len; pos += 1) {
this.state.tmp.taintedItemIDs[items[pos]] = true; this.state.tmp.taintedItemIDs[items[pos]] = true;
} }
if (this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf(item_id) === -1) { if (this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf("" + item_id) === -1) {
this.namereg[pkey].ikey[ikey].skey[skey].items.push(item_id); this.namereg[pkey].ikey[ikey].skey[skey].items.push("" + item_id);
} }
} }
return param; return param;
@ -8698,12 +8761,12 @@ CSL.Registry.NameReg = function (state) {
delitems = function (ids) { delitems = function (ids) {
var i, item, pos, len, posA, posB, id, fullkey, llen, ppos, otherid; var i, item, pos, len, posA, posB, id, fullkey, llen, ppos, otherid;
if ("string" === typeof ids || "number" === typeof ids) { if ("string" === typeof ids || "number" === typeof ids) {
ids = [ids]; ids = ["" + ids];
} }
ret = {}; ret = {};
len = ids.length; len = ids.length;
for (pos = 0; pos < len; pos += 1) { for (pos = 0; pos < len; pos += 1) {
id = ids[pos]; id = "" + ids[pos];
if (!this.nameind[id]) { if (!this.nameind[id]) {
continue; continue;
} }
@ -8720,7 +8783,7 @@ CSL.Registry.NameReg = function (state) {
items = this.namereg[pkey].items; items = this.namereg[pkey].items;
if (skey) { if (skey) {
myitems = this.namereg[pkey].ikey[ikey].skey[skey].items; myitems = this.namereg[pkey].ikey[ikey].skey[skey].items;
posB = myitems.indexOf(id); posB = myitems.indexOf("" + id);
if (posB > -1) { if (posB > -1) {
this.namereg[pkey].ikey[ikey].skey[skey].items = myitems.slice(0, posB).concat(myitems.slice([(posB + 1)])); this.namereg[pkey].ikey[ikey].skey[skey].items = myitems.slice(0, posB).concat(myitems.slice([(posB + 1)]));
} }
@ -8733,7 +8796,7 @@ CSL.Registry.NameReg = function (state) {
} }
} }
if (ikey) { if (ikey) {
posB = this.namereg[pkey].ikey[ikey].items.indexOf(id); posB = this.namereg[pkey].ikey[ikey].items.indexOf("" + id);
if (posB > -1) { if (posB > -1) {
items = this.namereg[pkey].ikey[ikey].items.slice(); items = this.namereg[pkey].ikey[ikey].items.slice();
this.namereg[pkey].ikey[ikey].items = items.slice(0, posB).concat(items.slice([posB + 1])); this.namereg[pkey].ikey[ikey].items = items.slice(0, posB).concat(items.slice([posB + 1]));
@ -8747,7 +8810,7 @@ CSL.Registry.NameReg = function (state) {
} }
} }
if (pkey) { if (pkey) {
posB = this.namereg[pkey].items.indexOf(id); posB = this.namereg[pkey].items.indexOf("" + id);
if (posB > -1) { if (posB > -1) {
items = this.namereg[pkey].items.slice(); items = this.namereg[pkey].items.slice();
this.namereg[pkey].items = items.slice(0, posB).concat(items.slice([posB + 1], items.length)); this.namereg[pkey].items = items.slice(0, posB).concat(items.slice([posB + 1], items.length));
@ -8769,7 +8832,7 @@ CSL.Registry.NameReg = function (state) {
}; };
addname = function (item_id, nameobj, pos) { addname = function (item_id, nameobj, pos) {
var nameobj = state.transform.name(state, nameobj, state.opt["locale-pri"]); var nameobj = state.transform.name(state, nameobj, state.opt["locale-pri"]);
set_keys(this.state, item_id, nameobj); set_keys(this.state, "" + item_id, nameobj);
if (pkey) { if (pkey) {
if ("undefined" === typeof this.namereg[pkey]) { if ("undefined" === typeof this.namereg[pkey]) {
this.namereg[pkey] = {}; this.namereg[pkey] = {};
@ -8874,9 +8937,9 @@ CSL.Disambiguation.prototype.evalScan = function (ismax) {
CSL.Disambiguation.prototype.disNames = function (ismax) { CSL.Disambiguation.prototype.disNames = function (ismax) {
var pos, len; var pos, len;
if (this.clashes[1] === 0) { if (this.clashes[1] === 0) {
this.state.registry.registerAmbigToken(this.akey, this.partners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.partners[0].id, this.base);
if (this.nonpartners.length === 1) { if (this.nonpartners.length === 1) {
this.state.registry.registerAmbigToken(this.akey, this.nonpartners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.nonpartners[0].id, this.base);
this.lists[this.listpos] = [this.base,[]]; this.lists[this.listpos] = [this.base,[]];
} else { } else {
this.lists[this.listpos] = [this.base, this.nonpartners]; this.lists[this.listpos] = [this.base, this.nonpartners];
@ -8884,14 +8947,14 @@ CSL.Disambiguation.prototype.disNames = function (ismax) {
} else if (this.clashes[1] < this.clashes[0]) { } else if (this.clashes[1] < this.clashes[0]) {
this.lists[this.listpos] = [this.base, this.partners]; this.lists[this.listpos] = [this.base, this.partners];
if (this.nonpartners.length === 1) { if (this.nonpartners.length === 1) {
this.state.registry.registerAmbigToken(this.akey, this.nonpartners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.nonpartners[0].id, this.base);
} else { } else {
this.lists.push([this.base, this.nonpartners]); this.lists.push([this.base, this.nonpartners]);
} }
} else { } else {
if (ismax || this.advance_mode) { if (ismax || this.advance_mode) {
for (pos = 0, len = this.partners.length; pos < len; pos += 1) { for (pos = 0, len = this.partners.length; pos < len; pos += 1) {
this.state.registry.registerAmbigToken(this.akey, this.partners[pos].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.partners[pos].id, this.base);
} }
if (ismax) { if (ismax) {
this.lists[this.listpos] = [this.base, this.nonpartners]; this.lists[this.listpos] = [this.base, this.nonpartners];
@ -8905,9 +8968,9 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) {
var pos, len; var pos, len;
if (this.clashes[1] === 0) { if (this.clashes[1] === 0) {
this.base = this.decrementNames(); this.base = this.decrementNames();
this.state.registry.registerAmbigToken(this.akey, this.partners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.partners[0].id, this.base);
if (this.nonpartners.length === 1) { if (this.nonpartners.length === 1) {
this.state.registry.registerAmbigToken(this.akey, this.nonpartners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.nonpartners[0].id, this.base);
this.lists[this.listpos] = [this.base,[]]; this.lists[this.listpos] = [this.base,[]];
} else { } else {
this.lists[this.listpos] = [this.base, this.nonpartners]; this.lists[this.listpos] = [this.base, this.nonpartners];
@ -8915,7 +8978,7 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) {
} else if (this.clashes[1] < this.clashes[0]) { } else if (this.clashes[1] < this.clashes[0]) {
this.lists[this.listpos] = [this.base, this.partners]; this.lists[this.listpos] = [this.base, this.partners];
if (this.nonpartners.length === 1) { if (this.nonpartners.length === 1) {
this.state.registry.registerAmbigToken(this.akey, this.nonpartners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.nonpartners[0].id, this.base);
} else { } else {
this.lists.push([this.base, this.nonpartners]); this.lists.push([this.base, this.nonpartners]);
} }
@ -8923,7 +8986,7 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) {
this.base = CSL.cloneAmbigConfig(this.oldbase); this.base = CSL.cloneAmbigConfig(this.oldbase);
if (ismax || this.advance_mode) { if (ismax || this.advance_mode) {
for (pos = 0, len = this.partners.length; pos < len; pos += 1) { for (pos = 0, len = this.partners.length; pos < len; pos += 1) {
this.state.registry.registerAmbigToken(this.akey, this.partners[pos].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.partners[pos].id, this.base);
} }
if (ismax) { if (ismax) {
this.lists[this.listpos] = [this.base, this.nonpartners]; this.lists[this.listpos] = [this.base, this.nonpartners];
@ -8936,9 +8999,9 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) {
CSL.Disambiguation.prototype.disExtraText = function () { CSL.Disambiguation.prototype.disExtraText = function () {
var pos, len; var pos, len;
if (this.clashes[1] === 0) { if (this.clashes[1] === 0) {
this.state.registry.registerAmbigToken(this.akey, this.partners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.partners[0].id, this.base);
if (this.nonpartners.length === 1) { if (this.nonpartners.length === 1) {
this.state.registry.registerAmbigToken(this.akey, this.nonpartners[0].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + this.nonpartners[0].id, this.base);
this.lists[this.listpos] = [this.base,[]]; this.lists[this.listpos] = [this.base,[]];
} else { } else {
this.lists[this.listpos] = [this.base, this.nonpartners]; this.lists[this.listpos] = [this.base, this.nonpartners];
@ -8958,9 +9021,9 @@ CSL.Disambiguation.prototype.disYears = function () {
tokens.sort(this.state.registry.sorter.compareKeys); tokens.sort(this.state.registry.sorter.compareKeys);
for (pos = 0, len = tokens.length; pos < len; pos += 1) { for (pos = 0, len = tokens.length; pos < len; pos += 1) {
if (pos === 0) { if (pos === 0) {
this.state.registry.registerAmbigToken(this.akey, tokens[pos].id, this.base, this.scanlist); this.state.registry.registerAmbigToken(this.akey, "" + tokens[pos].id, this.base, this.scanlist);
} else { } else {
this.state.registry.registerAmbigToken(this.akey, tokens[pos].id, this.base); this.state.registry.registerAmbigToken(this.akey, "" + tokens[pos].id, this.base);
} }
tokens[pos].disambig.year_suffix = ""+pos; tokens[pos].disambig.year_suffix = ""+pos;
} }
@ -9061,7 +9124,7 @@ CSL.Disambiguation.prototype.initVars = function (akey) {
myIds = this.ambigcites[akey]; myIds = this.ambigcites[akey];
if (myIds && myIds.length > 1) { if (myIds && myIds.length > 1) {
for (pos = 0, len = myIds.length; pos < len; pos += 1) { for (pos = 0, len = myIds.length; pos < len; pos += 1) {
myItems.push(this.state.retrieveItem(myIds[pos])); myItems.push(this.state.retrieveItem("" + myIds[pos]));
} }
this.lists.push([this.base, myItems]); this.lists.push([this.base, myItems]);
} }
@ -9117,4 +9180,4 @@ CSL.Disambiguation.prototype.decrementNames = function () {
CSL.Registry.CitationReg = function (state) { CSL.Registry.CitationReg = function (state) {
this.citationById = {}; this.citationById = {};
this.citationByIndex = []; this.citationByIndex = [];
}; };