diff -r ffe05d369412 -r 109fb7cf658f parse.py --- a/parse.py Mon Jun 24 17:34:30 2019 +0300 +++ b/parse.py Mon Jun 24 19:08:24 2019 +0300 @@ -8,11 +8,15 @@ pass class Model: - def __init__(self, header, body, *, ldraw_directories, header_size = 0): + def __init__( + self, header, body, *, ldraw_directories, \ + header_size = 0, line_ending_errors = None + ): self.header = header self.body = body self.header_size = header_size self.ldraw_directories = ldraw_directories + self.line_ending_errors = line_ending_errors def filter_by_type(self, type): yield from [ element @@ -62,10 +66,20 @@ yield point @ transformation_matrix def read_ldraw(file, *, ldraw_directories, name = ''): - model_body = [ - parse_ldraw_code(line) - for line in file - ] + line_ending_errors = { + 'count': 0, + 'first-at': None, + } + model_body = [] + for i, line in enumerate(file.readlines()): + # check line endings + if not line.endswith(b'\r\n'): + if line_ending_errors['first-at'] is None: + line_ending_errors['first-at'] = i + line_ending_errors['count'] += 1 + model_body.append(parse_ldraw_code(line)) + if line_ending_errors['count'] == 0: + line_ending_errors = None headerparser = header.HeaderParser() try: header_parse_result = headerparser.parse(model_body) @@ -78,7 +92,9 @@ header = header_object, body = model_body, header_size = end, - ldraw_directories = ldraw_directories) + ldraw_directories = ldraw_directories, + line_ending_errors = line_ending_errors, + ) model.name = name return model