def parse_valuerecord_(self, vertical): if self.next_token_type_ is Lexer.NUMBER: number, location = self.expect_number_(), self.cur_token_location_ if vertical: val = ast.ValueRecord(location, 0, 0, 0, number) else: val = ast.ValueRecord(location, 0, 0, number, 0) return val self.expect_symbol_("<") location = self.cur_token_location_ if self.next_token_type_ is Lexer.NAME: name = self.expect_name_() vrd = self.valuerecords_.resolve(name) if vrd is None: raise FeatureLibError("Unknown valueRecordDef \"%s\"" % name, self.cur_token_location_) value = vrd.value xPlacement, yPlacement = (value.xPlacement, value.yPlacement) xAdvance, yAdvance = (value.xAdvance, value.yAdvance) else: xPlacement, yPlacement, xAdvance, yAdvance = ( self.expect_number_(), self.expect_number_(), self.expect_number_(), self.expect_number_()) self.expect_symbol_(">") return ast.ValueRecord(location, xPlacement, yPlacement, xAdvance, yAdvance)
def parse_valuerecord_(self, vertical): if self.next_token_type_ is Lexer.NUMBER: number, location = self.expect_number_(), self.cur_token_location_ if vertical: val = ast.ValueRecord(location, 0, 0, 0, number, None, None, None, None) else: val = ast.ValueRecord(location, 0, 0, number, 0, None, None, None, None) return val self.expect_symbol_("<") location = self.cur_token_location_ if self.next_token_type_ is Lexer.NAME: name = self.expect_name_() if name == "NULL": self.expect_symbol_(">") return None vrd = self.valuerecords_.resolve(name) if vrd is None: raise FeatureLibError("Unknown valueRecordDef \"%s\"" % name, self.cur_token_location_) value = vrd.value xPlacement, yPlacement = (value.xPlacement, value.yPlacement) xAdvance, yAdvance = (value.xAdvance, value.yAdvance) else: xPlacement, yPlacement, xAdvance, yAdvance = ( self.expect_number_(), self.expect_number_(), self.expect_number_(), self.expect_number_()) if self.next_token_ == "<": xPlaDevice, yPlaDevice, xAdvDevice, yAdvDevice = ( self.parse_device_(), self.parse_device_(), self.parse_device_(), self.parse_device_()) allDeltas = sorted([ delta for size, delta in (xPlaDevice if xPlaDevice else ()) + (yPlaDevice if yPlaDevice else ()) + (xAdvDevice if xAdvDevice else ()) + (yAdvDevice if yAdvDevice else ())]) if allDeltas[0] < -128 or allDeltas[-1] > 127: raise FeatureLibError( "Device value out of valid range (-128..127)", self.cur_token_location_) else: xPlaDevice, yPlaDevice, xAdvDevice, yAdvDevice = ( None, None, None, None) self.expect_symbol_(">") return ast.ValueRecord( location, xPlacement, yPlacement, xAdvance, yAdvance, xPlaDevice, yPlaDevice, xAdvDevice, yAdvDevice)
def _adjustment(self, adjustment): adv, dx, dy, adv_adjust_by, dx_adjust_by, dy_adjust_by = adjustment adv_device = adv_adjust_by and adv_adjust_by.items() or None dx_device = dx_adjust_by and dx_adjust_by.items() or None dy_device = dy_adjust_by and dy_adjust_by.items() or None return ast.ValueRecord( xPlacement=dx, yPlacement=dy, xAdvance=adv, xPlaDevice=dx_device, yPlaDevice=dy_device, xAdvDevice=adv_device, )
def test_valuerecord_none(self): statement = ast.ValueRecord(xPlacement=10, xAdvance=20) self.assertEqual(statement.asFea(), "<10 0 20 0>")