Merge branch '4.0'
This commit is contained in:
commit
c6444c29de
1 changed files with 62 additions and 35 deletions
|
@ -34,7 +34,7 @@ if (!Array.indexOf) {
|
|||
};
|
||||
}
|
||||
var CSL = {
|
||||
PROCESSOR_VERSION: "1.1.91",
|
||||
PROCESSOR_VERSION: "1.1.99",
|
||||
CONDITION_LEVEL_TOP: 1,
|
||||
CONDITION_LEVEL_BOTTOM: 2,
|
||||
PLAIN_HYPHEN_REGEX: /(?:[^\\]-|\u2013)/,
|
||||
|
@ -120,7 +120,9 @@ var CSL = {
|
|||
"vol": "volume"
|
||||
},
|
||||
MODULE_MACROS: {
|
||||
"juris-pretitle": true,
|
||||
"juris-title": true,
|
||||
"juris-pretitle-short": true,
|
||||
"juris-title-short": true,
|
||||
"juris-main": true,
|
||||
"juris-main-short": true,
|
||||
|
@ -204,6 +206,55 @@ var CSL = {
|
|||
this["container-phrase"] = {};
|
||||
this["title-phrase"] = {};
|
||||
},
|
||||
parseNoteFieldHacks: function(Item, validFieldsForType) {
|
||||
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);i<ilen;i++) {
|
||||
elems.push(splt[i]);
|
||||
elems.push(m[i]);
|
||||
}
|
||||
elems.push(splt[splt.length-1])
|
||||
var names = {};
|
||||
for (var i=1,ilen=elems.length;i<ilen;i+=2) {
|
||||
var mm = elems[i].match(CSL.NOTE_FIELD_REGEXP);
|
||||
var key = mm[1];
|
||||
var val = mm[2].replace(/^\s+/, "").replace(/\s+$/, "");
|
||||
if (!Item[key]) {
|
||||
if (!validFieldsForType || validFieldsForType[key]) {
|
||||
if (CSL.DATE_VARIABLES.indexOf(key) > -1) {
|
||||
Item[key] = {raw: val};
|
||||
elems[i] = "";
|
||||
} else {
|
||||
Item[key] = val;
|
||||
}
|
||||
} else if (CSL.NAME_VARIABLES.indexOf(key) > -1) {
|
||||
if (!names[key]) {
|
||||
names[key] = [];
|
||||
}
|
||||
var lst = val.split(/\s*\|\|\s*/);
|
||||
if (lst.length === 1) {
|
||||
names[key].push({literal:lst[0]});
|
||||
} else if (lst.length === 2) {
|
||||
var name = {family:lst[0],given:lst[1]};
|
||||
CSL.parseParticles(name);
|
||||
names[key].push(name);
|
||||
}
|
||||
elems[i] = "";
|
||||
}
|
||||
}
|
||||
if (name === "type") {
|
||||
Item.type = val;
|
||||
}
|
||||
Item.note = elems.join("");
|
||||
}
|
||||
for (var key in names) {
|
||||
Item[key] = names[key];
|
||||
}
|
||||
}
|
||||
},
|
||||
GENDERS: ["masculine", "feminine"],
|
||||
ERROR_NO_RENDERED_FORM: 1,
|
||||
PREVIEW: "Just for laughs.",
|
||||
|
@ -1099,7 +1150,7 @@ CSL.parseXml = function(str) {
|
|||
var _obj = {children:[]};
|
||||
var _stack = [_obj.children];
|
||||
function _listifyString(str) {
|
||||
str = str.split("\n").join(" ").replace(/>[ ]+</g, "><").replace(/<\!--.*?-->/g, "");
|
||||
str = str.split(/(?:\r\n|\n|\r)/).join(" ").replace(/>[ ]+</g, "><").replace(/<\!--.*?-->/g, "");
|
||||
var lst = str.split("><");
|
||||
var stylePos = null;
|
||||
for (var i=0,ilen=lst.length;i<ilen;i++) {
|
||||
|
@ -1149,7 +1200,7 @@ CSL.parseXml = function(str) {
|
|||
});
|
||||
}
|
||||
function _getAttributes(elem) {
|
||||
var m = elem.match(/([^\"= ]+)=\"[^\"]*\"/g);
|
||||
var m = elem.match(/([^\'\"= ]+)=(?:\"[^\"]*\"|\'[^\']*\')/g);
|
||||
if (m) {
|
||||
for (var i=0,ilen=m.length;i<ilen;i++) {
|
||||
m[i] = m[i].replace(/=.*/, "");
|
||||
|
@ -1158,9 +1209,9 @@ CSL.parseXml = function(str) {
|
|||
return m;
|
||||
}
|
||||
function _getAttribute(elem, attr) {
|
||||
var rex = RegExp('^.*[ ]+' + attr + '=\"([^\"]*)\".*$');
|
||||
var rex = RegExp('^.*[ ]+' + attr + '=(\"(?:[^\"]*)\"|\'(?:[^\']*)\').*$');
|
||||
var m = elem.match(rex);
|
||||
return m ? m[1] : null;
|
||||
return m ? m[1].slice(1, -1) : null;
|
||||
}
|
||||
function _getTagName(elem) {
|
||||
var rex = RegExp("^<([^ />]+)");
|
||||
|
@ -2727,34 +2778,7 @@ CSL.Engine.prototype.retrieveItem = function (id) {
|
|||
}
|
||||
}
|
||||
if (this.opt.development_extensions.field_hack && Item.note) {
|
||||
m = Item.note.match(CSL.NOTE_FIELDS_REGEXP);
|
||||
if (m) {
|
||||
var names = {};
|
||||
for (pos = 0, len = m.length; pos < len; pos += 1) {
|
||||
mm = m[pos].match(CSL.NOTE_FIELD_REGEXP);
|
||||
if (!Item[mm[1]] && CSL.DATE_VARIABLES.indexOf(mm[1]) > -1) {
|
||||
Item[mm[1]] = {raw:mm[2]};
|
||||
} else if (!Item[mm[1]] && CSL.NAME_VARIABLES.indexOf(mm[1]) > -1) {
|
||||
if (!names[mm[1]]) {
|
||||
names[mm[1]] = [];
|
||||
}
|
||||
var lst = mm[2].split(/\s*\|\|\s*/);
|
||||
if (lst.length === 1) {
|
||||
names[mm[1]].push({family:lst[0],isInstitution:true});
|
||||
} else if (lst.length === 2) {
|
||||
var name = {family:lst[0],given:lst[1]};
|
||||
CSL.parseParticles(name);
|
||||
names[mm[1]].push(name);
|
||||
}
|
||||
} else if (!Item[mm[1]] || mm[1] === "type") {
|
||||
Item[mm[1]] = mm[2].replace(/^\s+/, "").replace(/\s+$/, "");
|
||||
}
|
||||
Item.note.replace(CSL.NOTE_FIELD_REGEXP, "");
|
||||
}
|
||||
for (var key in names) {
|
||||
Item[key] = names[key];
|
||||
}
|
||||
}
|
||||
CSL.parseNoteFieldHacks(Item);
|
||||
}
|
||||
for (var i = 1, ilen = CSL.DATE_VARIABLES.length; i < ilen; i += 1) {
|
||||
var dateobj = Item[CSL.DATE_VARIABLES[i]];
|
||||
|
@ -11892,7 +11916,9 @@ CSL.Transform = function (state) {
|
|||
if (ret.name && !jurisdictionName) {
|
||||
jurisdictionName = state.sys.getHumanForm(Item[field]);
|
||||
}
|
||||
ret.name = CSL.getSuppressedJurisdictionName.call(state, Item[field], jurisdictionName);
|
||||
if (jurisdictionName) {
|
||||
ret.name = CSL.getSuppressedJurisdictionName.call(state, Item[field], jurisdictionName);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -13205,6 +13231,7 @@ CSL.Engine.prototype.processNumber = function (node, ItemObject, variable, type)
|
|||
var debug = false;
|
||||
var me = this;
|
||||
function normalizeFieldValue(str, defaultLabel) {
|
||||
str = str.trim();
|
||||
var m = str.match(/^([^ ]+)/);
|
||||
if (m && !CSL.STATUTE_SUBDIV_STRINGS[m[1]]) {
|
||||
var embeddedLabel = null;
|
||||
|
@ -13343,7 +13370,7 @@ CSL.Engine.prototype.processNumber = function (node, ItemObject, variable, type)
|
|||
isCollapsible = true;
|
||||
}
|
||||
for (var j=currentLabelInfo.pos,jlen=values.length; j<jlen; j++) {
|
||||
if (currentLabelInfo.count > 1 && isCollapsible) {
|
||||
if (currentLabelInfo.label === values[j].label && currentLabelInfo.count > 1 && isCollapsible) {
|
||||
values[j].plural = 1;
|
||||
}
|
||||
values[j].numeric = currentLabelInfo.numeric;
|
||||
|
|
Loading…
Add table
Reference in a new issue