www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit ca8ac7b81741a121ca2c8fb6c79b1e957233f8f3
parent 9862e3aa16fa21781b0d10a8dd7707dececc208f
Author: Frank <biercenator@gmail.com>
Date:   Tue,  3 Apr 2012 13:45:12 +0800

Upgrade citeproc-js to version 1.0.317

Sorry for the flurry of version releases of late. They have been
largely driven by the early work on the legal style suite for MLZ,
which kept turning up small bugs and wrinkles. The requirements for
law support are now pretty well covered, and things should slow down,
at least for awhile.

Diffstat:
Mchrome/content/zotero/xpcom/citeproc.js | 183++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 112 insertions(+), 71 deletions(-)

diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js @@ -67,6 +67,14 @@ var CSL = { "art.": "article", "para.": "paragraph" }, + STATUTE_SUBDIV_STRINGS_REVERSE: { + "part": "pt.", + "chapter": "ch.", + "subchapter": "subch.", + "section": "sec.", + "article": "art.", + "paragraph": "para." + }, NestedBraces: [ ["(", "["], [")", "]"] @@ -2153,7 +2161,7 @@ CSL.DateParser = function () { }; CSL.Engine = function (sys, style, lang, forceLang) { var attrs, langspec, localexml, locale; - this.processor_version = "1.0.316"; + this.processor_version = "1.0.317"; this.csl_version = "1.0"; this.sys = sys; this.sys.xml = new CSL.System.Xml.Parsing(); @@ -2522,20 +2530,6 @@ CSL.Engine.prototype.retrieveItem = function (id) { } } } - if (this.opt.development_extensions.atomic_statutes) { - if (Item.type && ["legislation","bill"].indexOf(Item.type) > -1 - && Item.title - && Item.jurisdiction) { - var legislation_id = []; - for (var i = 0, ilen = 3; i < ilen; i += 1) { - var varname = ["type", "genre", "jurisdiction"][i]; - if (Item[varname]) { - legislation_id.push(Item[varname]); - } - } - Item.legislation_id = legislation_id.join("::"); - } - } for (var i = 1, ilen = CSL.DATE_VARIABLES.length; i < ilen; i += 1) { var dateobj = Item[CSL.DATE_VARIABLES[i]]; if (dateobj) { @@ -2547,6 +2541,31 @@ CSL.Engine.prototype.retrieveItem = function (id) { Item[CSL.DATE_VARIABLES[i]] = this.dateParseArray(dateobj); } } + if (this.opt.development_extensions.static_statute_locator) { + if (Item.type && ["legislation","bill"].indexOf(Item.type) > -1 + && Item.title + && Item.jurisdiction) { + var elements = ["type", "title", "jurisdiction", "genre", "volume", "container-title", "original-date", "issued"]; + var legislation_id = []; + for (var i = 0, ilen = elements.length; i < ilen; i += 1) { + var varname = elements[i]; + var value; + if (Item[varname]) { + if (CSL.DATE_VARIABLES.indexOf(varname) > -1) { + if (Item[varname].year) { + value = Item[varname].year; + } else { + continue; + } + } else { + value = Item[varname]; + } + legislation_id.push(value); + } + } + Item.legislation_id = legislation_id.join("::"); + } + } return Item; }; CSL.Engine.prototype.setOpt = function (token, name, value) { @@ -2775,9 +2794,8 @@ CSL.Engine.Opt = function () { this.development_extensions.raw_date_parsing = true; this.development_extensions.clean_up_csl_flaws = true; this.development_extensions.flip_parentheses_to_braces = true; - this.development_extensions.parse_section_variable = true; this.development_extensions.jurisdiction_subfield = true; - this.development_extensions.atomic_statutes = false; + this.development_extensions.static_statute_locator = false; this.development_extensions.csl_reverse_lookup_support = false; this.nodenames = []; this.gender = {}; @@ -3397,6 +3415,70 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, var sortedItems = []; for (i = 0, ilen = citation.citationItems.length; i < ilen; i += 1) { item = citation.citationItems[i]; + Item = this.retrieveItem("" + item.id); + if (Item.section + && (Item.type === "bill" || Item.type === "legislation") + && this.opt.development_extensions.static_statute_locator) { + var value = "" + Item.section; + var locator = ""; + var labelstr = ""; + if (item.locator) { + locator = item.locator; + if (item.label && CSL.STATUTE_SUBDIV_STRINGS_REVERSE[item.label]) { + labelstr = " " + CSL.STATUTE_SUBDIV_STRINGS_REVERSE[item.label] + " "; + } + locator = labelstr + locator; + if (locator.slice(0,1) === "&") { + locator = " " + locator; + } + value = value + locator; + } + var m = value.match(CSL.STATUTE_SUBDIV_GROUPED_REGEX); + if (m) { + var splt = value.split(CSL.STATUTE_SUBDIV_PLAIN_REGEX); + if (CSL.STATUTE_SUBDIV_STRINGS[splt[0]]) { + item.label = CSL.STATUTE_SUBDIV_STRINGS[slt[0]]; + splt.reverse(); + splt.pop(); + splt.reverse(); + } else { + item.label = "section"; + } + if (splt.length > 1) { + var lst = []; + lst.push(splt[1].replace(/\s*$/, "").replace(/^\s*/, "")); + var has_repeat_label = false; + var has_sublabel = false; + for (var j=2, jlen=splt.length; j < jlen; j += 1) { + var subdiv = m[j - 1].replace(/^\s*/, ""); + subdiv = CSL.STATUTE_SUBDIV_STRINGS[subdiv]; + if (subdiv === item.label) { + has_repeat_label = true; + } else { + has_sublabel = true; + } + var subplural = false; + if (splt[j].match(/(?:&|, | and )/)) { + subplural = true; + } + lst.push(this.getTerm(subdiv, "symbol", subplural)); + lst.push(splt[j].replace(/\s*$/, "").replace(/^\s*/, "")); + } + for (var j=lst.length - 2; j > 0; j += -2) { + if (!has_sublabel) { + lst = lst.slice(0,j).concat(lst.slice(j + 1)); + } + } + value = lst.join(" "); + if (!has_sublabel && has_repeat_label) { + item.force_pluralism = true; + } else { + item.force_pluralism = false; + } + } + } + item.locator = value; + } if (this.opt.development_extensions.locator_date_and_revision) { if (item.locator) { item.locator = "" + item.locator; @@ -3423,7 +3505,6 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } } } - Item = this.retrieveItem("" + item.id); var newitem = [Item, item]; sortedItems.push(newitem); citation.citationItems[i].item = Item; @@ -3529,8 +3610,6 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, var mylabel = item[1].label; if (item[0].legislation_id) { myid = item[0].legislation_id; - mylocator = item[0].section; - mylabel = ""; } var incitationid; if (k > 0) { @@ -3604,34 +3683,20 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } var prev, prev_locator, prev_label, curr_locator, curr_label; if (ibidme) { - var myprev_locator; - var myprev_label; if (k > 0) { - if (onecitation.sortedItems[(k - 1)][0].legislation_id) { - myprev_locator = onecitation.sortedItems[(k - 1)][0].section; - myprev_label = ""; - } else { - myprev_locator = onecitation.sortedItems[(k - 1)][1].locator; - myprev_label = onecitation.sortedItems[(k - 1)][1].label; - } + prev = onecitation.sortedItems[(k - 1)][1]; } else { - if (citations[(j - 1)].sortedItems[0][0].legislation_id) { - myprev_locator = citations[(j - 1)].sortedItems[0][0].section; - myprev_label = ""; - } else { - myprev_locator = citations[(j - 1)].sortedItems[0][1].locator; - myprev_label = citations[(j - 1)].sortedItems[0][1].label; - } + prev = citations[(j - 1)].sortedItems[0][1]; } - if (myprev_locator) { - if (myprev_label) { - prev_label = myprev_label; + if (prev.locator) { + if (prev.label) { + prev_label = prev.label; } else { prev_label = ""; } - prev_locator = "" + myprev_locator + prev_label; + prev_locator = "" + prev.locator + prev_label; } else { - prev_locator = myprev_locator; + prev_locator = prev.locator; } if (mylocator) { if (mylabel) { @@ -7743,35 +7808,6 @@ CSL.Node.text = { var value; value = state.getVariable(Item, this.variables[0], form); if (value) { - if ((Item.type === "bill" || Item.type === "legislation") - && state.opt.development_extensions.parse_section_variable) { - value = "" + value; - var m = value.match(CSL.STATUTE_SUBDIV_GROUPED_REGEX); - if (m) { - var splt = value.split(CSL.STATUTE_SUBDIV_PLAIN_REGEX); - var lst = []; - if (!lst[0]) { - var parsed = false; - for (var i=1, ilen=splt.length; i < ilen; i += 1) { - var subdiv = m[i - 1].replace(/^\s*/, ""); - subdiv = CSL.STATUTE_SUBDIV_STRINGS[subdiv]; - var plural = false; - if (splt[i].match(/(?:&|, | and )/)) { - plural = true; - } - subdiv = state.getTerm(subdiv, "symbol", plural); - if (subdiv) { - parsed = true; - } - lst.push(subdiv); - lst.push(splt[i].replace(/\s*,*\s*$/, "").replace(/^\s*,*\s*/, "")); - } - if (parsed) { - value = lst.join(" "); - } - } - } - } state.output.append(value, this); } }; @@ -10353,7 +10389,7 @@ CSL.Engine.prototype.processNumber = function (node, ItemObject, variable) { this.tmp.shadow_numbers[variable].values.push(["Blob", elements[i], undefined]); } } - } + }; if (num.indexOf(" ") === -1 && num.match(/[0-9]/)) { this.tmp.shadow_numbers[variable].numeric = true; } else { @@ -10362,6 +10398,11 @@ CSL.Engine.prototype.processNumber = function (node, ItemObject, variable) { if (count > 1) { this.tmp.shadow_numbers[variable].plural = 1; } + if (ItemObject.force_pluralism === true) { + this.tmp.shadow_numbers[variable].plural = 1; + } else if (ItemObject.force_pluralism) { + this.tmp.shadow_numbers[variable].plural = 0; + } } }; CSL.Util.PageRangeMangler = {};