- update to citeproc-js 1.0.20
From Frank's announcement: This release adds some further fine-tuning to disambiguation, and now retains all names added by disambiguate-add-names when a year-suffix is added to a cite. Also fixes a bug affecting cites containing lone institutional authors. - hopefully fix issues with loading locales from the XPI
This commit is contained in:
parent
6086f4571d
commit
7b062f3b15
4 changed files with 41 additions and 57 deletions
|
@ -199,26 +199,12 @@ Zotero.Cite.System.retrieveItem = function(item){
|
|||
return cslItem;
|
||||
};
|
||||
|
||||
Zotero.Cite.System.retrieveLocale = function(lang){
|
||||
var localesDir = Zotero.getInstallDirectory();
|
||||
[localesDir.append(dir) for each(dir in ["chrome", "content", "zotero", "locale", "csl"])];
|
||||
|
||||
var base = "locales-"+lang;
|
||||
|
||||
var localesFile = localesDir.clone();
|
||||
localesFile.append(base+".xml");
|
||||
if(!localesFile.exists()) {
|
||||
var contents = localesDir.directoryEntries;
|
||||
while(contents.hasMoreElements()) {
|
||||
var file = contents.getNext().QueryInterface(Components.interfaces.nsIFile);
|
||||
if(file.leafName.substr(0, base.length) == base && file.leafName.substr(-4) == ".xml") {
|
||||
localesFile = file;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Zotero.File.getContents(localesFile);
|
||||
Zotero.Cite.System.retrieveLocale = function(lang) {
|
||||
var xhr = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
|
||||
xhr.open("GET", "chrome://zotero/content/locale/csl/locales-"+lang+".xml", false);
|
||||
xhr.overrideMimeType("application/octet-stream");
|
||||
xhr.send();
|
||||
return xhr.responseText;
|
||||
};
|
||||
|
||||
Zotero.Cite.System.getAbbreviations = function() {
|
||||
|
@ -292,8 +278,16 @@ Zotero.Cite.getMonthStrings = function(form, locale) {
|
|||
if(!Zotero.CiteProc.CSL.locale[cslLocale.best]) {
|
||||
let localexml = sys.xml.makeXml(Zotero.Cite.System.retrieveLocale(cslLocale.best));
|
||||
if(!localexml) {
|
||||
Zotero.log("No locale "+cslLocale.best+"; using en-US", "warning");
|
||||
return Zotero.Cite.getMonthStrings(form, "en-US");
|
||||
if(localexml == "en-US") {
|
||||
throw "No locales.xml file could be found for the preferred locale or for en-US. "+
|
||||
"Please ensure that the locales directory exists and is properly populated";
|
||||
} else {
|
||||
let localexml = sys.xml.makeXml(Zotero.Cite.System.retrieveLocale(cslLocale.bare));
|
||||
if(!localexml) {
|
||||
Zotero.log("No locale "+cslLocale.best+"; using en-US", "warning");
|
||||
return Zotero.Cite.getMonthStrings(form, "en-US");
|
||||
}
|
||||
}
|
||||
}
|
||||
Zotero.CiteProc.CSL.localeSet.call(Zotero.CiteProc.CSL, sys, localexml, cslLocale.best, cslLocale.best);
|
||||
}
|
||||
|
|
|
@ -1432,7 +1432,7 @@ CSL.dateParser = function (txt) {
|
|||
};
|
||||
CSL.Engine = function (sys, style, lang, xmlmode) {
|
||||
var attrs, langspec, localexml, locale;
|
||||
this.processor_version = "1.0.19";
|
||||
this.processor_version = "1.0.20";
|
||||
this.csl_version = "1.0";
|
||||
this.sys = sys;
|
||||
this.sys.xml = new CSL.System.Xml.Parsing();
|
||||
|
@ -3642,7 +3642,7 @@ CSL.Node.names = {
|
|||
} else {
|
||||
frontnames = [];
|
||||
}
|
||||
if (tnamesets.length > 0 && tnamesets.slice(-1)[0].species === "org" && !(state.opt.xclass === "in-text" && state.tmp.area.slice(0, 8) === "citation")) {
|
||||
if (tnamesets.length > 0 && tnamesets.slice(-1)[0].species === "org") {
|
||||
tnamesets[0].organization_first = true;
|
||||
tnamesets.slice(-1)[0].organization_last = true;
|
||||
if (frontnames.length) {
|
||||
|
@ -7541,7 +7541,7 @@ CSL.Registry.NameReg = function (state) {
|
|||
};
|
||||
var debug = false;
|
||||
CSL.Registry.prototype.disambiguateCites = function (state, akey, modes, candidate_list) {
|
||||
var ambigs, reg_token, keypos, id_vals, a, base, token, pos, len, tokens, str, maxvals, minval, testpartner, otherstr, base_return, ret, id, key, givensbase, remainder, last_remainder;
|
||||
var ambigs, reg_token, keypos, id_vals, a, base, token, pos, len, tokens, str, maxvals, minval, testpartner, otherstr, base_return, ret, id, key, origbase, remainder, last_remainder;
|
||||
if (!candidate_list) {
|
||||
ambigs = this.ambigcites[akey].slice();
|
||||
this.ambigcites[akey] = [];
|
||||
|
@ -7574,10 +7574,7 @@ CSL.Registry.prototype.disambiguateCites = function (state, akey, modes, candida
|
|||
maxvals = CSL.getMaxVals.call(state);
|
||||
minval = CSL.getMinVal.call(state);
|
||||
base = CSL.getAmbigConfig.call(state);
|
||||
givensbase = [];
|
||||
for (pos = 0, len = base.givens.length; pos < len; pos += 1) {
|
||||
givensbase.push(base.givens[pos].slice());
|
||||
}
|
||||
origbase = CSL.cloneAmbigConfig(base);
|
||||
remainder = tokens.length;
|
||||
last_remainder = this.checkerator.seen.length;
|
||||
while (CSL.runCheckerator.call(this.checkerator)) {
|
||||
|
@ -7614,9 +7611,9 @@ CSL.Registry.prototype.disambiguateCites = function (state, akey, modes, candida
|
|||
if (CSL.evaluateCheckeratorClashes.call(this.checkerator)) {
|
||||
remainder = tokens.length - this.checkerator.seen.length;
|
||||
if (remainder === 1 && last_remainder === 0) {
|
||||
base_return = CSL.decrementCheckeratorGivenNames.call(this, state, base, givensbase, token.id);
|
||||
base_return = CSL.decrementCheckeratorGivenNames.call(this, state, base, origbase, token.id);
|
||||
} else {
|
||||
base_return = CSL.decrementCheckeratorNames.call(this, state, base, givensbase);
|
||||
base_return = CSL.decrementCheckeratorNames.call(this, state, base, origbase, token.id);
|
||||
}
|
||||
last_remainder = remainder;
|
||||
this.registerAmbigToken(akey, token.id, base_return);
|
||||
|
@ -7624,11 +7621,8 @@ CSL.Registry.prototype.disambiguateCites = function (state, akey, modes, candida
|
|||
continue;
|
||||
}
|
||||
if (CSL.maxCheckeratorAmbigLevel.call(this.checkerator)) {
|
||||
if (!state.citation.opt["disambiguate-add-year-suffix"]) {
|
||||
this.checkerator.mode1_counts = false;
|
||||
this.checkerator.maxed_out_bases[token.id] = CSL.cloneAmbigConfig(base);
|
||||
} else {
|
||||
}
|
||||
this.checkerator.mode1_counts = false;
|
||||
this.checkerator.maxed_out_bases[token.id] = CSL.cloneAmbigConfig(base);
|
||||
this.checkerator.seen.push(token.id);
|
||||
base = false;
|
||||
continue;
|
||||
|
@ -7823,36 +7817,39 @@ CSL.incrementCheckeratorAmbigLevel = function () {
|
|||
}
|
||||
}
|
||||
};
|
||||
CSL.decrementCheckeratorGivenNames = function (state, base, givensbase, id) {
|
||||
CSL.decrementCheckeratorGivenNames = function (state, base, origbase, id) {
|
||||
var base_return, ids, pos, len;
|
||||
ids = this.checkerator.ids;
|
||||
this.checkerator.ids = ids.slice(0,ids.indexOf(id)).concat(ids.slice(ids.indexOf(id) + 1));
|
||||
base_return = CSL.cloneAmbigConfig(base);
|
||||
for (pos = 0, len = base_return.givens.length; pos < len; pos += 1) {
|
||||
base_return.givens[pos] = givensbase.slice();
|
||||
base_return.givens[pos] = origbase.givens[pos].slice();
|
||||
}
|
||||
return base_return;
|
||||
};
|
||||
CSL.decrementCheckeratorNames = function (state, base, givensbase) {
|
||||
var base_return, do_me, i, j, pos, len, ppos, llen;
|
||||
CSL.decrementCheckeratorNames = function (state, base, origbase, id) {
|
||||
var base_return, do_me, i, j, pos, len, ppos, llen, ids;
|
||||
base_return = CSL.cloneAmbigConfig(base);
|
||||
do_me = false;
|
||||
len = base_return.givens.length - 1;
|
||||
for (pos = len; pos > -1; pos += -1) {
|
||||
llen = base_return.givens[pos].length - 1;
|
||||
for (ppos = llen; ppos > -1; ppos += -1) {
|
||||
if (base_return.givens[pos][ppos] > givensbase[pos][ppos]) {
|
||||
do_me = true;
|
||||
if (base_return.givens[pos][ppos] > origbase.givens[pos][ppos]) {
|
||||
do_me = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (do_me) {
|
||||
ids = this.checkerator.ids;
|
||||
len = base_return.givens.length - 1;
|
||||
for (pos = len; pos > -1; pos += -1) {
|
||||
llen = base_return.givens[pos].length - 1;
|
||||
for (ppos = llen; ppos > -1; ppos += -1) {
|
||||
if (base_return.givens[pos][ppos] > givensbase[pos][ppos]) {
|
||||
i = -1;
|
||||
if (base_return.givens[pos][ppos] > origbase.givens[pos][ppos]) {
|
||||
if (ids.indexOf(id) > -1) {
|
||||
this.checkerator.ids = ids.slice(0,ids.indexOf(id)).concat(ids.slice(ids.indexOf(id) + 1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (ppos < base_return.names[pos]) {
|
||||
|
@ -7896,4 +7893,4 @@ CSL.getModes = function () {
|
|||
CSL.Registry.CitationReg = function (state) {
|
||||
this.citationById = {};
|
||||
this.citationByIndex = [];
|
||||
};
|
||||
};
|
|
@ -394,18 +394,11 @@ function() {
|
|||
|
||||
if(this._version == "0.8") {
|
||||
// get XSLT file
|
||||
let updateXSLTFile = Zotero.getInstallDirectory();
|
||||
updateXSLTFile.append("updateCSL.xsl");
|
||||
|
||||
// read XSLT file as DOM XML
|
||||
let xmlFiles = [];
|
||||
let fis = Components.classes["@mozilla.org/network/file-input-stream;1"].
|
||||
createInstance(Components.interfaces.nsIFileInputStream);
|
||||
fis.init(updateXSLTFile, 0x01, 0664, 0);
|
||||
let updateXSLT = Components.classes["@mozilla.org/xmlextras/domparser;1"]
|
||||
.createInstance(Components.interfaces.nsIDOMParser)
|
||||
.parseFromStream(fis, "UTF-8", updateXSLTFile.fileSize, "text/xml");
|
||||
fis.close();
|
||||
let xhr = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
|
||||
xhr.open("GET", "chrome://zotero/content/updateCSL.xsl", false);
|
||||
xhr.overrideMimeType("text/xml");
|
||||
xhr.send();
|
||||
let updateXSLT = xhr.responseXML;
|
||||
|
||||
// load XSLT file into XSLTProcessor
|
||||
let xsltProcessor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue