Compare commits

...

3 Commits

Author SHA1 Message Date
alex 98dd364ab0 lint 2023-03-05 10:19:46 +00:00
alex ebd1c2f564 support ^ inside strings again (for chords) 2023-03-05 10:16:27 +00:00
alex e15eef9a16 memories 2023-03-05 10:02:29 +00:00
3 changed files with 256 additions and 149 deletions
+220 -143
View File
@@ -180,8 +180,8 @@ function peg$parse(input, options) {
var peg$c6 = "\""; var peg$c6 = "\"";
var peg$c7 = "'"; var peg$c7 = "'";
var peg$c8 = "#"; var peg$c8 = "#";
var peg$c9 = "^"; var peg$c9 = "_";
var peg$c10 = "_"; var peg$c10 = "^";
var peg$c11 = "["; var peg$c11 = "[";
var peg$c12 = "]"; var peg$c12 = "]";
var peg$c13 = "{"; var peg$c13 = "{";
@@ -217,7 +217,9 @@ function peg$parse(input, options) {
var peg$r2 = /^[0-9]/; var peg$r2 = /^[0-9]/;
var peg$r3 = /^[ \n\r\t]/; var peg$r3 = /^[ \n\r\t]/;
var peg$r4 = /^[0-9a-zA-Z~]/; var peg$r4 = /^[0-9a-zA-Z~]/;
var peg$r5 = /^[^\n]/; var peg$r5 = /^[A-Za-z]/;
var peg$r6 = /^[A-Za-z0-9_]/;
var peg$r7 = /^[^\n]/;
var peg$e0 = peg$otherExpectation("number"); var peg$e0 = peg$otherExpectation("number");
var peg$e1 = peg$literalExpectation(".", false); var peg$e1 = peg$literalExpectation(".", false);
@@ -235,81 +237,84 @@ function peg$parse(input, options) {
var peg$e13 = peg$literalExpectation("'", false); var peg$e13 = peg$literalExpectation("'", false);
var peg$e14 = peg$classExpectation([["0", "9"], ["a", "z"], ["A", "Z"], "~"], false, false); var peg$e14 = peg$classExpectation([["0", "9"], ["a", "z"], ["A", "Z"], "~"], false, false);
var peg$e15 = peg$literalExpectation("#", false); var peg$e15 = peg$literalExpectation("#", false);
var peg$e16 = peg$literalExpectation("^", false); var peg$e16 = peg$literalExpectation("_", false);
var peg$e17 = peg$literalExpectation("_", false); var peg$e17 = peg$literalExpectation("^", false);
var peg$e18 = peg$literalExpectation("[", false); var peg$e18 = peg$classExpectation([["A", "Z"], ["a", "z"]], false, false);
var peg$e19 = peg$literalExpectation("]", false); var peg$e19 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "_"], false, false);
var peg$e20 = peg$literalExpectation("{", false); var peg$e20 = peg$literalExpectation("[", false);
var peg$e21 = peg$literalExpectation("}", false); var peg$e21 = peg$literalExpectation("]", false);
var peg$e22 = peg$literalExpectation("%", false); var peg$e22 = peg$literalExpectation("{", false);
var peg$e23 = peg$literalExpectation("<", false); var peg$e23 = peg$literalExpectation("}", false);
var peg$e24 = peg$literalExpectation(">", false); var peg$e24 = peg$literalExpectation("%", false);
var peg$e25 = peg$literalExpectation("@", false); var peg$e25 = peg$literalExpectation("<", false);
var peg$e26 = peg$literalExpectation("!", false); var peg$e26 = peg$literalExpectation(">", false);
var peg$e27 = peg$literalExpectation("(", false); var peg$e27 = peg$literalExpectation("@", false);
var peg$e28 = peg$literalExpectation(")", false); var peg$e28 = peg$literalExpectation("!", false);
var peg$e29 = peg$literalExpectation("/", false); var peg$e29 = peg$literalExpectation("(", false);
var peg$e30 = peg$literalExpectation("*", false); var peg$e30 = peg$literalExpectation(")", false);
var peg$e31 = peg$literalExpectation("?", false); var peg$e31 = peg$literalExpectation("/", false);
var peg$e32 = peg$literalExpectation(":", false); var peg$e32 = peg$literalExpectation("*", false);
var peg$e33 = peg$literalExpectation("struct", false); var peg$e33 = peg$literalExpectation("?", false);
var peg$e34 = peg$literalExpectation("target", false); var peg$e34 = peg$literalExpectation(":", false);
var peg$e35 = peg$literalExpectation("euclid", false); var peg$e35 = peg$literalExpectation("struct", false);
var peg$e36 = peg$literalExpectation("slow", false); var peg$e36 = peg$literalExpectation("target", false);
var peg$e37 = peg$literalExpectation("rotL", false); var peg$e37 = peg$literalExpectation("euclid", false);
var peg$e38 = peg$literalExpectation("rotR", false); var peg$e38 = peg$literalExpectation("slow", false);
var peg$e39 = peg$literalExpectation("fast", false); var peg$e39 = peg$literalExpectation("rotL", false);
var peg$e40 = peg$literalExpectation("scale", false); var peg$e40 = peg$literalExpectation("rotR", false);
var peg$e41 = peg$literalExpectation("//", false); var peg$e41 = peg$literalExpectation("fast", false);
var peg$e42 = peg$classExpectation(["\n"], true, false); var peg$e42 = peg$literalExpectation("scale", false);
var peg$e43 = peg$literalExpectation("cat", false); var peg$e43 = peg$literalExpectation("//", false);
var peg$e44 = peg$literalExpectation("$", false); var peg$e44 = peg$classExpectation(["\n"], true, false);
var peg$e45 = peg$literalExpectation("setcps", false); var peg$e45 = peg$literalExpectation("cat", false);
var peg$e46 = peg$literalExpectation("setbpm", false); var peg$e46 = peg$literalExpectation("$", false);
var peg$e47 = peg$literalExpectation("hush", false); var peg$e47 = peg$literalExpectation("setcps", false);
var peg$e48 = peg$literalExpectation("setbpm", false);
var peg$e49 = peg$literalExpectation("hush", false);
var peg$f0 = function() { return parseFloat(text()); }; var peg$f0 = function() { return parseFloat(text()); };
var peg$f1 = function(chars) { return new AtomStub(chars.join("")) }; var peg$f1 = function(chars) { return new AtomStub(chars.join("")) };
var peg$f2 = function(s) { return s }; var peg$f2 = function(h, t) { return new MemoryStub(h + t.join("")) };
var peg$f3 = function(s, stepsPerCycle) { s.arguments_.stepsPerCycle = stepsPerCycle ; return s; }; var peg$f3 = function(s) { return s };
var peg$f4 = function(a) { return a }; var peg$f4 = function(s, stepsPerCycle) { s.arguments_.stepsPerCycle = stepsPerCycle ; return s; };
var peg$f5 = function(s) { s.arguments_.alignment = 'slowcat'; return s; }; var peg$f5 = function(a) { return a };
var peg$f6 = function(a) { return x => x.options_['weight'] = a }; var peg$f6 = function(s) { s.arguments_.alignment = 'slowcat'; return s; };
var peg$f7 = function(a) { return x => x.options_['reps'] = a }; var peg$f7 = function(a) { return x => x.options_['weight'] = a };
var peg$f8 = function(p, s, r) { return x => x.options_['ops'].push({ type_: "bjorklund", arguments_ :{ pulse: p, step:s, rotation:r }}) }; var peg$f8 = function(a) { return x => x.options_['reps'] = a };
var peg$f9 = function(a) { return x => x.options_['ops'].push({ type_: "stretch", arguments_ :{ amount:a, type: 'slow' }}) }; var peg$f9 = function(p, s, r) { return x => x.options_['ops'].push({ type_: "bjorklund", arguments_ :{ pulse: p, step:s, rotation:r }}) };
var peg$f10 = function(a) { return x => x.options_['ops'].push({ type_: "stretch", arguments_ :{ amount:a, type: 'fast' }}) }; var peg$f10 = function(a) { return x => x.options_['ops'].push({ type_: "stretch", arguments_ :{ amount:a, type: 'slow' }}) };
var peg$f11 = function(a) { return x => x.options_['ops'].push({ type_: "degradeBy", arguments_ :{ amount:a } }) }; var peg$f11 = function(a) { return x => x.options_['ops'].push({ type_: "stretch", arguments_ :{ amount:a, type: 'fast' }}) };
var peg$f12 = function(s) { return x => x.options_['ops'].push({ type_: "tail", arguments_ :{ element:s } }) }; var peg$f12 = function(a) { return x => x.options_['ops'].push({ type_: "degradeBy", arguments_ :{ amount:a } }) };
var peg$f13 = function(s, ops) { const result = new ElementStub(s, {ops: [], weight: 1, reps: 1}); var peg$f13 = function(s) { return x => x.options_['ops'].push({ type_: "tail", arguments_ :{ element:s } }) };
var peg$f14 = function(s, ops) { const result = new ElementStub(s, {ops: [], weight: 1, reps: 1});
for (const op of ops) { for (const op of ops) {
op(result); op(result);
} }
return result; return result;
}; };
var peg$f14 = function(s) { return new PatternStub(s, 'fastcat'); }; var peg$f15 = function(s) { return new PatternStub(s, 'fastcat'); };
var peg$f15 = function(tail) { return { alignment: 'stack', list: tail }; }; var peg$f16 = function(tail) { return { alignment: 'stack', list: tail }; };
var peg$f16 = function(tail) { return { alignment: 'rand', list: tail }; }; var peg$f17 = function(tail) { return { alignment: 'rand', list: tail }; };
var peg$f17 = function(head, tail) { if (tail && tail.list.length > 0) { return new PatternStub([head, ...tail.list], tail.alignment); } else { return head; } }; var peg$f18 = function(head, tail) { if (tail && tail.list.length > 0) { return new PatternStub([head, ...tail.list], tail.alignment); } else { return head; } };
var peg$f18 = function(head, tail) { return new PatternStub(tail ? [head, ...tail.list] : [head], 'polymeter'); }; var peg$f19 = function(head, tail) { return new PatternStub(tail ? [head, ...tail.list] : [head], 'polymeter'); };
var peg$f19 = function(sc) { return sc; }; var peg$f20 = function(sc) { return sc; };
var peg$f20 = function(s) { return { name: "struct", args: { mini:s }}}; var peg$f21 = function(s) { return { name: "struct", args: { mini:s }}};
var peg$f21 = function(s) { return { name: "target", args : { name:s}}}; var peg$f22 = function(s) { return { name: "target", args : { name:s}}};
var peg$f22 = function(p, s, r) { return { name: "bjorklund", args :{ pulse: p, step:parseInt(s) }}}; var peg$f23 = function(p, s, r) { return { name: "bjorklund", args :{ pulse: p, step:parseInt(s) }}};
var peg$f23 = function(a) { return { name: "stretch", args :{ amount: a}}}; var peg$f24 = function(a) { return { name: "stretch", args :{ amount: a}}};
var peg$f24 = function(a) { return { name: "shift", args :{ amount: "-"+a}}}; var peg$f25 = function(a) { return { name: "shift", args :{ amount: "-"+a}}};
var peg$f25 = function(a) { return { name: "shift", args :{ amount: a}}}; var peg$f26 = function(a) { return { name: "shift", args :{ amount: a}}};
var peg$f26 = function(a) { return { name: "stretch", args :{ amount: "1/"+a}}}; var peg$f27 = function(a) { return { name: "stretch", args :{ amount: "1/"+a}}};
var peg$f27 = function(s) { return { name: "scale", args :{ scale: s.join("")}}}; var peg$f28 = function(s) { return { name: "scale", args :{ scale: s.join("")}}};
var peg$f28 = function(s, v) { return v}; var peg$f29 = function(s, v) { return v};
var peg$f29 = function(s, ss) { ss.unshift(s); return new PatternStub(ss, 'slowcat'); }; var peg$f30 = function(s, ss) { ss.unshift(s); return new PatternStub(ss, 'slowcat'); };
var peg$f30 = function(sg) {return sg}; var peg$f31 = function(sg) {return sg};
var peg$f31 = function(o, soc) { return new OperatorStub(o.name,o.args,soc)}; var peg$f32 = function(o, soc) { return new OperatorStub(o.name,o.args,soc)};
var peg$f32 = function(sc) { return sc }; var peg$f33 = function(sc) { return sc };
var peg$f33 = function(c) { return c }; var peg$f34 = function(c) { return c };
var peg$f34 = function(v) { return new CommandStub("setcps", { value: v})}; var peg$f35 = function(v) { return new CommandStub("setcps", { value: v})};
var peg$f35 = function(v) { return new CommandStub("setcps", { value: (v/120/2)})}; var peg$f36 = function(v) { return new CommandStub("setcps", { value: (v/120/2)})};
var peg$f36 = function() { return new CommandStub("hush")}; var peg$f37 = function() { return new CommandStub("hush")};
var peg$currPos = 0; var peg$currPos = 0;
var peg$savedPos = 0; var peg$savedPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }]; var peg$posDetailsCache = [{ line: 1, column: 1 }];
@@ -834,7 +839,7 @@ function peg$parse(input, options) {
if (peg$silentFails === 0) { peg$fail(peg$e1); } if (peg$silentFails === 0) { peg$fail(peg$e1); }
} }
if (s0 === peg$FAILED) { if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 94) { if (input.charCodeAt(peg$currPos) === 95) {
s0 = peg$c9; s0 = peg$c9;
peg$currPos++; peg$currPos++;
} else { } else {
@@ -842,7 +847,7 @@ function peg$parse(input, options) {
if (peg$silentFails === 0) { peg$fail(peg$e16); } if (peg$silentFails === 0) { peg$fail(peg$e16); }
} }
if (s0 === peg$FAILED) { if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 95) { if (input.charCodeAt(peg$currPos) === 94) {
s0 = peg$c10; s0 = peg$c10;
peg$currPos++; peg$currPos++;
} else { } else {
@@ -885,6 +890,68 @@ function peg$parse(input, options) {
return s0; return s0;
} }
function peg$parsememory() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 94) {
s2 = peg$c10;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e17); }
}
if (s2 !== peg$FAILED) {
if (peg$r5.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e18); }
}
if (s3 !== peg$FAILED) {
s4 = [];
if (peg$r6.test(input.charAt(peg$currPos))) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e19); }
}
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
if (peg$r6.test(input.charAt(peg$currPos))) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e19); }
}
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s0 = peg$f2(s3, s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsesub_cycle() { function peg$parsesub_cycle() {
var s0, s1, s2, s3, s4, s5, s6, s7; var s0, s1, s2, s3, s4, s5, s6, s7;
@@ -895,7 +962,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s2 = peg$FAILED; s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e18); } if (peg$silentFails === 0) { peg$fail(peg$e20); }
} }
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
s3 = peg$parsews(); s3 = peg$parsews();
@@ -907,12 +974,12 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s6 = peg$FAILED; s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e19); } if (peg$silentFails === 0) { peg$fail(peg$e21); }
} }
if (s6 !== peg$FAILED) { if (s6 !== peg$FAILED) {
s7 = peg$parsews(); s7 = peg$parsews();
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f2(s4); s0 = peg$f3(s4);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -939,7 +1006,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s2 = peg$FAILED; s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e20); } if (peg$silentFails === 0) { peg$fail(peg$e22); }
} }
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
s3 = peg$parsews(); s3 = peg$parsews();
@@ -951,7 +1018,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s6 = peg$FAILED; s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e21); } if (peg$silentFails === 0) { peg$fail(peg$e23); }
} }
if (s6 !== peg$FAILED) { if (s6 !== peg$FAILED) {
s7 = peg$parsepolymeter_steps(); s7 = peg$parsepolymeter_steps();
@@ -960,7 +1027,7 @@ function peg$parse(input, options) {
} }
s8 = peg$parsews(); s8 = peg$parsews();
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f3(s4, s7); s0 = peg$f4(s4, s7);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -986,13 +1053,13 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e22); } if (peg$silentFails === 0) { peg$fail(peg$e24); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parseslice(); s2 = peg$parseslice();
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f4(s2); s0 = peg$f5(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1015,7 +1082,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s2 = peg$FAILED; s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e23); } if (peg$silentFails === 0) { peg$fail(peg$e25); }
} }
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
s3 = peg$parsews(); s3 = peg$parsews();
@@ -1027,12 +1094,12 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s6 = peg$FAILED; s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e24); } if (peg$silentFails === 0) { peg$fail(peg$e26); }
} }
if (s6 !== peg$FAILED) { if (s6 !== peg$FAILED) {
s7 = peg$parsews(); s7 = peg$parsews();
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f5(s4); s0 = peg$f6(s4);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1052,6 +1119,8 @@ function peg$parse(input, options) {
function peg$parseslice() { function peg$parseslice() {
var s0; var s0;
s0 = peg$parsememory();
if (s0 === peg$FAILED) {
s0 = peg$parsestep(); s0 = peg$parsestep();
if (s0 === peg$FAILED) { if (s0 === peg$FAILED) {
s0 = peg$parsesub_cycle(); s0 = peg$parsesub_cycle();
@@ -1062,6 +1131,7 @@ function peg$parse(input, options) {
} }
} }
} }
}
return s0; return s0;
} }
@@ -1101,13 +1171,13 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e25); } if (peg$silentFails === 0) { peg$fail(peg$e27); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsenumber(); s2 = peg$parsenumber();
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f6(s2); s0 = peg$f7(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1129,13 +1199,13 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e26); } if (peg$silentFails === 0) { peg$fail(peg$e28); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsenumber(); s2 = peg$parsenumber();
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f7(s2); s0 = peg$f8(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1157,7 +1227,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e27); } if (peg$silentFails === 0) { peg$fail(peg$e29); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
@@ -1185,11 +1255,11 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s13 = peg$FAILED; s13 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e28); } if (peg$silentFails === 0) { peg$fail(peg$e30); }
} }
if (s13 !== peg$FAILED) { if (s13 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f8(s3, s7, s11); s0 = peg$f9(s3, s7, s11);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1223,13 +1293,13 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e29); } if (peg$silentFails === 0) { peg$fail(peg$e31); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parseslice(); s2 = peg$parseslice();
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f9(s2); s0 = peg$f10(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1251,13 +1321,13 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e30); } if (peg$silentFails === 0) { peg$fail(peg$e32); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parseslice(); s2 = peg$parseslice();
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f10(s2); s0 = peg$f11(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1279,7 +1349,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e31); } if (peg$silentFails === 0) { peg$fail(peg$e33); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsenumber(); s2 = peg$parsenumber();
@@ -1287,7 +1357,7 @@ function peg$parse(input, options) {
s2 = null; s2 = null;
} }
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f11(s2); s0 = peg$f12(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1305,13 +1375,13 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e32); } if (peg$silentFails === 0) { peg$fail(peg$e34); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parseslice(); s2 = peg$parseslice();
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f12(s2); s0 = peg$f13(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1337,7 +1407,7 @@ function peg$parse(input, options) {
s3 = peg$parseslice_op(); s3 = peg$parseslice_op();
} }
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f13(s1, s2); s0 = peg$f14(s1, s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1362,7 +1432,7 @@ function peg$parse(input, options) {
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s1 = peg$f14(s1); s1 = peg$f15(s1);
} }
s0 = s1; s0 = s1;
@@ -1411,7 +1481,7 @@ function peg$parse(input, options) {
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s1 = peg$f15(s1); s1 = peg$f16(s1);
} }
s0 = s1; s0 = s1;
@@ -1460,7 +1530,7 @@ function peg$parse(input, options) {
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s1 = peg$f16(s1); s1 = peg$f17(s1);
} }
s0 = s1; s0 = s1;
@@ -1481,7 +1551,7 @@ function peg$parse(input, options) {
s2 = null; s2 = null;
} }
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f17(s1, s2); s0 = peg$f18(s1, s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1501,7 +1571,7 @@ function peg$parse(input, options) {
s2 = null; s2 = null;
} }
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f18(s1, s2); s0 = peg$f19(s1, s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1522,7 +1592,7 @@ function peg$parse(input, options) {
s4 = peg$parsequote(); s4 = peg$parsequote();
if (s4 !== peg$FAILED) { if (s4 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f19(s3); s0 = peg$f20(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1577,14 +1647,14 @@ function peg$parse(input, options) {
peg$currPos += 6; peg$currPos += 6;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e33); } if (peg$silentFails === 0) { peg$fail(peg$e35); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsemini_or_operator(); s3 = peg$parsemini_or_operator();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f20(s3); s0 = peg$f21(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1606,7 +1676,7 @@ function peg$parse(input, options) {
peg$currPos += 6; peg$currPos += 6;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e34); } if (peg$silentFails === 0) { peg$fail(peg$e36); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
@@ -1617,7 +1687,7 @@ function peg$parse(input, options) {
s5 = peg$parsequote(); s5 = peg$parsequote();
if (s5 !== peg$FAILED) { if (s5 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f21(s4); s0 = peg$f22(s4);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1647,7 +1717,7 @@ function peg$parse(input, options) {
peg$currPos += 6; peg$currPos += 6;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e35); } if (peg$silentFails === 0) { peg$fail(peg$e37); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
@@ -1662,7 +1732,7 @@ function peg$parse(input, options) {
s7 = null; s7 = null;
} }
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f22(s3, s5, s7); s0 = peg$f23(s3, s5, s7);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1688,14 +1758,14 @@ function peg$parse(input, options) {
peg$currPos += 4; peg$currPos += 4;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e36); } if (peg$silentFails === 0) { peg$fail(peg$e38); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsenumber(); s3 = peg$parsenumber();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f23(s3); s0 = peg$f24(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1717,14 +1787,14 @@ function peg$parse(input, options) {
peg$currPos += 4; peg$currPos += 4;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e37); } if (peg$silentFails === 0) { peg$fail(peg$e39); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsenumber(); s3 = peg$parsenumber();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f24(s3); s0 = peg$f25(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1746,14 +1816,14 @@ function peg$parse(input, options) {
peg$currPos += 4; peg$currPos += 4;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e38); } if (peg$silentFails === 0) { peg$fail(peg$e40); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsenumber(); s3 = peg$parsenumber();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f25(s3); s0 = peg$f26(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1775,14 +1845,14 @@ function peg$parse(input, options) {
peg$currPos += 4; peg$currPos += 4;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e39); } if (peg$silentFails === 0) { peg$fail(peg$e41); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsenumber(); s3 = peg$parsenumber();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f26(s3); s0 = peg$f27(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1804,7 +1874,7 @@ function peg$parse(input, options) {
peg$currPos += 5; peg$currPos += 5;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e40); } if (peg$silentFails === 0) { peg$fail(peg$e42); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
@@ -1824,7 +1894,7 @@ function peg$parse(input, options) {
s5 = peg$parsequote(); s5 = peg$parsequote();
if (s5 !== peg$FAILED) { if (s5 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f27(s4); s0 = peg$f28(s4);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1854,25 +1924,25 @@ function peg$parse(input, options) {
peg$currPos += 2; peg$currPos += 2;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e41); } if (peg$silentFails === 0) { peg$fail(peg$e43); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = []; s2 = [];
if (peg$r5.test(input.charAt(peg$currPos))) { if (peg$r7.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos); s3 = input.charAt(peg$currPos);
peg$currPos++; peg$currPos++;
} else { } else {
s3 = peg$FAILED; s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e42); } if (peg$silentFails === 0) { peg$fail(peg$e44); }
} }
while (s3 !== peg$FAILED) { while (s3 !== peg$FAILED) {
s2.push(s3); s2.push(s3);
if (peg$r5.test(input.charAt(peg$currPos))) { if (peg$r7.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos); s3 = input.charAt(peg$currPos);
peg$currPos++; peg$currPos++;
} else { } else {
s3 = peg$FAILED; s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e42); } if (peg$silentFails === 0) { peg$fail(peg$e44); }
} }
} }
s1 = [s1, s2]; s1 = [s1, s2];
@@ -1894,7 +1964,7 @@ function peg$parse(input, options) {
peg$currPos += 3; peg$currPos += 3;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e43); } if (peg$silentFails === 0) { peg$fail(peg$e45); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
@@ -1903,7 +1973,7 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s3 = peg$FAILED; s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e18); } if (peg$silentFails === 0) { peg$fail(peg$e20); }
} }
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
s4 = peg$parsews(); s4 = peg$parsews();
@@ -1916,7 +1986,7 @@ function peg$parse(input, options) {
s9 = peg$parsemini_or_operator(); s9 = peg$parsemini_or_operator();
if (s9 !== peg$FAILED) { if (s9 !== peg$FAILED) {
peg$savedPos = s7; peg$savedPos = s7;
s7 = peg$f28(s5, s9); s7 = peg$f29(s5, s9);
} else { } else {
peg$currPos = s7; peg$currPos = s7;
s7 = peg$FAILED; s7 = peg$FAILED;
@@ -1933,7 +2003,7 @@ function peg$parse(input, options) {
s9 = peg$parsemini_or_operator(); s9 = peg$parsemini_or_operator();
if (s9 !== peg$FAILED) { if (s9 !== peg$FAILED) {
peg$savedPos = s7; peg$savedPos = s7;
s7 = peg$f28(s5, s9); s7 = peg$f29(s5, s9);
} else { } else {
peg$currPos = s7; peg$currPos = s7;
s7 = peg$FAILED; s7 = peg$FAILED;
@@ -1949,11 +2019,11 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s8 = peg$FAILED; s8 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e19); } if (peg$silentFails === 0) { peg$fail(peg$e21); }
} }
if (s8 !== peg$FAILED) { if (s8 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f29(s5, s6); s0 = peg$f30(s5, s6);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -1999,7 +2069,7 @@ function peg$parse(input, options) {
s4 = peg$parsecomment(); s4 = peg$parsecomment();
} }
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f30(s1); s0 = peg$f31(s1);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -2014,14 +2084,14 @@ function peg$parse(input, options) {
peg$currPos++; peg$currPos++;
} else { } else {
s3 = peg$FAILED; s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e44); } if (peg$silentFails === 0) { peg$fail(peg$e46); }
} }
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
s4 = peg$parsews(); s4 = peg$parsews();
s5 = peg$parsemini_or_operator(); s5 = peg$parsemini_or_operator();
if (s5 !== peg$FAILED) { if (s5 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f31(s1, s5); s0 = peg$f32(s1, s5);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -2046,7 +2116,7 @@ function peg$parse(input, options) {
s1 = peg$parsemini_or_operator(); s1 = peg$parsemini_or_operator();
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s1 = peg$f32(s1); s1 = peg$f33(s1);
} }
s0 = s1; s0 = s1;
if (s0 === peg$FAILED) { if (s0 === peg$FAILED) {
@@ -2079,7 +2149,7 @@ function peg$parse(input, options) {
if (s2 !== peg$FAILED) { if (s2 !== peg$FAILED) {
s3 = peg$parsews(); s3 = peg$parsews();
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f33(s2); s0 = peg$f34(s2);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -2097,14 +2167,14 @@ function peg$parse(input, options) {
peg$currPos += 6; peg$currPos += 6;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e45); } if (peg$silentFails === 0) { peg$fail(peg$e47); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsenumber(); s3 = peg$parsenumber();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f34(s3); s0 = peg$f35(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -2126,14 +2196,14 @@ function peg$parse(input, options) {
peg$currPos += 6; peg$currPos += 6;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e46); } if (peg$silentFails === 0) { peg$fail(peg$e48); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
s2 = peg$parsews(); s2 = peg$parsews();
s3 = peg$parsenumber(); s3 = peg$parsenumber();
if (s3 !== peg$FAILED) { if (s3 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s0 = peg$f35(s3); s0 = peg$f36(s3);
} else { } else {
peg$currPos = s0; peg$currPos = s0;
s0 = peg$FAILED; s0 = peg$FAILED;
@@ -2155,11 +2225,11 @@ function peg$parse(input, options) {
peg$currPos += 4; peg$currPos += 4;
} else { } else {
s1 = peg$FAILED; s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$e47); } if (peg$silentFails === 0) { peg$fail(peg$e49); }
} }
if (s1 !== peg$FAILED) { if (s1 !== peg$FAILED) {
peg$savedPos = s0; peg$savedPos = s0;
s1 = peg$f36(); s1 = peg$f37();
} }
s0 = s1; s0 = s1;
@@ -2185,6 +2255,13 @@ function peg$parse(input, options) {
this.location_ = location(); this.location_ = location();
} }
var MemoryStub = function(source)
{
this.type_ = "memory";
this.source_ = source;
this.location_ = location();
}
var PatternStub = function(source, alignment) var PatternStub = function(source, alignment)
{ {
this.type_ = "pattern"; this.type_ = "pattern";
+11 -2
View File
@@ -19,6 +19,13 @@ This program is free software: you can redistribute it and/or modify it under th
this.location_ = location(); this.location_ = location();
} }
var MemoryStub = function(source)
{
this.type_ = "memory";
this.source_ = source;
this.location_ = location();
}
var PatternStub = function(source, alignment) var PatternStub = function(source, alignment)
{ {
this.type_ = "pattern"; this.type_ = "pattern";
@@ -96,9 +103,11 @@ quote = '"' / "'"
// ------------------ steps and cycles --------------------------- // ------------------ steps and cycles ---------------------------
// single step definition (e.g bd) // single step definition (e.g bd)
step_char = [0-9a-zA-Z~] / "-" / "#" / "." / "^" / "_" step_char = [0-9a-zA-Z~] / "-" / "#" / "." / "_" / "^"
step = ws chars:step_char+ ws { return new AtomStub(chars.join("")) } step = ws chars:step_char+ ws { return new AtomStub(chars.join("")) }
memory = ws "^" h:[A-Za-z] t:[A-Za-z0-9_]+ { return new MemoryStub(h + t.join("")) }
// define a sub cycle e.g. [1 2, 3 [4]] // define a sub cycle e.g. [1 2, 3 [4]]
sub_cycle = ws "[" ws s:stack_or_choose ws "]" ws { return s } sub_cycle = ws "[" ws s:stack_or_choose ws "]" ws { return s }
@@ -115,7 +124,7 @@ slow_sequence = ws "<" ws s:sequence ws ">" ws
{ s.arguments_.alignment = 'slowcat'; return s; } { s.arguments_.alignment = 'slowcat'; return s; }
// a slice is either a single step or a sub cycle // a slice is either a single step or a sub cycle
slice = step / sub_cycle / polymeter / slow_sequence slice = memory / step / sub_cycle / polymeter / slow_sequence
// slice modifier affects the timing/size of a slice (e.g. [a b c]@3) // slice modifier affects the timing/size of a slice (e.g. [a b c]@3)
// at this point, we assume we can represent them as regular sequence operators // at this point, we assume we can represent them as regular sequence operators
+21
View File
@@ -14,6 +14,17 @@ function _nextSeed() {
return _seedState++; return _seedState++;
} */ } */
const memory = {};
export const remember = (name, pat) => {
if (pat) {
memory[name] = pat;
} else {
pat = memory[name];
}
return pat;
};
const applyOptions = (parent, code) => (pat, i) => { const applyOptions = (parent, code) => (pat, i) => {
const ast = parent.source_[i]; const ast = parent.source_[i];
const options = ast.options_; const options = ast.options_;
@@ -138,6 +149,16 @@ export function patternifyAST(ast, code) {
case 'element': { case 'element': {
return patternifyAST(ast.source_, code); return patternifyAST(ast.source_, code);
} }
case 'memory': {
const name = ast.source_;
if (name in memory) {
return new strudel.Pattern((state) => {
return memory[name].query(state);
});
}
// TODO - how to default a memory.. via a list?
return strudel.pure(undefined);
}
case 'atom': { case 'atom': {
if (ast.source_ === '~') { if (ast.source_ === '~') {
return strudel.silence; return strudel.silence;