You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

62 lines
2.8 KiB

import json
import os
class CodeGenerator:
def __init__(self):
self.import_str = 'from manimlib.imports import *'
self.class_declare_template = 'class {0}(Scene):'
self.construct_str = 'def construct(self):'
self.indent = ' '
self.code_list = []
self.wait_str = 'self.wait()'
def assemble_code(self, codes):
self.code_list.append(self.import_str)
class_declare = self.class_declare_template.format(codes['scene_name'])
self.code_list.append(class_declare)
self.code_list.append(self.indent + self.construct_str)
indent_cur = 2
for item in codes['codes']:
param_list = []
for param in item['params']:
if param == 'varargs':
vararg_list = []
for sub_param in item['params'][param]:
if sub_param['type'] == 'string':
vararg_list.append('\"' + sub_param['content'] + '\"')
elif sub_param['type'] == 'instance':
vararg_list.append(sub_param['content'])
param_list.extend(vararg_list)
else:
if item['params'][param]['type'] == 'string':
param_display = '\'' + item['params'][param]['content'] + '\''
elif item['params'][param]['type'] == 'constant':
param_display = item['params'][param]['content']
else:
param_display = str(item['params'][param]['content'])
param_item = param + '=' + param_display
param_list.append(param_item)
param_str = ', '.join(param_list)
if item['type'] == 'create_instance':
construct_str = item['class'] + '(' + param_str + ')'
line = self.indent * indent_cur + item['name'] + ' = ' + construct_str
self.code_list.append(line)
elif item['type'] == 'call_function':
function_str = item['function'] + '(' + param_str + ')'
line = self.indent * indent_cur + item['instance'] + '.' + function_str
self.code_list.append(line)
self.code_list.append(self.indent * indent_cur + self.wait_str)
def to_file(self, directory_path, file_path):
if not os.path.exists(directory_path):
os.mkdir(directory_path)
with open(file_path, 'w') as file:
for code in self.code_list:
file.write(code + '\n')
def py_to_file(self, code_str, directory_path, file_path):
if not os.path.exists(directory_path):
os.mkdir(directory_path)
with open(file_path, 'w') as file:
file.write(code_str)