www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit b8ce002df3d328621b2ff15ecdfc24b6528ebe09
parent 7677eccb9f3cc4930e426ed3bff0f6dc9ae2534e
Author: Simon Kornblith <simon@simonster.com>
Date:   Wed, 17 Apr 2013 18:01:52 -0400

Update to citeproc-js 1.0.451

Diffstat:
Mchrome/content/zotero/xpcom/citeproc.js | 117+++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
1 file changed, 81 insertions(+), 36 deletions(-)

diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js @@ -57,7 +57,7 @@ if (!Array.indexOf) { }; } var CSL = { - PROCESSOR_VERSION: "1.0.450", + PROCESSOR_VERSION: "1.0.451", CONDITION_LEVEL_TOP: 1, CONDITION_LEVEL_BOTTOM: 2, PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/, @@ -4683,6 +4683,8 @@ CSL.getCite = function (Item, item, prevItemID) { return "" + Item.id; }; CSL.citeStart = function (Item, item) { + this.tmp.disambiguate_count = 0; + this.tmp.disambiguate_maxMax = 0; this.tmp.same_author_as_previous_cite = false; if (!this.tmp.suppress_decorations) { this.tmp.subsequent_author_substitute_ok = true; @@ -6804,7 +6806,7 @@ CSL.NameOutput.prototype._runDisambigNames = function (lst, pos) { if (this.state.tmp.disambig_request) { var val = this.state.tmp.disambig_settings.givens[pos][i]; if (val === 1 && - this.state.opt["givenname-disambiguation-rule"] === "by-cite" && + this.state.citation.opt["givenname-disambiguation-rule"] === "by-cite" && ("undefined" === typeof this.name.strings["initialize-with"] || "undefined" === typeof lst[i].given)) { val = 2; @@ -6955,6 +6957,7 @@ CSL.NameOutput.prototype._imposeNameConstraints = function (lst, count, key, pos } } this.state.tmp.disambig_settings.names[pos] = lst[key].length; + this.state.disambiguate.padBase(this.state.tmp.disambig_settings); }; CSL.NameOutput.prototype.getEtAlConfig = function () { var item = this.item; @@ -8819,7 +8822,10 @@ CSL.Attributes["@disambiguate"] = function (state, arg) { state.opt.has_disambiguate = true; var func = function (Item, item) { var ret; - if (state.tmp.disambig_settings.disambiguate) { + state.tmp.disambiguate_maxMax += 1; + if (state.tmp.disambig_settings.disambiguate + && state.tmp.disambiguate_count < state.tmp.disambig_settings.disambiguate) { + state.tmp.disambiguate_count += 1; return true; } return false; @@ -9581,7 +9587,7 @@ CSL.Attributes["@newdate"] = function (state, arg) { }; CSL.Attributes["@givenname-disambiguation-rule"] = function (state, arg) { if (CSL.GIVENNAME_DISAMBIGUATION_RULES.indexOf(arg) > -1) { - state.opt["givenname-disambiguation-rule"] = arg; + state.citation.opt["givenname-disambiguation-rule"] = arg; } }; CSL.Attributes["@collapse"] = function (state, arg) { @@ -12719,7 +12725,7 @@ CSL.Registry.prototype.dodeletes = function (myhash) { mypos = this.ambigcites[ambig].indexOf(key); if (mypos > -1) { items = this.ambigcites[ambig].slice(); - this.ambigcites[ambig] = items.slice(0, mypos).concat(items.slice([(mypos + 1)], items.length)); + this.ambigcites[ambig] = items.slice(0, mypos).concat(items.slice(mypos+1, items.length)); } len = this.ambigcites[ambig].length; for (pos = 0; pos < len; pos += 1) { @@ -12926,6 +12932,13 @@ CSL.Registry.prototype.registerAmbigToken = function (akey, id, ambig_config) { if (new_names_params !== old_names_params) { this.state.tmp.taintedItemIDs[id] = true; } + for (var j=0,jlen=ambig_config.givens[i].length;j<jlen;j+=1) { + var new_gnames_params = ambig_config.givens[i][j]; + var old_gnames_params = this.registry[id].disambig.givens[i][j]; + if (new_gnames_params !== old_gnames_params) { + this.state.tmp.taintedItemIDs[id] = true; + } + } } } if (!this.ambigcites[akey]) { @@ -12983,7 +12996,7 @@ CSL.Registry.NameReg = function (state) { skey = skey.replace(/,\!* [^,]$/, ""); } ikey = CSL.Util.Names.initializeWith(state, skey, "%s"); - if (state.opt["givenname-disambiguation-rule"] === "by-cite") { + if (state.citation.opt["givenname-disambiguation-rule"] === "by-cite") { pkey = "" + itemid + pkey; } }; @@ -12997,7 +13010,7 @@ CSL.Registry.NameReg = function (state) { set_keys(this.state, "" + item_id, nameobj); param = 2; dagopt = state.opt["disambiguate-add-givenname"]; - gdropt = state.opt["givenname-disambiguation-rule"]; + gdropt = state.citation.opt["givenname-disambiguation-rule"]; var gdropt_orig = gdropt; if (gdropt === "by-cite") { gdropt = "all-names"; @@ -13122,8 +13135,8 @@ CSL.Registry.NameReg = function (state) { var i, ilen; var res = state.nameOutput.getName(nameobj, "locale-translit", true); nameobj = res.name; - if (state.opt["givenname-disambiguation-rule"] - && state.opt["givenname-disambiguation-rule"].slice(0, 8) === "primary-" + if (state.citation.opt["givenname-disambiguation-rule"] + && state.citation.opt["givenname-disambiguation-rule"].slice(0, 8) === "primary-" && pos !== 0) { return; } @@ -13287,16 +13300,20 @@ CSL.Disambiguation.prototype.disNames = function (ismax) { }; CSL.Disambiguation.prototype.disExtraText = function () { var pos, len, mybase; - if (!this.base.disambiguate) { - this.initVars(this.akey) + if (!this.base.disambiguate || this.state.tmp.disambiguate_count !== this.state.tmp.disambiguate_maxMax) { this.modeindex = 0; - this.base.disambiguate = true; - this.betterbase.disambiguate = true; - this.initGivens = true; - for (var i = 0, ilen = this.lists[this.listpos][1].length; i < ilen; i += 1) { - this.state.tmp.taintedItemIDs[this.lists[this.listpos][1][i].id] = true; + this.base.disambiguate = this.state.tmp.disambiguate_count; + this.betterbase.disambiguate = this.state.tmp.disambiguate_count; + if (!this.base.disambiguate) { + this.initGivens = true; + this.base.disambiguate = 1; + for (var i = 0, ilen = this.lists[this.listpos][1].length; i < ilen; i += 1) { + this.state.tmp.taintedItemIDs[this.lists[this.listpos][1][i].id] = true; + } + } else { + this.disNames(); } - } else if (this.lists[this.listpos][1].length > 1) { + } else if (this.state.tmp.disambiguate_count === this.state.tmp.disambiguate_maxMax) { if (this.modeindex === this.modes.length - 1) { var base = this.lists[this.listpos][0]; for (var i = 0, ilen = this.lists[this.listpos][1].length; i < ilen; i += 1) { @@ -13361,17 +13378,22 @@ CSL.Disambiguation.prototype.incrementDisambig = function () { increment_namesets = true; } if ("number" === typeof this.givensMax) { - if (this.base.givens[this.gnameset][this.gname] < this.givensMax) { + if (this.base.givens.length && this.base.givens[this.gnameset][this.gname] < this.givensMax) { this.base.givens[this.gnameset][this.gname] += 1; } else { increment_names = true; } } - if ("number" === typeof this.namesMax && increment_names) { - increment_namesets = false; - if (this.base.names[this.gnameset] < this.namesMax) { - this.base.names[this.gnameset] += 1; - this.gname += 1; + if ("number" === typeof this.namesMax + && increment_names) { + if (this.state.opt["disambiguate-add-names"]) { + increment_namesets = false; + if (this.base.names[this.gnameset] < this.namesMax) { + this.base.names[this.gnameset] += 1; + this.gname += 1; + } else { + increment_namesets = true; + } } else { increment_namesets = true; } @@ -13386,10 +13408,13 @@ CSL.Disambiguation.prototype.incrementDisambig = function () { } } if (("number" !== typeof this.namesetsMax || this.namesetsMax === -1 || this.gnameset === this.namesetsMax) - && ("number" !== typeof this.namesMax || this.base.names[this.gnameset] === this.namesMax) - && ("number" != typeof this.givensMax || "undefined" === typeof this.base.givens[this.gnameset][this.gname] || this.base.givens[this.gnameset][this.gname] === this.givensMax)) { + && (!this.state.opt["disambiguate-add-names"] || "number" !== typeof this.namesMax || this.base.names[this.gnameset] === this.namesMax) + && ("number" != typeof this.givensMax || "undefined" === typeof this.base.givens[this.gnameset] || "undefined" === typeof this.base.givens[this.gnameset][this.gname] || this.base.givens[this.gnameset][this.gname] === this.givensMax)) { maxed = true; } + } else if ("disExtraText" === this.modes[this.modeindex]) { + this.base.disambiguate += 1; + this.betterbase.disambiguate += 1; } return maxed; }; @@ -13443,29 +13468,43 @@ CSL.Disambiguation.prototype.initVars = function (akey) { this.Item = this.state.retrieveItem("" + myIds[0]); } this.modeindex = 0; - this.namesMax = this.maxNamesByItemId[this.Item.id][0]; - for (i = 0, ilen = this.base.givens.length; i < ilen; i += 1) { - for (var j = 0, jlen = this.namesMax; j < jlen; j += 1) { - if (!this.base.givens[i][j]) { - this.base.givens[i][j] = 0; - this.betterbase.givens[i][j] = 0; - } + if (this.state.citation.opt["disambiguate-add-names"] || true) { + this.namesMax = this.maxNamesByItemId[this.Item.id][0]; + } else { + var namesMax = this.base.names[0]; + for (var i=1,ilen=this.base.names.length;i<ilen;i+=1){ + namesMax = Math.max(namesMax,this.base.names.names[i]); } } + this.padBase(this.base); + this.padBase(this.betterbase); this.base.year_suffix = false; this.base.disambiguate = false; this.betterbase.year_suffix = false; this.betterbase.disambiguate = false; - if (this.state.opt["givenname-disambiguation-rule"] === "by-cite") { + if (this.state.citation.opt["givenname-disambiguation-rule"] === "by-cite" + && this.state.opt["disambiguate-add-givenname"]) { this.givensMax = 2; } return true; }; +CSL.Disambiguation.prototype.padBase = function (base) { + for (i = 0, ilen = base.names.length; i < ilen; i += 1) { + if (!base.givens[i]) { + base.givens[i] = []; + } + for (var j=0,jlen=base.names[i];j<jlen;j+=1) { + if (!base.givens[i][j]) { + base.givens[i][j] = 0; + } + } + } +} CSL.Disambiguation.prototype.configModes = function () { var dagopt, gdropt; this.modes = []; dagopt = this.state.opt["disambiguate-add-givenname"]; - gdropt = this.state.opt["givenname-disambiguation-rule"]; + gdropt = this.state.citation.opt["givenname-disambiguation-rule"]; if (this.state.opt['disambiguate-add-names'] || (dagopt && gdropt === "by-cite")) { this.modes.push("disNames"); } @@ -13482,6 +13521,9 @@ CSL.Disambiguation.prototype.getCiteData = function(Item, base) { base = CSL.getAmbigConfig.call(this.state); this.maxNamesByItemId[Item.id] = CSL.getMaxVals.call(this.state); this.state.registry.registry[Item.id].disambig.givens = this.state.tmp.disambig_settings.givens.slice(); + for (var i=0,ilen=this.state.registry.registry[Item.id].disambig.givens.length;i<ilen;i+=1) { + this.state.registry.registry[Item.id].disambig.givens[i] = this.state.tmp.disambig_settings.givens[i].slice(); + } this.namesetsMax = this.state.registry.registry[Item.id].disambig.names.length - 1; if (!this.base) { this.base = base; @@ -13493,9 +13535,12 @@ CSL.Disambiguation.prototype.getCiteData = function(Item, base) { var update = false; for (var i = 0, ilen = base.names.length; i < ilen; i += 1) { if (base.names[i] > this.base.names[i]) { - this.base.givens[i] = this.base.givens[i].concat(this.base.givens[i].slice(this.base.names[i])); + this.base.givens[i] = base.givens[i].slice(); this.base.names[i] = base.names[i]; this.betterbase.names = this.base.names.slice(); + this.betterbase.givens = this.base.givens.slice(); + this.padBase(this.base); + this.padBase(this.betterbase); } } this.betterbase.givens = this.base.givens.slice(); @@ -13505,7 +13550,7 @@ CSL.Disambiguation.prototype.getCiteData = function(Item, base) { } }; CSL.Disambiguation.prototype.captureStepToBase = function() { - if (this.state.opt["givenname-disambiguation-rule"] === "by-cite") { + if (this.state.citation.opt["givenname-disambiguation-rule"] === "by-cite") { this.betterbase.givens[this.gnameset][this.gname] = this.base.givens[this.gnameset][this.gname]; } this.betterbase.names[this.gnameset] = this.base.names[this.gnameset];