Skip to content

Commit

Permalink
Implement new parallel attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
fbennett committed Sep 1, 2019
1 parent 0d826c8 commit 49e7db6
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 53 deletions.
2 changes: 1 addition & 1 deletion src/api_cite.js
Expand Up @@ -905,7 +905,7 @@ CSL.getAmbiguousCite = function (Item, disambig, visualForm, item) {
parallel_result: flags.parallel_result,
changes_in_condition: flags.changes_in_condition,
no_repeat_condition: flags.no_repeat_condition,
layout_delimiter_override: flags.layout_delimiter_override,
parallel_delimiter_override: flags.parallel_delimiter_override,
parallel_repeats: flags.parallel_repeats,
no_repeat_repeats: flags.no_repeat_repeats,
condition: flags.condition,
Expand Down
4 changes: 2 additions & 2 deletions src/attributes.js
Expand Up @@ -830,8 +830,8 @@ CSL.Attributes["@no-repeat"] = function (state, arg) {
}
this.strings.set_no_repeat_condition = lst;
};
CSL.Attributes["@layout-delimiter-override"] = function (state, arg) {
this.strings.set_layout_delimiter_override = arg;
CSL.Attributes["@parallel-delimiter-override"] = function (state, arg) {
this.strings.set_parallel_delimiter_override = arg;
};


Expand Down
2 changes: 1 addition & 1 deletion src/load.js
Expand Up @@ -35,7 +35,7 @@

var CSL = {

PROCESSOR_VERSION: "1.2.23",
PROCESSOR_VERSION: "1.2.2",

error: function(str) { // default error function
if ("undefined" === typeof Error) {
Expand Down
29 changes: 20 additions & 9 deletions src/node_group.js
Expand Up @@ -85,7 +85,7 @@ CSL.Node.group = {
parallel_condition: this.strings.set_parallel_condition,
changes_in_condition: this.strings.set_changes_in_condition,
no_repeat_condition: this.strings.set_no_repeat_condition,
layout_delimiter_override: this.strings.set_layout_delimiter_override,
parallel_delimiter_override: this.strings.set_parallel_delimiter_override,
parallel_result: undefined,
parallel_repeats: undefined,
condition: condition,
Expand Down Expand Up @@ -307,26 +307,37 @@ CSL.Node.group = {
}
var blobs = state.output.current.value().blobs;
var pos = state.output.current.value().blobs.length - 1;
if (!state.tmp.just_looking && (flags.parallel_condition || flags.changes_in_condition || flags.no_repeat_condition)) {
if (!state.tmp.just_looking && (flags.parallel_condition || flags.no_repeat_condition || flags.parallel_delimiter_override)) {
var parallel_condition_object = {
blobs: blobs,
condition: flags.parallel_condition,
result: flags.parallel_result,
condition: flags.condition,
parallel_condition: flags.parallel_condition,
parallel_result: flags.parallel_result,
changes_in_condition: flags.changes_in_condition,
parallel_repeats: flags.parallel_repeats,
no_repeat_condition: flags.no_repeat_condition,
no_repeat_repeats: flags.no_repeat_repeats,
layout_delimiter_override: flags.layout_delimiter_override,
parallel_delimiter_override: flags.parallel_delimiter_override,
id: Item.id,
pos: pos
};
if (state.parallel.checkRepeats(parallel_condition_object)) {
while (blobs.length) {
if (blobs) {
blobs.pop();
}
state.output.queue.slice(-1)[0].parallel_delimiter = parallel_condition_object.layout_delimiter_override;
} else {
state.parallel.parallel_conditional_blobs_list.push(parallel_condition_object);
if (parallel_condition_object.parallel_delimiter_override) {
state.output.queue.slice(-1)[0].parallel_delimiter = parallel_condition_object.parallel_delimiter_override;
}
}
if (state.parallel.checkParallels(parallel_condition_object, Item)) {
if (blobs) {
blobs.pop();
}
}
if (state.tmp.area === "citation" && !item.prefix && ["mid", "last"].indexOf(parallel_condition_object.parallel_result) > -1) {
if (parallel_condition_object.parallel_delimiter_override) {
state.output.queue.slice(-1)[0].parallel_delimiter = parallel_condition_object.parallel_delimiter_override;
}
}
}
} else {
Expand Down
5 changes: 4 additions & 1 deletion src/registry.js
Expand Up @@ -67,7 +67,10 @@ CSL.Registry = function (state) {
// See CSL.NameOutput.prototype.outputNames
// and CSL.Registry.prototype.doinserts
this.authorstrings = {};


// for parallel delimiter support
this.masterMap = {};

//
// shared scratch vars
this.mylist = [];
Expand Down
61 changes: 22 additions & 39 deletions src/util_parallel.js
Expand Up @@ -5,7 +5,6 @@
*/
CSL.Parallel = function (state) {
this.state = state;
this.parallel_conditional_blobs_list = [];
};

CSL.Parallel.Partnerships = function(state, items) {
Expand Down Expand Up @@ -115,19 +114,15 @@ CSL.Parallel.prototype.StartCitation = function (sortedItems, out) {
if (i < ilen-1) {
sortedItems[i+1][1].parallel_repeats = partners._getPartnerRepeats(i, "changes_in");
}
if (!sortedItems[i][1].prefix) {
sortedItems[i][1].prefix = ", ";
}
this.state.registry.registry[masterID].siblings.push(currentID);
this.state.registry.masterMap[currentID] = masterID;
} else if (status === "last") {
sortedItems[i][1].parallel = "last";
if (!sortedItems[i][1].prefix) {
sortedItems[i][1].prefix = ", ";
}
if (i < ilen-1) {
sortedItems[i+1][1].parallel_repeats = partners._getPartnerRepeats(i, "changes_in");
}
this.state.registry.registry[masterID].siblings.push(currentID);
this.state.registry.masterMap[currentID] = masterID;
}
// Set repeats map here?
if (this.state.opt.parallel.no_repeat) {
Expand Down Expand Up @@ -156,41 +151,29 @@ CSL.Parallel.prototype.checkRepeats = function(obj) {
return purgeme;
};

CSL.Parallel.prototype.purgeGroupsIfParallel = function () {
for (var i = this.parallel_conditional_blobs_list.length - 1; i > -1; i += -1) {
var obj = this.parallel_conditional_blobs_list[i];
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)
purgeme = false;
var matches = 0;
for (var j=0,jlen=obj.changes_in_condition.length; j<jlen; j++) {
if (obj.parallel_repeats[obj.changes_in_condition[j]]) {
matches += 1;
}
}
if (matches === obj.changes_in_condition.length) {
purgeme = true;
}
}
CSL.Parallel.prototype.checkParallels = function(obj, Item) {
var purgeme = false;
if (obj.parallel_result && obj.parallel_condition) {
purgeme = true;
if (obj.parallel_result === obj.parallel_condition) {
purgeme = false;
}
if (purgeme) {
var buffer = [];
while (obj.blobs.length > obj.pos) {
buffer.push(obj.blobs.pop());
}
if (buffer.length) {
buffer.pop();
if (purgeme && obj.changes_in_condition && obj.parallel_repeats) {
//if (purgeme && obj.changes_in_condition && obj.parallel_repeats)
purgeme = false;
var matches = 0;
for (var j=0,jlen=obj.changes_in_condition.length; j<jlen; j++) {
if (obj.parallel_repeats[obj.changes_in_condition[j]]) {
matches += 1;
}
}
while (buffer.length) {
obj.blobs.push(buffer.pop());
if (matches === obj.changes_in_condition.length) {
purgeme = true;
}
}
this.parallel_conditional_blobs_list.pop();
}
return purgeme;
};


CSL.Parallel.prototype.purgeGroupsIfParallel = function() {};

0 comments on commit 49e7db6

Please sign in to comment.