fez-lisp 1.1.1 → 1.1.2
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/package.json +1 -1
- package/src/compiler.js +58 -5
- package/src/utils.js +0 -61
package/package.json
CHANGED
package/src/compiler.js
CHANGED
@@ -8,7 +8,63 @@ import {
|
|
8
8
|
WORD
|
9
9
|
} from './keywords.js'
|
10
10
|
import { leaf, isLeaf } from './parser.js'
|
11
|
-
import { deepRename
|
11
|
+
import { deepRename } from './utils.js'
|
12
|
+
const earMuffsToLodashes = (name) => name.replace(new RegExp(/\*/g), '_')
|
13
|
+
const dotNamesToEmpty = (name) => name.replace(new RegExp(/\./g), '')
|
14
|
+
const commaToLodash = (name) => name.replace(new RegExp(/\,/g), '_')
|
15
|
+
const arrowFromTo = (name) => name.replace(new RegExp(/->/g), '-to-')
|
16
|
+
const moduleNameToLodashes = (name) => name.replace(new RegExp(/:/g), '_')
|
17
|
+
const questionMarkToPredicate = (name) =>
|
18
|
+
name.replace(new RegExp(/\?/g), 'Predicate')
|
19
|
+
const exclamationMarkMarkToEffect = (name) =>
|
20
|
+
name.replace(new RegExp(/\!/g), 'Effect')
|
21
|
+
const toCamelCase = (name) => {
|
22
|
+
let out = name[0]
|
23
|
+
for (let i = 1; i < name.length; ++i) {
|
24
|
+
const current = name[i],
|
25
|
+
prev = name[i - 1]
|
26
|
+
if (current === '-') continue
|
27
|
+
else if (prev === '-') out += current.toUpperCase()
|
28
|
+
else out += current
|
29
|
+
}
|
30
|
+
return out
|
31
|
+
}
|
32
|
+
const keywordToHelper = (name) => {
|
33
|
+
switch (name) {
|
34
|
+
case KEYWORDS.ADDITION:
|
35
|
+
return '__add'
|
36
|
+
case KEYWORDS.MULTIPLICATION:
|
37
|
+
return '__mult'
|
38
|
+
case KEYWORDS.SUBTRACTION:
|
39
|
+
return '__sub'
|
40
|
+
case KEYWORDS.GREATHER_THAN:
|
41
|
+
return '__gt'
|
42
|
+
case KEYWORDS.EQUAL:
|
43
|
+
return '__eq'
|
44
|
+
case KEYWORDS.GREATHER_THAN_OR_EQUAL:
|
45
|
+
return '__gteq'
|
46
|
+
case KEYWORDS.LESS_THAN:
|
47
|
+
return '__lt'
|
48
|
+
case KEYWORDS.LESS_THAN_OR_EQUAL:
|
49
|
+
return '__lteq'
|
50
|
+
default:
|
51
|
+
return name
|
52
|
+
}
|
53
|
+
}
|
54
|
+
const lispToJavaScriptVariableName = (name) =>
|
55
|
+
toCamelCase(
|
56
|
+
arrowFromTo(
|
57
|
+
dotNamesToEmpty(
|
58
|
+
exclamationMarkMarkToEffect(
|
59
|
+
questionMarkToPredicate(
|
60
|
+
commaToLodash(
|
61
|
+
moduleNameToLodashes(earMuffsToLodashes(keywordToHelper(name)))
|
62
|
+
)
|
63
|
+
)
|
64
|
+
)
|
65
|
+
)
|
66
|
+
)
|
67
|
+
)
|
12
68
|
const Helpers = {
|
13
69
|
__string: `__string=(...args)=>{const str=args.flat();str.isString=true;return str}`,
|
14
70
|
__add: `__add=(...numbers)=>{return numbers.reduce((a,b)=>a+b,0)}`,
|
@@ -309,10 +365,7 @@ const compile = (tree, Drill) => {
|
|
309
365
|
return `${camelCased}(${parseArgs(Arguments, Drill)});`
|
310
366
|
}
|
311
367
|
}
|
312
|
-
} else if (first[TYPE] === ATOM)
|
313
|
-
return typeof first[VALUE] === 'string'
|
314
|
-
? `\`${first[VALUE]}\``
|
315
|
-
: first[VALUE]
|
368
|
+
} else if (first[TYPE] === ATOM) return first[VALUE]
|
316
369
|
else if (first[TYPE] === WORD) {
|
317
370
|
const camelCased = lispToJavaScriptVariableName(token)
|
318
371
|
if (camelCased in Helpers) Drill.Helpers.add(camelCased)
|
package/src/utils.js
CHANGED
@@ -204,51 +204,6 @@ export const fez = (source, options = {}) => {
|
|
204
204
|
return err
|
205
205
|
}
|
206
206
|
}
|
207
|
-
|
208
|
-
export const earMuffsToLodashes = (name) => name.replace(new RegExp(/\*/g), '_')
|
209
|
-
export const dotNamesToEmpty = (name) => name.replace(new RegExp(/\./g), '')
|
210
|
-
export const colonNamesTo$ = (name) => name.replace(new RegExp(/\:/g), '$')
|
211
|
-
export const commaToLodash = (name) => name.replace(new RegExp(/\,/g), '_')
|
212
|
-
export const arrowFromTo = (name) => name.replace(new RegExp(/->/g), '-to-')
|
213
|
-
export const moduleNameToLodashes = (name) =>
|
214
|
-
name.replace(new RegExp(/:/g), '_')
|
215
|
-
export const questionMarkToLodash = (name) =>
|
216
|
-
name.replace(new RegExp(/\?/g), 'Predicate')
|
217
|
-
export const exclamationMarkMarkToLodash = (name) =>
|
218
|
-
name.replace(new RegExp(/\!/g), 'Effect')
|
219
|
-
export const toCamelCase = (name) => {
|
220
|
-
let out = name[0]
|
221
|
-
for (let i = 1; i < name.length; ++i) {
|
222
|
-
const current = name[i],
|
223
|
-
prev = name[i - 1]
|
224
|
-
if (current === '-') continue
|
225
|
-
else if (prev === '-') out += current.toUpperCase()
|
226
|
-
else out += current
|
227
|
-
}
|
228
|
-
return out
|
229
|
-
}
|
230
|
-
export const keywordToHelper = (name) => {
|
231
|
-
switch (name) {
|
232
|
-
case KEYWORDS.ADDITION:
|
233
|
-
return '__add'
|
234
|
-
case KEYWORDS.MULTIPLICATION:
|
235
|
-
return '__mult'
|
236
|
-
case KEYWORDS.SUBTRACTION:
|
237
|
-
return '__sub'
|
238
|
-
case KEYWORDS.GREATHER_THAN:
|
239
|
-
return '__gt'
|
240
|
-
case KEYWORDS.EQUAL:
|
241
|
-
return '__eq'
|
242
|
-
case KEYWORDS.GREATHER_THAN_OR_EQUAL:
|
243
|
-
return '__gteq'
|
244
|
-
case KEYWORDS.LESS_THAN:
|
245
|
-
return '__lt'
|
246
|
-
case KEYWORDS.LESS_THAN_OR_EQUAL:
|
247
|
-
return '__lteq'
|
248
|
-
default:
|
249
|
-
return name
|
250
|
-
}
|
251
|
-
}
|
252
207
|
export const deepRename = (name, newName, tree) => {
|
253
208
|
if (!isLeaf(tree))
|
254
209
|
for (const leaf of tree) {
|
@@ -296,19 +251,3 @@ export const tree = (source, std) =>
|
|
296
251
|
std
|
297
252
|
? shake(LISP.parse(removeNoCode(source)), std)
|
298
253
|
: LISP.parse(removeNoCode(source))
|
299
|
-
export const lispToJavaScriptVariableName = (name) =>
|
300
|
-
toCamelCase(
|
301
|
-
arrowFromTo(
|
302
|
-
dotNamesToEmpty(
|
303
|
-
colonNamesTo$(
|
304
|
-
exclamationMarkMarkToLodash(
|
305
|
-
questionMarkToLodash(
|
306
|
-
commaToLodash(
|
307
|
-
moduleNameToLodashes(earMuffsToLodashes(keywordToHelper(name)))
|
308
|
-
)
|
309
|
-
)
|
310
|
-
)
|
311
|
-
)
|
312
|
-
)
|
313
|
-
)
|
314
|
-
)
|