X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fdatafile.py;h=18e57c4e88f7a841b4699cc53c8af06a4b413ff4;hb=9d1fa012a23693768bbe287371e97751c03acc50;hp=09fb86c5210e2dcba3349aac31072414bc20ec3e;hpb=6ee541fd39de1e1368134cb8a98a14f2f5ddd767;p=libs%2Fgl.git diff --git a/blender/io_mspgl/datafile.py b/blender/io_mspgl/datafile.py index 09fb86c5..18e57c4e 100644 --- a/blender/io_mspgl/datafile.py +++ b/blender/io_mspgl/datafile.py @@ -12,8 +12,15 @@ class Statement: for a in self.args: if type(a)==float: s += " {:#.6g}".format(a) + elif type(a)==bool: + if a: + s += " true" + else: + s += " false" elif type(a)==str: s += ' "{}"'.format(a) + elif type(a)==Resource: + s += ' "{}"'.format(a.name) else: s += " {}".format(a) @@ -27,9 +34,51 @@ class Statement: else: f.write(";\n") + class Token: def __init__(self, text): self.text = text def __str__(self): return self.text + + +class Resource: + def __init__(self, name): + self.name = name + self.statements = [] + self.references = [] + + def create_reference_statement(self, keyword, *args): + if len(args)<1: + raise TypeError("create_reference_statement expected at least 2 arguments, got {}".format(1+len(args))) + + resources = [] + for a in args: + if type(a)==Resource: + resources.append(a) + + if not resources: + raise TypeError("create_reference_statement expected a Resource argument, found none") + + self.references += [r for r in resources if r not in self.references] + return Statement(keyword, *args) + + def create_embed_statement(self, keyword, *args): + if len(args)<1: + raise TypeError("create_embed_statement expected at least 2 arguments, got {}".format(1+len(args))) + res = args[-1] + if type(res)!=Resource: + raise TypeError("create_embed_statement expected a Resource as last argument, got {}".format(type(args[-1]).__name__)) + + self.references += [r for r in res.references if r not in self.references] + st = Statement(keyword, *args[:-1]) + st.sub = res.statements + return st + + def collect_references(self): + refs = [] + for r in self.references: + refs += [e for e in r.collect_references() if e not in refs] + refs += [e for e in self.references if e not in refs] + return refs