drakongen 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/browser/drakongen.js +80 -24
- package/browsertest.html +2 -2
- package/package.json +1 -1
- package/src/drakongen.js +12 -10
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Include the `drakongen.js` script on the web page.
|
|
|
15
15
|
<script src="browser/drakongen.js"></script>
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
Call `toPseudocode` or `toTree` functions.
|
|
18
|
+
Call `drakongen.toPseudocode` or `drakongen.toTree` functions.
|
|
19
19
|
|
|
20
20
|
```html
|
|
21
21
|
<script>
|
|
@@ -23,10 +23,10 @@ var drakon = ... // Get the drakon chart from DrakonWidget
|
|
|
23
23
|
var name = "Diagram one"
|
|
24
24
|
var filename = "Diagram one.drakon"
|
|
25
25
|
|
|
26
|
-
var pseudo = toPseudocode(drakon, name, filename, "en")
|
|
26
|
+
var pseudo = drakongen.toPseudocode(drakon, name, filename, "en")
|
|
27
27
|
console.log(pseudo)
|
|
28
28
|
|
|
29
|
-
var tree = toTree(drakon, name, filename, "en")
|
|
29
|
+
var tree = drakongen.toTree(drakon, name, filename, "en")
|
|
30
30
|
console.log(tree)
|
|
31
31
|
|
|
32
32
|
</script>
|
package/browser/drakongen.js
CHANGED
|
@@ -502,20 +502,22 @@ function markLoopBody(nodes, start, filename) {
|
|
|
502
502
|
module.exports = { drakonToStruct, drakonToGraph };
|
|
503
503
|
},{"./structFlow":6,"./tools":8}],4:[function(require,module,exports){
|
|
504
504
|
const { drakonToPseudocode } = require('./drakonToPromptStruct');
|
|
505
|
-
const {htmlToString} = require("./browserTools")
|
|
505
|
+
const { htmlToString } = require("./browserTools")
|
|
506
506
|
const { setUpLanguage, translate } = require("./translate")
|
|
507
|
-
const {drakonToStruct} = require("./drakonToStruct");
|
|
507
|
+
const { drakonToStruct } = require("./drakonToStruct");
|
|
508
508
|
|
|
509
509
|
|
|
510
|
-
window.
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
510
|
+
window.drakongen = {
|
|
511
|
+
toPseudocode: function (drakonJson, name, filename, language) {
|
|
512
|
+
setUpLanguage(language)
|
|
513
|
+
return drakonToPseudocode(drakonJson, name, filename, htmlToString, translate).text
|
|
514
|
+
},
|
|
514
515
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
516
|
+
toTree: function (drakonJson, name, filename, language) {
|
|
517
|
+
setUpLanguage(language)
|
|
518
|
+
var result = drakonToStruct(drakonJson, name, filename, translate)
|
|
519
|
+
return JSON.stringify(result, null, 4)
|
|
520
|
+
}
|
|
519
521
|
}
|
|
520
522
|
},{"./browserTools":1,"./drakonToPromptStruct":2,"./drakonToStruct":3,"./translate":9}],5:[function(require,module,exports){
|
|
521
523
|
var {addRange} = require("./tools")
|
|
@@ -648,21 +650,14 @@ function printPseudo(algorithm, translate, output, htmlToString) {
|
|
|
648
650
|
yesBody.push(indent2 + translate("pass"))
|
|
649
651
|
}
|
|
650
652
|
var content = step.content
|
|
651
|
-
if (empty(yesBody)) {
|
|
652
|
-
content = {operator:"not",operand:step.content}
|
|
653
|
-
}
|
|
654
653
|
var lines = printStructuredContentNoIdent(content)
|
|
655
654
|
lines[0] = translate("if") + " " + lines[0]
|
|
656
655
|
printWithIndent(lines, indent, output)
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
addRange(output,
|
|
661
|
-
|
|
662
|
-
output.push(indent + translate("else"))
|
|
663
|
-
addRange(output, noBody)
|
|
664
|
-
}
|
|
665
|
-
}
|
|
656
|
+
addRange(output, yesBody)
|
|
657
|
+
if (!empty(noBody)) {
|
|
658
|
+
output.push(indent + translate("else"))
|
|
659
|
+
addRange(output, noBody)
|
|
660
|
+
}
|
|
666
661
|
}
|
|
667
662
|
|
|
668
663
|
function printLoop(step, depth, output) {
|
|
@@ -688,6 +683,7 @@ module.exports = {printPseudo}
|
|
|
688
683
|
},{"./tools":8}],6:[function(require,module,exports){
|
|
689
684
|
var {buildTree} = require("./technicalTree")
|
|
690
685
|
const { createError, sortByProperty } = require("./tools");
|
|
686
|
+
const { optimizeTree } = require("./treeTools")
|
|
691
687
|
|
|
692
688
|
function redirectNode(nodes, node, from, to) {
|
|
693
689
|
if (node.one === from) {
|
|
@@ -1058,7 +1054,8 @@ function structFlow(nodes, branches, filename, translate) {
|
|
|
1058
1054
|
name: branch.content,
|
|
1059
1055
|
branchId: branch.branchId,
|
|
1060
1056
|
start: branch.next,
|
|
1061
|
-
|
|
1057
|
+
refs: branch.prev.length,
|
|
1058
|
+
body: optimizeTree(body2)
|
|
1062
1059
|
})
|
|
1063
1060
|
}
|
|
1064
1061
|
|
|
@@ -1068,7 +1065,7 @@ function structFlow(nodes, branches, filename, translate) {
|
|
|
1068
1065
|
return structMain()
|
|
1069
1066
|
}
|
|
1070
1067
|
module.exports = { structFlow, redirectNode };
|
|
1071
|
-
},{"./technicalTree":7,"./tools":8}],7:[function(require,module,exports){
|
|
1068
|
+
},{"./technicalTree":7,"./tools":8,"./treeTools":10}],7:[function(require,module,exports){
|
|
1072
1069
|
function buildTree(nodes, nodeId, body, stopId) {
|
|
1073
1070
|
while (nodeId) {
|
|
1074
1071
|
if (nodeId === stopId) {return;}
|
|
@@ -1300,4 +1297,63 @@ function setUpLanguage(language) {
|
|
|
1300
1297
|
|
|
1301
1298
|
|
|
1302
1299
|
module.exports = { setUpLanguage, translate };
|
|
1300
|
+
},{}],10:[function(require,module,exports){
|
|
1301
|
+
|
|
1302
|
+
function optimizeTree(steps) {
|
|
1303
|
+
var result = []
|
|
1304
|
+
|
|
1305
|
+
for (var step of steps) {
|
|
1306
|
+
if (step.type === "end" || step.type === "branch" || step.type === "comment" || step.type === "loopend") { continue }
|
|
1307
|
+
if (step.type === "action" && !step.content) { continue }
|
|
1308
|
+
var copy
|
|
1309
|
+
if (step.type === "question") {
|
|
1310
|
+
copy = optimizeQuestion(step)
|
|
1311
|
+
} else if (step.type === "loop") {
|
|
1312
|
+
copy = optimizeLoop(step)
|
|
1313
|
+
} else {
|
|
1314
|
+
copy = step
|
|
1315
|
+
}
|
|
1316
|
+
result.push(copy)
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
return result
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
function optimizeLoop(step) {
|
|
1323
|
+
return {
|
|
1324
|
+
type: step.type,
|
|
1325
|
+
content: step.content,
|
|
1326
|
+
body: optimizeTree(step.body)
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
function optimizeQuestion(step) {
|
|
1331
|
+
var yes = optimizeTree(step.yes)
|
|
1332
|
+
var no = optimizeTree(step.no)
|
|
1333
|
+
if (yes.length === 0 && no.length === 0) {
|
|
1334
|
+
return {
|
|
1335
|
+
type: step.type,
|
|
1336
|
+
content: step.content,
|
|
1337
|
+
yes: [],
|
|
1338
|
+
no: []
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
if (yes.length === 0) {
|
|
1342
|
+
return {
|
|
1343
|
+
type: step.type,
|
|
1344
|
+
content: {operator:"not",operand:step.content},
|
|
1345
|
+
yes: no,
|
|
1346
|
+
no: []
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
return {
|
|
1350
|
+
type: step.type,
|
|
1351
|
+
content: step.content,
|
|
1352
|
+
yes: yes,
|
|
1353
|
+
no: no
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
|
|
1358
|
+
module.exports = {optimizeTree}
|
|
1303
1359
|
},{}]},{},[4]);
|
package/browsertest.html
CHANGED
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
try {
|
|
67
67
|
var content
|
|
68
68
|
if (format.value === "pseudo") {
|
|
69
|
-
content = toPseudocode(input.value, "Drakongen browser test", "Drakongen browser test.drakon", language.value)
|
|
69
|
+
content = drakongen.toPseudocode(input.value, "Drakongen browser test", "Drakongen browser test.drakon", language.value)
|
|
70
70
|
} else {
|
|
71
|
-
content = toTree(input.value, "Drakongen browser test", "Drakongen browser test.drakon", language.value)
|
|
71
|
+
content = drakongen.toTree(input.value, "Drakongen browser test", "Drakongen browser test.drakon", language.value)
|
|
72
72
|
}
|
|
73
73
|
setText(output, content)
|
|
74
74
|
} catch (ex) {
|
package/package.json
CHANGED
package/src/drakongen.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
const { drakonToPseudocode } = require('./drakonToPromptStruct');
|
|
2
|
-
const {htmlToString} = require("./browserTools")
|
|
2
|
+
const { htmlToString } = require("./browserTools")
|
|
3
3
|
const { setUpLanguage, translate } = require("./translate")
|
|
4
|
-
const {drakonToStruct} = require("./drakonToStruct");
|
|
4
|
+
const { drakonToStruct } = require("./drakonToStruct");
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
window.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
window.drakongen = {
|
|
8
|
+
toPseudocode: function (drakonJson, name, filename, language) {
|
|
9
|
+
setUpLanguage(language)
|
|
10
|
+
return drakonToPseudocode(drakonJson, name, filename, htmlToString, translate).text
|
|
11
|
+
},
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
toTree: function (drakonJson, name, filename, language) {
|
|
14
|
+
setUpLanguage(language)
|
|
15
|
+
var result = drakonToStruct(drakonJson, name, filename, translate)
|
|
16
|
+
return JSON.stringify(result, null, 4)
|
|
17
|
+
}
|
|
16
18
|
}
|