@genocode/core 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +10 -2
- package/dist/ast.d.ts +309 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +11 -0
- package/dist/ast.js.map +1 -0
- package/dist/builtins.d.ts +20 -0
- package/dist/builtins.d.ts.map +1 -0
- package/dist/builtins.js +181 -0
- package/dist/builtins.js.map +1 -0
- package/dist/checker.d.ts +27 -0
- package/dist/checker.d.ts.map +1 -0
- package/dist/checker.js +1141 -0
- package/dist/checker.js.map +1 -0
- package/dist/colour.d.ts +21 -0
- package/dist/colour.d.ts.map +1 -0
- package/dist/colour.js +138 -0
- package/dist/colour.js.map +1 -0
- package/dist/format.d.ts +13 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +334 -0
- package/dist/format.js.map +1 -0
- package/dist/genes.d.ts +43 -0
- package/dist/genes.d.ts.map +1 -0
- package/dist/genes.js +35 -0
- package/dist/genes.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter.d.ts +61 -0
- package/dist/interpreter.d.ts.map +1 -0
- package/dist/interpreter.js +642 -0
- package/dist/interpreter.js.map +1 -0
- package/dist/lexer.d.ts +24 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +304 -0
- package/dist/lexer.js.map +1 -0
- package/dist/noise.d.ts +9 -0
- package/dist/noise.d.ts.map +1 -0
- package/dist/noise.js +83 -0
- package/dist/noise.js.map +1 -0
- package/dist/parser.d.ts +9 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +887 -0
- package/dist/parser.js.map +1 -0
- package/dist/source.d.ts +29 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +40 -0
- package/dist/source.js.map +1 -0
- package/dist/turtle.d.ts +27 -0
- package/dist/turtle.d.ts.map +1 -0
- package/dist/turtle.js +119 -0
- package/dist/turtle.js.map +1 -0
- package/dist/values.d.ts +67 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/values.js +214 -0
- package/dist/values.js.map +1 -0
- package/package.json +35 -4
- package/reference/LANGUAGE.md +1067 -0
- package/reference/creatures/Flapper.genie +44 -0
- package/reference/creatures/Flower.genie +41 -0
- package/reference/creatures/Flyer.genie +142 -0
- package/reference/creatures/Ribbons.genie +96 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jan Piorek
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @genocode/core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The [GenoCode](https://github.com/genocode-org/GenoCode) language: lexer, parser, checker,
|
|
4
|
+
formatter and interpreter for `.genie` creature files. It runs in the browser and in Node.
|
|
5
|
+
|
|
6
|
+
The package also ships the language definition (`@genocode/core/LANGUAGE.md`) and the starter
|
|
7
|
+
creatures (`@genocode/core/creatures/*.genie`), for tools that need them.
|
|
8
|
+
|
|
9
|
+
While the version is 0.x, any minor release may change the API.
|
|
10
|
+
|
|
11
|
+
MIT licensed.
|
package/dist/ast.d.ts
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import type { Span } from "./source.js";
|
|
2
|
+
export interface Comment {
|
|
3
|
+
/** The comment as written, including `//` or `/* … *\/`. */
|
|
4
|
+
text: string;
|
|
5
|
+
span: Span;
|
|
6
|
+
/** 0-based lines of the comment's start and end. */
|
|
7
|
+
line: number;
|
|
8
|
+
endLine: number;
|
|
9
|
+
/** Nothing but whitespace comes before it on its line. */
|
|
10
|
+
ownLine: boolean;
|
|
11
|
+
/** A blank line comes before it. */
|
|
12
|
+
blankBefore: boolean;
|
|
13
|
+
}
|
|
14
|
+
export type Expr = NumberLit | BoolLit | StringLit | HexLit | NameRef | TurtleRef | TimeRef | BeatRef | MusicRef | VectorLit | Unary | Binary | Member | CallExpr | GradientLit | ErrorExpr;
|
|
15
|
+
export interface NumberLit {
|
|
16
|
+
kind: "Number";
|
|
17
|
+
span: Span;
|
|
18
|
+
value: number;
|
|
19
|
+
/** As written, without any `°`. */
|
|
20
|
+
raw: string;
|
|
21
|
+
degree: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface BoolLit {
|
|
24
|
+
kind: "Bool";
|
|
25
|
+
span: Span;
|
|
26
|
+
value: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface StringLit {
|
|
29
|
+
kind: "String";
|
|
30
|
+
span: Span;
|
|
31
|
+
value: string;
|
|
32
|
+
}
|
|
33
|
+
export interface HexLit {
|
|
34
|
+
kind: "Hex";
|
|
35
|
+
span: Span;
|
|
36
|
+
raw: string;
|
|
37
|
+
}
|
|
38
|
+
export interface NameRef {
|
|
39
|
+
kind: "Name";
|
|
40
|
+
span: Span;
|
|
41
|
+
name: string;
|
|
42
|
+
}
|
|
43
|
+
export interface TurtleRef {
|
|
44
|
+
kind: "Turtle";
|
|
45
|
+
span: Span;
|
|
46
|
+
field: string;
|
|
47
|
+
fieldSpan: Span;
|
|
48
|
+
}
|
|
49
|
+
export interface TimeRef {
|
|
50
|
+
kind: "Time";
|
|
51
|
+
span: Span;
|
|
52
|
+
}
|
|
53
|
+
export interface BeatRef {
|
|
54
|
+
kind: "Beat";
|
|
55
|
+
span: Span;
|
|
56
|
+
}
|
|
57
|
+
export interface MusicRef {
|
|
58
|
+
kind: "Music";
|
|
59
|
+
span: Span;
|
|
60
|
+
field: string;
|
|
61
|
+
fieldSpan: Span;
|
|
62
|
+
}
|
|
63
|
+
export interface VectorLit {
|
|
64
|
+
kind: "Vector";
|
|
65
|
+
span: Span;
|
|
66
|
+
x: Expr;
|
|
67
|
+
y: Expr;
|
|
68
|
+
z: Expr;
|
|
69
|
+
}
|
|
70
|
+
export type UnaryOp = "-" | "not";
|
|
71
|
+
export interface Unary {
|
|
72
|
+
kind: "Unary";
|
|
73
|
+
span: Span;
|
|
74
|
+
op: UnaryOp;
|
|
75
|
+
operand: Expr;
|
|
76
|
+
}
|
|
77
|
+
export type BinaryOp = "or" | "and" | "==" | "!=" | "<" | "<=" | ">" | ">=" | "+" | "-" | "*" | "/" | "%" | "^";
|
|
78
|
+
export interface Binary {
|
|
79
|
+
kind: "Binary";
|
|
80
|
+
span: Span;
|
|
81
|
+
op: BinaryOp;
|
|
82
|
+
opSpan: Span;
|
|
83
|
+
left: Expr;
|
|
84
|
+
right: Expr;
|
|
85
|
+
}
|
|
86
|
+
export interface Member {
|
|
87
|
+
kind: "Member";
|
|
88
|
+
span: Span;
|
|
89
|
+
object: Expr;
|
|
90
|
+
name: string;
|
|
91
|
+
nameSpan: Span;
|
|
92
|
+
}
|
|
93
|
+
export interface CallExpr {
|
|
94
|
+
kind: "Call";
|
|
95
|
+
span: Span;
|
|
96
|
+
callee: Expr;
|
|
97
|
+
args: Expr[];
|
|
98
|
+
}
|
|
99
|
+
export interface GradientStop {
|
|
100
|
+
colour: Expr;
|
|
101
|
+
at: Expr | undefined;
|
|
102
|
+
}
|
|
103
|
+
export interface GradientLit {
|
|
104
|
+
kind: "Gradient";
|
|
105
|
+
span: Span;
|
|
106
|
+
stops: GradientStop[];
|
|
107
|
+
}
|
|
108
|
+
export interface ErrorExpr {
|
|
109
|
+
kind: "ErrorExpr";
|
|
110
|
+
span: Span;
|
|
111
|
+
}
|
|
112
|
+
/** Fields every statement and declaration has. */
|
|
113
|
+
export interface StmtBase {
|
|
114
|
+
span: Span;
|
|
115
|
+
/** Comments on their own lines directly above. */
|
|
116
|
+
leading: Comment[];
|
|
117
|
+
/** A comment at the end of the statement's line (simple statements and genes only). */
|
|
118
|
+
trailing: Comment | undefined;
|
|
119
|
+
/** A blank line comes before it (or before its leading comments). */
|
|
120
|
+
blankBefore: boolean;
|
|
121
|
+
}
|
|
122
|
+
export interface Block {
|
|
123
|
+
span: Span;
|
|
124
|
+
items: Stmt[];
|
|
125
|
+
/** A comment after `{` on the same line. */
|
|
126
|
+
open: Comment | undefined;
|
|
127
|
+
/** Comments after the last statement, before `}`. */
|
|
128
|
+
endComments: Comment[];
|
|
129
|
+
/** A comment after `}` on the same line. */
|
|
130
|
+
close: Comment | undefined;
|
|
131
|
+
}
|
|
132
|
+
export type Stmt = GeneDecl | PartDecl | FunctionDecl | BackgroundDecl | DanceDecl | Let | Assign | PartCall | Return | Print | If | Repeat | For | While | BranchStmt | Symmetric | Lay | Reshape | Command | Rotate | Mirror | Material | Fill | Effect | ErrorStmt;
|
|
133
|
+
export type GeneRange = {
|
|
134
|
+
kind: "Range";
|
|
135
|
+
min: Expr;
|
|
136
|
+
max: Expr;
|
|
137
|
+
step: Expr | undefined;
|
|
138
|
+
log: boolean;
|
|
139
|
+
} | {
|
|
140
|
+
kind: "Choice";
|
|
141
|
+
options: Expr[];
|
|
142
|
+
};
|
|
143
|
+
export interface GeneDecl extends StmtBase {
|
|
144
|
+
kind: "Gene";
|
|
145
|
+
name: string;
|
|
146
|
+
nameSpan: Span;
|
|
147
|
+
value: Expr;
|
|
148
|
+
range: GeneRange | undefined;
|
|
149
|
+
}
|
|
150
|
+
export interface Param {
|
|
151
|
+
name: string;
|
|
152
|
+
span: Span;
|
|
153
|
+
}
|
|
154
|
+
export interface PartDecl extends StmtBase {
|
|
155
|
+
kind: "Part";
|
|
156
|
+
name: string;
|
|
157
|
+
nameSpan: Span;
|
|
158
|
+
params: Param[];
|
|
159
|
+
body: Block;
|
|
160
|
+
}
|
|
161
|
+
export interface FunctionDecl extends StmtBase {
|
|
162
|
+
kind: "Function";
|
|
163
|
+
name: string;
|
|
164
|
+
nameSpan: Span;
|
|
165
|
+
params: Param[];
|
|
166
|
+
body: Block;
|
|
167
|
+
}
|
|
168
|
+
export interface BackgroundDecl extends StmtBase {
|
|
169
|
+
kind: "Background";
|
|
170
|
+
body: Block;
|
|
171
|
+
}
|
|
172
|
+
export interface DanceDecl extends StmtBase {
|
|
173
|
+
kind: "Dance";
|
|
174
|
+
body: Block;
|
|
175
|
+
}
|
|
176
|
+
export interface Let extends StmtBase {
|
|
177
|
+
kind: "Let";
|
|
178
|
+
name: string;
|
|
179
|
+
nameSpan: Span;
|
|
180
|
+
value: Expr;
|
|
181
|
+
}
|
|
182
|
+
export type AssignOp = "=" | "+=" | "-=" | "*=" | "/=";
|
|
183
|
+
export interface Assign extends StmtBase {
|
|
184
|
+
kind: "Assign";
|
|
185
|
+
name: string;
|
|
186
|
+
nameSpan: Span;
|
|
187
|
+
op: AssignOp;
|
|
188
|
+
value: Expr;
|
|
189
|
+
}
|
|
190
|
+
export interface PartCall extends StmtBase {
|
|
191
|
+
kind: "PartCall";
|
|
192
|
+
name: string;
|
|
193
|
+
nameSpan: Span;
|
|
194
|
+
args: Expr[];
|
|
195
|
+
}
|
|
196
|
+
export interface Return extends StmtBase {
|
|
197
|
+
kind: "Return";
|
|
198
|
+
value: Expr | undefined;
|
|
199
|
+
}
|
|
200
|
+
export interface Print extends StmtBase {
|
|
201
|
+
kind: "Print";
|
|
202
|
+
args: Expr[];
|
|
203
|
+
}
|
|
204
|
+
export interface IfBranch {
|
|
205
|
+
condition: Expr;
|
|
206
|
+
block: Block;
|
|
207
|
+
}
|
|
208
|
+
export interface If extends StmtBase {
|
|
209
|
+
kind: "If";
|
|
210
|
+
branches: IfBranch[];
|
|
211
|
+
elseBlock: Block | undefined;
|
|
212
|
+
}
|
|
213
|
+
export interface Repeat extends StmtBase {
|
|
214
|
+
kind: "Repeat";
|
|
215
|
+
count: Expr;
|
|
216
|
+
as: Param | undefined;
|
|
217
|
+
block: Block;
|
|
218
|
+
}
|
|
219
|
+
export interface For extends StmtBase {
|
|
220
|
+
kind: "For";
|
|
221
|
+
variable: Param;
|
|
222
|
+
from: Expr;
|
|
223
|
+
to: Expr;
|
|
224
|
+
by: Expr | undefined;
|
|
225
|
+
block: Block;
|
|
226
|
+
}
|
|
227
|
+
export interface While extends StmtBase {
|
|
228
|
+
kind: "While";
|
|
229
|
+
condition: Expr;
|
|
230
|
+
block: Block;
|
|
231
|
+
}
|
|
232
|
+
export interface BranchStmt extends StmtBase {
|
|
233
|
+
kind: "Branch";
|
|
234
|
+
block: Block;
|
|
235
|
+
}
|
|
236
|
+
export type Axis = "x" | "y" | "z";
|
|
237
|
+
export interface Symmetric extends StmtBase {
|
|
238
|
+
kind: "Symmetric";
|
|
239
|
+
axis: Axis;
|
|
240
|
+
block: Block;
|
|
241
|
+
}
|
|
242
|
+
export interface Lay extends StmtBase {
|
|
243
|
+
kind: "Lay";
|
|
244
|
+
block: Block | undefined;
|
|
245
|
+
}
|
|
246
|
+
export interface Reshape extends StmtBase {
|
|
247
|
+
kind: "Reshape";
|
|
248
|
+
block: Block;
|
|
249
|
+
}
|
|
250
|
+
export type CommandName = "forward" | "back" | "move" | "pitch" | "yaw" | "roll" | "grow";
|
|
251
|
+
export interface Command extends StmtBase {
|
|
252
|
+
kind: "Command";
|
|
253
|
+
command: CommandName;
|
|
254
|
+
value: Expr;
|
|
255
|
+
}
|
|
256
|
+
export interface Rotate extends StmtBase {
|
|
257
|
+
kind: "Rotate";
|
|
258
|
+
angle: Expr;
|
|
259
|
+
axis: Expr;
|
|
260
|
+
}
|
|
261
|
+
export interface Mirror extends StmtBase {
|
|
262
|
+
kind: "Mirror";
|
|
263
|
+
axis: Axis;
|
|
264
|
+
}
|
|
265
|
+
export type MaterialProperty = "shape" | "colour" | "shine" | "sharpness" | "texture";
|
|
266
|
+
export interface Material extends StmtBase {
|
|
267
|
+
kind: "Material";
|
|
268
|
+
property: MaterialProperty;
|
|
269
|
+
/** The word as written: `colour` or `color` for the colour property. */
|
|
270
|
+
keyword: string;
|
|
271
|
+
value: Expr;
|
|
272
|
+
}
|
|
273
|
+
export interface Fill extends StmtBase {
|
|
274
|
+
kind: "Fill";
|
|
275
|
+
value: Expr;
|
|
276
|
+
}
|
|
277
|
+
/** A setting in a dance effect line: a bare word, or a value. Provisional (section 17). */
|
|
278
|
+
export type EffectArg = {
|
|
279
|
+
kind: "Word";
|
|
280
|
+
text: string;
|
|
281
|
+
span: Span;
|
|
282
|
+
} | {
|
|
283
|
+
kind: "Value";
|
|
284
|
+
expr: Expr;
|
|
285
|
+
};
|
|
286
|
+
export interface Effect extends StmtBase {
|
|
287
|
+
kind: "Effect";
|
|
288
|
+
name: string;
|
|
289
|
+
args: EffectArg[];
|
|
290
|
+
}
|
|
291
|
+
export interface ErrorStmt extends StmtBase {
|
|
292
|
+
kind: "ErrorStmt";
|
|
293
|
+
}
|
|
294
|
+
export type FileKind = "creature" | "background" | "dance";
|
|
295
|
+
export interface SourceFile {
|
|
296
|
+
kind: FileKind;
|
|
297
|
+
name: string;
|
|
298
|
+
nameSpan: Span;
|
|
299
|
+
/** Comments before the header line. */
|
|
300
|
+
headerComments: Comment[];
|
|
301
|
+
/** Comment lines directly below the header. */
|
|
302
|
+
description: Comment[];
|
|
303
|
+
items: Stmt[];
|
|
304
|
+
/** Comments after the last item. */
|
|
305
|
+
endComments: Comment[];
|
|
306
|
+
span: Span;
|
|
307
|
+
}
|
|
308
|
+
export declare const EFFECT_NAMES: ReadonlySet<string>;
|
|
309
|
+
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/ast.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// The syntax tree. The parser builds it, and the checker, formatter, interpreter and block editor
|
|
2
|
+
// all work from it. It keeps comments, so code can be printed back without losing them.
|
|
3
|
+
export const EFFECT_NAMES = new Set([
|
|
4
|
+
"morph",
|
|
5
|
+
"zoom",
|
|
6
|
+
"spin",
|
|
7
|
+
"turn",
|
|
8
|
+
"reverse",
|
|
9
|
+
"flat",
|
|
10
|
+
]);
|
|
11
|
+
//# sourceMappingURL=ast.js.map
|
package/dist/ast.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,wFAAwF;AAmZxF,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IACvD,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;CACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type TypeName, type Value } from "./values.js";
|
|
2
|
+
/** What a built-in function can ask of the running build. */
|
|
3
|
+
export interface BuiltinContext {
|
|
4
|
+
random(): number;
|
|
5
|
+
}
|
|
6
|
+
export interface BuiltinFunction {
|
|
7
|
+
name: string;
|
|
8
|
+
minArgs: number;
|
|
9
|
+
maxArgs: number;
|
|
10
|
+
/** The result's type, or undefined when it depends on the arguments. */
|
|
11
|
+
returns: TypeName | undefined;
|
|
12
|
+
/** Allowed in constant expressions (section 6.1). */
|
|
13
|
+
constant: boolean;
|
|
14
|
+
call(args: Value[], ctx: BuiltinContext): Value;
|
|
15
|
+
}
|
|
16
|
+
export declare const BUILTIN_FUNCTIONS: ReadonlyMap<string, BuiltinFunction>;
|
|
17
|
+
export declare const BUILTIN_CONSTANTS: ReadonlyMap<string, Value>;
|
|
18
|
+
/** Names nobody may define: every built-in, plus `gradient`, which is syntax. */
|
|
19
|
+
export declare function isBuiltinName(name: string): boolean;
|
|
20
|
+
//# sourceMappingURL=builtins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAIA,OAAO,EAUL,KAAK,QAAQ,EACb,KAAK,KAAK,EAEX,MAAM,aAAa,CAAC;AAErB,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,MAAM,IAAI,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,cAAc,GAAG,KAAK,CAAC;CACjD;AA2LD,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAElE,CAAC;AAqBF,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAoB,CAAC;AAE9E,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
package/dist/builtins.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// The library (docs/LANGUAGE.md section 18): built-in functions and constants.
|
|
2
|
+
import { hsv, mixColour, NAMED_COLOURS, rgb } from "./colour.js";
|
|
3
|
+
import { fbm3, noise3 } from "./noise.js";
|
|
4
|
+
import { isColour, isVec, PATTERN_KINDS, roundHalfUp, SHAPES, typeLabel, typeOf, ValueError, vec, } from "./values.js";
|
|
5
|
+
const DEG = Math.PI / 180;
|
|
6
|
+
function num(args, i, fn) {
|
|
7
|
+
const v = args[i];
|
|
8
|
+
if (typeof v !== "number") {
|
|
9
|
+
throw new ValueError(`\`${fn}\` needs a number for argument ${i + 1}, not ${typeLabel(typeOf(v))}.`);
|
|
10
|
+
}
|
|
11
|
+
return v;
|
|
12
|
+
}
|
|
13
|
+
function vecArg(args, i, fn) {
|
|
14
|
+
const v = args[i];
|
|
15
|
+
if (!isVec(v)) {
|
|
16
|
+
throw new ValueError(`\`${fn}\` needs a vector for argument ${i + 1}, not ${typeLabel(typeOf(v))}.`);
|
|
17
|
+
}
|
|
18
|
+
return v;
|
|
19
|
+
}
|
|
20
|
+
function mod(a, n) {
|
|
21
|
+
const m = a % n;
|
|
22
|
+
return m < 0 ? m + n : m;
|
|
23
|
+
}
|
|
24
|
+
function mix(a, b, t, fn) {
|
|
25
|
+
if (typeof a === "number" && typeof b === "number")
|
|
26
|
+
return (1 - t) * a + t * b;
|
|
27
|
+
if (isVec(a) && isVec(b))
|
|
28
|
+
return vec((1 - t) * a.x + t * b.x, (1 - t) * a.y + t * b.y, (1 - t) * a.z + t * b.z);
|
|
29
|
+
if (isColour(a) && isColour(b))
|
|
30
|
+
return mixColour(a, b, t);
|
|
31
|
+
throw new ValueError(`\`${fn}\` blends two numbers, two vectors or two colours, not ${typeLabel(typeOf(a))} and ${typeLabel(typeOf(b))}.`);
|
|
32
|
+
}
|
|
33
|
+
function mandel(cx, cy) {
|
|
34
|
+
let x = 0;
|
|
35
|
+
let y = 0;
|
|
36
|
+
for (let i = 0; i < 64; i++) {
|
|
37
|
+
const nx = x * x - y * y + cx;
|
|
38
|
+
y = 2 * x * y + cy;
|
|
39
|
+
x = nx;
|
|
40
|
+
if (x * x + y * y > 4)
|
|
41
|
+
return i / 64;
|
|
42
|
+
}
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
function noiseInput(args, fn) {
|
|
46
|
+
const v = args[0];
|
|
47
|
+
if (typeof v === "number")
|
|
48
|
+
return [v, 0, 0];
|
|
49
|
+
if (isVec(v))
|
|
50
|
+
return [v.x, v.y, v.z];
|
|
51
|
+
throw new ValueError(`\`${fn}\` needs a number or a vector, not ${typeLabel(typeOf(v))}.`);
|
|
52
|
+
}
|
|
53
|
+
function fn(name, arity, returns, call, constant = true) {
|
|
54
|
+
const [minArgs, maxArgs] = typeof arity === "number" ? [arity, arity] : arity;
|
|
55
|
+
return { name, minArgs, maxArgs, returns, constant, call };
|
|
56
|
+
}
|
|
57
|
+
function math1(name, f) {
|
|
58
|
+
return fn(name, 1, "number", (a) => f(num(a, 0, name)));
|
|
59
|
+
}
|
|
60
|
+
const FUNCTIONS = [
|
|
61
|
+
math1("abs", Math.abs),
|
|
62
|
+
math1("sign", (x) => (x > 0 ? 1 : x < 0 ? -1 : 0)),
|
|
63
|
+
math1("floor", Math.floor),
|
|
64
|
+
math1("ceil", Math.ceil),
|
|
65
|
+
math1("round", roundHalfUp),
|
|
66
|
+
math1("frac", (x) => x - Math.trunc(x)),
|
|
67
|
+
fn("min", 2, "number", (a) => Math.min(num(a, 0, "min"), num(a, 1, "min"))),
|
|
68
|
+
fn("max", 2, "number", (a) => Math.max(num(a, 0, "max"), num(a, 1, "max"))),
|
|
69
|
+
fn("clamp", 3, "number", (a) => {
|
|
70
|
+
const x = num(a, 0, "clamp");
|
|
71
|
+
const lo = num(a, 1, "clamp");
|
|
72
|
+
const hi = num(a, 2, "clamp");
|
|
73
|
+
return Math.min(hi, Math.max(lo, x));
|
|
74
|
+
}),
|
|
75
|
+
fn("wrap", 3, "number", (a) => {
|
|
76
|
+
const x = num(a, 0, "wrap");
|
|
77
|
+
const lo = num(a, 1, "wrap");
|
|
78
|
+
const hi = num(a, 2, "wrap");
|
|
79
|
+
return hi === lo ? lo : lo + mod(x - lo, hi - lo);
|
|
80
|
+
}),
|
|
81
|
+
fn("bounce", 3, "number", (a) => {
|
|
82
|
+
const x = num(a, 0, "bounce");
|
|
83
|
+
const lo = num(a, 1, "bounce");
|
|
84
|
+
const hi = num(a, 2, "bounce");
|
|
85
|
+
const w = hi - lo;
|
|
86
|
+
if (w === 0)
|
|
87
|
+
return lo;
|
|
88
|
+
const m = mod(x - lo, 2 * w);
|
|
89
|
+
return lo + (m <= w ? m : 2 * w - m);
|
|
90
|
+
}),
|
|
91
|
+
math1("sqrt", Math.sqrt),
|
|
92
|
+
math1("exp", Math.exp),
|
|
93
|
+
math1("ln", Math.log),
|
|
94
|
+
math1("log10", Math.log10),
|
|
95
|
+
math1("sin", (d) => Math.sin(d * DEG)),
|
|
96
|
+
math1("cos", (d) => Math.cos(d * DEG)),
|
|
97
|
+
math1("tan", (d) => Math.tan(d * DEG)),
|
|
98
|
+
math1("asin", (x) => Math.asin(x) / DEG),
|
|
99
|
+
math1("acos", (x) => Math.acos(x) / DEG),
|
|
100
|
+
math1("atan", (x) => Math.atan(x) / DEG),
|
|
101
|
+
fn("atan2", 2, "number", (a) => Math.atan2(num(a, 0, "atan2"), num(a, 1, "atan2")) / DEG),
|
|
102
|
+
math1("degrees", (r) => r / DEG),
|
|
103
|
+
math1("radians", (d) => d * DEG),
|
|
104
|
+
math1("wave", (t) => Math.sin(t * 360 * DEG)),
|
|
105
|
+
math1("bump", (t) => Math.sin(t * 180 * DEG)),
|
|
106
|
+
fn("mix", 3, undefined, (a) => mix(a[0], a[1], num(a, 2, "mix"), "mix")),
|
|
107
|
+
fn("smoothmix", 3, undefined, (a) => {
|
|
108
|
+
const t = Math.min(1, Math.max(0, num(a, 2, "smoothmix")));
|
|
109
|
+
return mix(a[0], a[1], (1 - Math.cos(180 * t * DEG)) / 2, "smoothmix");
|
|
110
|
+
}),
|
|
111
|
+
fn("mandel", 2, "number", (a) => mandel(num(a, 0, "mandel"), num(a, 1, "mandel"))),
|
|
112
|
+
fn("vec", 3, "vector", (a) => vec(num(a, 0, "vec"), num(a, 1, "vec"), num(a, 2, "vec"))),
|
|
113
|
+
fn("length", 1, "number", (a) => {
|
|
114
|
+
const v = vecArg(a, 0, "length");
|
|
115
|
+
return Math.hypot(v.x, v.y, v.z);
|
|
116
|
+
}),
|
|
117
|
+
fn("normalize", 1, "vector", (a) => {
|
|
118
|
+
const v = vecArg(a, 0, "normalize");
|
|
119
|
+
const l = Math.hypot(v.x, v.y, v.z);
|
|
120
|
+
return l === 0 ? vec(0, 0, 0) : vec(v.x / l, v.y / l, v.z / l);
|
|
121
|
+
}),
|
|
122
|
+
fn("dot", 2, "number", (a) => {
|
|
123
|
+
const p = vecArg(a, 0, "dot");
|
|
124
|
+
const q = vecArg(a, 1, "dot");
|
|
125
|
+
return p.x * q.x + p.y * q.y + p.z * q.z;
|
|
126
|
+
}),
|
|
127
|
+
fn("cross", 2, "vector", (a) => {
|
|
128
|
+
const p = vecArg(a, 0, "cross");
|
|
129
|
+
const q = vecArg(a, 1, "cross");
|
|
130
|
+
return vec(p.y * q.z - p.z * q.y, p.z * q.x - p.x * q.z, p.x * q.y - p.y * q.x);
|
|
131
|
+
}),
|
|
132
|
+
fn("hsv", [3, 4], "colour", (a) => hsv(num(a, 0, "hsv"), num(a, 1, "hsv"), num(a, 2, "hsv"), a.length > 3 ? num(a, 3, "hsv") : 1)),
|
|
133
|
+
fn("rgb", [3, 4], "colour", (a) => rgb(num(a, 0, "rgb"), num(a, 1, "rgb"), num(a, 2, "rgb"), a.length > 3 ? num(a, 3, "rgb") : 1)),
|
|
134
|
+
fn("noise", 1, "number", (a) => noise3(...noiseInput(a, "noise")), false),
|
|
135
|
+
fn("fbm", 1, "number", (a) => fbm3(...noiseInput(a, "fbm")), false),
|
|
136
|
+
fn("random", 2, "number", (a, ctx) => {
|
|
137
|
+
const lo = num(a, 0, "random");
|
|
138
|
+
const hi = num(a, 1, "random");
|
|
139
|
+
return lo + (hi - lo) * ctx.random();
|
|
140
|
+
}, false),
|
|
141
|
+
fn("pattern", 3, "pattern", (a) => {
|
|
142
|
+
const kind = a[0];
|
|
143
|
+
if (typeof kind !== "object" || kind.type !== "patternKind") {
|
|
144
|
+
throw new ValueError(`\`pattern\` needs a pattern kind first, such as \`marble\`, not ${typeLabel(typeOf(kind))}.`);
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
type: "pattern",
|
|
148
|
+
kind: kind.name,
|
|
149
|
+
hue: num(a, 1, "pattern"),
|
|
150
|
+
seed: roundHalfUp(num(a, 2, "pattern")),
|
|
151
|
+
};
|
|
152
|
+
}, false),
|
|
153
|
+
];
|
|
154
|
+
export const BUILTIN_FUNCTIONS = new Map(FUNCTIONS.map((f) => [f.name, f]));
|
|
155
|
+
function buildConstants() {
|
|
156
|
+
const c = new Map([
|
|
157
|
+
["pi", Math.PI],
|
|
158
|
+
["tau", 2 * Math.PI],
|
|
159
|
+
["golden", (1 + Math.sqrt(5)) / 2],
|
|
160
|
+
["sqrt2", Math.SQRT2],
|
|
161
|
+
["sqrt3", Math.sqrt(3)],
|
|
162
|
+
["ln2", Math.LN2],
|
|
163
|
+
["x_axis", vec(1, 0, 0)],
|
|
164
|
+
["y_axis", vec(0, 1, 0)],
|
|
165
|
+
["z_axis", vec(0, 0, 1)],
|
|
166
|
+
["none", { type: "pattern", kind: null, hue: 0, seed: 0 }],
|
|
167
|
+
]);
|
|
168
|
+
for (const [name, colour] of NAMED_COLOURS)
|
|
169
|
+
c.set(name, colour);
|
|
170
|
+
for (const name of SHAPES)
|
|
171
|
+
c.set(name, { type: "shape", name });
|
|
172
|
+
for (const name of PATTERN_KINDS)
|
|
173
|
+
c.set(name, { type: "patternKind", name });
|
|
174
|
+
return c;
|
|
175
|
+
}
|
|
176
|
+
export const BUILTIN_CONSTANTS = buildConstants();
|
|
177
|
+
/** Names nobody may define: every built-in, plus `gradient`, which is syntax. */
|
|
178
|
+
export function isBuiltinName(name) {
|
|
179
|
+
return BUILTIN_FUNCTIONS.has(name) || BUILTIN_CONSTANTS.has(name) || name === "gradient";
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=builtins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FunctionDecl, PartDecl, SourceFile, Stmt } from "./ast.js";
|
|
2
|
+
import { type GeneInfo } from "./genes.js";
|
|
3
|
+
import type { Diagnostic, LineMap } from "./source.js";
|
|
4
|
+
export interface CheckResult {
|
|
5
|
+
text: string;
|
|
6
|
+
file: SourceFile;
|
|
7
|
+
lines: LineMap;
|
|
8
|
+
diagnostics: Diagnostic[];
|
|
9
|
+
/** No errors (warnings are allowed). */
|
|
10
|
+
ok: boolean;
|
|
11
|
+
/** Every gene, in the order they're declared, plus `seed` if the creature uses `random`. */
|
|
12
|
+
genes: GeneInfo[];
|
|
13
|
+
parts: Map<string, PartDecl>;
|
|
14
|
+
functions: Map<string, FunctionDecl>;
|
|
15
|
+
/** The background's statements: a creature's background block, or a background file's items. */
|
|
16
|
+
background: Stmt[] | undefined;
|
|
17
|
+
/** The dance style's statements. */
|
|
18
|
+
dance: Stmt[] | undefined;
|
|
19
|
+
/** The creature reads `time`, `beat` or `music` outside its background and dance (section 16). */
|
|
20
|
+
live: boolean;
|
|
21
|
+
/** The background reads `time`, `beat` or `music`, so it changes while it's shown. */
|
|
22
|
+
backgroundLive: boolean;
|
|
23
|
+
usesRandom: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Parses and checks a GenoCode file. */
|
|
26
|
+
export declare function check(text: string): CheckResult;
|
|
27
|
+
//# sourceMappingURL=checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAIV,YAAY,EAGZ,QAAQ,EACR,UAAU,EACV,IAAI,EACL,MAAM,UAAU,CAAC;AAGlB,OAAO,EAA8B,KAAK,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAC;AAgB7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,wCAAwC;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,4FAA4F;IAC5F,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,gGAAgG;IAChG,UAAU,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IAC/B,oCAAoC;IACpC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IAC1B,kGAAkG;IAClG,IAAI,EAAE,OAAO,CAAC;IACd,sFAAsF;IACtF,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,yCAAyC;AACzC,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAoB/C"}
|