diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js
index 7a70efe011..180287a83b 100644
--- a/chrome/content/zotero/xpcom/citeproc.js
+++ b/chrome/content/zotero/xpcom/citeproc.js
@@ -23,7 +23,7 @@
* respectively.
*/
var CSL = {
- PROCESSOR_VERSION: "1.1.133",
+ PROCESSOR_VERSION: "1.1.136",
CONDITION_LEVEL_TOP: 1,
CONDITION_LEVEL_BOTTOM: 2,
PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/,
@@ -227,35 +227,58 @@ var CSL = {
}
return lst.join("-");
},
- parseNoteFieldHacks: function(Item, validFieldsForType) {
+ parseNoteFieldHacks: function(Item, allowDateOverride) {
if ("string" !== typeof Item.note) return;
var elems = [];
- var m = Item.note.match(CSL.NOTE_FIELDS_REGEXP);
- if (m) {
- var splt = Item.note.split(CSL.NOTE_FIELDS_REGEXP);
- for (var i=0,ilen=(splt.length-1);i0 || j>1) && !elems[j-1].match(CSL.NOTE_FIELD_REGEXP)) {
+ break
+ } else {
+ elems[j] = '\n' + elems[j].slice(2,-1).trim() + '\n';
+ }
+ }
+ lines[i] = elems.join('');
}
- elems.push(splt[splt.length-1])
- for (var i=1,ilen=elems.length;i -1) {
+ if (key === "type") {
+ Item.type = val;
+ lines[i] = "";
+ } else if (CSL.DATE_VARIABLES.indexOf(key) > -1) {
+ if (allowDateOverride) {
Item[key] = {raw: val};
- } else if (CSL.NAME_VARIABLES.indexOf(key) > -1) {
+ lines[i] = "";
+ }
+ } else if (!Item[key]) {
+ if (CSL.NAME_VARIABLES.indexOf(key) > -1) {
if (!names[key]) {
names[key] = [];
}
@@ -270,16 +293,13 @@ var CSL = {
} else {
Item[key] = val;
}
- elems[i] = "";
+ lines[i] = "";
}
- if (name === "type") {
- Item.type = val;
- }
- Item.note = elems.join("");
}
for (var key in names) {
Item[key] = names[key];
}
+ Item.note = lines.join("").trim();
},
GENDERS: ["masculine", "feminine"],
ERROR_NO_RENDERED_FORM: 1,
@@ -2820,7 +2840,7 @@ CSL.Engine.prototype.retrieveItem = function (id) {
}
}
if (this.opt.development_extensions.field_hack && Item.note) {
- CSL.parseNoteFieldHacks(Item);
+ CSL.parseNoteFieldHacks(Item, this.opt.development_extensions.allow_field_hack_date_override);
}
for (var i = 1, ilen = CSL.DATE_VARIABLES.length; i < ilen; i += 1) {
var dateobj = Item[CSL.DATE_VARIABLES[i]];
@@ -4471,6 +4491,7 @@ CSL.Engine.Opt = function () {
this.has_layout_locale = false;
this.development_extensions = {};
this.development_extensions.field_hack = true;
+ this.development_extensions.allow_field_hack_date_override = true;
this.development_extensions.locator_date_and_revision = true;
this.development_extensions.locator_parsing_for_plurals = true;
this.development_extensions.locator_label_parse = true;
@@ -13914,11 +13935,21 @@ CSL.Util.outputNumericField = function(state, varname, itemID) {
var lastLabelName = null;
for (var i=0,ilen=nums.length;i