ldcheck.py

changeset 47
4da025d0b283
parent 38
66c9591b733d
child 54
0c686d10eb49
--- 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:

mercurial