From 0162c176fd31b10ee058aafaef9ac24ff395ee0f Mon Sep 17 00:00:00 2001 From: pommicket Date: Mon, 26 Jun 2023 14:45:47 -0400 Subject: import functin --- fractiform.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'fractiform.js') diff --git a/fractiform.js b/fractiform.js index 2916325..b3b10b1 100644 --- a/fractiform.js +++ b/fractiform.js @@ -2,8 +2,13 @@ /* TODO: +- input/control name shouldn't correspond to label text - detect duplicate widget names -- forbid . , ; in widget names +- forbid . , ; : in widget names +- widgets: + - comparator + - circle + - rotate 2D */ let gl; @@ -693,16 +698,20 @@ function export_widgets(widgets) { let data = []; for (let name in widgets) { let widget = widgets[name]; - data.push('name:'); + data.push(widget.func); + data.push(';'); + data.push('n:'); data.push(name); data.push(';'); for (let input in widget.inputs) { + data.push('i'); data.push(input); data.push(':'); data.push(widget.inputs[input]); data.push(';'); } for (let control in widget.controls) { + data.push('c'); data.push(control); data.push(':'); data.push(widget.controls[control]); @@ -715,6 +724,46 @@ function export_widgets(widgets) { return data.join(''); } +function import_widgets(string) { + let widgets = {}; + for (let widget_str of string.split(';;')) { + let widget = {}; + let name = null; + let parts = widget_str.split(';'); + let func = parts[0]; + let info = widget_info[func]; + parts.splice(0, 1); + + for (let part of parts) { + let kv = part.split(':'); + if (kv.length !== 2) { + return {error: `bad key-value pair (kv count ${kv.length})`}; + } + let type = kv[0][0]; + let key = kv[0].substr(1); + let value = kv[1]; + if (type === 'n') { + // name + name = key; + } else if (type === 'i') { + // input + widget.inputs[key] = value; + } else if (type === 'c') { + // control + widget.controls[key] = value; + } else { + return {error: `bad widget part type: '${type}'`}; + } + } + + if (name === null) { + return {error: 'widget has no name'}; + } + widgets[name] = widget; + } + return widgets; +} + function get_shader_source() { let widgets = parse_widgets(); let output_widget = widgets.output; -- cgit v1.2.3