Update to citeproc-js 1.0.202
This commit is contained in:
parent
6b5a3b71f2
commit
c078415c26
1 changed files with 233 additions and 202 deletions
|
@ -620,6 +620,14 @@ CSL_E4X.prototype.addInstitutionNodes = function(myxml) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
CSL_E4X.prototype.flagDateMacros = function(myxml) {
|
||||||
|
default xml namespace = "http://purl.org/net/xbiblio/csl"; with({});
|
||||||
|
for each (node in myxml..macro) {
|
||||||
|
if (node..date.length()) {
|
||||||
|
node.@['macro-has-date'] = 'true';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
CSL.getSortCompare = function () {
|
CSL.getSortCompare = function () {
|
||||||
var strcmp;
|
var strcmp;
|
||||||
try {
|
try {
|
||||||
|
@ -740,11 +748,15 @@ CSL.Output.Queue.prototype.popFormats = function (tokenstore) {
|
||||||
};
|
};
|
||||||
CSL.Output.Queue.prototype.startTag = function (name, token) {
|
CSL.Output.Queue.prototype.startTag = function (name, token) {
|
||||||
var tokenstore = {};
|
var tokenstore = {};
|
||||||
|
if (this.state.tmp["doing-macro-with-date"] && this.state.tmp.area.slice(-5) === "_sort") {
|
||||||
|
token = this.empty;
|
||||||
|
name = "empty";
|
||||||
|
}
|
||||||
tokenstore[name] = token;
|
tokenstore[name] = token;
|
||||||
this.pushFormats(tokenstore);
|
this.pushFormats(tokenstore);
|
||||||
this.openLevel(name);
|
this.openLevel(name);
|
||||||
};
|
};
|
||||||
CSL.Output.Queue.prototype.endTag = function () {
|
CSL.Output.Queue.prototype.endTag = function (name) {
|
||||||
this.closeLevel();
|
this.closeLevel();
|
||||||
this.popFormats();
|
this.popFormats();
|
||||||
};
|
};
|
||||||
|
@ -773,6 +785,14 @@ CSL.Output.Queue.prototype.closeLevel = function (name) {
|
||||||
CSL.Output.Queue.prototype.append = function (str, tokname, notSerious) {
|
CSL.Output.Queue.prototype.append = function (str, tokname, notSerious) {
|
||||||
var token, blob, curr;
|
var token, blob, curr;
|
||||||
var useblob = true;
|
var useblob = true;
|
||||||
|
if (this.state.tmp["doing-macro-with-date"]) {
|
||||||
|
if (tokname !== "macro-with-date") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (tokname === "macro-with-date") {
|
||||||
|
tokname = "empty";
|
||||||
|
}
|
||||||
|
}
|
||||||
if ("undefined" === typeof str) {
|
if ("undefined" === typeof str) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1022,7 +1042,7 @@ CSL.Output.Queue.prototype.renderBlobs = function (blobs, delim) {
|
||||||
this.append(str, "empty", true);
|
this.append(str, "empty", true);
|
||||||
var str_blob = this.pop();
|
var str_blob = this.pop();
|
||||||
var count_offset_characters = state.tmp.count_offset_characters;
|
var count_offset_characters = state.tmp.count_offset_characters;
|
||||||
var str = this.string(state, [str_blob], false);
|
str = this.string(state, [str_blob], false);
|
||||||
state.tmp.count_offset_characters = count_offset_characters;
|
state.tmp.count_offset_characters = count_offset_characters;
|
||||||
if (blob.strings["text-case"]) {
|
if (blob.strings["text-case"]) {
|
||||||
str = CSL.Output.Formatters[blob.strings["text-case"]](this.state, str);
|
str = CSL.Output.Formatters[blob.strings["text-case"]](this.state, str);
|
||||||
|
@ -1416,19 +1436,13 @@ CSL.cloneAmbigConfig = function (config, oldconfig, tainters) {
|
||||||
}
|
}
|
||||||
ret.givens.push(param);
|
ret.givens.push(param);
|
||||||
}
|
}
|
||||||
if (tainters && tainters.length > 1) {
|
if (oldconfig) {
|
||||||
if (tainters.length == 2 || (oldconfig && oldconfig.year_suffix !== config.year_suffix)) {
|
ret.year_suffix = oldconfig.year_suffix;
|
||||||
for (i = 0, ilen = tainters.length; i < ilen; i += 1) {
|
ret.disambiguate = oldconfig.disambiguate;
|
||||||
var oldYS = this.registry.registry[tainters[i].id].disambig.year_suffix;
|
} else {
|
||||||
if (tainters && (false === oldYS || oldYS != i)) {
|
ret.year_suffix = config.year_suffix;
|
||||||
this.tmp.taintedItemIDs[tainters[i].id] = true;
|
ret.disambiguate = config.disambiguate;
|
||||||
}
|
|
||||||
}
|
|
||||||
oldconfig = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ret.year_suffix = config.year_suffix;
|
|
||||||
ret.disambiguate = config.disambiguate;
|
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
CSL.getAmbigConfig = function () {
|
CSL.getAmbigConfig = function () {
|
||||||
|
@ -1465,16 +1479,25 @@ CSL.tokenExec = function (token, Item, item) {
|
||||||
return next;
|
return next;
|
||||||
};
|
};
|
||||||
CSL.expandMacro = function (macro_key_token) {
|
CSL.expandMacro = function (macro_key_token) {
|
||||||
var mkey, start_token, key, end_token, navi, macroxml, newoutput, mergeoutput, end_of_macro;
|
var mkey, start_token, key, end_token, navi, macroxml, newoutput, mergeoutput, end_of_macro, func;
|
||||||
mkey = macro_key_token.postponed_macro;
|
mkey = macro_key_token.postponed_macro;
|
||||||
if (this.build.macro_stack.indexOf(mkey) > -1) {
|
if (this.build.macro_stack.indexOf(mkey) > -1) {
|
||||||
throw "CSL processor error: call to macro \"" + mkey + "\" would cause an infinite loop";
|
throw "CSL processor error: call to macro \"" + mkey + "\" would cause an infinite loop";
|
||||||
} else {
|
} else {
|
||||||
this.build.macro_stack.push(mkey);
|
this.build.macro_stack.push(mkey);
|
||||||
}
|
}
|
||||||
|
macroxml = this.sys.xml.getNodesByName(this.cslXml, 'macro', mkey);
|
||||||
|
var hasDate = this.sys.xml.getAttributeValue(macroxml, "macro-has-date");
|
||||||
|
if (hasDate) {
|
||||||
|
func = function (state, Item) {
|
||||||
|
if (state.tmp.area.slice(-5) === "_sort") {
|
||||||
|
state.tmp["doing-macro-with-date"] = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
macro_key_token.execs.push(func);
|
||||||
|
}
|
||||||
macro_key_token.tokentype = CSL.START;
|
macro_key_token.tokentype = CSL.START;
|
||||||
CSL.Node.group.build.call(macro_key_token, this, this[this.build.area].tokens, true);
|
CSL.Node.group.build.call(macro_key_token, this, this[this.build.area].tokens, true);
|
||||||
macroxml = this.sys.xml.getNodesByName(this.cslXml, 'macro', mkey);
|
|
||||||
if (!this.sys.xml.getNodeValue(macroxml)) {
|
if (!this.sys.xml.getNodeValue(macroxml)) {
|
||||||
throw "CSL style error: undefined macro \"" + mkey + "\"";
|
throw "CSL style error: undefined macro \"" + mkey + "\"";
|
||||||
}
|
}
|
||||||
|
@ -1482,6 +1505,12 @@ CSL.expandMacro = function (macro_key_token) {
|
||||||
CSL.buildStyle.call(this, navi);
|
CSL.buildStyle.call(this, navi);
|
||||||
end_of_macro = new CSL.Token("group", CSL.END);
|
end_of_macro = new CSL.Token("group", CSL.END);
|
||||||
CSL.Node.group.build.call(end_of_macro, this, this[this.build.area].tokens, true);
|
CSL.Node.group.build.call(end_of_macro, this, this[this.build.area].tokens, true);
|
||||||
|
func = function (state, Item) {
|
||||||
|
if (state.tmp.area.slice(-5) === "_sort") {
|
||||||
|
state.tmp["doing-macro-with-date"] = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this[this.build.area].tokens[this[this.build.area].tokens.length - 1].execs.push(func);
|
||||||
this.build.macro_stack.pop();
|
this.build.macro_stack.pop();
|
||||||
};
|
};
|
||||||
CSL.XmlToToken = function (state, tokentype) {
|
CSL.XmlToToken = function (state, tokentype) {
|
||||||
|
@ -1895,7 +1924,7 @@ CSL.DateParser = function () {
|
||||||
};
|
};
|
||||||
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.200";
|
this.processor_version = "1.0.202";
|
||||||
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();
|
||||||
|
@ -1925,6 +1954,7 @@ CSL.Engine = function (sys, style, lang, forceLang) {
|
||||||
this.sys.xml.addMissingNameNodes(this.cslXml);
|
this.sys.xml.addMissingNameNodes(this.cslXml);
|
||||||
this.sys.xml.addInstitutionNodes(this.cslXml);
|
this.sys.xml.addInstitutionNodes(this.cslXml);
|
||||||
this.sys.xml.insertPublisherAndPlace(this.cslXml);
|
this.sys.xml.insertPublisherAndPlace(this.cslXml);
|
||||||
|
this.sys.xml.flagDateMacros(this.cslXml);
|
||||||
attrs = this.sys.xml.attributes(this.cslXml);
|
attrs = this.sys.xml.attributes(this.cslXml);
|
||||||
if ("undefined" === typeof attrs["@sort-separator"]) {
|
if ("undefined" === typeof attrs["@sort-separator"]) {
|
||||||
this.sys.xml.setAttribute(this.cslXml, "sort-separator", ", ");
|
this.sys.xml.setAttribute(this.cslXml, "sort-separator", ", ");
|
||||||
|
@ -3705,7 +3735,7 @@ CSL.Engine.prototype.localeConfigure = function (langspec) {
|
||||||
this.localeSet(this.cslXml, langspec.best, langspec.best);
|
this.localeSet(this.cslXml, langspec.best, langspec.best);
|
||||||
};
|
};
|
||||||
CSL.Engine.prototype.localeSet = function (myxml, lang_in, lang_out) {
|
CSL.Engine.prototype.localeSet = function (myxml, lang_in, lang_out) {
|
||||||
var blob, locale, nodes, attributes, pos, ppos, term, form, termname, styleopts, attr, date, attrname, len, genderform, target;
|
var blob, locale, nodes, attributes, pos, ppos, term, form, termname, styleopts, attr, date, attrname, len, genderform, target, i, ilen;
|
||||||
lang_in = lang_in.replace("_", "-");
|
lang_in = lang_in.replace("_", "-");
|
||||||
lang_out = lang_out.replace("_", "-");
|
lang_out = lang_out.replace("_", "-");
|
||||||
if (!this.locale[lang_out]) {
|
if (!this.locale[lang_out]) {
|
||||||
|
@ -3728,7 +3758,7 @@ CSL.Engine.prototype.localeSet = function (myxml, lang_in, lang_out) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nodes = this.sys.xml.getNodesByName(locale, 'type');
|
nodes = this.sys.xml.getNodesByName(locale, 'type');
|
||||||
for (var i = 0, ilen = this.sys.xml.numberofnodes(nodes); i < ilen; i += 1) {
|
for (i = 0, ilen = this.sys.xml.numberofnodes(nodes); i < ilen; i += 1) {
|
||||||
var typenode = nodes[i];
|
var typenode = nodes[i];
|
||||||
var type = this.sys.xml.getAttributeValue(typenode, 'name');
|
var type = this.sys.xml.getAttributeValue(typenode, 'name');
|
||||||
var gender = this.sys.xml.getAttributeValue(typenode, 'gender');
|
var gender = this.sys.xml.getAttributeValue(typenode, 'gender');
|
||||||
|
@ -3772,7 +3802,7 @@ CSL.Engine.prototype.localeSet = function (myxml, lang_in, lang_out) {
|
||||||
}
|
}
|
||||||
for (termname in this.locale[lang_out].terms) {
|
for (termname in this.locale[lang_out].terms) {
|
||||||
if (this.locale[lang_out].terms.hasOwnProperty(termname)) {
|
if (this.locale[lang_out].terms.hasOwnProperty(termname)) {
|
||||||
for (var i = 0, ilen = 2; i < ilen; i += 1) {
|
for (i = 0, ilen = 2; i < ilen; i += 1) {
|
||||||
genderform = CSL.GENDERS[i];
|
genderform = CSL.GENDERS[i];
|
||||||
if (this.locale[lang_out].terms[termname][genderform]) {
|
if (this.locale[lang_out].terms[termname][genderform]) {
|
||||||
for (form in this.locale[lang_out].terms[termname]) {
|
for (form in this.locale[lang_out].terms[termname]) {
|
||||||
|
@ -3855,79 +3885,77 @@ CSL.Node.date = {
|
||||||
if (!state.build.sort_flag) {
|
if (!state.build.sort_flag) {
|
||||||
CSL.Util.substituteStart.call(this, state, target);
|
CSL.Util.substituteStart.call(this, state, target);
|
||||||
}
|
}
|
||||||
func = function (state, Item) {
|
if (state.build.area.slice(-5) === "_sort") {
|
||||||
var key, dp;
|
func = CSL.dateMacroAsSortKey;
|
||||||
state.tmp.element_rendered_ok = false;
|
} else {
|
||||||
state.tmp.donesies = [];
|
func = function (state, Item) {
|
||||||
state.tmp.dateparts = [];
|
var key, dp;
|
||||||
dp = [];
|
state.tmp.element_rendered_ok = false;
|
||||||
if (this.variables.length
|
state.tmp.donesies = [];
|
||||||
&& !(state.tmp.just_looking
|
state.tmp.dateparts = [];
|
||||||
&& this.variables[0] !== "issued")) {
|
dp = [];
|
||||||
state.parallel.StartVariable(this.variables[0]);
|
if (this.variables.length
|
||||||
date_obj = Item[this.variables[0]];
|
&& !(state.tmp.just_looking
|
||||||
if ("undefined" === typeof date_obj) {
|
&& this.variables[0] !== "issued")) {
|
||||||
date_obj = {"date-parts": [[0]] };
|
state.parallel.StartVariable(this.variables[0]);
|
||||||
}
|
date_obj = Item[this.variables[0]];
|
||||||
if (date_obj.raw) {
|
if ("undefined" === typeof date_obj) {
|
||||||
date_obj = state.fun.dateparser.parse(date_obj.raw);
|
date_obj = {"date-parts": [[0]] };
|
||||||
}
|
|
||||||
state.tmp.date_object = state.dateParseArray(date_obj);
|
|
||||||
len = this.dateparts.length;
|
|
||||||
for (pos = 0; pos < len; pos += 1) {
|
|
||||||
part = this.dateparts[pos];
|
|
||||||
if ("undefined" !== typeof state.tmp.date_object[(part + "_end")]) {
|
|
||||||
dp.push(part);
|
|
||||||
} else if (part === "month" && "undefined" !== typeof state.tmp.date_object.season_end) {
|
|
||||||
dp.push(part);
|
|
||||||
}
|
}
|
||||||
}
|
if (date_obj.raw) {
|
||||||
dpx = [];
|
date_obj = state.fun.dateparser.parse(date_obj.raw);
|
||||||
parts = ["year", "month", "day"];
|
|
||||||
len = parts.length;
|
|
||||||
for (pos = 0; pos < len; pos += 1) {
|
|
||||||
if (dp.indexOf(parts[pos]) > -1) {
|
|
||||||
dpx.push(parts[pos]);
|
|
||||||
}
|
}
|
||||||
}
|
state.tmp.date_object = state.dateParseArray(date_obj);
|
||||||
dp = dpx.slice();
|
len = this.dateparts.length;
|
||||||
if (state.tmp.area.slice(-5) !== "_sort" && ("" + Item.volume) === "" + state.tmp.date_object.year && this.dateparts.length === 1 && this.dateparts[0] === "year") {
|
for (pos = 0; pos < len; pos += 1) {
|
||||||
for (key in state.tmp.date_object) {
|
part = this.dateparts[pos];
|
||||||
if (state.tmp.date_object.hasOwnProperty(key)) {
|
if ("undefined" !== typeof state.tmp.date_object[(part + "_end")]) {
|
||||||
if (key.slice(0, 4) === "year" && state.tmp.citeblob.can_suppress_identical_year) {
|
dp.push(part);
|
||||||
delete state.tmp.date_object[key];
|
} else if (part === "month" && "undefined" !== typeof state.tmp.date_object.season_end) {
|
||||||
|
dp.push(part);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dpx = [];
|
||||||
|
parts = ["year", "month", "day"];
|
||||||
|
len = parts.length;
|
||||||
|
for (pos = 0; pos < len; pos += 1) {
|
||||||
|
if (dp.indexOf(parts[pos]) > -1) {
|
||||||
|
dpx.push(parts[pos]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dp = dpx.slice();
|
||||||
|
if (state.tmp.area.slice(-5) !== "_sort" && ("" + Item.volume) === "" + state.tmp.date_object.year && this.dateparts.length === 1 && this.dateparts[0] === "year") {
|
||||||
|
for (key in state.tmp.date_object) {
|
||||||
|
if (state.tmp.date_object.hasOwnProperty(key)) {
|
||||||
|
if (key.slice(0, 4) === "year" && state.tmp.citeblob.can_suppress_identical_year) {
|
||||||
|
delete state.tmp.date_object[key];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
mypos = 2;
|
||||||
mypos = 2;
|
len = dp.length;
|
||||||
len = dp.length;
|
for (pos = 0; pos < len; pos += 1) {
|
||||||
for (pos = 0; pos < len; pos += 1) {
|
part = dp[pos];
|
||||||
part = dp[pos];
|
start = state.tmp.date_object[part];
|
||||||
start = state.tmp.date_object[part];
|
end = state.tmp.date_object[(part + "_end")];
|
||||||
end = state.tmp.date_object[(part + "_end")];
|
if (start !== end) {
|
||||||
if (start !== end) {
|
mypos = pos;
|
||||||
mypos = pos;
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
|
state.tmp.date_collapse_at = dp.slice(mypos);
|
||||||
|
} else {
|
||||||
|
state.tmp.date_object = false;
|
||||||
}
|
}
|
||||||
state.tmp.date_collapse_at = dp.slice(mypos);
|
};
|
||||||
} else {
|
}
|
||||||
state.tmp.date_object = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
this.execs.push(func);
|
this.execs.push(func);
|
||||||
func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
state.output.startTag("date", this);
|
state.output.startTag("date", this);
|
||||||
};
|
};
|
||||||
this.execs.push(func);
|
this.execs.push(func);
|
||||||
}
|
}
|
||||||
if (state.build.sort_flag && (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON)) {
|
|
||||||
tok = new CSL.Token("key", CSL.SINGLETON);
|
|
||||||
tok.dateparts = state.build.date_parts.slice();
|
|
||||||
tok.variables = state.build.date_variables;
|
|
||||||
CSL.Node.key.build.call(tok, state, target);
|
|
||||||
}
|
|
||||||
if (!state.build.sort_flag && (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON)) {
|
if (!state.build.sort_flag && (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON)) {
|
||||||
func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
state.output.endTag();
|
state.output.endTag();
|
||||||
|
@ -3945,7 +3973,7 @@ CSL.Node.date = {
|
||||||
};
|
};
|
||||||
CSL.Node["date-part"] = {
|
CSL.Node["date-part"] = {
|
||||||
build: function (state, target) {
|
build: function (state, target) {
|
||||||
var func, pos, len, decor, first_date, value, value_end, real, have_collapsed, invoked, precondition, known_year, bc, ad, bc_end, ad_end, ready, curr, dcurr, number, num, formatter, item;
|
var func, pos, len, decor, first_date, value, value_end, real, have_collapsed, invoked, precondition, known_year, bc, ad, bc_end, ad_end, ready, curr, dcurr, number, num, formatter, item, i, ilen;
|
||||||
if (!this.strings.form) {
|
if (!this.strings.form) {
|
||||||
this.strings.form = "long";
|
this.strings.form = "long";
|
||||||
}
|
}
|
||||||
|
@ -4018,10 +4046,10 @@ CSL.Node["date-part"] = {
|
||||||
if (state.tmp.strip_periods) {
|
if (state.tmp.strip_periods) {
|
||||||
value = value.replace(/\./g, "");
|
value = value.replace(/\./g, "");
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
for (i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
||||||
value = value.replace(/\./g, "");
|
value = value.replace(/\./g, "");
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4030,10 +4058,10 @@ CSL.Node["date-part"] = {
|
||||||
if (state.tmp.strip_periods) {
|
if (state.tmp.strip_periods) {
|
||||||
value_end = value_end.replace(/\./g, "");
|
value_end = value_end.replace(/\./g, "");
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
for (i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
||||||
value_end = value_end.replace(/\./g, "");
|
value_end = value_end.replace(/\./g, "");
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4210,7 +4238,7 @@ CSL.Node["et-al"] = {
|
||||||
};
|
};
|
||||||
CSL.Node.group = {
|
CSL.Node.group = {
|
||||||
build: function (state, target) {
|
build: function (state, target) {
|
||||||
var func, execs;
|
var func, execs, outer_area;
|
||||||
if (this.tokentype === CSL.START) {
|
if (this.tokentype === CSL.START) {
|
||||||
CSL.Util.substituteStart.call(this, state, target);
|
CSL.Util.substituteStart.call(this, state, target);
|
||||||
if (state.build.substitute_level.value()) {
|
if (state.build.substitute_level.value()) {
|
||||||
|
@ -4228,11 +4256,11 @@ CSL.Node.group = {
|
||||||
this.execs = execs.concat(this.execs);
|
this.execs = execs.concat(this.execs);
|
||||||
if (this.strings["has-publisher-and-publisher-place"]) {
|
if (this.strings["has-publisher-and-publisher-place"]) {
|
||||||
state.build["publisher-special"] = true;
|
state.build["publisher-special"] = true;
|
||||||
var outer_area = state.build.area.replace(/_sort$/, "");
|
outer_area = state.build.area.replace(/_sort$/, "");
|
||||||
if ("string" === typeof state[outer_area].opt["name-delimiter"]) {
|
if ("string" === typeof state[outer_area].opt["name-delimiter"]) {
|
||||||
func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
if (Item["publisher"] && Item["publisher-place"]) {
|
if (Item.publisher && Item["publisher-place"]) {
|
||||||
var publisher_lst = Item["publisher"].split(/;\s*/);
|
var publisher_lst = Item.publisher.split(/;\s*/);
|
||||||
var publisher_place_lst = Item["publisher-place"].split(/;\s*/);
|
var publisher_place_lst = Item["publisher-place"].split(/;\s*/);
|
||||||
if (publisher_lst.length > 1
|
if (publisher_lst.length > 1
|
||||||
&& publisher_lst.length === publisher_place_lst.length) {
|
&& publisher_lst.length === publisher_place_lst.length) {
|
||||||
|
@ -4242,18 +4270,17 @@ CSL.Node.group = {
|
||||||
state.publisherOutput.group_tok = this;
|
state.publisherOutput.group_tok = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
this.execs.push(func);
|
this.execs.push(func);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (state.build["publisher-special"]) {
|
if (state.build["publisher-special"]) {
|
||||||
state.build["publisher-special"] = false;
|
state.build["publisher-special"] = false;
|
||||||
var outer_area = state.build.area.replace(/_sort$/, "");
|
outer_area = state.build.area.replace(/_sort$/, "");
|
||||||
if ("string" === typeof state[outer_area].opt["name-delimiter"]) {
|
if ("string" === typeof state[outer_area].opt["name-delimiter"]) {
|
||||||
func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
if (state.publisherOutput) {
|
if (state.publisherOutput) {
|
||||||
var outer_area = state.tmp.area.replace("_sort", "");
|
|
||||||
state.publisherOutput.name_delimiter = state[outer_area].opt["name-delimiter"];
|
state.publisherOutput.name_delimiter = state[outer_area].opt["name-delimiter"];
|
||||||
state.publisherOutput.delimiter_precedes_last = state[outer_area].opt["delimiter-precedes-last"];
|
state.publisherOutput.delimiter_precedes_last = state[outer_area].opt["delimiter-precedes-last"];
|
||||||
state.publisherOutput.and = state[outer_area].opt["and"];
|
state.publisherOutput.and = state[outer_area].opt["and"];
|
||||||
|
@ -4422,6 +4449,7 @@ CSL.Node.key = {
|
||||||
state.tmp.done_vars = [];
|
state.tmp.done_vars = [];
|
||||||
};
|
};
|
||||||
start_key.execs.push(func);
|
start_key.execs.push(func);
|
||||||
|
state.opt.citation_number_sort_direction = this.strings.sort_direction;
|
||||||
func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
state.output.openLevel("empty");
|
state.output.openLevel("empty");
|
||||||
};
|
};
|
||||||
|
@ -4455,7 +4483,9 @@ CSL.Node.key = {
|
||||||
if (state.build.area === "citation_sort") {
|
if (state.build.area === "citation_sort") {
|
||||||
state.opt.citation_number_sort = true;
|
state.opt.citation_number_sort = true;
|
||||||
}
|
}
|
||||||
state.opt.citation_number_sort_direction = this.strings.sort_direction;
|
if (state.build.area === "bibliography_sort") {
|
||||||
|
state.opt.citation_number_sort_used = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (CSL.CREATORS.indexOf(variable) > -1) {
|
if (CSL.CREATORS.indexOf(variable) > -1) {
|
||||||
var names_start_token = new CSL.Token("names", CSL.START);
|
var names_start_token = new CSL.Token("names", CSL.START);
|
||||||
|
@ -4499,57 +4529,8 @@ CSL.Node.key = {
|
||||||
state.output.append(trigraph, this);
|
state.output.append(trigraph, this);
|
||||||
};
|
};
|
||||||
} else if (CSL.DATE_VARIABLES.indexOf(variable) > -1) {
|
} else if (CSL.DATE_VARIABLES.indexOf(variable) > -1) {
|
||||||
func = function (state, Item) {
|
func = CSL.dateAsSortKey;
|
||||||
var dp, elem, value, e, yr, prefix, i, ilen, num;
|
single_text.variables = this.variables;
|
||||||
dp = Item[variable];
|
|
||||||
if ("undefined" === typeof dp) {
|
|
||||||
dp = {"date-parts": [[0]] };
|
|
||||||
if (!dp.year) {
|
|
||||||
state.tmp.empty_date = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ("undefined" === typeof this.dateparts) {
|
|
||||||
this.dateparts = ["year", "month", "day"];
|
|
||||||
}
|
|
||||||
if (dp.raw) {
|
|
||||||
dp = state.fun.dateparser.parse(dp.raw);
|
|
||||||
} else if (dp["date-parts"]) {
|
|
||||||
dp = state.dateParseArray(dp);
|
|
||||||
}
|
|
||||||
if ("undefined" === typeof dp) {
|
|
||||||
dp = {};
|
|
||||||
}
|
|
||||||
for (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") {
|
|
||||||
e = e.slice(0, -4);
|
|
||||||
}
|
|
||||||
if (dp[elem] && this.dateparts.indexOf(e) > -1) {
|
|
||||||
value = dp[elem];
|
|
||||||
}
|
|
||||||
if (elem.slice(0, 4) === "year") {
|
|
||||||
yr = CSL.Util.Dates[e].numeric(state, value);
|
|
||||||
prefix = "Y";
|
|
||||||
if (yr[0] === "-") {
|
|
||||||
prefix = "X";
|
|
||||||
yr = yr.slice(1);
|
|
||||||
yr = 9999 - parseInt(yr, 10);
|
|
||||||
}
|
|
||||||
state.output.append(CSL.Util.Dates[elem.slice(0, 4)].numeric(state, (prefix + yr)));
|
|
||||||
} else {
|
|
||||||
state.output.append(CSL.Util.Dates[e]["numeric-leading-zeros"](state, value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig.year_suffix) {
|
|
||||||
num = state.registry.registry[Item.id].disambig.year_suffix.toString();
|
|
||||||
num = CSL.Util.padding(num);
|
|
||||||
} else {
|
|
||||||
num = CSL.Util.padding("0");
|
|
||||||
}
|
|
||||||
state.output.append("S"+num);
|
|
||||||
};
|
|
||||||
} else if ("title" === variable) {
|
} else if ("title" === variable) {
|
||||||
state.transform.init("empty", "title");
|
state.transform.init("empty", "title");
|
||||||
state.transform.setTransformLocale("locale-sort");
|
state.transform.setTransformLocale("locale-sort");
|
||||||
|
@ -4567,28 +4548,7 @@ CSL.Node.key = {
|
||||||
} else { // macro
|
} else { // macro
|
||||||
var token = new CSL.Token("text", CSL.SINGLETON);
|
var token = new CSL.Token("text", CSL.SINGLETON);
|
||||||
token.postponed_macro = this.postponed_macro;
|
token.postponed_macro = this.postponed_macro;
|
||||||
var tlen = target.length;
|
|
||||||
var keypos = false;
|
|
||||||
CSL.expandMacro.call(state, token);
|
CSL.expandMacro.call(state, token);
|
||||||
for (i = 0, ilen = target.slice(tlen).length; i < ilen; i += 1) {
|
|
||||||
var tok = target.slice(tlen)[i];
|
|
||||||
if (tok && tok.name === "text" && tok.dateparts) {
|
|
||||||
keypos = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (tok && tok.variables[0] === "citation-number") {
|
|
||||||
state.opt.citation_number_sort_direction = this.strings.sort_direction;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (keypos) {
|
|
||||||
var saveme = target[(parseInt(keypos, 10) + parseInt(tlen, 10))];
|
|
||||||
for (i = (target.length - 1); i > tlen; i += -1) {
|
|
||||||
target.pop();
|
|
||||||
}
|
|
||||||
target.push(saveme);
|
|
||||||
var gtok = new CSL.Token("group", CSL.END);
|
|
||||||
target.push(gtok);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
var end_key = new CSL.Token("key", CSL.END);
|
var end_key = new CSL.Token("key", CSL.END);
|
||||||
func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
|
@ -4832,7 +4792,7 @@ CSL.NameOutput.prototype.outputNames = function () {
|
||||||
this.family_decor = CSL.Util.cloneToken(this.family);
|
this.family_decor = CSL.Util.cloneToken(this.family);
|
||||||
this.family_decor.strings.prefix = "";
|
this.family_decor.strings.prefix = "";
|
||||||
this.family_decor.strings.suffix = "";
|
this.family_decor.strings.suffix = "";
|
||||||
for (var i = 0, ilen = this.family.execs.length; i < ilen; i += 1) {
|
for (i = 0, ilen = this.family.execs.length; i < ilen; i += 1) {
|
||||||
this.family.execs[i].call(this.family_decor, this.state, this.Item);
|
this.family.execs[i].call(this.family_decor, this.state, this.Item);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -4842,7 +4802,7 @@ CSL.NameOutput.prototype.outputNames = function () {
|
||||||
this.given_decor = CSL.Util.cloneToken(this.given);
|
this.given_decor = CSL.Util.cloneToken(this.given);
|
||||||
this.given_decor.strings.prefix = "";
|
this.given_decor.strings.prefix = "";
|
||||||
this.given_decor.strings.suffix = "";
|
this.given_decor.strings.suffix = "";
|
||||||
for (var i = 0, ilen = this.given.execs.length; i < ilen; i += 1) {
|
for (i = 0, ilen = this.given.execs.length; i < ilen; i += 1) {
|
||||||
this.given.execs[i].call(this.given_decor, this.state, this.Item);
|
this.given.execs[i].call(this.given_decor, this.state, this.Item);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -5769,13 +5729,13 @@ CSL.NameOutput.prototype._stripPeriods = function (tokname, str) {
|
||||||
for (var i = 0, ilen = decor_tok.decorations.length; i < ilen; i += 1) {
|
for (var i = 0, ilen = decor_tok.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === decor_tok.decorations[i][0] && "true" === decor_tok.decorations[i][1]) {
|
if ("@strip-periods" === decor_tok.decorations[i][0] && "true" === decor_tok.decorations[i][1]) {
|
||||||
str = str.replace(/\./g, "");
|
str = str.replace(/\./g, "");
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
};
|
||||||
CSL.NameOutput.prototype._nonDroppingParticle = function (name) {
|
CSL.NameOutput.prototype._nonDroppingParticle = function (name) {
|
||||||
var str = this._stripPeriods("family", name["non-dropping-particle"]);
|
var str = this._stripPeriods("family", name["non-dropping-particle"]);
|
||||||
if (this.state.output.append(str, this.family_decor, true)) {
|
if (this.state.output.append(str, this.family_decor, true)) {
|
||||||
|
@ -5806,7 +5766,7 @@ CSL.NameOutput.prototype._familyName = function (name) {
|
||||||
};
|
};
|
||||||
CSL.NameOutput.prototype._givenName = function (name, pos, i) {
|
CSL.NameOutput.prototype._givenName = function (name, pos, i) {
|
||||||
if (this.name.strings.initialize === false) {
|
if (this.name.strings.initialize === false) {
|
||||||
if (name.family && name.given && this.name.strings["initialize"] === false) {
|
if (name.family && name.given && this.name.strings.initialize === false) {
|
||||||
name.given = CSL.Util.Names.initializeWith(this.state, name.given, this.name.strings["initialize-with"], true);
|
name.given = CSL.Util.Names.initializeWith(this.state, name.given, this.name.strings["initialize-with"], true);
|
||||||
}
|
}
|
||||||
name.given = CSL.Util.Names.unInitialize(this.state, name.given);
|
name.given = CSL.Util.Names.unInitialize(this.state, name.given);
|
||||||
|
@ -5992,7 +5952,7 @@ CSL.castLabel = function (state, node, term, plural, mode) {
|
||||||
for (var i = 0, ilen = node.decorations.length; i < ilen; i += 1) {
|
for (var i = 0, ilen = node.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === node.decorations[i][0] && "true" === node.decorations[i][1]) {
|
if ("@strip-periods" === node.decorations[i][0] && "true" === node.decorations[i][1]) {
|
||||||
ret = ret.replace(/\./g, "");
|
ret = ret.replace(/\./g, "");
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6069,6 +6029,65 @@ CSL.PublisherOutput.prototype.clearVars = function () {
|
||||||
this.state.tmp["publisher-token"] = false;
|
this.state.tmp["publisher-token"] = false;
|
||||||
this.state.tmp["publisher-place-token"] = false;
|
this.state.tmp["publisher-place-token"] = false;
|
||||||
};
|
};
|
||||||
|
CSL.dateMacroAsSortKey = function (state, Item) {
|
||||||
|
CSL.dateAsSortKey.call(this, state, Item, true);
|
||||||
|
};
|
||||||
|
CSL.dateAsSortKey = function (state, Item, isMacro) {
|
||||||
|
var dp, elem, value, e, yr, prefix, i, ilen, num;
|
||||||
|
var variable = this.variables[0];
|
||||||
|
var macroFlag = "empty";
|
||||||
|
if (isMacro) {
|
||||||
|
macroFlag = "macro-with-date";
|
||||||
|
}
|
||||||
|
dp = Item[variable];
|
||||||
|
if ("undefined" === typeof dp) {
|
||||||
|
dp = {"date-parts": [[0]] };
|
||||||
|
if (!dp.year) {
|
||||||
|
state.tmp.empty_date = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("undefined" === typeof this.dateparts) {
|
||||||
|
this.dateparts = ["year", "month", "day"];
|
||||||
|
}
|
||||||
|
if (dp.raw) {
|
||||||
|
dp = state.fun.dateparser.parse(dp.raw);
|
||||||
|
} else if (dp["date-parts"]) {
|
||||||
|
dp = state.dateParseArray(dp);
|
||||||
|
}
|
||||||
|
if ("undefined" === typeof dp) {
|
||||||
|
dp = {};
|
||||||
|
}
|
||||||
|
for (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") {
|
||||||
|
e = e.slice(0, -4);
|
||||||
|
}
|
||||||
|
if (dp[elem] && this.dateparts.indexOf(e) > -1) {
|
||||||
|
value = dp[elem];
|
||||||
|
}
|
||||||
|
if (elem.slice(0, 4) === "year") {
|
||||||
|
yr = CSL.Util.Dates[e].numeric(state, value);
|
||||||
|
prefix = "Y";
|
||||||
|
if (yr[0] === "-") {
|
||||||
|
prefix = "X";
|
||||||
|
yr = yr.slice(1);
|
||||||
|
yr = 9999 - parseInt(yr, 10);
|
||||||
|
}
|
||||||
|
state.output.append(CSL.Util.Dates[elem.slice(0, 4)].numeric(state, (prefix + yr)), macroFlag);
|
||||||
|
} else {
|
||||||
|
state.output.append(CSL.Util.Dates[e]["numeric-leading-zeros"](state, value), macroFlag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig.year_suffix) {
|
||||||
|
num = state.registry.registry[Item.id].disambig.year_suffix.toString();
|
||||||
|
num = CSL.Util.padding(num);
|
||||||
|
} else {
|
||||||
|
num = CSL.Util.padding("0");
|
||||||
|
}
|
||||||
|
state.output.append("S"+num, macroFlag);
|
||||||
|
};
|
||||||
CSL.Node.name = {
|
CSL.Node.name = {
|
||||||
build: function (state, target) {
|
build: function (state, target) {
|
||||||
var func, pos, len, attrname;
|
var func, pos, len, attrname;
|
||||||
|
@ -6482,6 +6501,9 @@ CSL.Node.text = {
|
||||||
if (state.build.area === "bibliography") {
|
if (state.build.area === "bibliography") {
|
||||||
state.opt.bib_mode = CSL.NUMERIC;
|
state.opt.bib_mode = CSL.NUMERIC;
|
||||||
}
|
}
|
||||||
|
if (state.build.area === "bibliography_sort") {
|
||||||
|
state.opt.citation_number_sort_used = true;
|
||||||
|
}
|
||||||
if ("citation-number" === state[state.tmp.area].opt.collapse) {
|
if ("citation-number" === state[state.tmp.area].opt.collapse) {
|
||||||
this.range_prefix = state.getTerm("range-delimiter");
|
this.range_prefix = state.getTerm("range-delimiter");
|
||||||
}
|
}
|
||||||
|
@ -6584,7 +6606,7 @@ CSL.Node.text = {
|
||||||
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
||||||
myterm = myterm.replace(/\./g, "");
|
myterm = myterm.replace(/\./g, "");
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6915,6 +6937,9 @@ CSL.Attributes["@variable"] = function (state, arg) {
|
||||||
};
|
};
|
||||||
CSL.Attributes["@lingo"] = function (state, arg) {
|
CSL.Attributes["@lingo"] = function (state, arg) {
|
||||||
};
|
};
|
||||||
|
CSL.Attributes["@macro-has-date"] = function (state, arg) {
|
||||||
|
this["macro-has-date"] = true;
|
||||||
|
};
|
||||||
CSL.Attributes["@locale"] = function (state, arg) {
|
CSL.Attributes["@locale"] = function (state, arg) {
|
||||||
var func, ret, len, pos, variable, myitem, langspec, lang, lst, i, ilen, fallback;
|
var func, ret, len, pos, variable, myitem, langspec, lang, lst, i, ilen, fallback;
|
||||||
if (this.name === "layout") {
|
if (this.name === "layout") {
|
||||||
|
@ -7013,7 +7038,7 @@ CSL.Attributes["@jurisdiction"] = function (state, arg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
};
|
||||||
this.tests.push(func);
|
this.tests.push(func);
|
||||||
};
|
};
|
||||||
CSL.Attributes["@is-uncertain-date"] = function (state, arg) {
|
CSL.Attributes["@is-uncertain-date"] = function (state, arg) {
|
||||||
|
@ -7346,7 +7371,7 @@ CSL.Attributes["@text-case"] = function (state, arg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
this.execs.push(func);
|
this.execs.push(func);
|
||||||
};
|
};
|
||||||
CSL.Attributes["@page-range-format"] = function (state, arg) {
|
CSL.Attributes["@page-range-format"] = function (state, arg) {
|
||||||
|
@ -7658,7 +7683,7 @@ CSL.Transform = function (state) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
}
|
||||||
function getOutputFunction(variables) {
|
function getOutputFunction(variables) {
|
||||||
var mytoken, mysubsection, myfieldname, abbreviation_fallback, alternative_varname, transform_locale, transform_fallback, getTextSubfield;
|
var mytoken, mysubsection, myfieldname, abbreviation_fallback, alternative_varname, transform_locale, transform_fallback, getTextSubfield;
|
||||||
mytoken = CSL.Util.cloneToken(token); // the token isn't needed, is it?
|
mytoken = CSL.Util.cloneToken(token); // the token isn't needed, is it?
|
||||||
|
@ -8396,7 +8421,7 @@ CSL.Util.Names.initializeWith = function (state, name, terminator, normalizeOnly
|
||||||
namelist.push(lst[i]);
|
namelist.push(lst[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var lst = namelist;
|
lst = namelist;
|
||||||
for (i = lst.length -1; i > -1; i += -1) {
|
for (i = lst.length -1; i > -1; i += -1) {
|
||||||
if (lst[i] && lst[i].slice(0, -1).indexOf(".") > -1) {
|
if (lst[i] && lst[i].slice(0, -1).indexOf(".") > -1) {
|
||||||
var lstend = lst.slice(i + 1);
|
var lstend = lst.slice(i + 1);
|
||||||
|
@ -8419,6 +8444,7 @@ CSL.Util.Names.initializeWith = function (state, name, terminator, normalizeOnly
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
CSL.Util.Names.doNormalize = function (state, namelist, terminator, mode) {
|
CSL.Util.Names.doNormalize = function (state, namelist, terminator, mode) {
|
||||||
|
var i, ilen;
|
||||||
var isAbbrev = [];
|
var isAbbrev = [];
|
||||||
for (i = 0, ilen = namelist.length; i < ilen; i += 1) {
|
for (i = 0, ilen = namelist.length; i < ilen; i += 1) {
|
||||||
if (namelist[i].length > 1 && namelist[i].slice(-1) === ".") {
|
if (namelist[i].length > 1 && namelist[i].slice(-1) === ".") {
|
||||||
|
@ -8448,7 +8474,7 @@ CSL.Util.Names.doNormalize = function (state, namelist, terminator, mode) {
|
||||||
return namelist.join("").replace(/\s+$/,"");
|
return namelist.join("").replace(/\s+$/,"");
|
||||||
};
|
};
|
||||||
CSL.Util.Names.doInitialize = function (state, namelist, terminator, mode) {
|
CSL.Util.Names.doInitialize = function (state, namelist, terminator, mode) {
|
||||||
var i, ilen, m, j, jlen, lst;
|
var i, ilen, m, j, jlen, lst, n;
|
||||||
for (i = 0, ilen = namelist.length; i < ilen; i += 2) {
|
for (i = 0, ilen = namelist.length; i < ilen; i += 2) {
|
||||||
n = namelist[i];
|
n = namelist[i];
|
||||||
if (!n) {
|
if (!n) {
|
||||||
|
@ -8462,7 +8488,7 @@ CSL.Util.Names.doInitialize = function (state, namelist, terminator, mode) {
|
||||||
var extra = "";
|
var extra = "";
|
||||||
if (m[2]) {
|
if (m[2]) {
|
||||||
var s = "";
|
var s = "";
|
||||||
var lst = m[2].split("");
|
lst = m[2].split("");
|
||||||
for (j = 0, jlen = lst.length; j < jlen; j += 1) {
|
for (j = 0, jlen = lst.length; j < jlen; j += 1) {
|
||||||
var c = lst[j];
|
var c = lst[j];
|
||||||
if (c === c.toUpperCase()) {
|
if (c === c.toUpperCase()) {
|
||||||
|
@ -8640,14 +8666,14 @@ CSL.Util.Sort.strip_prepositions = function (str) {
|
||||||
};
|
};
|
||||||
CSL.Util.substituteStart = function (state, target) {
|
CSL.Util.substituteStart = function (state, target) {
|
||||||
var element_trace, display, bib_first, func, choose_start, if_start, nodetypes;
|
var element_trace, display, bib_first, func, choose_start, if_start, nodetypes;
|
||||||
var func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
||||||
state.tmp.strip_periods += 1;
|
state.tmp.strip_periods += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
this.execs.push(func);
|
this.execs.push(func);
|
||||||
nodetypes = ["number", "date", "names"];
|
nodetypes = ["number", "date", "names"];
|
||||||
if (("text" === this.name && !this.postponed_macro) || nodetypes.indexOf(this.name) > -1) {
|
if (("text" === this.name && !this.postponed_macro) || nodetypes.indexOf(this.name) > -1) {
|
||||||
|
@ -8711,14 +8737,14 @@ CSL.Util.substituteStart = function (state, target) {
|
||||||
};
|
};
|
||||||
CSL.Util.substituteEnd = function (state, target) {
|
CSL.Util.substituteEnd = function (state, target) {
|
||||||
var func, bib_first_end, bib_other, if_end, choose_end, toplevel, hasval, author_substitute, str;
|
var func, bib_first_end, bib_other, if_end, choose_end, toplevel, hasval, author_substitute, str;
|
||||||
var func = function (state, Item) {
|
func = function (state, Item) {
|
||||||
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {
|
||||||
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) {
|
||||||
state.tmp.strip_periods += -1;
|
state.tmp.strip_periods += -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
this.execs.push(func);
|
this.execs.push(func);
|
||||||
state.build.render_nesting_level += -1;
|
state.build.render_nesting_level += -1;
|
||||||
if (state.build.render_nesting_level === 0) {
|
if (state.build.render_nesting_level === 0) {
|
||||||
|
@ -8878,14 +8904,14 @@ CSL.Util.Suffixator = function (slist) {
|
||||||
this.slist = slist.split(",");
|
this.slist = slist.split(",");
|
||||||
};
|
};
|
||||||
CSL.Util.Suffixator.prototype.format = function (N) {
|
CSL.Util.Suffixator.prototype.format = function (N) {
|
||||||
var X, N;
|
var X;
|
||||||
N += 1;
|
N += 1;
|
||||||
var key = "";
|
var key = "";
|
||||||
do {
|
do {
|
||||||
X = ((N % 26) == 0) ? 26 : (N % 26);
|
X = ((N % 26) === 0) ? 26 : (N % 26);
|
||||||
key = this.slist[X-1] + key;
|
key = this.slist[X-1] + key;
|
||||||
N = (N - X) / 26;
|
N = (N - X) / 26;
|
||||||
} while ( N != 0 );
|
} while ( N !== 0 );
|
||||||
return key;
|
return key;
|
||||||
};
|
};
|
||||||
CSL.Util.PageRangeMangler = {};
|
CSL.Util.PageRangeMangler = {};
|
||||||
|
@ -9597,7 +9623,7 @@ CSL.Output.Formats.prototype.rtf = {
|
||||||
return "\\super " + CSL.SUPERSCRIPTS[aChar] + "\\nosupersub{}";
|
return "\\super " + CSL.SUPERSCRIPTS[aChar] + "\\nosupersub{}";
|
||||||
})
|
})
|
||||||
.replace(/[\x7F-\uFFFF]/g,
|
.replace(/[\x7F-\uFFFF]/g,
|
||||||
function(aChar) { return "\\uc0\\u"+aChar.charCodeAt(0).toString()+"{}" })
|
function(aChar) { return "\\uc0\\u"+aChar.charCodeAt(0).toString()+"{}"; })
|
||||||
.replace("\t", "\\tab{}", "g");
|
.replace("\t", "\\tab{}", "g");
|
||||||
},
|
},
|
||||||
"@passthrough/true": CSL.Output.Formatters.passthrough,
|
"@passthrough/true": CSL.Output.Formatters.passthrough,
|
||||||
|
@ -9778,8 +9804,8 @@ CSL.Registry.prototype.douncited = function () {
|
||||||
CSL.Registry.prototype.rebuildlist = function () {
|
CSL.Registry.prototype.rebuildlist = function () {
|
||||||
var count, len, pos, item;
|
var count, len, pos, item;
|
||||||
this.reflist = [];
|
this.reflist = [];
|
||||||
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING) {
|
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING
|
||||||
this.mylist.reverse();
|
&& this.state.opt.citation_number_sort_used) {
|
||||||
}
|
}
|
||||||
len = this.mylist.length;
|
len = this.mylist.length;
|
||||||
for (pos = 0; pos < len; pos += 1) {
|
for (pos = 0; pos < len; pos += 1) {
|
||||||
|
@ -9788,8 +9814,8 @@ CSL.Registry.prototype.rebuildlist = function () {
|
||||||
this.oldseq[item] = this.registry[item].seq;
|
this.oldseq[item] = this.registry[item].seq;
|
||||||
this.registry[item].seq = (pos + 1);
|
this.registry[item].seq = (pos + 1);
|
||||||
}
|
}
|
||||||
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING) {
|
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING
|
||||||
this.mylist.reverse();
|
&& this.state.opt.citation_number_sort_used) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
CSL.Registry.prototype.dorefreshes = function () {
|
CSL.Registry.prototype.dorefreshes = function () {
|
||||||
|
@ -9829,8 +9855,8 @@ CSL.Registry.prototype.setdisambigs = function () {
|
||||||
};
|
};
|
||||||
CSL.Registry.prototype.renumber = function () {
|
CSL.Registry.prototype.renumber = function () {
|
||||||
var len, pos, item;
|
var len, pos, item;
|
||||||
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING) {
|
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING
|
||||||
this.reflist.reverse();
|
&& this.state.opt.citation_number_sort_used) {
|
||||||
}
|
}
|
||||||
len = this.reflist.length;
|
len = this.reflist.length;
|
||||||
for (pos = 0; pos < len; pos += 1) {
|
for (pos = 0; pos < len; pos += 1) {
|
||||||
|
@ -9845,7 +9871,8 @@ CSL.Registry.prototype.renumber = function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING) {
|
if (this.state.opt.citation_number_sort_direction === CSL.DESCENDING
|
||||||
|
&& this.state.opt.citation_number_sort_used) {
|
||||||
this.reflist.reverse();
|
this.reflist.reverse();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -9903,7 +9930,7 @@ CSL.Registry.prototype.compareRegistryTokens = function (a, b) {
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
CSL.Registry.prototype.registerAmbigToken = function (akey, id, ambig_config, tainters) {
|
CSL.Registry.prototype.registerAmbigToken = function (akey, id, ambig_config) {
|
||||||
if (this.registry[id] && this.registry[id].disambig && this.registry[id].disambig.names) {
|
if (this.registry[id] && this.registry[id].disambig && this.registry[id].disambig.names) {
|
||||||
for (var i = 0, ilen = ambig_config.names.length; i < ilen; i += 1) {
|
for (var i = 0, ilen = ambig_config.names.length; i < ilen; i += 1) {
|
||||||
var new_names_params = ambig_config.names[i];
|
var new_names_params = ambig_config.names[i];
|
||||||
|
@ -9921,11 +9948,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) {
|
this.registry[id].disambig = CSL.cloneAmbigConfig(ambig_config);
|
||||||
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);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
CSL.getSortKeys = function (Item, key_type) {
|
CSL.getSortKeys = function (Item, key_type) {
|
||||||
var area, strip_prepositions, use_parallels, len, pos;
|
var area, strip_prepositions, use_parallels, len, pos;
|
||||||
|
@ -10398,11 +10421,16 @@ 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.base.year_suffix = ""+pos;
|
||||||
|
this.state.registry.registerAmbigToken(this.akey, "" + tokens[pos].id, this.base);
|
||||||
} else {
|
} else {
|
||||||
|
this.base.year_suffix = ""+pos;
|
||||||
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;
|
var newys = this.state.registry.registry[tokens[pos].id].disambig.year_suffix;
|
||||||
|
if (this.old_desc[tokens[pos].id][0] !== newys) {
|
||||||
|
this.state.tmp.taintedItemIDs[tokens[pos].id] = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.lists[this.listpos] = [this.base, []];
|
this.lists[this.listpos] = [this.base, []];
|
||||||
};
|
};
|
||||||
|
@ -10498,11 +10526,14 @@ CSL.Disambiguation.prototype.initVars = function (akey) {
|
||||||
this.akey = akey;
|
this.akey = akey;
|
||||||
this.advance_mode = false;
|
this.advance_mode = false;
|
||||||
myItemBundles = [];
|
myItemBundles = [];
|
||||||
|
this.old_desc = {};
|
||||||
myIds = this.ambigcites[akey];
|
myIds = this.ambigcites[akey];
|
||||||
if (myIds && myIds.length > 1) {
|
if (myIds && myIds.length > 1) {
|
||||||
for (i = 0, ilen = myIds.length; i < ilen; i += 1) {
|
for (i = 0, ilen = myIds.length; i < ilen; i += 1) {
|
||||||
var myItem = this.state.retrieveItem("" + myIds[i]);
|
var myItem = this.state.retrieveItem("" + myIds[i]);
|
||||||
myItemBundles.push([this.getItemDesc(myItem), myItem]);
|
var myDesc = this.getItemDesc(myItem);
|
||||||
|
myItemBundles.push([myDesc, myItem]);
|
||||||
|
this.old_desc[myIds[i]] = [this.state.registry.registry[myIds[i]].disambig.year_suffix, this.state.registry.registry[myIds[i]].disambig.disambiguate];
|
||||||
}
|
}
|
||||||
myItemBundles.sort(
|
myItemBundles.sort(
|
||||||
function (a, b) {
|
function (a, b) {
|
||||||
|
|
Loading…
Reference in a new issue