-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathedition.js
114 lines (93 loc) · 3.99 KB
/
edition.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
Fōrmulæ logic package. Module for edition.
Copyright (C) 2015-2025 Laurence R. Ugalde
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
'use strict';
export class Logic extends Formulae.Package {}
Logic.editionPredicate = function(n) {
let s = "";
do {
s = prompt(Logic.messages.enterPredicate, s);
}
while (s == "");
if (s == null) return;
let newExpression = Formulae.createExpression("Logic.Predicate");
newExpression.set("Name", s);
for (let i = 0; i < n; ++i) newExpression.addChild(new Expression.Null());
Formulae.sExpression.replaceBy(newExpression);
Formulae.sHandler.prepareDisplay();
Formulae.sHandler.display();
Formulae.setSelected(Formulae.sHandler, n == 0 ? newExpression : newExpression.children[0], false);
}
Logic.actionPredicate = {
isAvailableNow: () => Formulae.sHandler.type != Formulae.ROW_OUTPUT,
getDescription: () => Logic.messages.actionPredicate,
doAction: () => {
let s = Formulae.sExpression.get("Name");
do {
s = prompt(Logic.messages.updatePredicate, s);
}
while (s == "");
if (s == null) return;
Formulae.sExpression.set("Name", s);
Formulae.sHandler.prepareDisplay();
Formulae.sHandler.display();
Formulae.setSelected(Formulae.sHandler, Formulae.sExpression, false);
}
};
Logic.setEditions = function() {
Formulae.addEdition(this.messages.pathLogic, null, this.messages.leafTrue, () => Expression.replacingEdition("Logic.True"));
Formulae.addEdition(this.messages.pathLogic, null, this.messages.leafFalse, () => Expression.replacingEdition("Logic.False"));
Formulae.addEdition(this.messages.pathLogic, null, this.messages.leafNegation, () => Expression.wrapperEdition("Logic.Negation"));
[ "Conjunction", "Disjunction", "Implication", "Equivalence", "ExclusiveDisjunction" ].forEach(
tag => Formulae.addEdition(
Logic.messages.pathLogic,
null,
Logic.messages["leaf" + tag],
() => Expression.binaryEdition("Logic." + tag, false)
)
);
[ 4, 3 ].forEach(type => {
Formulae.addEdition(
Logic.messages.pathBigConjunction,
"packages/org.formulae.logic/img/big_conjunction" + type + ".png",
null,
() => Expression.multipleEdition("Logic.BigConjunction", type, 0)
);
Formulae.addEdition(
Logic.messages.pathBigDisjunction,
"packages/org.formulae.logic/img/big_disjunction" + type + ".png",
null,
() => Expression.multipleEdition("Logic.BigDisjunction", type, 0)
);
Formulae.addEdition(
Logic.messages.pathBigEquivalence,
"packages/org.formulae.logic/img/big_equivalence" + type + ".png",
null,
() => Expression.multipleEdition("Logic.BigEquivalence", type, 0)
);
Formulae.addEdition(
Logic.messages.pathBigExclusiveDisjunction,
"packages/org.formulae.logic/img/big_exclusive_disjunction" + type + ".png",
null,
() => Expression.multipleEdition("Logic.BigExclusiveDisjunction", type, 0)
);
});
Formulae.addEdition(this.messages.pathLogic, null, this.messages.leafPredicate0, () => Logic.editionPredicate(0));
Formulae.addEdition(this.messages.pathLogic, null, this.messages.leafPredicateN, () => Logic.editionPredicate(1));
Formulae.addEdition(this.messages.pathFirstOrder, null, this.messages.leafForAll, () => Expression.binaryEdition("Logic.ForAll", false));
Formulae.addEdition(this.messages.pathFirstOrder, null, this.messages.leafExists, () => Expression.binaryEdition("Logic.Exists", false));
};
Logic.setActions = function() {
Formulae.addAction("Logic.Predicate", Logic.actionPredicate);
};