www

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

commit 657ea7b660684e2e2122309583aa00ed519c09b0
parent 5c565c457ff7260ae02e3f1b80179284b61dc549
Author: Frank <biercenator@gmail.com>
Date:   Sat, 24 Mar 2012 16:10:09 +0800

Upgrade citeproc-js to version 1.0.306

Diffstat:
Mchrome/content/zotero/xpcom/citeproc.js | 113++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 81 insertions(+), 32 deletions(-)

diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js @@ -1122,7 +1122,7 @@ CSL.Output.Queue.prototype.string = function (state, myblobs, blob) { if (state.normalDecorIsOrphan(blobjr, params)) { continue; } - b = state.fun.decorate[params[0]][params[1]](state, b); + b = state.fun.decorate[params[0]][params[1]](state, b, params[2]); } } if (b && b.length) { @@ -1169,7 +1169,7 @@ CSL.Output.Queue.prototype.string = function (state, myblobs, blob) { if (state.normalDecorIsOrphan(blobjr, params)) { continue; } - blobs_start = state.fun.decorate[params[0]][params[1]](state, blobs_start); + blobs_start = state.fun.decorate[params[0]][params[1]](state, blobs_start, params[2]); } } b = blobs_start; @@ -1188,7 +1188,7 @@ CSL.Output.Queue.prototype.string = function (state, myblobs, blob) { if (["@bibliography", "@display"].indexOf(params[0]) === -1) { continue; } - blobs_start = state.fun.decorate[params[0]][params[1]].call(blob, state, blobs_start); + blobs_start = state.fun.decorate[params[0]][params[1]].call(blob, state, blobs_start, params[2]); } } } @@ -1286,7 +1286,7 @@ CSL.Output.Queue.prototype.renderBlobs = function (blobs, delim, has_more) { if (state.normalDecorIsOrphan(blob, params)) { continue; } - str = state.fun.decorate[params[0]][params[1]](state, str); + str = state.fun.decorate[params[0]][params[1]](state, str, params[2]); } } str = blob.strings.prefix + str + blob.strings.suffix; @@ -1711,6 +1711,7 @@ CSL.expandMacro = function (macro_key_token) { } var hasDate = false; macro_nodes = this.sys.xml.getNodesByName(this.cslXml, 'macro', mkey); + var macroid = this.sys.xml.getAttributeValue(macro_nodes,'cslid'); if (macro_nodes.length) { hasDate = this.sys.xml.getAttributeValue(macro_nodes[0], "macro-has-date"); } @@ -1723,6 +1724,7 @@ CSL.expandMacro = function (macro_key_token) { macro_key_token.execs.push(func); } macro_key_token.tokentype = CSL.START; + macro_key_token.cslid = macroid; CSL.Node.group.build.call(macro_key_token, this, this[this.build.area].tokens, true); if (!this.sys.xml.getNodeValue(macro_nodes)) { throw "CSL style error: undefined macro \"" + mkey + "\""; @@ -2156,7 +2158,7 @@ CSL.DateParser = function () { }; CSL.Engine = function (sys, style, lang, forceLang) { var attrs, langspec, localexml, locale; - this.processor_version = "1.0.305"; + this.processor_version = "1.0.306"; this.csl_version = "1.0"; this.sys = sys; this.sys.xml = new CSL.System.Xml.Parsing(); @@ -2184,6 +2186,22 @@ CSL.Engine = function (sys, style, lang, forceLang) { this.output = new CSL.Output.Queue(this); this.dateput = new CSL.Output.Queue(this); this.cslXml = this.sys.xml.makeXml(style); + if (this.opt.development_extensions.csl_reverse_lookup_support) { + this.build.cslNodeId = 0; + this.setCslNodeIds = function(myxml, nodename) { + var children = this.sys.xml.children(myxml); + this.sys.xml.setAttribute(myxml, 'cslid', this.build.cslNodeId); + this.opt.nodenames.push(nodename); + this.build.cslNodeId += 1; + for (var i = 0, ilen = this.sys.xml.numberofnodes(children); i < ilen; i += 1) { + nodename = this.sys.xml.nodename(children[i]); + if (nodename) { + this.setCslNodeIds(children[i], nodename); + } + } + } + this.setCslNodeIds(this.cslXml, "style"); + } this.sys.xml.addMissingNameNodes(this.cslXml); this.sys.xml.addInstitutionNodes(this.cslXml); this.sys.xml.insertPublisherAndPlace(this.cslXml); @@ -2750,6 +2768,8 @@ CSL.Engine.Opt = function () { this.development_extensions.flip_parentheses_to_braces = true; this.development_extensions.parse_section_variable = true; this.development_extensions.jurisdiction_subfield = true; + this.development_extensions.csl_reverse_lookup_support = false; + this.nodenames = []; this.gender = {}; this['cite-lang-prefs'] = { persons:['orig'], @@ -5279,7 +5299,6 @@ CSL.NameOutput.prototype.init = function (names) { if (!this.state.tmp.value.length) { return; } - this.state.tmp.group_context.value()[2] = false; }; CSL.NameOutput.prototype.reinit = function (names) { if (this.state.tmp.can_substitute.value()) { @@ -5381,15 +5400,20 @@ CSL.NameOutput.prototype.outputNames = function () { this.state.output.append(blob, this.names); this.state.tmp.name_node.top = this.state.output.current.value(); if (variables[0] !== "authority") { - var oldSuppressDecorations = this.state.tmp.suppress_decorations; - this.state.tmp.suppress_decorations = true; - var lastBlob = this.state.tmp.name_node.top.blobs.pop(); - var name_node_string = this.state.output.string(this.state, lastBlob.blobs, false); - this.state.tmp.name_node.top.blobs.push(lastBlob); + var name_node_string = []; + var nameobjs = this.Item[variables[0]]; + if (nameobjs) { + for (var i = 0, ilen = nameobjs.length; i < ilen; i += 1) { + substring = CSL.Util.Names.getRawName(nameobjs[i]); + if (substring) { + name_node_string.push(substring); + } + } + } + name_node_string = name_node_string.join(", "); if (name_node_string) { this.state.tmp.name_node.string = name_node_string; } - this.state.tmp.suppress_decorations = oldSuppressDecorations; } if (this.state.tmp.name_node.string && !this.state.tmp.first_name_string) { this.state.tmp.first_name_string = this.state.tmp.name_node.string; @@ -5414,24 +5438,6 @@ CSL.NameOutput.prototype.outputNames = function () { } } } - if (this.Item.type === "personal_communication" || this.Item.type === "interview") { - var author = ""; - author = this.state.tmp.name_node.string; - if (author && this.state.sys.getAbbreviation && !(this.item && this.item["suppress-author"])) { - this.state.transform.loadAbbreviation("default", "nickname", author); - var myLocalName = this.state.transform.abbrevs["default"].nickname[author]; - if (myLocalName) { - if (myLocalName === "{suppress}") { - this.state.tmp.name_node.top.blobs.pop(); - this.state.tmp.group_context.value()[2] = false; - } else { - this.state.output.append(myLocalName, "empty", true) - blob = this.state.output.pop(); - this.state.tmp.name_node.top.blobs = [blob]; - } - } - } - } this._collapseAuthor(); this.variables = []; }; @@ -5692,7 +5698,10 @@ CSL.NameOutput.prototype._getFreeters = function (v, values) { this.freeters[v] = []; for (var i = values.length - 1; i > -1; i += -1) { if (this.isPerson(values[i])) { - this.freeters[v].push(values.pop()); + var value = this._checkNickname(values.pop()); + if (value) { + this.freeters[v].push(value); + } } else { break; } @@ -5710,7 +5719,10 @@ CSL.NameOutput.prototype._getPersonsAndInstitutions = function (v, values) { var first = true; for (var i = values.length - 1; i > -1; i += -1) { if (this.isPerson(values[i])) { - persons.push(values[i]); + var value = this._checkNickname(values[i]); + if (value) { + persons.push(value); + } } else { has_affiliates = true; this.institutions[v].push(values[i]); @@ -5734,6 +5746,22 @@ CSL.NameOutput.prototype._clearValues = function (values) { values.pop(); } }; +CSL.NameOutput.prototype._checkNickname = function (name) { + var author = ""; + author = CSL.Util.Names.getRawName(name); + if (author && this.state.sys.getAbbreviation && !(this.item && this.item["suppress-author"])) { + this.state.transform.loadAbbreviation("default", "nickname", author); + var myLocalName = this.state.transform.abbrevs["default"].nickname[author]; + if (myLocalName) { + if (myLocalName === "{suppress}") { + name = false; + } else { + name = {family:myLocalName,given:''}; + } + } + } + return name; +} CSL.NameOutput.prototype.joinPersons = function (blobs, pos) { var ret; if (this.etal_spec[pos] === 1) { @@ -7708,6 +7736,9 @@ CSL.Node.text = { } }; CSL.Attributes = {}; +CSL.Attributes["@cslid"] = function (state, arg) { + this.cslid = parseInt(arg, 10); +} CSL.Attributes["@is-plural"] = function (state, arg) { var func = function (state, Item, item) { var nameList = Item[arg]; @@ -9721,6 +9752,16 @@ CSL.Util.Names.stripRight = function (str) { } return str.slice(0, end); }; +CSL.Util.Names.getRawName = function (name) { + var ret = []; + if (name.given) { + ret.push(name.given); + } + if (name.family) { + ret.push(name.family); + } + return ret.join(" "); +}; CSL.Util.Dates = {}; CSL.Util.Dates.year = {}; CSL.Util.Dates.year["long"] = function (state, num) { @@ -9857,6 +9898,11 @@ CSL.Util.substituteStart = function (state, target) { } }; this.execs.push(func); + if (this.decorations && state.opt.development_extensions.csl_reverse_lookup_support) { + this.decorations.reverse(); + this.decorations.push(["@showid","true", this.cslid]); + this.decorations.reverse(); + } nodetypes = ["number", "date", "names"]; if (("text" === this.name && !this.postponed_macro) || nodetypes.indexOf(this.name) > -1) { element_trace = function (state, Item, item) { @@ -10947,6 +10993,9 @@ CSL.Output.Formats.prototype.html = { }, "@display/indent": function (state, str) { return "<div class=\"csl-indent\">" + str + "</div>\n "; + }, + "@showid/true": function (state, str, cslid) { + return "<span class=\"" + state.opt.nodenames[cslid] + "\" cslid=\"" + cslid + "\">" + str + "</span>"; } }; CSL.Output.Formats.prototype.text = {