diff --git a/collada/generate.py b/collada/generate.py index 9cb9f43..bfa5583 100644 --- a/collada/generate.py +++ b/collada/generate.py @@ -1,5 +1,7 @@ import io +line_ending = "\r\n" + def should_autonewline(line): return ( "static_assert" not in line @@ -20,9 +22,9 @@ def _render(out, lines): level = 0 if len(l) == 0: - out.write("\n") + out.write(line_ending) else: - out.write(indent * level + l + "\n") + out.write(indent * level + l + line_ending) if l and (l[-1] == "{" or l[-1] == "("): if l.startswith("namespace"): @@ -32,7 +34,7 @@ def _render(out, lines): if level == 0 and l and l[-1] == ";": if should_autonewline(l): - out.write("\n") + out.write(line_ending) return out def renderer(): diff --git a/collada/header.py b/collada/header.py index 8fa08d0..4a305ac 100644 --- a/collada/header.py +++ b/collada/header.py @@ -424,6 +424,16 @@ def render_library_materials(state, collada): yield f".effect = &effect_{effect_name}," yield "};" +def render_all(collada): + state = State() + render, out = renderer() + render(render_header()) + render(render_library_effects(state, collada)) + render(render_library_materials(state, collada)) + render(render_library_geometries(state, collada)) + render(render_library_visual_scenes(state, collada)) + return state, out + if __name__ == "__main__": import sys collada = parse.parse_collada_file(sys.argv[1]) @@ -432,11 +442,5 @@ if __name__ == "__main__": #assert type(skin) is types.Skin #foo = render_inverse_bind_matrix(collada, skin) - state = State() - render, out = renderer() - render(render_header()) - render(render_library_effects(state, collada)) - render(render_library_materials(state, collada)) - render(render_library_geometries(state, collada)) - render(render_library_visual_scenes(state, collada)) + state, out = render_all(collada) print(out.getvalue()) diff --git a/collada/main.py b/collada/main.py new file mode 100644 index 0000000..99da452 --- /dev/null +++ b/collada/main.py @@ -0,0 +1,35 @@ +import sys + +from collada import parse +from collada import header + +def usage(): + name = sys.argv[0] + print("usage:") + print(f" {name} [input_collada.dae] [output_header.hpp] [output_binary.bin]") + sys.exit(1) + +def main(): + try: + input_collada = sys.argv[1] + output_header = sys.argv[2] + output_binary = sys.argv[3] + assert input_collada.lower().endswith(".dae") + assert output_header.lower().endswith(".hpp") + assert output_binary.lower().endswith(".bin") + except: + usage() + + collada = parse.parse_collada_file(input_collada) + state, out = header.render_all(collada) + + with open(output_header, 'wb') as f: + header_buf = out.getvalue() + assert "\r\n" in header_buf + f.write(header_buf.encode('utf-8')) + + with open(output_binary, 'wb') as f: + f.write(state.buf.getvalue()) + +if __name__ == "__main__": + main()