xipd

programming language for audio processing that compiles to PureData
git clone https://git.ce9e.org/xipd.git

commit
dffceeaf3b25877e7cb1d11675ab6ddeee5e6164
parent
68512ded080190cc589b5e36ba61f0d701362742
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2022-08-26 17:07
return str from renderer

Diffstat

M xipd/renderer.py 26 +++++++++++++-------------

1 files changed, 13 insertions, 13 deletions


diff --git a/xipd/renderer.py b/xipd/renderer.py

@@ -6,18 +6,9 @@ from .parser import Parser
    6     6 class Scope:
    7     7 	def __init__(self, parent=None):
    8     8 		self.parent = parent
    9    -1 		self._node_count = 0
   10     9 		self._refs = {}
   11    10 		self._funcs = {}
   12    11 
   13    -1 	@property
   14    -1 	def root(self):
   15    -1 		return self.parent.root if self.parent else self
   16    -1 
   17    -1 	def create_node(self):
   18    -1 		self.root._node_count += 1
   19    -1 		return self.root._node_count - 1
   20    -1 
   21    12 	def add_ref(self, name, ref):
   22    13 		self._refs[name] = ref
   23    14 
@@ -46,8 +37,12 @@ class Renderer:
   46    37 	def __init__(self):
   47    38 		self.parser = Parser()
   48    39 
   -1    40 	def create_node(self):
   -1    41 		self.node_count += 1
   -1    42 		return self.node_count - 1
   -1    43 
   49    44 	def _print(self, s):
   50    -1 		print('#%s;' % s, end='\r\n')
   -1    45 		self.output += f'#{s};\r\n'
   51    46 
   52    47 	def call(self, name, args, scope):
   53    48 		params, body, lexical_scope = scope.get_func(name)
@@ -80,11 +75,11 @@ class Renderer:
   80    75 			return index, port
   81    76 		elif expr[0] == 'raw':
   82    77 			self._print(f'X obj 0 0 {expr[1]}')
   83    -1 			index = scope.create_node()
   -1    78 			index = self.create_node()
   84    79 			return index, 0
   85    80 		elif expr[0] in ['str', 'int', 'float']:
   86    81 			self._print(f'X msg 0 0 {expr[1]}')
   87    -1 			index = scope.create_node()
   -1    82 			index = self.create_node()
   88    83 			self._print('X connect %i %i %i %i' % (
   89    84 				*scope.get_ref('!loadbang'),
   90    85 				index, 0
@@ -120,6 +115,9 @@ class Renderer:
  120   115 
  121   116 	def render(self, fh):
  122   117 		scope = Scope()
   -1   118 		self.node_count = 0
   -1   119 		self.output = ''
   -1   120 
  123   121 		ast = self.parser.parse_file(fh)
  124   122 		self._print('N canvas')
  125   123 		self.render_with_scope([
@@ -127,8 +125,10 @@ class Renderer:
  127   125 		], scope)
  128   126 		self.render_with_scope(ast, scope)
  129   127 
   -1   128 		return self.output
   -1   129 
  130   130 
  131   131 if __name__ == '__main__':
  132   132 	renderer = Renderer()
  133   133 	with open(sys.argv[1]) as fh:
  134    -1 		renderer.render(fh)
   -1   134 		print(renderer.render(fh), end='')