forked from jan/fatamorgana
double-up single-letter variable names
This commit is contained in:
parent
931bc599d7
commit
bd288d1363
@ -968,26 +968,26 @@ class Property(Record):
|
|||||||
record = Property()
|
record = Property()
|
||||||
else:
|
else:
|
||||||
byte = read_byte(stream) # UUUUVCNS
|
byte = read_byte(stream) # UUUUVCNS
|
||||||
u = 0x0f & (byte >> 4)
|
uu = 0x0f & (byte >> 4)
|
||||||
v = 0x01 & (byte >> 3)
|
vv = 0x01 & (byte >> 3)
|
||||||
c = 0x01 & (byte >> 2)
|
cc = 0x01 & (byte >> 2)
|
||||||
n = 0x01 & (byte >> 1)
|
nn = 0x01 & (byte >> 1)
|
||||||
s = 0x01 & (byte >> 0)
|
ss = 0x01 & (byte >> 0)
|
||||||
|
|
||||||
name = read_refname(stream, c, n)
|
name = read_refname(stream, cc, nn)
|
||||||
if v == 0:
|
if vv == 0:
|
||||||
if u < 0x0f:
|
if uu < 0x0f:
|
||||||
value_count = u
|
value_count = uu
|
||||||
else:
|
else:
|
||||||
value_count = read_uint(stream)
|
value_count = read_uint(stream)
|
||||||
values: list[property_value_t] | None = [read_property_value(stream)
|
values: list[property_value_t] | None = [read_property_value(stream)
|
||||||
for _ in range(value_count)]
|
for _ in range(value_count)]
|
||||||
else:
|
else:
|
||||||
values = None
|
values = None
|
||||||
# if u != 0:
|
# if uu != 0:
|
||||||
# logger.warning('Malformed property record header; requested modal'
|
# logger.warning('Malformed property record header; requested modal'
|
||||||
# ' values but had nonzero count. Ignoring count.')
|
# ' values but had nonzero count. Ignoring count.')
|
||||||
record = Property(name, values, bool(s))
|
record = Property(name, values, bool(ss))
|
||||||
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
@ -999,30 +999,27 @@ class Property(Record):
|
|||||||
raise InvalidDataError('Property has value or name, but no is_standard flag!')
|
raise InvalidDataError('Property has value or name, but no is_standard flag!')
|
||||||
if self.values is not None:
|
if self.values is not None:
|
||||||
value_count = len(self.values)
|
value_count = len(self.values)
|
||||||
v = 0
|
vv = 0
|
||||||
if value_count >= 0x0f:
|
uu = 0x0f if value_count >= 0x0f else value_count
|
||||||
u = 0x0f
|
|
||||||
else:
|
else:
|
||||||
u = value_count
|
vv = 1
|
||||||
else:
|
uu = 0
|
||||||
v = 1
|
|
||||||
u = 0
|
|
||||||
|
|
||||||
c = self.name is not None
|
cc = self.name is not None
|
||||||
n = c and isinstance(self.name, int)
|
nn = cc and isinstance(self.name, int)
|
||||||
s = self.is_standard
|
ss = self.is_standard
|
||||||
|
|
||||||
size = write_uint(stream, 28)
|
size = write_uint(stream, 28)
|
||||||
size += write_byte(stream, (u << 4) | (v << 3) | (c << 2) | (n << 1) | s)
|
size += write_byte(stream, (uu << 4) | (vv << 3) | (cc << 2) | (nn << 1) | ss)
|
||||||
if c:
|
if cc:
|
||||||
if n:
|
if nn:
|
||||||
size += write_uint(stream, self.name) # type: ignore
|
size += write_uint(stream, self.name) # type: ignore
|
||||||
else:
|
else:
|
||||||
size += self.name.write(stream) # type: ignore
|
size += self.name.write(stream) # type: ignore
|
||||||
if not v:
|
if not vv:
|
||||||
if u == 0x0f:
|
if uu == 0x0f:
|
||||||
size += write_uint(stream, len(self.values)) # type: ignore
|
size += write_uint(stream, len(self.values)) # type: ignore
|
||||||
size += sum(write_property_value(stream, p) for p in self.values) # type: ignore
|
size += sum(write_property_value(stream, pp) for pp in self.values) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
|
|
||||||
@ -1202,21 +1199,21 @@ class XGeometry(Record, GeometryMixin):
|
|||||||
if record_id != 33:
|
if record_id != 33:
|
||||||
raise InvalidDataError(f'Invalid record id for XGeometry: {record_id}')
|
raise InvalidDataError(f'Invalid record id for XGeometry: {record_id}')
|
||||||
|
|
||||||
z0, z1, z2, x, y, r, d, l = read_bool_byte(stream)
|
z0, z1, z2, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
if z0 or z1 or z2:
|
if z0 or z1 or z2:
|
||||||
raise InvalidDataError('Malformed XGeometry header')
|
raise InvalidDataError('Malformed XGeometry header')
|
||||||
attribute = read_uint(stream)
|
attribute = read_uint(stream)
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
bstring = read_bstring(stream)
|
bstring = read_bstring(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
|
|
||||||
record = XGeometry(attribute, bstring, **optional)
|
record = XGeometry(attribute, bstring, **optional)
|
||||||
@ -1224,25 +1221,25 @@ class XGeometry(Record, GeometryMixin):
|
|||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 33)
|
size = write_uint(stream, 33)
|
||||||
size += write_bool_byte(stream, (0, 0, 0, x, y, r, d, l))
|
size += write_bool_byte(stream, (0, 0, 0, xx, yy, rr, dd, ll))
|
||||||
size += write_uint(stream, self.attribute)
|
size += write_uint(stream, self.attribute)
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
size += write_bstring(stream, self.bstring)
|
size += write_bstring(stream, self.bstring)
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -1373,25 +1370,25 @@ class Placement(Record):
|
|||||||
raise InvalidDataError(f'Invalid record id for Placement: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Placement: {record_id}')
|
||||||
|
|
||||||
#CNXYRAAF (17) or CNXYRMAF (18)
|
#CNXYRAAF (17) or CNXYRMAF (18)
|
||||||
c, n, x, y, r, ma0, ma1, flip = read_bool_byte(stream)
|
cc, nn, xx, yy, rr, ma0, ma1, flip = read_bool_byte(stream)
|
||||||
|
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
name = read_refname(stream, c, n)
|
name = read_refname(stream, cc, nn)
|
||||||
if record_id == 17:
|
if record_id == 17:
|
||||||
aa = (ma0 << 1) | ma1
|
aa = (ma0 << 1) | ma1
|
||||||
optional['angle'] = aa * 90
|
optional['angle'] = aa * 90
|
||||||
elif record_id == 18:
|
elif record_id == 18:
|
||||||
m = ma0
|
mm = ma0
|
||||||
a = ma1
|
aa1 = ma1
|
||||||
if m:
|
if mm:
|
||||||
optional['magnification'] = read_real(stream)
|
optional['magnification'] = read_real(stream)
|
||||||
if a:
|
if aa1:
|
||||||
optional['angle'] = read_real(stream)
|
optional['angle'] = read_real(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
|
|
||||||
record = Placement(flip, name, **optional)
|
record = Placement(flip, name, **optional)
|
||||||
@ -1399,43 +1396,43 @@ class Placement(Record):
|
|||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
c = self.name is not None
|
cc = self.name is not None
|
||||||
n = c and isinstance(self.name, int)
|
nn = cc and isinstance(self.name, int)
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
f = self.flip
|
ff = self.flip
|
||||||
|
|
||||||
if (self.magnification == 1
|
if (self.magnification == 1
|
||||||
and self.angle is not None
|
and self.angle is not None
|
||||||
and abs(self.angle % 90.0) < 1e-14):
|
and abs(self.angle % 90.0) < 1e-14):
|
||||||
aa = int((self.angle / 90) % 4.0)
|
aa = int((self.angle / 90) % 4.0)
|
||||||
bools = (c, n, x, y, r, aa & 0b10, aa & 0b01, f)
|
bools = (cc, nn, xx, yy, rr, aa & 0b10, aa & 0b01, ff)
|
||||||
m = False
|
mm = False
|
||||||
a = False
|
aq = False
|
||||||
record_id = 17
|
record_id = 17
|
||||||
else:
|
else:
|
||||||
m = self.magnification is not None
|
mm = self.magnification is not None
|
||||||
a = self.angle is not None
|
aq = self.angle is not None
|
||||||
bools = (c, n, x, y, r, m, a, f)
|
bools = (cc, nn, xx, yy, rr, mm, aq, ff)
|
||||||
record_id = 18
|
record_id = 18
|
||||||
|
|
||||||
size = write_uint(stream, record_id)
|
size = write_uint(stream, record_id)
|
||||||
size += write_bool_byte(stream, bools)
|
size += write_bool_byte(stream, bools)
|
||||||
if c:
|
if cc:
|
||||||
if n:
|
if nn:
|
||||||
size += write_uint(stream, self.name) # type: ignore
|
size += write_uint(stream, self.name) # type: ignore
|
||||||
else:
|
else:
|
||||||
size += self.name.write(stream) # type: ignore
|
size += self.name.write(stream) # type: ignore
|
||||||
if m:
|
if mm:
|
||||||
size += write_real(stream, self.magnification) # type: ignore
|
size += write_real(stream, self.magnification) # type: ignore
|
||||||
if a:
|
if aa:
|
||||||
size += write_real(stream, self.angle) # type: ignore
|
size += write_real(stream, self.angle) # type: ignore
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -1506,21 +1503,21 @@ class Text(Record, GeometryMixin):
|
|||||||
if record_id != 19:
|
if record_id != 19:
|
||||||
raise InvalidDataError(f'Invalid record id for Text: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Text: {record_id}')
|
||||||
|
|
||||||
z0, c, n, x, y, r, d, l = read_bool_byte(stream)
|
z0, cc, nn, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
if z0:
|
if z0:
|
||||||
raise InvalidDataError('Malformed Text header')
|
raise InvalidDataError('Malformed Text header')
|
||||||
|
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
string = read_refstring(stream, c, n)
|
string = read_refstring(stream, cc, nn)
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
|
|
||||||
record = Text(string, **optional)
|
record = Text(string, **optional)
|
||||||
@ -1528,30 +1525,30 @@ class Text(Record, GeometryMixin):
|
|||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
c = self.string is not None
|
cc = self.string is not None
|
||||||
n = c and isinstance(self.string, int)
|
nn = cc and isinstance(self.string, int)
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 19)
|
size = write_uint(stream, 19)
|
||||||
size += write_bool_byte(stream, (0, c, n, x, y, r, d, l))
|
size += write_bool_byte(stream, (0, cc, nn, xx, yy, rr, dd, ll))
|
||||||
if c:
|
if cc:
|
||||||
if n:
|
if nn:
|
||||||
size += write_uint(stream, self.string) # type: ignore
|
size += write_uint(stream, self.string) # type: ignore
|
||||||
else:
|
else:
|
||||||
size += self.string.write(stream) # type: ignore
|
size += self.string.write(stream) # type: ignore
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -1646,51 +1643,51 @@ class Rectangle(Record, GeometryMixin):
|
|||||||
if record_id != 20:
|
if record_id != 20:
|
||||||
raise InvalidDataError(f'Invalid record id for Rectangle: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Rectangle: {record_id}')
|
||||||
|
|
||||||
is_square, w, h, x, y, r, d, l = read_bool_byte(stream)
|
is_square, ww, hh, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if w:
|
if ww:
|
||||||
optional['width'] = read_uint(stream)
|
optional['width'] = read_uint(stream)
|
||||||
if h:
|
if hh:
|
||||||
optional['height'] = read_uint(stream)
|
optional['height'] = read_uint(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
record = Rectangle(is_square, **optional)
|
record = Rectangle(is_square, **optional)
|
||||||
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
s = self.is_square
|
ss = self.is_square
|
||||||
w = self.width is not None
|
ww = self.width is not None
|
||||||
h = self.height is not None
|
hh = self.height is not None
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 20)
|
size = write_uint(stream, 20)
|
||||||
size += write_bool_byte(stream, (s, w, h, x, y, r, d, l))
|
size += write_bool_byte(stream, (ss, ww, hh, xx, yy, rr, dd, ll))
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if w:
|
if ww:
|
||||||
size += write_uint(stream, self.width) # type: ignore
|
size += write_uint(stream, self.width) # type: ignore
|
||||||
if h:
|
if hh:
|
||||||
size += write_uint(stream, self.height) # type: ignore
|
size += write_uint(stream, self.height) # type: ignore
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -1765,49 +1762,49 @@ class Polygon(Record, GeometryMixin):
|
|||||||
if record_id != 21:
|
if record_id != 21:
|
||||||
raise InvalidDataError(f'Invalid record id for Polygon: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Polygon: {record_id}')
|
||||||
|
|
||||||
z0, z1, p, x, y, r, d, l = read_bool_byte(stream)
|
z0, z1, pp, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
if z0 or z1:
|
if z0 or z1:
|
||||||
raise InvalidDataError('Invalid polygon header')
|
raise InvalidDataError('Invalid polygon header')
|
||||||
|
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if p:
|
if pp:
|
||||||
optional['point_list'] = read_point_list(stream, implicit_closed=True)
|
optional['point_list'] = read_point_list(stream, implicit_closed=True)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
record = Polygon(**optional)
|
record = Polygon(**optional)
|
||||||
logger.debug('Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug('Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes], fast: bool = False) -> int:
|
def write(self, stream: IO[bytes], fast: bool = False) -> int:
|
||||||
p = self.point_list is not None
|
pp = self.point_list is not None
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 21)
|
size = write_uint(stream, 21)
|
||||||
size += write_bool_byte(stream, (0, 0, p, x, y, r, d, l))
|
size += write_bool_byte(stream, (0, 0, pp, xx, yy, rr, dd, ll))
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if p:
|
if pp:
|
||||||
size += write_point_list(stream, self.point_list, # type: ignore
|
size += write_point_list(stream, self.point_list, # type: ignore
|
||||||
implicit_closed=True, fast=fast)
|
implicit_closed=True, fast=fast)
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -1908,15 +1905,15 @@ class Path(Record, GeometryMixin):
|
|||||||
if record_id != 22:
|
if record_id != 22:
|
||||||
raise InvalidDataError(f'Invalid record id for Path: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Path: {record_id}')
|
||||||
|
|
||||||
e, w, p, x, y, r, d, l = read_bool_byte(stream)
|
ee, ww, pp, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if w:
|
if ww:
|
||||||
optional['half_width'] = read_uint(stream)
|
optional['half_width'] = read_uint(stream)
|
||||||
if e:
|
if ee:
|
||||||
scheme = read_uint(stream)
|
scheme = read_uint(stream)
|
||||||
scheme_end = scheme & 0b11
|
scheme_end = scheme & 0b11
|
||||||
scheme_start = (scheme >> 2) & 0b11
|
scheme_start = (scheme >> 2) & 0b11
|
||||||
@ -1935,37 +1932,37 @@ class Path(Record, GeometryMixin):
|
|||||||
|
|
||||||
optional['extension_start'] = get_pathext(scheme_start)
|
optional['extension_start'] = get_pathext(scheme_start)
|
||||||
optional['extension_end'] = get_pathext(scheme_end)
|
optional['extension_end'] = get_pathext(scheme_end)
|
||||||
if p:
|
if pp:
|
||||||
optional['point_list'] = read_point_list(stream, implicit_closed=False)
|
optional['point_list'] = read_point_list(stream, implicit_closed=False)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
record = Path(**optional)
|
record = Path(**optional)
|
||||||
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes], fast: bool = False) -> int:
|
def write(self, stream: IO[bytes], fast: bool = False) -> int:
|
||||||
e = self.extension_start is not None or self.extension_end is not None
|
ee = self.extension_start is not None or self.extension_end is not None
|
||||||
w = self.half_width is not None
|
ww = self.half_width is not None
|
||||||
p = self.point_list is not None
|
pp = self.point_list is not None
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 21)
|
size = write_uint(stream, 21)
|
||||||
size += write_bool_byte(stream, (e, w, p, x, y, r, d, l))
|
size += write_bool_byte(stream, (ee, ww, pp, xx, yy, rr, dd, ll))
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if w:
|
if ww:
|
||||||
size += write_uint(stream, self.half_width) # type: ignore
|
size += write_uint(stream, self.half_width) # type: ignore
|
||||||
if e:
|
if ee:
|
||||||
scheme = 0
|
scheme = 0
|
||||||
if self.extension_start is not None:
|
if self.extension_start is not None:
|
||||||
scheme += self.extension_start[0].value << 2
|
scheme += self.extension_start[0].value << 2
|
||||||
@ -1976,14 +1973,14 @@ class Path(Record, GeometryMixin):
|
|||||||
size += write_sint(stream, self.extension_start[1]) # type: ignore
|
size += write_sint(stream, self.extension_start[1]) # type: ignore
|
||||||
if scheme & 0b0011 == 0b0011:
|
if scheme & 0b0011 == 0b0011:
|
||||||
size += write_sint(stream, self.extension_end[1]) # type: ignore
|
size += write_sint(stream, self.extension_end[1]) # type: ignore
|
||||||
if p:
|
if pp:
|
||||||
size += write_point_list(stream, self.point_list, # type: ignore
|
size += write_point_list(stream, self.point_list, # type: ignore
|
||||||
implicit_closed=False, fast=fast)
|
implicit_closed=False, fast=fast)
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -2109,39 +2106,39 @@ class Trapezoid(Record, GeometryMixin):
|
|||||||
if record_id not in (23, 24, 25):
|
if record_id not in (23, 24, 25):
|
||||||
raise InvalidDataError(f'Invalid record id for Trapezoid: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Trapezoid: {record_id}')
|
||||||
|
|
||||||
is_vertical, w, h, x, y, r, d, l = read_bool_byte(stream)
|
is_vertical, ww, hh, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if w:
|
if ww:
|
||||||
optional['width'] = read_uint(stream)
|
optional['width'] = read_uint(stream)
|
||||||
if h:
|
if hh:
|
||||||
optional['height'] = read_uint(stream)
|
optional['height'] = read_uint(stream)
|
||||||
if record_id != 25:
|
if record_id != 25:
|
||||||
optional['delta_a'] = read_sint(stream)
|
optional['delta_a'] = read_sint(stream)
|
||||||
if record_id != 24:
|
if record_id != 24:
|
||||||
optional['delta_b'] = read_sint(stream)
|
optional['delta_b'] = read_sint(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
record = Trapezoid(bool(is_vertical), **optional)
|
record = Trapezoid(bool(is_vertical), **optional)
|
||||||
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
v = self.is_vertical
|
vv = self.is_vertical
|
||||||
w = self.width is not None
|
ww = self.width is not None
|
||||||
h = self.height is not None
|
hh = self.height is not None
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
if self.delta_b == 0:
|
if self.delta_b == 0:
|
||||||
record_id = 24
|
record_id = 24
|
||||||
@ -2150,24 +2147,24 @@ class Trapezoid(Record, GeometryMixin):
|
|||||||
else:
|
else:
|
||||||
record_id = 23
|
record_id = 23
|
||||||
size = write_uint(stream, record_id)
|
size = write_uint(stream, record_id)
|
||||||
size += write_bool_byte(stream, (v, w, h, x, y, r, d, l))
|
size += write_bool_byte(stream, (vv, ww, hh, xx, yy, rr, dd, ll))
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if w:
|
if ww:
|
||||||
size += write_uint(stream, self.width) # type: ignore
|
size += write_uint(stream, self.width) # type: ignore
|
||||||
if h:
|
if hh:
|
||||||
size += write_uint(stream, self.height) # type: ignore
|
size += write_uint(stream, self.height) # type: ignore
|
||||||
if record_id != 25:
|
if record_id != 25:
|
||||||
size += write_sint(stream, self.delta_a) # type: ignore
|
size += write_sint(stream, self.delta_a) # type: ignore
|
||||||
if record_id != 24:
|
if record_id != 24:
|
||||||
size += write_sint(stream, self.delta_b) # type: ignore
|
size += write_sint(stream, self.delta_b) # type: ignore
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -2332,55 +2329,55 @@ class CTrapezoid(Record, GeometryMixin):
|
|||||||
if record_id != 26:
|
if record_id != 26:
|
||||||
raise InvalidDataError(f'Invalid record id for CTrapezoid: {record_id}')
|
raise InvalidDataError(f'Invalid record id for CTrapezoid: {record_id}')
|
||||||
|
|
||||||
t, w, h, x, y, r, d, l = read_bool_byte(stream)
|
tt, ww, hh, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if t:
|
if tt:
|
||||||
optional['ctrapezoid_type'] = read_uint(stream)
|
optional['ctrapezoid_type'] = read_uint(stream)
|
||||||
if w:
|
if ww:
|
||||||
optional['width'] = read_uint(stream)
|
optional['width'] = read_uint(stream)
|
||||||
if h:
|
if hh:
|
||||||
optional['height'] = read_uint(stream)
|
optional['height'] = read_uint(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
record = CTrapezoid(**optional)
|
record = CTrapezoid(**optional)
|
||||||
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
t = self.ctrapezoid_type is not None
|
tt = self.ctrapezoid_type is not None
|
||||||
w = self.width is not None
|
ww = self.width is not None
|
||||||
h = self.height is not None
|
hh = self.height is not None
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 26)
|
size = write_uint(stream, 26)
|
||||||
size += write_bool_byte(stream, (t, w, h, x, y, r, d, l))
|
size += write_bool_byte(stream, (tt, ww, hh, xx, yy, rr, dd, ll))
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if t:
|
if tt:
|
||||||
size += write_uint(stream, self.ctrapezoid_type) # type: ignore
|
size += write_uint(stream, self.ctrapezoid_type) # type: ignore
|
||||||
if w:
|
if ww:
|
||||||
size += write_uint(stream, self.width) # type: ignore
|
size += write_uint(stream, self.width) # type: ignore
|
||||||
if h:
|
if hh:
|
||||||
size += write_uint(stream, self.height) # type: ignore
|
size += write_uint(stream, self.height) # type: ignore
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
@ -2473,48 +2470,48 @@ class Circle(Record, GeometryMixin):
|
|||||||
if record_id != 27:
|
if record_id != 27:
|
||||||
raise InvalidDataError(f'Invalid record id for Circle: {record_id}')
|
raise InvalidDataError(f'Invalid record id for Circle: {record_id}')
|
||||||
|
|
||||||
z0, z1, has_radius, x, y, r, d, l = read_bool_byte(stream)
|
z0, z1, has_radius, xx, yy, rr, dd, ll = read_bool_byte(stream)
|
||||||
if z0 or z1:
|
if z0 or z1:
|
||||||
raise InvalidDataError('Malformed circle header')
|
raise InvalidDataError('Malformed circle header')
|
||||||
|
|
||||||
optional: dict[str, Any] = {}
|
optional: dict[str, Any] = {}
|
||||||
if l:
|
if ll:
|
||||||
optional['layer'] = read_uint(stream)
|
optional['layer'] = read_uint(stream)
|
||||||
if d:
|
if dd:
|
||||||
optional['datatype'] = read_uint(stream)
|
optional['datatype'] = read_uint(stream)
|
||||||
if has_radius:
|
if has_radius:
|
||||||
optional['radius'] = read_uint(stream)
|
optional['radius'] = read_uint(stream)
|
||||||
if x:
|
if xx:
|
||||||
optional['x'] = read_sint(stream)
|
optional['x'] = read_sint(stream)
|
||||||
if y:
|
if yy:
|
||||||
optional['y'] = read_sint(stream)
|
optional['y'] = read_sint(stream)
|
||||||
if r:
|
if rr:
|
||||||
optional['repetition'] = read_repetition(stream)
|
optional['repetition'] = read_repetition(stream)
|
||||||
record = Circle(**optional)
|
record = Circle(**optional)
|
||||||
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
logger.debug(f'Record ending at 0x{stream.tell():x}:\n {record}')
|
||||||
return record
|
return record
|
||||||
|
|
||||||
def write(self, stream: IO[bytes]) -> int:
|
def write(self, stream: IO[bytes]) -> int:
|
||||||
s = self.radius is not None
|
ss = self.radius is not None
|
||||||
x = self.x is not None
|
xx = self.x is not None
|
||||||
y = self.y is not None
|
yy = self.y is not None
|
||||||
r = self.repetition is not None
|
rr = self.repetition is not None
|
||||||
d = self.datatype is not None
|
dd = self.datatype is not None
|
||||||
l = self.layer is not None
|
ll = self.layer is not None
|
||||||
|
|
||||||
size = write_uint(stream, 27)
|
size = write_uint(stream, 27)
|
||||||
size += write_bool_byte(stream, (0, 0, s, x, y, r, d, l))
|
size += write_bool_byte(stream, (0, 0, ss, xx, yy, rr, dd, ll))
|
||||||
if l:
|
if ll:
|
||||||
size += write_uint(stream, self.layer) # type: ignore
|
size += write_uint(stream, self.layer) # type: ignore
|
||||||
if d:
|
if dd:
|
||||||
size += write_uint(stream, self.datatype) # type: ignore
|
size += write_uint(stream, self.datatype) # type: ignore
|
||||||
if s:
|
if ss:
|
||||||
size += write_uint(stream, self.radius) # type: ignore
|
size += write_uint(stream, self.radius) # type: ignore
|
||||||
if x:
|
if xx:
|
||||||
size += write_sint(stream, self.x) # type: ignore
|
size += write_sint(stream, self.x) # type: ignore
|
||||||
if y:
|
if yy:
|
||||||
size += write_sint(stream, self.y) # type: ignore
|
size += write_sint(stream, self.y) # type: ignore
|
||||||
if r:
|
if rr:
|
||||||
size += self.repetition.write(stream) # type: ignore
|
size += self.repetition.write(stream) # type: ignore
|
||||||
return size
|
return size
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user