diff -r abc83875167e -r 4da025d0b283 ldcheck.py --- a/ldcheck.py Fri May 24 17:44:04 2019 +0200 +++ b/ldcheck.py Sat May 25 09:41:33 2019 +0200 @@ -8,6 +8,7 @@ from geometry import * from pathlib import Path import linetypes +import header from os.path import realpath script_directory = Path(realpath(__file__)).parent @@ -29,7 +30,18 @@ parse_ldraw_code(line) for line in file ] - model = Model(body = model_body) + headerparser = header.HeaderParser() + try: + header_parse_result = headerparser.parse(model_body) + header_object = header_parse_result['header'] + end = header_parse_result['end-index'] + except header.HeaderError as error: + header_object = header.BadHeader(error.index, error.reason) + end = 0 + model = Model( + header = header_object, + body = model_body, + header_size = end) model.name = name return model @@ -71,9 +83,10 @@ ] class Model: - def __init__(self, body): + def __init__(self, header, body, *, header_size = 0): + self.header = header self.body = body - self.body_offset = 0 + self.header_size = header_size def filter_by_type(self, type): yield from [ element @@ -92,6 +105,9 @@ @property def quadrilaterals(self): yield from self.filter_by_type(linetypes.Quadrilateral) + @property + def has_header(self): + return self.header and not isinstance(self.header, header.BadHeader) import argparse class ListTestSuiteAction(argparse.Action): @@ -131,6 +147,10 @@ config = config, ) if args.dump_structure: + print('header: ' + type(model.header).__name__) + for key in sorted(dir(model.header)): + if not key.startswith('__'): + print('\t' + key + ': ' + repr(getattr(model.header, key))) for entry in model.body: print(entry) elif args.rebuild: