@npmstuff/argdown-core
Version:
A pluggable parser for the Argdown argumentation syntax
138 lines • 6.39 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.deriveImplicitRelations = exports.transformToArgumentRelationType = void 0;
const model_1 = require("./model/model");
const utils_1 = require("./utils");
const transformToArgumentRelationType = (relationType) => {
switch (relationType) {
case model_1.RelationType.ENTAILS:
return model_1.RelationType.SUPPORT;
case model_1.RelationType.CONTRADICTORY:
case model_1.RelationType.CONTRARY:
return model_1.RelationType.ATTACK;
default:
return relationType;
}
};
exports.transformToArgumentRelationType = transformToArgumentRelationType;
const deriveImplicitRelations = (member, statementsMap, argumentsMap) => {
const implicitRelations = [];
if (member.relations) {
member.relations.reduce((acc, explicitRelation) => {
const otherMember = (0, utils_1.other)(explicitRelation, member);
if (otherMember.type === model_1.ArgdownTypes.ARGUMENT) {
return acc;
}
else if (otherMember.type === model_1.ArgdownTypes.INFERENCE) {
acc.push(Object.assign(Object.assign({}, explicitRelation), { to: argumentsMap[otherMember.argumentTitle] }));
return acc;
}
const isOutgoing = explicitRelation.from === member;
const isSymmetric = model_1.IRelation.isSymmetric(explicitRelation);
otherMember.members.reduce((acc, statement) => {
if (!(0, model_1.isPCSStatement)(statement)) {
return acc;
}
const argument = argumentsMap[statement.argumentTitle];
if ((isSymmetric || isOutgoing) &&
statement.role === model_1.StatementRole.PREMISE) {
acc.push({
relationType: (0, exports.transformToArgumentRelationType)(explicitRelation.relationType),
from: member,
to: argument,
type: model_1.ArgdownTypes.RELATION,
occurrences: []
});
}
else if ((isSymmetric || !isOutgoing) &&
statement.role === model_1.StatementRole.MAIN_CONCLUSION) {
acc.push({
relationType: (0, exports.transformToArgumentRelationType)(explicitRelation.relationType),
from: argument,
to: member,
type: model_1.ArgdownTypes.RELATION,
occurrences: []
});
}
return acc;
}, acc);
return acc;
}, implicitRelations);
}
if (member.type === model_1.ArgdownTypes.EQUIVALENCE_CLASS) {
member.members.reduce((acc, statement) => {
if (!(0, model_1.isPCSStatement)(statement)) {
return acc;
}
const argument = argumentsMap[statement.argumentTitle];
if (statement.role === model_1.StatementRole.PREMISE) {
acc.push({
relationType: model_1.RelationType.SUPPORT,
from: member,
to: argument,
type: model_1.ArgdownTypes.RELATION,
occurrences: []
});
}
else if (statement.role === model_1.StatementRole.MAIN_CONCLUSION) {
acc.push({
relationType: model_1.RelationType.SUPPORT,
from: argument,
to: member,
type: model_1.ArgdownTypes.RELATION,
occurrences: []
});
}
return acc;
}, implicitRelations);
}
else if (member.type === model_1.ArgdownTypes.ARGUMENT && member.pcs) {
member.pcs.reduce((acc, pcsStatement) => {
const ec = statementsMap[pcsStatement.title];
const ecRelations = [
...(ec.relations || []),
...(0, exports.deriveImplicitRelations)(ec, statementsMap, argumentsMap)
];
ecRelations.reduce((acc, ecRelation) => {
if ((0, utils_1.other)(ecRelation, ec) === member) {
return acc;
}
const isSymmetric = model_1.IRelation.isSymmetric(ecRelation);
if (pcsStatement.role === model_1.StatementRole.PREMISE &&
(isSymmetric || ecRelation.to === ec)) {
acc.push({
relationType: (0, exports.transformToArgumentRelationType)(ecRelation.relationType),
from: (0, utils_1.other)(ecRelation, ec),
to: member,
type: model_1.ArgdownTypes.RELATION,
occurrences: []
});
}
else if (pcsStatement.role === model_1.StatementRole.MAIN_CONCLUSION &&
(isSymmetric || ecRelation.from === ec)) {
acc.push({
relationType: (0, exports.transformToArgumentRelationType)(ecRelation.relationType),
from: member,
to: (0, utils_1.other)(ecRelation, ec),
type: model_1.ArgdownTypes.RELATION,
occurrences: []
});
}
return acc;
}, acc);
if ((0, model_1.isConclusion)(pcsStatement)) {
if (pcsStatement.inference && pcsStatement.inference.relations) {
const inferenceRelations = [
...pcsStatement.inference.relations,
...(0, exports.deriveImplicitRelations)(pcsStatement.inference, statementsMap, argumentsMap)
];
acc.push(...inferenceRelations.map(inferenceRelation => (Object.assign(Object.assign({}, inferenceRelation), { to: member }))));
}
}
return acc;
}, implicitRelations);
}
return implicitRelations;
};
exports.deriveImplicitRelations = deriveImplicitRelations;
//# sourceMappingURL=deriveImplicitRelations.js.map
;