diff options
author | 2020-10-09 02:52:49 +1100 | |
---|---|---|
committer | 2020-10-09 02:52:49 +1100 | |
commit | 740011e4d1db8a9468f917ef518e1e7a1c95cde1 (patch) | |
tree | cb9d82e642005bbb68e8637cdf24d5dc7bcee25b /scripts | |
parent | 7fc54760e16341bd1f13fa63663e2cb0a56cb035 (diff) |
Allow layout files to embed image data.
Also improved symmetry of disk components, fixed positioning of
components when fitting to the pixel grid, and fixed inherited color
when item has no color specified.
Removed the dotmatrix components from complay.py - there are more
flexible ways to achieve the same thing.
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/build/complay.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/scripts/build/complay.py b/scripts/build/complay.py index 3e9d6ed693c..6903418e242 100755 --- a/scripts/build/complay.py +++ b/scripts/build/complay.py @@ -96,7 +96,7 @@ class LayoutChecker(Minifyer): BADTAGPATTERN = re.compile('[^abcdefghijklmnopqrstuvwxyz0123456789_.:^$]') VARPATTERN = re.compile('^.*~[0-9A-Za-z_]+~.*$') FLOATCHARS = re.compile('^.*[.eE].*$') - SHAPES = frozenset(('disk', 'dotmatrix', 'dotmatrix5dot', 'dotmatrixdot', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect')) + SHAPES = frozenset(('disk', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect')) ORIENTATIONS = frozenset((0, 90, 180, 270)) YESNO = frozenset(('yes', 'no')) BLENDMODES = frozenset(('none', 'alpha', 'multiply', 'add')) @@ -291,7 +291,10 @@ class LayoutChecker(Minifyer): self.handleError('Element %s attribute state "%s" is negative' % (name, attrs['state'])) if (statemask is not None) and (stateval & ~statemask): self.handleError('Element %s attribute state "%s" has bits set that are clear in attribute statemask "%s"' % (name, attrs['state'], attrs['statemask'])) - self.handlers.append((self.componentStartHandler, self.componentEndHandler)) + if 'image' == name: + self.handlers.append((self.imageComponentStartHandler, self.imageComponentEndHandler)) + else: + self.handlers.append((self.componentStartHandler, self.componentEndHandler)) self.have_bounds.append({ }) self.have_color.append({ }) @@ -448,8 +451,8 @@ class LayoutChecker(Minifyer): self.handleError('Element simplecounter attribute align "%s" not in valid range 0-2' % (attrs['align'], )) self.checkComponent(name, attrs) elif 'image' == name: - if 'file' not in attrs: - self.handleError('Element image missing attribute file') + self.have_file = 'file' in attrs + self.have_data = None self.checkComponent(name, attrs) elif 'reel' == name: # TODO: validate symbollist and improve validation of other attributes @@ -499,6 +502,25 @@ class LayoutChecker(Minifyer): self.have_color.pop() self.handlers.pop() + def imageComponentStartHandler(self, name, attrs): + if 'data' == name: + if self.have_data is not None: + self.handleError('Element image has multiple data child elements (previous %s)' % (self.have_data)) + else: + self.have_data = self.formatLocation() + if self.have_file: + self.handleError('Element image has attribute file and child element data') + self.ignored_depth = 1 + else: + self.componentStartHandler(name, attrs) + + def imageComponentEndHandler(self, name): + if (not self.have_file) and (self.have_data is None): + self.handleError('Element image missing attribute file or child element data') + del self.have_file + del self.have_data + self.componentEndHandler(name) + def groupViewStartHandler(self, name, attrs): if 'element' == name: if 'ref' not in attrs: |