Skip to content

Commit

Permalink
Implement formats in renderInput
Browse files Browse the repository at this point in the history
  • Loading branch information
mdaines committed Sep 24, 2024
1 parent 8d8189d commit 33d039a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 6 deletions.
20 changes: 19 additions & 1 deletion packages/viz/src/viz.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,26 @@ class Viz {
return this.wrapper.getPluginList("layout");
}

renderFormats(input, formats, options = {}) {
return this.wrapper.renderInput(input, formats, { engine: "dot", ...options });
}

render(input, options = {}) {
return this.wrapper.renderInput(input, { format: "dot", engine: "dot", ...options });
let formats;

if (options.format === void 0) {
formats = ["dot"];
} else {
formats = [options.format];
}

let result = this.wrapper.renderInput(input, formats, { engine: "dot", ...options });

if (result.status === "success") {
result.output = result.output[0];
}

return result;
}

renderString(src, options = {}) {
Expand Down
41 changes: 36 additions & 5 deletions packages/viz/src/wrapper.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ class Wrapper {
return list;
}

renderInput(input, options) {
let graphPointer, resultPointer, imageFilePaths;
renderInput(input, formats, options) {
let graphPointer, contextPointer, resultPointer, imageFilePaths;

try {
this.module["agerrMessages"] = [];
Expand Down Expand Up @@ -62,19 +62,42 @@ class Wrapper {
this.module.ccall("viz_set_y_invert", "number", ["number"], [options.yInvert ? 1 : 0]);
this.module.ccall("viz_set_reduce", "number", ["number"], [options.reduce ? 1 : 0]);

resultPointer = this.module.ccall("viz_render_graph", "number", ["number", "string", "string"], [graphPointer, options.format, options.engine]);
contextPointer = this.module.ccall("viz_create_context");

if (resultPointer === 0) {
this.module.ccall("viz_reset_errors");

let layoutError = this.module.ccall("viz_layout", "number", ["number", "number", "string"], [contextPointer, graphPointer, options.engine]);

if (layoutError !== 0) {
return {
status: "failure",
output: undefined,
errors: this.#parseErrorMessages()
};
}

let output = [];

for (let format of formats) {
resultPointer = this.module.ccall("viz_render", "number", ["number", "number", "string"], [contextPointer, graphPointer, format]);

if (resultPointer === 0) {
return {
status: "failure",
output: undefined,
errors: this.#parseErrorMessages()
};
} else {
output.push(this.module.UTF8ToString(resultPointer));

this.module.ccall("free", "number", ["number"], [resultPointer]);
resultPointer = 0;
}
}

return {
status: "success",
output: this.module.UTF8ToString(resultPointer),
output: output,
errors: this.#parseErrorMessages()
};
} catch (error) {
Expand All @@ -88,10 +111,18 @@ class Wrapper {
throw error;
}
} finally {
if (contextPointer && graphPointer) {
this.module.ccall("viz_free_layout", "number", ["number"], [contextPointer, graphPointer]);
}

if (graphPointer) {
this.module.ccall("viz_free_graph", "number", ["number"], [graphPointer]);
}

if (contextPointer) {
this.module.ccall("viz_free_context", "number", ["number"], [contextPointer]);
}

if (resultPointer) {
this.module.ccall("free", "number", ["number"], [resultPointer]);
}
Expand Down

0 comments on commit 33d039a

Please sign in to comment.