tpmkms_4wp 8.9.1-beta.8 → 8.9.1-beta.9
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/common/articles.js +1 -1
- package/common/asking.js +2 -2
- package/common/avatar.js +1 -1
- package/common/characters.js +1 -1
- package/common/comparable.js +1 -1
- package/common/concept.js +1 -1
- package/common/conjunction.js +1 -1
- package/common/countable.js +1 -1
- package/common/currency.js +2 -2
- package/common/dialogues.js +3 -3
- package/common/dimension.js +2 -2
- package/common/errors.js +1 -1
- package/common/events.js +1 -1
- package/common/fastfood.instance.json +705 -928
- package/common/fastfood.js +3 -3
- package/common/formulas.js +1 -1
- package/common/gdefaults.js +2 -2
- package/common/help.js +4 -4
- package/common/helpers/concept.js +3 -3
- package/common/helpers/conjunction.js +1 -1
- package/common/helpers/formulas.js +4 -4
- package/common/helpers/frankenhash.js +4 -4
- package/common/helpers/meta.js +4 -4
- package/common/helpers/ordering.js +2 -2
- package/common/helpers/properties.js +16 -16
- package/common/helpers.js +1 -1
- package/common/hierarchy.js +3 -3
- package/common/javascript.js +1 -1
- package/common/math.js +1 -1
- package/common/meta.js +5 -5
- package/common/negation.js +1 -1
- package/common/numbers.js +1 -1
- package/common/ordinals.js +1 -1
- package/common/people.js +1 -1
- package/common/percentages.js +1 -1
- package/common/pipboy.js +1 -1
- package/common/pos.js +1 -1
- package/common/properties.js +2 -2
- package/common/punctuation.js +1 -1
- package/common/reports.instance.json +2 -2
- package/common/reports.js +7 -7
- package/common/scorekeeper.js +5 -5
- package/common/sdefaults.js +2 -2
- package/common/sizeable.js +1 -1
- package/common/stm.js +6 -6
- package/common/tell.js +1 -1
- package/common/tester.js +1 -1
- package/common/wp.instance.json +50 -2
- package/common/wp.js +39 -3
- package/common/wp.test.json +7307 -0
- package/common/yesno.js +1 -1
- package/package.json +4 -4
package/common/fastfood.js
CHANGED
@@ -323,7 +323,7 @@ const template = {
|
|
323
323
|
|
324
324
|
const hasDrink = (isA, item) => {
|
325
325
|
let hasDrink = false
|
326
|
-
for (
|
326
|
+
for (const modification of (item.modifications || [])) {
|
327
327
|
if (isA(modification.id, 'drink')) {
|
328
328
|
hasDrink = true
|
329
329
|
break
|
@@ -385,7 +385,7 @@ const template = {
|
|
385
385
|
const { api, context } = args
|
386
386
|
if (isMany(context)) {
|
387
387
|
let count = getCount(context) || Number.MAX_SAFE_INTEGER
|
388
|
-
for (
|
388
|
+
for (const item of needsDrink) {
|
389
389
|
if (count < 1) {
|
390
390
|
break
|
391
391
|
}
|
@@ -598,7 +598,7 @@ class API {
|
|
598
598
|
|
599
599
|
if (item.combo) {
|
600
600
|
item.needsDrink = true
|
601
|
-
for (
|
601
|
+
for (const modification of item.modifications || []) {
|
602
602
|
// TODO check for awailable
|
603
603
|
if (this.args.isA(modification.id, 'drink')) {
|
604
604
|
item.needsDrink = false
|
package/common/formulas.js
CHANGED
@@ -91,7 +91,7 @@ class API {
|
|
91
91
|
}
|
92
92
|
*/
|
93
93
|
|
94
|
-
|
94
|
+
const config = {
|
95
95
|
name: 'formulas',
|
96
96
|
operators: [
|
97
97
|
// TODO notations like (([arg1:]) [op] ([arg2:nameOfArg2}|word1])) -> just make the bridge + operators. put this in the bridge def / also calculate generators
|
package/common/gdefaults.js
CHANGED
@@ -5,7 +5,7 @@ const tokenize = require('./tokenize.js')
|
|
5
5
|
const gdefaults_tests = require('./gdefaults.test.json')
|
6
6
|
const { getValue, isMany } = require('./helpers.js')
|
7
7
|
|
8
|
-
|
8
|
+
const config = {
|
9
9
|
name: 'gdefaults',
|
10
10
|
generators: [
|
11
11
|
/* TODO save for later
|
@@ -70,7 +70,7 @@ let config = {
|
|
70
70
|
const text = []
|
71
71
|
for (modifier of (context.modifiers || [])) {
|
72
72
|
if (Array.isArray(context[modifier])) {
|
73
|
-
for (
|
73
|
+
for (const m of context[modifier]) {
|
74
74
|
text.push(await g(m))
|
75
75
|
}
|
76
76
|
} else {
|
package/common/help.js
CHANGED
@@ -13,7 +13,7 @@ const getHelp = (config, indent=2) => {
|
|
13
13
|
help += `${indent}NAME: ${config.name}\n`
|
14
14
|
help += `${indent}DESCRIPTION: ${config.description}\n\n`
|
15
15
|
help += `${indent}SAMPLE SENTENCES\n\n`
|
16
|
-
for (
|
16
|
+
for (const test of config.tests) {
|
17
17
|
if (test.developerTest) {
|
18
18
|
continue
|
19
19
|
}
|
@@ -43,7 +43,7 @@ const config = {
|
|
43
43
|
level: 0,
|
44
44
|
generatorp: () => 'help',
|
45
45
|
generatorr: ({context, config}) => {
|
46
|
-
|
46
|
+
const kms = helpers.propertyToArray(context.kms).map( (value) => value.value )
|
47
47
|
const isAll = kms.length == 0
|
48
48
|
let help = '';
|
49
49
|
let separator = ''
|
@@ -89,10 +89,10 @@ const config = {
|
|
89
89
|
|
90
90
|
const initializer = ({ config, addWord, kms }) => {
|
91
91
|
const names = new Set()
|
92
|
-
for (
|
92
|
+
for (const name in kms) {
|
93
93
|
names.add(name);
|
94
94
|
}
|
95
|
-
for (
|
95
|
+
for (const name of names) {
|
96
96
|
addWord(name, {id: "km", initial: `{ value: '${name}', word: '${name}' }`})
|
97
97
|
}
|
98
98
|
}
|
@@ -11,7 +11,7 @@ class API {
|
|
11
11
|
}
|
12
12
|
|
13
13
|
addDefaultTypesForObjectHierarchy(types) {
|
14
|
-
for (
|
14
|
+
for (const type of types) {
|
15
15
|
this._objects.defaultTypesForHierarchy.add(type)
|
16
16
|
}
|
17
17
|
}
|
@@ -23,7 +23,7 @@ class API {
|
|
23
23
|
types.push('concept');
|
24
24
|
}
|
25
25
|
|
26
|
-
for (
|
26
|
+
for (const type of types) {
|
27
27
|
config.addHierarchy(id, type)
|
28
28
|
}
|
29
29
|
}
|
@@ -142,7 +142,7 @@ class API {
|
|
142
142
|
if (config.exists('number')) {
|
143
143
|
// config.addPriority({ context: [['list', 0], ['number', 0]].concat(modifierIds.map((id) => [id, 0])).concat([[objectId, 0]]), ordered: true, choose: [2,3] })
|
144
144
|
if (modifierIds.length > 1) {
|
145
|
-
|
145
|
+
const choose = []
|
146
146
|
for (let i = 0; i < modifierIds.length; ++i) {
|
147
147
|
choose.push(i+2)
|
148
148
|
}
|
@@ -43,7 +43,7 @@ const isA = (hierarchy) => (child, parent, { strict=false } = {}) => {
|
|
43
43
|
return hierarchy.isA(child, parent)
|
44
44
|
} else {
|
45
45
|
const children = propertyToArray(child)
|
46
|
-
for (
|
46
|
+
for (const child of children) {
|
47
47
|
let okay = false
|
48
48
|
if (hierarchy.isA(child.marker || child, parent.marker || parent)) {
|
49
49
|
okay = true
|
@@ -14,7 +14,7 @@ function getVariables(expression, isVariable = (expression) => typeof expression
|
|
14
14
|
}
|
15
15
|
|
16
16
|
const match = (values, head, value) => {
|
17
|
-
for (
|
17
|
+
for (const prop in head) {
|
18
18
|
if (head[prop] instanceof Function) {
|
19
19
|
if (!head[prop](value[prop])) {
|
20
20
|
return
|
@@ -25,7 +25,7 @@ const match = (values, head, value) => {
|
|
25
25
|
return
|
26
26
|
}
|
27
27
|
}
|
28
|
-
for (
|
28
|
+
for (const prop in values) {
|
29
29
|
if (!values[prop]) {
|
30
30
|
return
|
31
31
|
}
|
@@ -107,11 +107,11 @@ class API {
|
|
107
107
|
get(name, expectedVars) {
|
108
108
|
if (expectedVars) {
|
109
109
|
const fs = this.gets(name);
|
110
|
-
for (
|
110
|
+
for (const f of fs) {
|
111
111
|
const foundVars = getVariables(f.formula)
|
112
112
|
if (foundVars.length == expectedVars.length) {
|
113
113
|
let failed = false
|
114
|
-
for (
|
114
|
+
for (const ev of expectedVars) {
|
115
115
|
if (!foundVars.find( (fv) => fv.value == ev.value )) {
|
116
116
|
failed = true
|
117
117
|
break
|
@@ -14,7 +14,7 @@ class Frankenhash {
|
|
14
14
|
|
15
15
|
setHandler(path, handler) {
|
16
16
|
let where = this.data.handlers
|
17
|
-
for (
|
17
|
+
for (const arg of path.slice(0, path.length-1)) {
|
18
18
|
if (!where[arg]) {
|
19
19
|
where[arg] = {}
|
20
20
|
}
|
@@ -25,7 +25,7 @@ class Frankenhash {
|
|
25
25
|
|
26
26
|
getValue(path, writeDefault=true) {
|
27
27
|
let value = this.data.root
|
28
|
-
for (
|
28
|
+
for (const property of path) {
|
29
29
|
if (!value[property]) {
|
30
30
|
if (writeDefault) {
|
31
31
|
value[property] = {}
|
@@ -44,7 +44,7 @@ class Frankenhash {
|
|
44
44
|
|
45
45
|
getHandler(path) {
|
46
46
|
let value = this.data.handlers
|
47
|
-
for (
|
47
|
+
for (const property of path) {
|
48
48
|
if (this.isHandler(value)) {
|
49
49
|
return value
|
50
50
|
}
|
@@ -56,7 +56,7 @@ class Frankenhash {
|
|
56
56
|
|
57
57
|
knownProperty(path) {
|
58
58
|
let value = this.data.root;
|
59
|
-
for (
|
59
|
+
for (const property of path) {
|
60
60
|
if (!value[property]) {
|
61
61
|
return false
|
62
62
|
}
|
package/common/helpers/meta.js
CHANGED
@@ -2,7 +2,7 @@ const _ = require('lodash')
|
|
2
2
|
|
3
3
|
const hashIndexesGet = (hash, indexes) => {
|
4
4
|
let value = hash
|
5
|
-
for (
|
5
|
+
for (const i of indexes) {
|
6
6
|
value = value[i]
|
7
7
|
}
|
8
8
|
return value
|
@@ -10,7 +10,7 @@ const hashIndexesGet = (hash, indexes) => {
|
|
10
10
|
|
11
11
|
const hashIndexesSet = (hash, indexes, value) => {
|
12
12
|
let currentValue = hash
|
13
|
-
for (
|
13
|
+
for (const i of indexes.slice(0, -1)) {
|
14
14
|
if (!currentValue[i]) {
|
15
15
|
currentValue[i] = {}
|
16
16
|
}
|
@@ -53,7 +53,7 @@ const translationMapping = (from, to) => {
|
|
53
53
|
if (from.atomic) {
|
54
54
|
return mappings
|
55
55
|
}
|
56
|
-
for (
|
56
|
+
for (const fkey of Object.keys(from)) {
|
57
57
|
let matchField;
|
58
58
|
if (from[fkey].value) {
|
59
59
|
matchField = 'value'
|
@@ -75,7 +75,7 @@ const translationMapping = (from, to) => {
|
|
75
75
|
break
|
76
76
|
} else {
|
77
77
|
if (typeof tvalue !== 'string' && typeof tvalue !== 'number') {
|
78
|
-
for (
|
78
|
+
for (const key of Object.keys(tvalue)) {
|
79
79
|
todo.push(tkey.concat(key))
|
80
80
|
}
|
81
81
|
}
|
@@ -51,13 +51,13 @@ class API {
|
|
51
51
|
}
|
52
52
|
} else if (larger) {
|
53
53
|
const edges = []
|
54
|
-
for (
|
54
|
+
for (const smaller of digraph.descendants(larger)) {
|
55
55
|
edges.push({ smaller, context, larger, name })
|
56
56
|
}
|
57
57
|
return edges;
|
58
58
|
} else if (smaller) {
|
59
59
|
const edges = []
|
60
|
-
for (
|
60
|
+
for (const larger of digraph.ancestors(smaller)) {
|
61
61
|
edges.push({ smaller, context, larger, name })
|
62
62
|
}
|
63
63
|
return edges;
|
@@ -147,7 +147,7 @@ class API {
|
|
147
147
|
const value = constraint.constraint;
|
148
148
|
let property = constraint.property;
|
149
149
|
const properties = constraint.properties;
|
150
|
-
for (
|
150
|
+
for (const p of properties) {
|
151
151
|
if (value[p].concept) {
|
152
152
|
property = p
|
153
153
|
constraint.property = p; // set what is used
|
@@ -157,7 +157,7 @@ class API {
|
|
157
157
|
// value.greg = true
|
158
158
|
// value.ownee.query = true
|
159
159
|
value.query = true
|
160
|
-
|
160
|
+
const instance = await e(value)
|
161
161
|
if (instance.verbatim) {
|
162
162
|
context.evalue = { verbatim: instance.verbatim }
|
163
163
|
return
|
@@ -333,7 +333,7 @@ class API {
|
|
333
333
|
}
|
334
334
|
|
335
335
|
if (false) {
|
336
|
-
for (
|
336
|
+
for (const argument of before.concat(after)) {
|
337
337
|
if (create.includes(argument.id)) {
|
338
338
|
// config.addHierarchy('unknown', argument.id)
|
339
339
|
// config.addHierarchy('what', argument.id)
|
@@ -343,7 +343,7 @@ class API {
|
|
343
343
|
}
|
344
344
|
}
|
345
345
|
} else {
|
346
|
-
for (
|
346
|
+
for (const argument of before.concat(after)) {
|
347
347
|
if (create.includes(argument.id)) {
|
348
348
|
// config.addHierarchy(argument.id, 'unknown')
|
349
349
|
// config.addHierarchy(argument.id, 'what')
|
@@ -356,9 +356,9 @@ class API {
|
|
356
356
|
create.map( (id) => {
|
357
357
|
if (id === operator) {
|
358
358
|
const tagsToProps = (where, args, suffix='') => {
|
359
|
-
|
359
|
+
const i = 0;
|
360
360
|
let r = ''
|
361
|
-
for (
|
361
|
+
for (const arg of args) {
|
362
362
|
r += `, ${arg.tag}${suffix}: ${where}[${i}] `
|
363
363
|
}
|
364
364
|
return r
|
@@ -528,11 +528,11 @@ class API {
|
|
528
528
|
apply: ({context, km, hierarchy, config}) => {
|
529
529
|
const api = km('properties').api
|
530
530
|
// add types for arguments
|
531
|
-
for (
|
531
|
+
for (const argument of context.focusable || []) {
|
532
532
|
const value = api.toValue(context[argument])
|
533
533
|
if (value) {
|
534
534
|
const minimas = hierarchy.minima(context[argument].types)
|
535
|
-
for (
|
535
|
+
for (const type of minimas) {
|
536
536
|
if (config.exists(value)) {
|
537
537
|
config.addHierarchy(value, type);
|
538
538
|
}
|
@@ -586,7 +586,7 @@ class API {
|
|
586
586
|
if (!Array.isArray(relations)) {
|
587
587
|
relations = [relations]
|
588
588
|
}
|
589
|
-
for (
|
589
|
+
for (const relation of relations) {
|
590
590
|
this._objects.relations.push(relation)
|
591
591
|
}
|
592
592
|
}
|
@@ -622,7 +622,7 @@ class API {
|
|
622
622
|
return t.value && v.value && t.value == v.value
|
623
623
|
}
|
624
624
|
|
625
|
-
for (
|
625
|
+
for (const arg of args) {
|
626
626
|
if (!matches(template[arg], value[arg])) {
|
627
627
|
return null
|
628
628
|
}
|
@@ -632,7 +632,7 @@ class API {
|
|
632
632
|
|
633
633
|
relation_get(context, args) {
|
634
634
|
const andTheAnswerIs = []
|
635
|
-
for (
|
635
|
+
for (const relation of this._objects.relations) {
|
636
636
|
if (this.relation_match(args, context, relation)) {
|
637
637
|
const queriedArgs = args.filter( (arg) => context[arg].query )
|
638
638
|
if (queriedArgs.length == 1) {
|
@@ -718,7 +718,7 @@ class API {
|
|
718
718
|
if (property == 'property') {
|
719
719
|
const objectProps = await this.propertiesFH.getValue([object])
|
720
720
|
const values = []
|
721
|
-
for (
|
721
|
+
for (const key of Object.keys(objectProps)) {
|
722
722
|
if (objectProps[key].has) {
|
723
723
|
values.push(`${await g(key)}: ${await g({ ...objectProps[key].value, paraphrase: true })}`)
|
724
724
|
}
|
@@ -784,7 +784,7 @@ class API {
|
|
784
784
|
return true
|
785
785
|
}
|
786
786
|
const parents = this._objects.parents[next] || [];
|
787
|
-
for (
|
787
|
+
for (const parent of parents) {
|
788
788
|
if (!seen.includes(parent)) {
|
789
789
|
todo.push(parent)
|
790
790
|
seen.push(parent)
|
@@ -812,7 +812,7 @@ class API {
|
|
812
812
|
return true
|
813
813
|
}
|
814
814
|
const parents = this._objects.parents[next] || [];
|
815
|
-
for (
|
815
|
+
for (const parent of parents) {
|
816
816
|
if (!seen.includes(parent)) {
|
817
817
|
todo.push(parent)
|
818
818
|
seen.push(parent)
|
@@ -859,7 +859,7 @@ class API {
|
|
859
859
|
return true
|
860
860
|
}
|
861
861
|
const parents = this._objects.parents[next] || [];
|
862
|
-
for (
|
862
|
+
for (const parent of parents) {
|
863
863
|
if (!seen.includes(parent)) {
|
864
864
|
todo.push(parent)
|
865
865
|
seen.push(parent)
|
@@ -903,7 +903,7 @@ class API {
|
|
903
903
|
}
|
904
904
|
|
905
905
|
isOperator(id) {
|
906
|
-
for (
|
906
|
+
for (const bridge of this.__config.getBridges()) {
|
907
907
|
if (bridge.id == id) {
|
908
908
|
return true
|
909
909
|
}
|
package/common/helpers.js
CHANGED
package/common/hierarchy.js
CHANGED
@@ -32,7 +32,7 @@ const getTypes = ( km, concept, instance ) => {
|
|
32
32
|
|
33
33
|
// TODO the types of rank are x y z ....
|
34
34
|
// TODO x is a kind of y
|
35
|
-
|
35
|
+
const config = {
|
36
36
|
name: 'hierarchy',
|
37
37
|
operators: [
|
38
38
|
// "([hierarchyAble|])",
|
@@ -250,8 +250,8 @@ let config = {
|
|
250
250
|
const api = km('properties').api
|
251
251
|
const oneConcepts = asList(context);
|
252
252
|
const twoConcepts = asList(context.same);
|
253
|
-
for (
|
254
|
-
for (
|
253
|
+
for (const oneConcept of oneConcepts.value) {
|
254
|
+
for (const twoConcept of twoConcepts.value) {
|
255
255
|
oneConceptId = api.makeObject({config, context: oneConcept})
|
256
256
|
twoConceptId = api.makeObject({config, context: twoConcept})
|
257
257
|
api.rememberIsA(oneConceptId, twoConceptId)
|
package/common/javascript.js
CHANGED
@@ -3,7 +3,7 @@ const { defaultContextCheck } = require('./helpers')
|
|
3
3
|
const dialogues = require('./dialogues')
|
4
4
|
const javascript_tests = require('./javascript.test.json')
|
5
5
|
|
6
|
-
|
6
|
+
const config = {
|
7
7
|
name: 'javascript',
|
8
8
|
operators: [
|
9
9
|
"((<let> ([variable|])) [assignment|] (value))",
|
package/common/math.js
CHANGED
package/common/meta.js
CHANGED
@@ -17,7 +17,7 @@ const template = {
|
|
17
17
|
};
|
18
18
|
|
19
19
|
// TODO -> if a car's top speed is over 200 mph then the car is fast
|
20
|
-
|
20
|
+
const config = {
|
21
21
|
name: 'meta',
|
22
22
|
operators: [
|
23
23
|
"((phrase) [means] (phrase))",
|
@@ -208,7 +208,7 @@ let config = {
|
|
208
208
|
//const mappings = mappingss[0]
|
209
209
|
let toPrimes = []
|
210
210
|
for (const [TO, mappings] of zip(DEFINITIONs, mappingss)) {
|
211
|
-
for (
|
211
|
+
for (const { from, to } of invertMappings(mappings)) {
|
212
212
|
hashIndexesSet(TO, to, hashIndexesGet(context, from))
|
213
213
|
}
|
214
214
|
// next move add debug arg to s and g
|
@@ -236,7 +236,7 @@ let config = {
|
|
236
236
|
for (const [relations, mappings] of toPrimes) {
|
237
237
|
for (const relation of relations.evalue.value) {
|
238
238
|
valuePrime = _.cloneDeep(DERIVED)
|
239
|
-
for (
|
239
|
+
for (const { from, to } of mappings) {
|
240
240
|
hashIndexesSet(valuePrime, to, hashIndexesGet(relation, from))
|
241
241
|
}
|
242
242
|
valuePrime.paraphrase = true
|
@@ -303,7 +303,7 @@ let config = {
|
|
303
303
|
const matchByValue = (defContext) => ({context}) => context.evalue == defContext.from.value && !context.query && !context.objects
|
304
304
|
const apply = (mappings, TO) => async ({context, s}) => {
|
305
305
|
TO = _.cloneDeep(TO)
|
306
|
-
for (
|
306
|
+
for (const { from, to } of mappings) {
|
307
307
|
hashIndexesSet(TO, to, hashIndexesGet(context, from))
|
308
308
|
}
|
309
309
|
toPrime = await s(TO)
|
@@ -330,7 +330,7 @@ let config = {
|
|
330
330
|
const matchByValue = (defContext) => ({context, uuid}) => context.value == defContext.from.value && (context.query || context.evaluate) && !context[`disable${uuid}`]
|
331
331
|
const apply = (mappings, TO) => async ({uuid, context, s, g, config}) => {
|
332
332
|
TO = _.cloneDeep(TO)
|
333
|
-
for (
|
333
|
+
for (const { from, to } of mappings) {
|
334
334
|
hashIndexesSet(TO, to, hashIndexesGet(context, from))
|
335
335
|
}
|
336
336
|
// next move add debug arg to s and g
|
package/common/negation.js
CHANGED
package/common/numbers.js
CHANGED
package/common/ordinals.js
CHANGED
package/common/people.js
CHANGED
package/common/percentages.js
CHANGED
package/common/pipboy.js
CHANGED
package/common/pos.js
CHANGED
package/common/properties.js
CHANGED
@@ -79,7 +79,7 @@ const template = {
|
|
79
79
|
|
80
80
|
const api = new API();
|
81
81
|
|
82
|
-
|
82
|
+
const config = {
|
83
83
|
name: 'properties',
|
84
84
|
associations: {
|
85
85
|
negative: [],
|
@@ -648,7 +648,7 @@ let config = {
|
|
648
648
|
if (!objectContext.value) {
|
649
649
|
return objectContext;
|
650
650
|
}
|
651
|
-
|
651
|
+
const objectValue = kms.stm.api.getVariable(objectContext.value);
|
652
652
|
if (!await api.knownObject(objectValue)) {
|
653
653
|
context.verbatim = `There is no object named "${await g({...objectContext, paraphrase: true})}"`
|
654
654
|
return
|
package/common/punctuation.js
CHANGED
@@ -3,7 +3,7 @@ const { defaultContextCheck } = require('./helpers')
|
|
3
3
|
const gdefaults = require('./gdefaults')
|
4
4
|
const punctuation_tests = require('./punctuation.test.json')
|
5
5
|
|
6
|
-
|
6
|
+
const config = {
|
7
7
|
name: 'punctuation',
|
8
8
|
operators: [
|
9
9
|
"([leftParenthesis|] (phrase) ([rightParenthesis|]))",
|