function parseAssertions(inputAssertions) {
let statements = [];
let prepositionHash = {};
let groupsHash = {};
let hidesHash = {};
let groups = [];
inputAssertions.split('\n').forEach((line, index) => {
var subject = '';
var object = '';
var preposition = '';
var isGrouping = false;
var isHide = false;
function isLowerCase(str) {
return str == str.toLowerCase() && str != str.toUpperCase();
}
const words = line.split(' ');
var comment = false;
words.forEach((word, index) => {
if (comment) return;
if (word == '') return;
if (word.match(/\/\/.*/)) {
comment = true;
return;
}
if (word.toUpperCase() == 'GROUPBY') {
isGrouping = true;
} else if (word.toUpperCase() == 'HIDE') {
isHide = true;
} else if (isLowerCase(word)) {
preposition = preposition + (preposition == '' ? '' : ' ') + word;
} else if (subject == '') {
subject = word;
} else if (preposition == '') {
subject = subject + ' ' + word;
} else {
object = object + (object == '' ? '' : ' ') + word;
}
});
if (isGrouping) {
groups.push(preposition);
groupsHash[preposition] = true;
} else if (isHide) {
hidesHash[preposition] = true;
} else if (subject != '' && preposition != '' && object != '') {
statements.push({
subject: subject,
preposition: preposition,
object: object
});
if (!prepositionHash.hasOwnProperty(preposition)) {
prepositionHash[preposition] = {};
}
if (!prepositionHash[preposition].hasOwnProperty(object)) {
prepositionHash[preposition][object] = [];
}
prepositionHash[preposition][object].push(subject);
}
});
return {
statements: statements,
prepositionHash: prepositionHash,
groupsHash: groupsHash,
hidesHash: hidesHash,
groups: groups
};
}