Merge citeproc-js 1.0.57

From Frank's release notes:

citeproc-js 1.0.54:
- Fix misplacement of labels that (should) appear before the
 nameset to which they apply.

citeproc-js 1.0.55:
- Fix bug that triggered "registry[id] undefined"
 error in some disambiguation operations.

- Fix bug affecting voluntary suppression
 of small caps in rich text parsing engine.

- Add methods for setting multilingual
 transliteration, translation, and sort
 parameters on configured processor.

citeproc-js 1.0.56:
- Distinguish between transliterations of
 (personal) names and transliterations of
 titles in recently-added multilingual
 configuration methods.

citeproc-js 1.0.57:
- Correctly handle singleton conditional nodes (if and else-if).
This commit is contained in:
Simon Kornblith 2010-09-27 17:55:20 +00:00
parent 7f83086e1c
commit c629a99185

View file

@ -1506,7 +1506,7 @@ CSL.dateParser = function (txt) {
}; };
CSL.Engine = function (sys, style, lang, xmlmode) { CSL.Engine = function (sys, style, lang, xmlmode) {
var attrs, langspec, localexml, locale; var attrs, langspec, localexml, locale;
this.processor_version = "1.0.53"; this.processor_version = "1.0.57";
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();
@ -1674,8 +1674,34 @@ CSL.Engine.prototype.setOutputFormat = function (mode) {
this.output[mode].tmp = {}; this.output[mode].tmp = {};
} }
}; };
CSL.Engine.prototype.setLocale = function (locale) { CSL.Engine.prototype.setLangTagsForCslSort = function (tags) {
}; var i, ilen;
this.opt['locale-sort'] = [];
for (i = 0, ilen = tags.length; i < ilen; i += 1) {
this.opt['locale-sort'].push(tags[i]);
}
}
CSL.Engine.prototype.setLangTagsForCslNameTransliteration = function (tags) {
var i, ilen;
this.opt['locale-name'] = [];
for (i = 0, ilen = tags.length; i < ilen; i += 1) {
this.opt['locale-name'].push(tags[i]);
}
}
CSL.Engine.prototype.setLangTagsForCslTitleTransliteration = function (tags) {
var i, ilen;
this.opt['locale-pri'] = [];
for (i = 0, ilen = tags.length; i < ilen; i += 1) {
this.opt['locale-pri'].push(tags[i]);
}
}
CSL.Engine.prototype.setLangTagsForCslTranslation = function (tags) {
var i, ilen;
this.opt['locale-sec'] = [];
for (i = 0, ilen = tags.length; i < ilen; i += 1) {
this.opt['locale-sec'].push(tags[i]);
}
}
CSL.Engine.prototype.getTerm = function (term, form, plural) { CSL.Engine.prototype.getTerm = function (term, form, plural) {
var ret = CSL.Engine.getField(CSL.LOOSE, this.locale[this.opt.lang].terms, term, form, plural); var ret = CSL.Engine.getField(CSL.LOOSE, this.locale[this.opt.lang].terms, term, form, plural);
if (typeof ret === "undefined") { if (typeof ret === "undefined") {
@ -3235,7 +3261,7 @@ CSL.Node["date-part"] = {
CSL.Node["else-if"] = { CSL.Node["else-if"] = {
build: function (state, target) { build: function (state, target) {
var func, tryposition; var func, tryposition;
if (this.tokentype === CSL.START) { if (this.tokentype === CSL.START || this.tokentype === CSL.SINGLETON) {
if ("number" === typeof this.strings.position) { if ("number" === typeof this.strings.position) {
tryposition = this.strings.position; tryposition = this.strings.position;
func = function (state, Item, item) { func = function (state, Item, item) {
@ -3268,7 +3294,7 @@ CSL.Node["else-if"] = {
this.evaluator = state.fun.match.any; this.evaluator = state.fun.match.any;
} }
} }
if (this.tokentype === CSL.END) { if (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON) {
func = function (state, Item) { func = function (state, Item) {
var next = this[state.tmp.jump.value()]; var next = this[state.tmp.jump.value()];
return next; return next;
@ -3372,7 +3398,7 @@ CSL.Node.group = {
CSL.Node["if"] = { CSL.Node["if"] = {
build: function (state, target) { build: function (state, target) {
var tryposition, func; var tryposition, func;
if (this.tokentype === CSL.START) { if (this.tokentype === CSL.START || this.tokentype === CSL.SINGLETON) {
if ("number" === typeof this.strings.position) { if ("number" === typeof this.strings.position) {
tryposition = this.strings.position; tryposition = this.strings.position;
func = function (state, Item, item) { func = function (state, Item, item) {
@ -3405,7 +3431,7 @@ CSL.Node["if"] = {
this.evaluator = state.fun.match.any; this.evaluator = state.fun.match.any;
} }
} }
if (this.tokentype === CSL.END) { if (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON) {
func = function (state, Item) { func = function (state, Item) {
var next = this[state.tmp.jump.value()]; var next = this[state.tmp.jump.value()];
return next; return next;
@ -4116,12 +4142,33 @@ CSL.Node.names = {
state.output.addToken("non-dropping-particle", false, state.output.getToken("family")); state.output.addToken("non-dropping-particle", false, state.output.getToken("family"));
state.output.addToken("suffix", false, state.output.getToken("family")); state.output.addToken("suffix", false, state.output.getToken("family"));
state.output.openLevel("term-join"); state.output.openLevel("term-join");
if (label && state.output.getToken("label").strings.label_position === CSL.BEFORE) {
state.output.append(label, "label");
}
len = namesets.length; len = namesets.length;
for (namesetIndex = 0; namesetIndex < len; namesetIndex += 1) { for (namesetIndex = 0; namesetIndex < len; namesetIndex += 1) {
nameset = namesets[namesetIndex]; nameset = namesets[namesetIndex];
label = false;
if (state.output.getToken("label").strings.label_position) {
if (common_term) {
termname = common_term;
} else {
termname = nameset.variable;
}
if (!state.output.getToken("label").strings.form) {
form = "long";
} else {
form = state.output.getToken("label").strings.form;
}
if ("number" === typeof state.output.getToken("label").strings.plural) {
plural = state.output.getToken("label").strings.plural;
} else if (nameset.names.length > 1) {
plural = 1;
} else {
plural = 0;
}
label = state.getTerm(termname, form, plural);
}
if (label && state.output.getToken("label").strings.label_position === CSL.BEFORE) {
state.output.append(label, "label");
}
if (!state.tmp.suppress_decorations && (state[state.tmp.area].opt.collapse === "year" || state[state.tmp.area].opt.collapse === "year-suffix" || state[state.tmp.area].opt.collapse === "year-suffix-ranged")) { if (!state.tmp.suppress_decorations && (state[state.tmp.area].opt.collapse === "year" || state[state.tmp.area].opt.collapse === "year-suffix" || state[state.tmp.area].opt.collapse === "year-suffix-ranged")) {
if (state.tmp.last_names_used.length === state.tmp.names_used.length) { if (state.tmp.last_names_used.length === state.tmp.names_used.length) {
lastones = state.tmp.last_names_used[state.tmp.nameset_counter]; lastones = state.tmp.last_names_used[state.tmp.nameset_counter];
@ -4262,27 +4309,6 @@ CSL.Node.names = {
state.tmp.disambig_settings.givens[state.tmp.nameset_counter][ppos] = param; state.tmp.disambig_settings.givens[state.tmp.nameset_counter][ppos] = param;
} }
} }
label = false;
if (state.output.getToken("label").strings.label_position) {
if (common_term) {
termname = common_term;
} else {
termname = nameset.variable;
}
if (!state.output.getToken("label").strings.form) {
form = "long";
} else {
form = state.output.getToken("label").strings.form;
}
if ("number" === typeof state.output.getToken("label").strings.plural) {
plural = state.output.getToken("label").strings.plural;
} else if (nameset.names.length > 1) {
plural = 1;
} else {
plural = 0;
}
label = state.getTerm(termname, form, plural);
}
if (namesetIndex > 0 && nameset.variable !== last_variable) { if (namesetIndex > 0 && nameset.variable !== last_variable) {
state.output.closeLevel("term-join"); state.output.closeLevel("term-join");
} }
@ -4337,7 +4363,7 @@ CSL.Node.names = {
state.output.closeLevel("trailing-names"); state.output.closeLevel("trailing-names");
} }
if (namesets.length === namesetIndex + 1 || namesets[namesetIndex + 1].variable !== namesets[namesetIndex].variable) { if (namesets.length === namesetIndex + 1 || namesets[namesetIndex + 1].variable !== namesets[namesetIndex].variable) {
if (label && state.tmp.name_label_position !== CSL.BEFORE) { if (label && state.output.getToken("label").strings.label_position !== CSL.BEFORE) {
state.output.append(label, "label"); state.output.append(label, "label");
} }
} }
@ -6844,15 +6870,15 @@ CSL.Util.FlipFlopper = function (state) {
this.state = state; this.state = state;
this.blob = false; this.blob = false;
tagdefs = [ tagdefs = [
["<i>", "</i>", "italics", "@font-style", ["italic", "normal"], true], ["<i>", "</i>", "italics", "@font-style", ["italic", "normal","normal"], true],
["<b>", "</b>", "bold", "@font-weight", ["bold", "normal"], true], ["<b>", "</b>", "bold", "@font-weight", ["bold", "normal","normal"], true],
["<sup>", "</sup>", "superscript", "@vertical-align", ["sup", "sup"], true], ["<sup>", "</sup>", "superscript", "@vertical-align", ["sup", "sup","baseline"], true],
["<sub>", "</sub>", "subscript", "@vertical-align", ["sub", "sub"], true], ["<sub>", "</sub>", "subscript", "@vertical-align", ["sub", "sub","baseline"], true],
["<sc>", "</sc>", "smallcaps", "@font-variant", ["small-caps", "small-caps"], true], ["<sc>", "</sc>", "smallcaps", "@font-variant", ["small-caps", "small-caps","normal"], true],
["<span class=\"nocase\">", "</span>", "passthrough", "@passthrough", ["true", "true"], true], ["<span class=\"nocase\">", "</span>", "passthrough", "@passthrough", ["true", "true","true"], true],
["<span class=\"nodecor\">", "</span>", "passthrough", "@passthrough", ["true", "true"], true], ["<span class=\"nodecor\">", "</span>", "passthrough", "@passthrough", ["true", "true","true"], true],
['"', '"', "quotes", "@quotes", ["true", "inner"], "'"], ['"', '"', "quotes", "@quotes", ["true", "inner","true"], "'"],
[" '", "'", "quotes", "@quotes", ["inner", "true"], '"'] [" '", "'", "quotes", "@quotes", ["inner", "true","true"], '"']
]; ];
for (pos = 0; pos < 2; pos += 1) { for (pos = 0; pos < 2; pos += 1) {
p = ["-", "-inner-"][pos]; p = ["-", "-inner-"][pos];
@ -6913,7 +6939,7 @@ CSL.Util.FlipFlopper = function (state) {
flipTags[tagdefs[pos][1]] = tagdefs[pos][5]; flipTags[tagdefs[pos][1]] = tagdefs[pos][5];
openToClose[tagdefs[pos][0]] = tagdefs[pos][1]; openToClose[tagdefs[pos][0]] = tagdefs[pos][1];
openToDecorations[tagdefs[pos][0]] = [tagdefs[pos][3], tagdefs[pos][4]]; openToDecorations[tagdefs[pos][0]] = [tagdefs[pos][3], tagdefs[pos][4]];
okReverse[tagdefs[pos][3]] = [tagdefs[pos][3], [tagdefs[pos][4][1], tagdefs[pos][1]]]; okReverse[tagdefs[pos][3]] = [tagdefs[pos][3], [tagdefs[pos][4][2], tagdefs[pos][1]]];
} }
return [closeTags, flipTags, openToClose, openToDecorations, okReverse]; return [closeTags, flipTags, openToClose, openToDecorations, okReverse];
}; };
@ -7281,7 +7307,7 @@ CSL.Output.Formats.prototype.html = {
"@font-style/normal": "<span style=\"font-style:normal;\">%%STRING%%</span>", "@font-style/normal": "<span style=\"font-style:normal;\">%%STRING%%</span>",
"@font-variant/small-caps": "<span style=\"font-variant:small-caps;\">%%STRING%%</span>", "@font-variant/small-caps": "<span style=\"font-variant:small-caps;\">%%STRING%%</span>",
"@passthrough/true": CSL.Output.Formatters.passthrough, "@passthrough/true": CSL.Output.Formatters.passthrough,
"@font-variant/normal": false, "@font-variant/normal": "<span style=\"font-variant:normal;\">%%STRING%%</span>",
"@font-weight/bold": "<b>%%STRING%%</b>", "@font-weight/bold": "<b>%%STRING%%</b>",
"@font-weight/normal": "<span style=\"font-weight:normal;\">%%STRING%%</span>", "@font-weight/normal": "<span style=\"font-weight:normal;\">%%STRING%%</span>",
"@font-weight/light": false, "@font-weight/light": false,
@ -7575,7 +7601,7 @@ CSL.Registry.prototype.dorefreshes = function () {
regtoken.ambig = undefined; regtoken.ambig = undefined;
Item = this.state.retrieveItem(key); Item = this.state.retrieveItem(key);
if ("undefined" === typeof akey) { if ("undefined" === typeof akey) {
CSL.getAmbiguousCite.call(this.state, Item); akey = CSL.getAmbiguousCite.call(this.state, Item);
this.state.tmp.taintedItemIDs[key] = true; this.state.tmp.taintedItemIDs[key] = true;
} }
this.registry[key] = regtoken; this.registry[key] = regtoken;
@ -8240,4 +8266,4 @@ CSL.Disambiguation.prototype.decrementNames = function () {
CSL.Registry.CitationReg = function (state) { CSL.Registry.CitationReg = function (state) {
this.citationById = {}; this.citationById = {};
this.citationByIndex = []; this.citationByIndex = [];
}; };