add main command struct and make fillKeywords mostly-comptime
This commit is contained in:
parent
e462b4e9d6
commit
d86e9efe43
1 changed files with 41 additions and 40 deletions
81
src/lang.zig
81
src/lang.zig
|
@ -51,6 +51,37 @@ pub const CommandType = enum {
|
|||
Rotate,
|
||||
};
|
||||
|
||||
pub const Type = enum {
|
||||
/// "LV2 Commands" are commands that receive split, index, and then receive
|
||||
/// any f64 arguments.
|
||||
lv2_command,
|
||||
};
|
||||
|
||||
pub const NewCommand = struct {
|
||||
pub const Noop = struct {};
|
||||
|
||||
pub const Load = struct {
|
||||
path: []const u8,
|
||||
};
|
||||
|
||||
pub const Quicksave = struct {};
|
||||
|
||||
pub const RunQS = struct {
|
||||
program: []const u8,
|
||||
};
|
||||
|
||||
pub const Amp = struct {
|
||||
pub const base_type = Type.lv2_command;
|
||||
gain: f64
|
||||
};
|
||||
|
||||
pub const RFlanger = struct {
|
||||
pub const base_type = Type.lv2_command;
|
||||
delay_depth_avg: f64,
|
||||
law_freq: f64,
|
||||
};
|
||||
};
|
||||
|
||||
pub const Command = struct {
|
||||
command: CommandType,
|
||||
args: ArgList,
|
||||
|
@ -182,48 +213,18 @@ pub const Lang = struct {
|
|||
}
|
||||
|
||||
fn fillKeywords(self: *Lang) !void {
|
||||
_ = try self.keywords.put("noop", .Noop);
|
||||
_ = try self.keywords.put("load", .Load);
|
||||
_ = try self.keywords.put("quicksave", .Quicksave);
|
||||
_ = try self.keywords.put("runqs", .RunQS);
|
||||
inline for (@typeInfo(NewCommand).Struct.decls) |cmd_struct_decl| {
|
||||
const struct_name = cmd_struct_decl.name;
|
||||
|
||||
_ = try self.keywords.put("amp", .Amp);
|
||||
_ = try self.keywords.put("rflanger", .RFlanger);
|
||||
_ = try self.keywords.put("eq", .Eq);
|
||||
_ = try self.keywords.put("mbeq", .Mbeq);
|
||||
_ = try self.keywords.put("phaser", .Phaser);
|
||||
_ = try self.keywords.put("chorus", .Chorus);
|
||||
_ = try self.keywords.put("pitchscaler", .PitchScaler);
|
||||
_ = try self.keywords.put("reverb", .Reverb);
|
||||
_ = try self.keywords.put("highpass", .Highpass);
|
||||
_ = try self.keywords.put("delay", .Delay);
|
||||
_ = try self.keywords.put("vinyl", .Vinyl);
|
||||
_ = try self.keywords.put("revdelay", .RevDelay);
|
||||
_ = try self.keywords.put("gate", .Gate);
|
||||
_ = try self.keywords.put("detune", .Detune);
|
||||
_ = try self.keywords.put("overdrive", .Overdrive);
|
||||
_ = try self.keywords.put("talkbox", .TalkBox);
|
||||
_ = try self.keywords.put("thruzero", .ThruZero);
|
||||
_ = try self.keywords.put("foverdrive", .Foverdrive);
|
||||
_ = try self.keywords.put("gverb", .Gverb);
|
||||
_ = try self.keywords.put("invert", .Invert);
|
||||
_ = try self.keywords.put("tapedelay", .TapeDelay);
|
||||
_ = try self.keywords.put("moddelay", .ModDelay);
|
||||
_ = try self.keywords.put("multichorus", .MultiChorus);
|
||||
_ = try self.keywords.put("saturator", .Saturator);
|
||||
_ = try self.keywords.put("vintagedelay", .VintageDelay);
|
||||
comptime var lowered_command_name = [_]u8{0} ** struct_name.len;
|
||||
comptime {
|
||||
for (struct_name) |c, i| {
|
||||
lowered_command_name[i] = std.ascii.toLower(c);
|
||||
}
|
||||
}
|
||||
|
||||
// custom implementations (not lv2)
|
||||
_ = try self.keywords.put("noise", .Noise);
|
||||
_ = try self.keywords.put("wildnoise", .WildNoise);
|
||||
_ = try self.keywords.put("write", .Write);
|
||||
_ = try self.keywords.put("embed", .Embed);
|
||||
_ = try self.keywords.put("degrade", .Degrade);
|
||||
_ = try self.keywords.put("repsycho", .RePsycho);
|
||||
_ = try self.keywords.put("dyncomp", .RePsycho);
|
||||
|
||||
// even more custom
|
||||
_ = try self.keywords.put("rotate", .Rotate);
|
||||
_ = try self.keywords.put(&lowered_command_name, @field(CommandType, struct_name));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn getCommand(self: *Lang, stmt: []const u8) ?CommandType {
|
||||
|
|
Loading…
Reference in a new issue