commit f68eb7c6f5804de25dcc6cd3115bb33f8090dd22
parent 3b6c4f8c4a5685bbf98a88937dc6696ff901db72
Author: Frank <biercenator@gmail.com>
Date: Tue, 21 Feb 2012 13:02:02 +0800
Upgrade citeproc-js to version 1.0.287
Diffstat:
1 file changed, 51 insertions(+), 27 deletions(-)
diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js
@@ -178,12 +178,12 @@ var CSL = {
PREFIX_PUNCTUATION: /[.;:]\s*$/,
SUFFIX_PUNCTUATION: /^\s*[.;:,\(\)]/,
NUMBER_REGEXP: /(?:^\d+|\d+$)/,
- NAME_INITIAL_REGEXP: /^([A-Z\u0080-\u017f\u0400-\u042f])([a-zA-Z\u0080-\u017f\u0400-\u052f]*|)/,
- ROMANESQUE_REGEXP: /[a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]/,
- ROMANESQUE_NOT_REGEXP: /[^a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe]/g,
- 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]+$/,
+ NAME_INITIAL_REGEXP: /^([A-Z\u0080-\u017f\u0400-\u042f\u0600-\u06ff])([a-zA-Z\u0080-\u017f\u0400-\u052f\u0600-\u06ff]*|)/,
+ ROMANESQUE_REGEXP: /[a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe\u0600-\u06ff\u200c\u200d\u200e\u202a-\u202e]/,
+ ROMANESQUE_NOT_REGEXP: /[^a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe\u0600-\u06ff\u200c\u200d\u200e\u202a-\u202e]/g,
+ STARTSWITH_ROMANESQUE_REGEXP: /^[&a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe\u0600-\u06ff\u200c\u200d\u200e\u202a-\u202e]/,
+ ENDSWITH_ROMANESQUE_REGEXP: /[.;:&a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe\u0600-\u06ff\u200c\u200d\u200e\u202a-\u202e]$/,
+ ALL_ROMANESQUE_REGEXP: /^[a-zA-Z\u0080-\u017f\u0400-\u052f\u0386-\u03fb\u1f00-\u1ffe\u0600-\u06ff\u200c\u200d\u200e\u202a-\u202e]+$/,
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,
@@ -302,6 +302,7 @@ var CSL = {
es: "es_ES",
et: "et_EE",
fa: "fa_FA",
+ fi: "fi_FI",
fr: "fr_FR",
he: "he_IL",
hu: "hu_HU",
@@ -2148,7 +2149,7 @@ CSL.DateParser = function () {
};
CSL.Engine = function (sys, style, lang, forceLang) {
var attrs, langspec, localexml, locale;
- this.processor_version = "1.0.286";
+ this.processor_version = "1.0.287";
this.csl_version = "1.0";
this.sys = sys;
this.sys.xml = new CSL.System.Xml.Parsing();
@@ -2690,7 +2691,20 @@ CSL.Engine.prototype.setAbbreviations = function (arg) {
if (this.sys.setAbbreviations) {
this.sys.setAbbreviations(arg);
}
-}
+};
+CSL.Engine.prototype.setEnglishLocaleEscapes = function (arg) {
+ if ("string" === typeof arg) {
+ arg = arg.split(/\s+,\s+/);
+ }
+ if (!arg || !arg.length) {
+ arg = [];
+ }
+ for (var i = 0, ilen = arg.length; i < ilen; i += 1) {
+ if (this.opt.english_locale_escapes.indexOf(arg[i]) === -1) {
+ this.opt.english_locale_escapes.push(arg[i]);
+ }
+ }
+};
CSL.Engine.Opt = function () {
this.has_disambiguate = false;
this.mode = "html";
@@ -2713,6 +2727,7 @@ CSL.Engine.Opt = function () {
this.citation_number_slug = false;
this.max_number_of_names = 0;
this.trigraph = "Aaaa00:AaAa00:AaAA00:AAAA00";
+ this.english_locale_escapes = [];
this.development_extensions = {};
this.development_extensions.field_hack = true;
this.development_extensions.locator_date_and_revision = true;
@@ -4228,17 +4243,22 @@ CSL.Engine.prototype.localeSet = function (myxml, lang_in, lang_out) {
}
for (termname in this.locale[lang_out].terms) {
if (this.locale[lang_out].terms.hasOwnProperty(termname)) {
- for (i = 0, ilen = 2; i < ilen; i += 1) {
- genderform = CSL.GENDERS[i];
- if (this.locale[lang_out].terms[termname][genderform]) {
- for (form in this.locale[lang_out].terms[termname]) {
- if (!this.locale[lang_out].terms[termname][genderform][form]) {
- this.locale[lang_out].terms[termname][genderform][form] = this.locale[lang_out].terms[termname][form];
+ for (i = 0, ilen = 2; i < ilen; i += 1) {
+ genderform = CSL.GENDERS[i];
+ if (this.locale[lang_out].terms[termname][genderform]) {
+ for (form in this.locale[lang_out].terms[termname]) {
+ if (!this.locale[lang_out].terms[termname][genderform][form]) {
+ this.locale[lang_out].terms[termname][genderform][form] = this.locale[lang_out].terms[termname][form];
+ }
}
}
}
}
- }
+ }
+ if (lang_out && lang_out.slice(0, 2) === "fr") {
+ this.locale[lang_out].terms["page-range-delimiter"] = "-";
+ } else {
+ this.locale[lang_out].terms["page-range-delimiter"] = "\u2013";
}
nodes = this.sys.xml.getNodesByName(locale, 'style-options');
for (pos = 0, len = this.sys.xml.numberofnodes(nodes); pos < len; pos += 1) {
@@ -7522,7 +7542,7 @@ CSL.Node.text = {
func = function (state, Item, item) {
if (item && item[this.variables[0]]) {
var locator = "" + item[this.variables[0]];
- locator = locator.replace(/([^\\])--*/g,"$1\u2013");
+ locator = locator.replace(/([^\\])--*/g,"$1"+state.getTerm("page-range-delimiter"));
locator = locator.replace(/\\-/g,"-");
state.output.append(locator, this, false, false, true);
}
@@ -7544,7 +7564,7 @@ CSL.Node.text = {
func = function (state, Item) {
var value = state.getVariable(Item, "page", form);
if (value) {
- value = value.replace(/([^\\])--*/g,"$1\u2013");
+ value = value.replace(/([^\\])--*/g,"$1"+state.getTerm("page-range-delimiter"));
value = value.replace(/\\-/g,"-");
value = state.fun.page_mangler(value);
state.output.append(value, this, false, false, true);
@@ -8367,18 +8387,22 @@ CSL.Attributes["@text-case"] = function (state, arg) {
this.strings["text-case"] = arg;
if (arg === "title") {
var m = false;
+ var default_locale = state.opt["default-locale"][0].slice(0, 2);
if (Item.language) {
- m = Item.language.match(/^\s*([a-z]{2})(?:$|-| )/);
- }
- if (state.opt["default-locale"][0].slice(0, 2) === "en") {
- if (m && m[1] !== "en") {
+ m = Item.language.match(/^\s*([A-Za-z]{2})(?:$|-| )/);
+ if (!m) {
+ this.strings["text-case"] = "passthrough";
+ } else if (m[1].toLowerCase() !== "en") {
this.strings["text-case"] = "passthrough";
+ for (var i = 0, ilen = state.opt.english_locale_escapes.length; i < ilen; i += 1) {
+ var escaper = state.opt.english_locale_escapes[i];
+ if (m[1].slice(0, escaper.length).toLowerCase() === escaper) {
+ this.strings["text-case"] = arg;
+ }
+ }
}
- } else {
+ } else if (default_locale !== "en") {
this.strings["text-case"] = "passthrough";
- if (m && m[1] === "en") {
- this.strings["text-case"] = arg;
- }
}
}
};
@@ -10096,10 +10120,10 @@ CSL.Engine.prototype.processNumber = function (node, ItemObject, variable) {
&& elements[i].match(/^[0-9]+/)
&& parseInt(elements[i - 2]) < parseInt(elements[i].replace(/[^0-9].*/,""))) {
var start = this.tmp.shadow_numbers[variable].values.slice(-2);
- middle[0][1] = "\u2013";
+ middle[0][1] = this.getTerm("page-range-delimiter");
if (this.opt["page-range-format"] ) {
var newstr = this.fun.page_mangler(start[0][1] +"-"+elements[i]);
- newstr = newstr.split(/\u2013/);
+ newstr = newstr.split(this.getTerm("page-range-delimiter"));
elements[i] = newstr[1];
}
count = count + 1;