UNPKG

@npmstuff/argdown-core

Version:

A pluggable parser for the Argdown argumentation syntax

138 lines 6.39 kB
"use strict"; 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