Browse Source

Allow optional sourceFilename in helper.py createmodule command.

tags/v2.0.0
Andrew Belt 3 years ago
parent
commit
3eeb7ba7c0
1 changed files with 30 additions and 25 deletions
  1. +30
    -25
      helper.py

+ 30
- 25
helper.py View File

@@ -15,6 +15,10 @@ class UserException(Exception):
pass pass




def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)


def find(f, array): def find(f, array):
for a in array: for a in array:
if f(a): if f(a):
@@ -144,9 +148,9 @@ void init(Plugin* p) {
with open(os.path.join(plugin_dir, ".gitignore"), "w") as f: with open(os.path.join(plugin_dir, ".gitignore"), "w") as f:
f.write(git_ignore) f.write(git_ignore)


print(f"Created template plugin in {plugin_dir}")
eprint(f"Created template plugin in {plugin_dir}")
os.system(f"cd {plugin_dir} && git init") os.system(f"cd {plugin_dir} && git init")
print(f"You may use `make`, `make clean`, `make dist`, `make install`, etc in the {plugin_dir} directory.")
eprint(f"You may use `make`, `make clean`, `make dist`, `make install`, etc in the {plugin_dir} directory.")




def create_manifest(slug, plugin_dir="."): def create_manifest(slug, plugin_dir="."):
@@ -183,8 +187,8 @@ def create_manifest(slug, plugin_dir="."):
# Dump JSON # Dump JSON
with open(manifest_filename, "w") as f: with open(manifest_filename, "w") as f:
json.dump(manifest, f, indent=" ") json.dump(manifest, f, indent=" ")
print("")
print(f"Manifest written to {manifest_filename}")
eprint("")
eprint(f"Manifest written to {manifest_filename}")




def create_module(slug, panel_filename=None, source_filename=None): def create_module(slug, panel_filename=None, source_filename=None):
@@ -200,7 +204,7 @@ def create_module(slug, panel_filename=None, source_filename=None):
# Check if module manifest exists # Check if module manifest exists
module_manifest = find(lambda m: m['slug'] == slug, manifest['modules']) module_manifest = find(lambda m: m['slug'] == slug, manifest['modules'])
if module_manifest: if module_manifest:
print(f"Module {slug} already exists in plugin.json. Edit this file to modify the module manifest.")
eprint(f"Module {slug} already exists in plugin.json. Edit this file to modify the module manifest.")


else: else:
# Add module to manifest # Add module to manifest
@@ -221,14 +225,14 @@ def create_module(slug, panel_filename=None, source_filename=None):
with open(manifest_filename, "w") as f: with open(manifest_filename, "w") as f:
json.dump(manifest, f, indent=" ") json.dump(manifest, f, indent=" ")


print(f"Added {slug} to {manifest_filename}")
eprint(f"Added {slug} to {manifest_filename}")


# Check filenames # Check filenames
if panel_filename and source_filename:
if panel_filename:
if not os.path.exists(panel_filename): if not os.path.exists(panel_filename):
raise UserException(f"Panel not found at {panel_filename}.") raise UserException(f"Panel not found at {panel_filename}.")


if os.path.exists(source_filename):
if source_filename and os.path.exists(source_filename):
if input_default(f"{source_filename} already exists. Overwrite? (y/n)", "n").lower() != "y": if input_default(f"{source_filename} already exists. Overwrite? (y/n)", "n").lower() != "y":
return return


@@ -237,18 +241,9 @@ def create_module(slug, panel_filename=None, source_filename=None):


components = panel_to_components(tree) components = panel_to_components(tree)


# Write source
source = components_to_source(components, slug)

with open(source_filename, "w") as f:
f.write(source)
print(f"Source file generated at {source_filename}")

# Append model to plugin.hpp
identifier = str_to_identifier(slug)

# Tell user to add model to plugin.hpp and plugin.cpp # Tell user to add model to plugin.hpp and plugin.cpp
print(f"""
identifier = str_to_identifier(slug)
eprint(f"""
To enable the module, add To enable the module, add


extern Model* model{identifier}; extern Model* model{identifier};
@@ -259,6 +254,16 @@ to plugin.hpp, and add


to the init() function in plugin.cpp.""") to the init() function in plugin.cpp.""")


# Write source
source = components_to_source(components, slug)

if source_filename:
with open(source_filename, "w") as f:
f.write(source)
eprint(f"Source file generated at {source_filename}")
else:
print(source)



def panel_to_components(tree): def panel_to_components(tree):
ns = { ns = {
@@ -332,7 +337,7 @@ def panel_to_components(tree):
c['cx'] = round(cx, 3) c['cx'] = round(cx, 3)
c['cy'] = round(cy, 3) c['cy'] = round(cy, 3)
else: else:
print(f"Element in components layer is not rect, circle, or ellipse: {el}")
eprint(f"Element in components layer is not rect, circle, or ellipse: {el}")
continue continue


# Get color # Get color
@@ -348,7 +353,7 @@ def panel_to_components(tree):
color_match = re.search(r'fill:\S*(#[0-9a-fA-F]{6})', style) color_match = re.search(r'fill:\S*(#[0-9a-fA-F]{6})', style)
color = color_match.group(1) color = color_match.group(1)
if not color: if not color:
print(f"Cannot get color of component: {el}")
eprint(f"Cannot get color of component: {el}")
continue continue


color = color.lower() color = color.lower()
@@ -372,7 +377,7 @@ def panel_to_components(tree):
components['lights'] = sorted(components['lights'], key=top_left_sort) components['lights'] = sorted(components['lights'], key=top_left_sort)
components['widgets'] = sorted(components['widgets'], key=top_left_sort) components['widgets'] = sorted(components['widgets'], key=top_left_sort)


print(f"Found {len(components['params'])} params, {len(components['inputs'])} inputs, {len(components['outputs'])} outputs, {len(components['lights'])} lights, and {len(components['widgets'])} custom widgets in \"components\" layer.")
eprint(f"Found {len(components['params'])} params, {len(components['inputs'])} inputs, {len(components['outputs'])} outputs, {len(components['lights'])} lights, and {len(components['widgets'])} custom widgets in \"components\" layer.")
return components return components




@@ -555,7 +560,7 @@ createmodule <module slug> [panel file] [source file]


See https://vcvrack.com/manual/PanelTutorial.html for creating SVG panel files. See https://vcvrack.com/manual/PanelTutorial.html for creating SVG panel files.
""" """
print(text)
eprint(text)




def parse_args(args): def parse_args(args):
@@ -572,7 +577,7 @@ def parse_args(args):
elif cmd == 'createmanifest': elif cmd == 'createmanifest':
create_manifest(*args) create_manifest(*args)
else: else:
print(f"Command not found: {cmd}")
eprint(f"Command not found: {cmd}")




if __name__ == "__main__": if __name__ == "__main__":
@@ -581,5 +586,5 @@ if __name__ == "__main__":
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
except UserException as e: except UserException as e:
print(e)
eprint(e)
sys.exit(1) sys.exit(1)

Loading…
Cancel
Save