diff --git a/src/api_cite.js b/src/api_cite.js index 533aea7ca..daddea8d1 100644 --- a/src/api_cite.js +++ b/src/api_cite.js @@ -343,7 +343,10 @@ CSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, } // evaluate parallels - this.parallel.StartCitation(citation.sortedItems); + + if (this.opt.parallel.enable) { + this.parallel.StartCitation(citation.sortedItems); + } var citations; if (this.opt.update_mode === CSL.POSITION) { @@ -873,7 +876,9 @@ CSL.Engine.prototype.makeCitationCluster = function (rawList) { inputList.sort(this.citation.srt.compareCompositeKeys); } this.tmp.citation_errors = []; - this.parallel.StartCitation(inputList); + if (this.opt.parallel.enable) { + this.parallel.StartCitation(inputList); + } var str = CSL.getCitationCluster.call(this, inputList); return str; }; @@ -899,7 +904,10 @@ CSL.getAmbiguousCite = function (Item, disambig, visualForm, item) { parallel_condition: flags.parallel_condition, parallel_result: flags.parallel_result, changes_in_condition: flags.changes_in_condition, - parallel_repeats: flags.parallel_result, + no_repeat_condition: flags.no_repeat_condition, + layout_delimiter_override: flags.layout_delimiter_override, + parallel_repeats: flags.parallel_repeats, + no_repeat_repeats: flags.no_repeat_repeats, condition: flags.condition, force_suppress: flags.force_suppress, done_vars: flags.done_vars.slice() @@ -1159,6 +1167,8 @@ CSL.getCitationCluster = function (inputList, citation) { this.tmp.in_cite_predecessor = false; // true is to block reset of shadow numbers + + if (pos > 0) { CSL.getCite.call(this, Item, item, "" + inputList[(pos - 1)][0].id, true); } else { @@ -1213,7 +1223,9 @@ CSL.getCitationCluster = function (inputList, citation) { } } - this.parallel.purgeGroupsIfParallel(); + if (this.opt.parallel.enable) { + this.parallel.purgeGroupsIfParallel(); + } // // output.queue is a simple array. do a slice // of it to get each cite item, setting params from diff --git a/src/attributes.js b/src/attributes.js index 94e027284..8db3f332c 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -113,7 +113,6 @@ CSL.Attributes["@position"] = function (state, arg) { this.tests ? {} : this.tests = []; var tryposition; state.opt.update_mode = CSL.POSITION; - state.parallel.use_parallels = null; var trypositions = arg.split(/\s+/); var testSubsequentNear = function (Item, item) { if (item && item.position >= CSL.POSITION_SUBSEQUENT && item["near-note"]) { @@ -810,15 +809,30 @@ CSL.Attributes["@locale-internal"] = function (state, arg) { // These are not evaluated as conditions immediately: they only // set parameters that are picked up during processing. CSL.Attributes["@is-parallel"] = function (state, arg) { + state.opt.parallel.enable = true; this.strings.set_parallel_condition = arg; }; CSL.Attributes["@changes-in"] = function (state, arg) { - this.strings.set_changes_in_condition = arg.split(/\s+/); + var lst = arg.split(/\s+/); + for (var i=0,ilen=lst.length;i -1; i += -1) { var obj = this.parallel_conditional_blobs_list[i]; - if (!obj.result && !obj.parallel_repeats) { - purgeme = false; - } else { - if (obj.condition) { - var purgeme = true; - if (!obj.result || obj.result === obj.condition) { - purgeme = false; - } + var purgeme = false; + if (obj.result && obj.condition) { + var purgeme = true; + if (!obj.result || obj.result === obj.condition) { + purgeme = false; } if (purgeme && obj.changes_in_condition && obj.parallel_repeats) { //if (purgeme && obj.changes_in_condition && obj.parallel_repeats) diff --git a/src/util_substitute.js b/src/util_substitute.js index e622d5993..add68dd77 100644 --- a/src/util_substitute.js +++ b/src/util_substitute.js @@ -10,6 +10,9 @@ CSL.Util.substituteStart = function (state, target) { if (item && item.parallel_repeats) { state.tmp.group_context.tip.parallel_repeats = item.parallel_repeats; } + if (item && item.no_repeat_repeats) { + state.tmp.group_context.tip.no_repeat_repeats = item.no_repeat_repeats; + } for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) { if ("@strip-periods" === this.decorations[i][0] && "true" === this.decorations[i][1]) { state.tmp.strip_periods += 1;