summaryrefslogtreecommitdiff
path: root/fractiform.js
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2023-06-26 14:45:47 -0400
committerpommicket <pommicket@gmail.com>2023-06-26 17:25:50 -0400
commit0162c176fd31b10ee058aafaef9ac24ff395ee0f (patch)
tree82fe0cb0fe00b1a6d42569f16b57bd98c25a1c34 /fractiform.js
parent7a5374416a39d7dcd2ab1ec9088223fd134259a1 (diff)
import functin
Diffstat (limited to 'fractiform.js')
-rw-r--r--fractiform.js53
1 files changed, 51 insertions, 2 deletions
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;