From 0a4fe5725ede4bb4a48db6223eddfc62f445505a Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Wed, 2 Feb 2011 06:49:20 +0000 Subject: [PATCH] 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. --- chrome/content/zotero/xpcom/citeproc.js | 285 +++++++++++++++--------- 1 file changed, 174 insertions(+), 111 deletions(-) diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js index ad55bbb285..4bc821ff9a 100644 --- a/chrome/content/zotero/xpcom/citeproc.js +++ b/chrome/content/zotero/xpcom/citeproc.js @@ -99,7 +99,7 @@ var CSL = { DATE_PARTS: ["year", "month", "day"], DATE_PARTS_ALL: ["year", "month", "day", "season"], 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"], DISAMBIGUATE_OPTIONS: [ "disambiguate-add-names", @@ -140,6 +140,8 @@ var CSL = { 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]$/, 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_FIELD_REGEXP: /{:([-a-z]+):([^}]+)}/, DISPLAY_CLASSES: ["block", "left-margin", "right-inline", "indent"], @@ -1220,7 +1222,7 @@ CSL.compareAmbigConfig = function(a, b) { } return 0; }; -CSL.cloneAmbigConfig = function (config, oldconfig, itemID, tainters) { +CSL.cloneAmbigConfig = function (config, oldconfig, tainters) { var ret, param, pos, ppos, len, llen; ret = {}; ret.names = []; @@ -1725,7 +1727,7 @@ CSL.DateParser = function (txt) { }; CSL.Engine = function (sys, style, lang, forceLang) { var attrs, langspec, localexml, locale; - this.processor_version = "1.0.99"; + this.processor_version = "1.0.105"; this.csl_version = "1.0"; this.sys = sys; this.sys.xml = new CSL.System.Xml.Parsing(); @@ -2017,13 +2019,13 @@ CSL.Engine.prototype.retrieveItems = function (ids) { ret = []; len = ids.length; for (pos = 0; pos < len; pos += 1) { - ret.push(this.retrieveItem(ids[pos])); + ret.push(this.retrieveItem("" + ids[pos])); } return ret; }; CSL.Engine.prototype.retrieveItem = function (id) { var Item, m, pos, len, mm; - Item = this.sys.retrieveItem(id); + Item = this.sys.retrieveItem("" + id); if (Item.note) { m = CSL.NOTE_FIELDS_REGEXP.exec(Item.note); if (m) { @@ -2131,6 +2133,13 @@ CSL.Engine.prototype.setOriginalCreatorNameFormatOption = function (arg) { 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 () { this.has_disambiguate = false; this.mode = "html"; @@ -2280,7 +2289,7 @@ CSL.Engine.prototype.setCitationId = function (citation, force) { id += -1; } } - ret = id; + ret = "" + id; } this.registry.citationreg.citationById[citation.citationID] = citation; return ret; @@ -2292,30 +2301,61 @@ CSL.Engine.prototype.restoreProcessorState = function (citations) { if (!citations) { citations = []; } + var indexNumbers = []; + var citationIds = {}; 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 = []; - for (var j = 0, jlen = citations[i].citationItems.length; j < jlen; j += 1) { - item = citations[i].citationItems[j]; - Item = this.retrieveItem(item.id); + for (var j = 0, jlen = oldCitations[i].citationItems.length; j < jlen; j += 1) { + item = oldCitations[i].citationItems[j]; + if ("undefined" === typeof item.sortkeys) { + item.sortkeys = []; + } + Item = this.retrieveItem("" + item.id); newitem = [Item, item]; sortedItems.push(newitem); - citations[i].citationItems[j].item = Item; - itemList.push(item.id); + oldCitations[i].citationItems[j].item = Item; + itemList.push("" + item.id); } - if (!citations[i].properties.unsorted) { + if (!oldCitations[i].properties.unsorted) { sortedItems.sort(this.citation.srt.compareCompositeKeys); } - citations[i].sortedItems = sortedItems; - this.registry.citationreg.citationById[citations[i].citationID] = citations[i]; - citationList.push([citations[i].citationID, citations[i].properties.noteIndex]); + oldCitations[i].sortedItems = sortedItems; + this.registry.citationreg.citationById[oldCitations[i].citationID] = oldCitations[i]; } 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) { - this.processCitationCluster(citations[0], [], citationList.slice(1)); + ret = this.processCitationCluster(citations[0], [], citationList.slice(1)); } else { this.registry = new CSL.Registry(this); this.tmp = new CSL.Engine.Tmp(); } + return ret; }; CSL.Engine.prototype.updateItems = function (idList, nosort) { var debug = false; @@ -2490,25 +2530,25 @@ CSL.getBibliographyEntries = function (bibsection) { bib_entry = new CSL.Token("group", CSL.START); bib_entry.decorations = [["@bibliography", "entry"]].concat(this[this.build.area].opt.layout_decorations); this.output.startTag("bib_entry", bib_entry); - sortedItems = [[{id: item.id}, item]]; + sortedItems = [[{id: "" + item.id}, item]]; entry_item_ids = []; if (this.registry.registry[item.id].master) { collapse_parallel = true; this.parallel.StartCitation(sortedItems); 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; siblings = this.registry.registry[item.id].siblings; for (ppos = 0, llen = siblings.length; ppos < llen; ppos += 1) { i = this.registry.registry[item.id].siblings[ppos]; 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; } this.parallel.ComposeSet(); this.parallel.PruneOutputQueue(); } 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(""); this.tmp.bibliography_pos += 1; @@ -2559,7 +2599,7 @@ CSL.Engine.prototype.appendCitationCluster = function (citation) { len = this.registry.citationreg.citationByIndex.length; for (pos = 0; pos < len; pos += 1) { 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]; }; @@ -2573,14 +2613,14 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, if (flag === CSL.PREVIEW) { var oldCitationList = this.registry.citationreg.citationByIndex.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 newItemIdsList = []; for (pos = 0, len = newCitationList.length; pos < len; pos += 1) { c = this.registry.citationreg.citationById[newCitationList[pos][0]]; for (ppos = 0, llen = c.citationItems.length; ppos < llen; ppos += 1) { newItemIds[c.citationItems[ppos].id] = true; - newItemIdsList.push(c.citationItems[ppos].id); + newItemIdsList.push("" + c.citationItems[ppos].id); } } var oldAmbigs = {}; @@ -2602,7 +2642,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, len = citation.citationItems.length; for (pos = 0; pos < len; pos += 1) { item = citation.citationItems[pos]; - Item = this.retrieveItem(item.id); + Item = this.retrieveItem("" + item.id); newitem = [Item, item]; sortedItems.push(newitem); citation.citationItems[pos].item = Item; @@ -2646,7 +2686,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, item = citationByIndex[pos].sortedItems[ppos]; if (!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) { 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) { item = citations[ppos].sortedItems[pppos]; if (flag === CSL.PREVIEW) { - if (onecitation.citationID !== citation.citationID) { + if (onecitation.citationID != citation.citationID) { if ("undefined" === typeof first_ref[item[1].id]) { first_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) { items = citations[(ppos - 1)].sortedItems; 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; } llllen = items.slice(1).length; for (ppppos = 0; ppppos < llllen; ppppos += 1) { 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; } } @@ -2719,7 +2759,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } else { 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; } else { suprame = true; @@ -2752,19 +2792,19 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } if (suprame) { 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]; } } } 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"]) { item[1]["near-note"] = true; } last_ref[item[1].id] = onecitation.properties.noteIndex; } - if (onecitation.citationID !== citation.citationID) { + if (onecitation.citationID != citation.citationID) { llllen = CSL.POSITION_TEST_VARS.length; for (ppppos = 0; ppppos < llllen; ppppos += 1) { param = CSL.POSITION_TEST_VARS[ppppos]; @@ -2804,7 +2844,7 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } oldItemIds = []; for (pos = 0, len = oldItemList.length; pos < len; pos += 1) { - oldItemIds.push(oldItemList[pos].id); + oldItemIds.push("" + oldItemList[pos].id); } this.updateItems(oldItemIds); for (key in oldAmbigs) { @@ -2813,13 +2853,13 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } else { for (key in this.tmp.taintedCitationIDs) { if (this.tmp.taintedCitationIDs.hasOwnProperty(key)) { - if (key === citation.citationID) { + if (key == citation.citationID) { continue; } var mycitation = this.registry.citationreg.citationById[key]; this.tmp.citation_pos = mycitation.properties.index; this.tmp.citation_note_index = mycitation.properties.noteIndex; - this.tmp.citation_id = mycitation.citationID; + this.tmp.citation_id = "" + mycitation.citationID; obj = []; obj.push(mycitation.properties.index); 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.citation_pos = citation.properties.index; this.tmp.citation_note_index = citation.properties.noteIndex; - this.tmp.citation_id = citation.citationID; + this.tmp.citation_id = "" + citation.citationID; obj = []; obj.push(citationsPre.length); obj.push(this.process_CitationCluster.call(this, sortedItems)); @@ -2861,7 +2901,7 @@ CSL.Engine.prototype.makeCitationCluster = function (rawList) { len = rawList.length; for (pos = 0; pos < len; pos += 1) { item = rawList[pos]; - Item = this.retrieveItem(item.id); + Item = this.retrieveItem("" + item.id); newitem = [Item, item]; inputList.push(newitem); } @@ -2932,17 +2972,17 @@ CSL.getCitationCluster = function (inputList, citationID) { last_collapsed = this.tmp.have_collapsed; params = {}; 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 { this.tmp.term_predecessor = false; CSL.getCite.call(this, Item, item); } if (!this.tmp.cite_renders_content) { error_object = { - citationID: this.tmp.citation_id, + citationID: "" + this.tmp.citation_id, index: this.tmp.citation_pos, noteIndex: this.tmp.citation_note_index, - itemID: Item.id, + itemID: "" + Item.id, citationItems_pos: pos, error_code: CSL.ERROR_NO_RENDERED_FORM }; @@ -3078,13 +3118,13 @@ CSL.getCite = function (Item, item, prevItemID) { if (this.tmp.area === "bibliography") { error_object = { index: this.tmp.bibliography_pos, - itemID: Item.id, + itemID: "" + Item.id, error_code: CSL.ERROR_NO_RENDERED_FORM }; this.tmp.bibliography_errors.push(error_object); } } - return Item.id; + return "" + Item.id; }; CSL.citeStart = function (Item) { this.tmp.lastchr = ""; @@ -3588,6 +3628,12 @@ CSL.Node["date-part"] = { number = new CSL.NumericBlob(num, this); formatter = new CSL.Util.Suffixator(CSL.SUFFIX_CHARS); 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"); } } @@ -3911,9 +3957,8 @@ CSL.Node.key = { if ("undefined" === typeof dp) { dp = {}; } - len = CSL.DATE_PARTS_INTERNAL.length; - for (pos = 0; pos < len; pos += 1) { - elem = CSL.DATE_PARTS_INTERNAL[pos]; + for (var i = 0, ilen = CSL.DATE_PARTS_INTERNAL.length; i < ilen; i += 1) { + elem = CSL.DATE_PARTS_INTERNAL[i]; value = 0; e = elem; if (e.slice(-4) === "_end") { @@ -3956,11 +4001,10 @@ CSL.Node.key = { tlen = target.length; keypos = false; CSL.expandMacro.call(state, token); - len = target.slice(tlen).length; - for (pos = 0; pos < len; pos += 1) { - tok = target.slice(tlen)[pos]; + for (var i = 0, ilen = target.slice(tlen).length; i < ilen; i += 1) { + tok = target.slice(tlen)[i]; if (tok && tok.name === "text" && tok.dateparts) { - keypos = pos; + keypos = i; break; } } @@ -4361,7 +4405,7 @@ CSL.Node.names = { } lllen = lllst.length; for (pppos = 0; pppos < lllen; pppos += 1) { - name = {literal: lllst[pppos]}; + name = {literal: lllst[pppos], family:'', given:''}; nameset.names.push(name); } tnamesets.push(nameset); @@ -4731,7 +4775,7 @@ CSL.Node.names = { local_count += display_names.length; llen = nameset.names.length; 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]; if ("undefined" === typeof chk) { state.tmp.disambig_settings.givens.push([]); @@ -4740,12 +4784,12 @@ CSL.Node.names = { if ("undefined" === typeof chk) { myform = state.output.getToken("name").strings.form; 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); } myform = state.output.getToken("name").strings.form; 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) { state.tmp.disambig_settings.givens[state.tmp.nameset_counter][ppos] = 2; param = 2; @@ -4758,7 +4802,7 @@ CSL.Node.names = { } param = val; 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 { param = paramx; @@ -5054,7 +5098,7 @@ CSL.Node.text = { this.successor_prefix = state[state.build.area].opt.layout_delimiter; this.splice_prefix = state[state.build.area].opt.layout_delimiter; func = function (state, Item, item) { - id = Item.id; + id = "" + Item.id; if (!state.tmp.just_looking) { if (item && item["author-only"]) { state.tmp.element_trace.replace("do-not-suppress-me"); @@ -6209,6 +6253,23 @@ CSL.Transform = function (state) { } } 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) { var i, ret, optLangTag, ilen, key, langTag; if (state.tmp.area.slice(-5) === "_sort") { @@ -6223,15 +6284,10 @@ CSL.Transform = function (state) { if (!name.given) { name.given = ""; } - var static_ordering_val = false; var static_ordering_freshcheck = false; var block_initialize = false; var transliterated = false; - if (name["static-ordering"]) { - static_ordering_val = true; - } else if (!(name.family.replace('"', '', 'g') + name.given).match(CSL.ROMANESQUE_REGEXP)) { - static_ordering_val = true; - } + var static_ordering_val = getStaticOrder(name); if (langTags && name.multi) { for (i = 0, ilen = langTags.length; i < ilen; i += 1) { langTag = langTags[i]; @@ -6262,7 +6318,7 @@ CSL.Transform = function (state) { block_initialize:block_initialize } if (static_ordering_freshcheck && - (name.family.replace('"','','g') + name.given).match(CSL.ROMANESQUE_REGEXP)) { + !getStaticOrder(name, true)) { name["static-ordering"] = false; } if (state.opt["parse-names"] @@ -6311,7 +6367,7 @@ CSL.Parallel.prototype.StartCitation = function (sortedItems, out) { CSL.Parallel.prototype.StartCite = function (Item, item, prevItemID) { var position, len, pos, x, curr, master, last_id, prev_locator, curr_locator, is_master, parallel; 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.sortedItemsPos += 1; @@ -6338,18 +6394,18 @@ CSL.Parallel.prototype.StartCite = function (Item, item, prevItemID) { this.cite.back_forceme = []; this.cite.position = position; this.cite.Item = Item; - this.cite.itemId = Item.id; - this.cite.prevItemID = prevItemID; + this.cite.itemId = "" + Item.id; + this.cite.prevItemID = "" + prevItemID; this.target = "front"; if (this.sortedItems && this.sortedItemsPos > 0 && this.sortedItemsPos < this.sortedItems.length) { 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; prev_locator = false; - if (master === curr.id) { + if (master == curr.id) { len = this.sortedItemsPos - 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; break; } @@ -7050,7 +7106,7 @@ CSL.Util.Names.compareNamesets = function (base_nameset, nameset) { llen = CSL.NAME_PARTS.length; for (ppos = 0; ppos < llen; ppos += 1) { 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; } } @@ -8319,9 +8375,15 @@ CSL.Registry = function (state) { this.sorter = new CSL.Registry.Comparifier(state, "bibliography_sort"); this.getSortedIds = function () { ret = []; - len = this.reflist.length; - for (pos = 0; pos < len; pos += 1) { - ret.push(this.reflist[pos].id); + for (i = 0, ilen = this.reflist.length; i < ilen; i += 1) { + ret.push("" + this.reflist[i].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; }; @@ -8371,7 +8433,7 @@ CSL.Registry.prototype.dodeletes = function (myhash) { } len = this.ambigcites[ambig].length; for (pos = 0; pos < len; pos += 1) { - id = this.ambigcites[ambig][pos]; + id = "" + this.ambigcites[ambig][pos]; this.refreshes[id] = true; } delete this.registry[key]; @@ -8392,13 +8454,14 @@ CSL.Registry.prototype.doinserts = function (mylist) { akey = CSL.getAmbiguousCite.call(this.state, Item); this.akeys[akey] = true; newitem = { - "id": item, + "id": "" + item, "seq": 0, "offset": 0, "sortkeys": false, "ambig": false, "rendered": false, - "disambig": false + "disambig": false, + "ref": Item }; this.registry[item] = newitem; abase = CSL.getAmbigConfig.call(this.state); @@ -8469,7 +8532,7 @@ CSL.Registry.prototype.renumber = function () { for (pos = 0; pos < len; pos += 1) { item = this.reflist[pos]; 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) { 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; var dome = false; 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 { 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"); if (state.opt["givenname-disambiguation-rule"] === "by-cite") { - pkey = itemid + pkey; + pkey = "" + itemid + pkey; } }; evalname = function (item_id, nameobj, namenum, request_base, form, initials) { var pos, len, items, param; 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]) { return request_base; } @@ -8633,7 +8696,7 @@ CSL.Registry.NameReg = function (state) { } } 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; if (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) { 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; if (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) { this.state.tmp.taintedItemIDs[items[pos]] = true; } - if (this.namereg[pkey].items.indexOf(item_id) === -1) { - this.namereg[pkey].items.push(item_id); + if (this.namereg[pkey].items.indexOf("" + item_id) === -1) { + this.namereg[pkey].items.push("" + item_id); } } 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; if (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) { 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; if (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) { this.state.tmp.taintedItemIDs[items[pos]] = true; } - if (this.namereg[pkey].ikey[ikey].items.indexOf(item_id) === -1) { - this.namereg[pkey].ikey[ikey].items.push(item_id); + if (this.namereg[pkey].ikey[ikey].items.indexOf("" + item_id) === -1) { + this.namereg[pkey].ikey[ikey].items.push("" + item_id); } } 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; if (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) { 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; if (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) { this.state.tmp.taintedItemIDs[items[pos]] = true; } - if (this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf(item_id) === -1) { - this.namereg[pkey].ikey[ikey].skey[skey].items.push(item_id); + if (this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf("" + item_id) === -1) { + this.namereg[pkey].ikey[ikey].skey[skey].items.push("" + item_id); } } return param; @@ -8698,12 +8761,12 @@ CSL.Registry.NameReg = function (state) { delitems = function (ids) { var i, item, pos, len, posA, posB, id, fullkey, llen, ppos, otherid; if ("string" === typeof ids || "number" === typeof ids) { - ids = [ids]; + ids = ["" + ids]; } ret = {}; len = ids.length; for (pos = 0; pos < len; pos += 1) { - id = ids[pos]; + id = "" + ids[pos]; if (!this.nameind[id]) { continue; } @@ -8720,7 +8783,7 @@ CSL.Registry.NameReg = function (state) { items = this.namereg[pkey].items; if (skey) { myitems = this.namereg[pkey].ikey[ikey].skey[skey].items; - posB = myitems.indexOf(id); + posB = myitems.indexOf("" + id); if (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) { - posB = this.namereg[pkey].ikey[ikey].items.indexOf(id); + posB = this.namereg[pkey].ikey[ikey].items.indexOf("" + id); if (posB > -1) { items = this.namereg[pkey].ikey[ikey].items.slice(); 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) { - posB = this.namereg[pkey].items.indexOf(id); + posB = this.namereg[pkey].items.indexOf("" + id); if (posB > -1) { items = this.namereg[pkey].items.slice(); 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) { 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 ("undefined" === typeof this.namereg[pkey]) { this.namereg[pkey] = {}; @@ -8874,9 +8937,9 @@ CSL.Disambiguation.prototype.evalScan = function (ismax) { CSL.Disambiguation.prototype.disNames = function (ismax) { var pos, len; 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) { - 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,[]]; } else { 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]) { this.lists[this.listpos] = [this.base, this.partners]; 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 { this.lists.push([this.base, this.nonpartners]); } } else { if (ismax || this.advance_mode) { 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) { this.lists[this.listpos] = [this.base, this.nonpartners]; @@ -8905,9 +8968,9 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) { var pos, len; if (this.clashes[1] === 0) { 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) { - 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,[]]; } else { 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]) { this.lists[this.listpos] = [this.base, this.partners]; 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 { this.lists.push([this.base, this.nonpartners]); } @@ -8923,7 +8986,7 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) { this.base = CSL.cloneAmbigConfig(this.oldbase); if (ismax || this.advance_mode) { 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) { this.lists[this.listpos] = [this.base, this.nonpartners]; @@ -8936,9 +8999,9 @@ CSL.Disambiguation.prototype.disGivens = function (ismax) { CSL.Disambiguation.prototype.disExtraText = function () { var pos, len; 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) { - 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,[]]; } else { this.lists[this.listpos] = [this.base, this.nonpartners]; @@ -8958,9 +9021,9 @@ CSL.Disambiguation.prototype.disYears = function () { tokens.sort(this.state.registry.sorter.compareKeys); for (pos = 0, len = tokens.length; pos < len; pos += 1) { 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 { - 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; } @@ -9061,7 +9124,7 @@ CSL.Disambiguation.prototype.initVars = function (akey) { myIds = this.ambigcites[akey]; if (myIds && myIds.length > 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]); } @@ -9117,4 +9180,4 @@ CSL.Disambiguation.prototype.decrementNames = function () { CSL.Registry.CitationReg = function (state) { this.citationById = {}; this.citationByIndex = []; -}; \ No newline at end of file +};