Fixed for consistent test results. (hopefully...)
parent
fe86b4e64e
commit
2e900e5d10
|
@ -81,6 +81,16 @@ class LTComponent(LTItem):
|
||||||
return ('<%s %s>' %
|
return ('<%s %s>' %
|
||||||
(self.__class__.__name__, bbox2str(self.bbox)))
|
(self.__class__.__name__, bbox2str(self.bbox)))
|
||||||
|
|
||||||
|
# Disable comparison.
|
||||||
|
def __lt__(self, _):
|
||||||
|
raise ValueError
|
||||||
|
def __le__(self, _):
|
||||||
|
raise ValueError
|
||||||
|
def __gt__(self, _):
|
||||||
|
raise ValueError
|
||||||
|
def __ge__(self, _):
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
def set_bbox(self, bbox):
|
def set_bbox(self, bbox):
|
||||||
(x0, y0, x1, y1) = bbox
|
(x0, y0, x1, y1) = bbox
|
||||||
self.x0 = x0
|
self.x0 = x0
|
||||||
|
@ -609,6 +619,10 @@ class LTLayoutContainer(LTContainer):
|
||||||
y1 = max(obj1.y1, obj2.y1)
|
y1 = max(obj1.y1, obj2.y1)
|
||||||
objs = set(plane.find((x0, y0, x1, y1)))
|
objs = set(plane.find((x0, y0, x1, y1)))
|
||||||
return objs.difference((obj1, obj2))
|
return objs.difference((obj1, obj2))
|
||||||
|
|
||||||
|
def key_obj(t):
|
||||||
|
(c,d,_,_) = t
|
||||||
|
return (c,d)
|
||||||
|
|
||||||
# XXX this still takes O(n^2) :(
|
# XXX this still takes O(n^2) :(
|
||||||
dists = []
|
dists = []
|
||||||
|
@ -618,7 +632,7 @@ class LTLayoutContainer(LTContainer):
|
||||||
obj2 = boxes[j]
|
obj2 = boxes[j]
|
||||||
dists.append((0, dist(obj1, obj2), obj1, obj2))
|
dists.append((0, dist(obj1, obj2), obj1, obj2))
|
||||||
# We could use dists.sort(), but it would randomize the test result.
|
# We could use dists.sort(), but it would randomize the test result.
|
||||||
dists = csort(dists)
|
dists = csort(dists, key=key_obj)
|
||||||
plane = Plane(self.bbox)
|
plane = Plane(self.bbox)
|
||||||
plane.extend(boxes)
|
plane.extend(boxes)
|
||||||
while dists:
|
while dists:
|
||||||
|
@ -633,10 +647,11 @@ class LTLayoutContainer(LTContainer):
|
||||||
group = LTTextGroupLRTB([obj1, obj2])
|
group = LTTextGroupLRTB([obj1, obj2])
|
||||||
plane.remove(obj1)
|
plane.remove(obj1)
|
||||||
plane.remove(obj2)
|
plane.remove(obj2)
|
||||||
dists = [ n for n in dists if (n[2] in plane and n[3] in plane) ]
|
dists = [ (c,d,obj1,obj2) for (c,d,obj1,obj2) in dists
|
||||||
|
if (obj1 in plane and obj2 in plane) ]
|
||||||
for other in plane:
|
for other in plane:
|
||||||
dists.append((0, dist(group, other), group, other))
|
dists.append((0, dist(group, other), group, other))
|
||||||
dists = csort(dists)
|
dists = csort(dists, key=key_obj)
|
||||||
plane.add(group)
|
plane.add(group)
|
||||||
assert len(plane) == 1
|
assert len(plane) == 1
|
||||||
return list(plane)
|
return list(plane)
|
||||||
|
|
|
@ -104,7 +104,7 @@ def uniq(objs):
|
||||||
|
|
||||||
|
|
||||||
# csort
|
# csort
|
||||||
def csort(objs, key=lambda x: x):
|
def csort(objs, key):
|
||||||
"""Order-preserving sorting function."""
|
"""Order-preserving sorting function."""
|
||||||
idxs = dict((obj, i) for (i, obj) in enumerate(objs))
|
idxs = dict((obj, i) for (i, obj) in enumerate(objs))
|
||||||
return sorted(objs, key=lambda obj: (key(obj), idxs[obj]))
|
return sorted(objs, key=lambda obj: (key(obj), idxs[obj]))
|
||||||
|
|
|
@ -269,9 +269,9 @@
|
||||||
<br>Taxable amount (see page 13)
|
<br>Taxable amount (see page 13)
|
||||||
<br></span><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
<br></span><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:358px; top:642px; width:10px; height:11px;"><span style="font-family: HelveticaNeue-Bold; font-size:10px">22
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:358px; top:642px; width:10px; height:11px;"><span style="font-family: HelveticaNeue-Bold; font-size:10px">22
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:296px; top:644px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:206px; top:631px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:184px; top:595px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:184px; top:595px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:206px; top:631px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:296px; top:644px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:308px; top:691px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:308px; top:691px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:241px; top:703px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:241px; top:703px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:150px; top:474px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:150px; top:474px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
|
||||||
|
|
|
@ -4976,9 +4976,9 @@
|
||||||
</text>
|
</text>
|
||||||
</textline>
|
</textline>
|
||||||
</textbox>
|
</textbox>
|
||||||
<textbox id="90" bbox="296.198,186.896,298.700,197.390">
|
<textbox id="90" bbox="184.848,236.096,187.350,246.590">
|
||||||
<textline bbox="296.198,186.896,298.700,197.390">
|
<textline bbox="184.848,236.096,187.350,246.590">
|
||||||
<text font="HelveticaNeue-Roman" bbox="296.198,186.896,298.700,197.390" size="10.494"> </text>
|
<text font="HelveticaNeue-Roman" bbox="184.848,236.096,187.350,246.590" size="10.494"> </text>
|
||||||
<text>
|
<text>
|
||||||
</text>
|
</text>
|
||||||
</textline>
|
</textline>
|
||||||
|
@ -4990,9 +4990,9 @@
|
||||||
</text>
|
</text>
|
||||||
</textline>
|
</textline>
|
||||||
</textbox>
|
</textbox>
|
||||||
<textbox id="92" bbox="184.848,236.096,187.350,246.590">
|
<textbox id="92" bbox="296.198,186.896,298.700,197.390">
|
||||||
<textline bbox="184.848,236.096,187.350,246.590">
|
<textline bbox="296.198,186.896,298.700,197.390">
|
||||||
<text font="HelveticaNeue-Roman" bbox="184.848,236.096,187.350,246.590" size="10.494"> </text>
|
<text font="HelveticaNeue-Roman" bbox="296.198,186.896,298.700,197.390" size="10.494"> </text>
|
||||||
<text>
|
<text>
|
||||||
</text>
|
</text>
|
||||||
</textline>
|
</textline>
|
||||||
|
@ -5876,8 +5876,8 @@
|
||||||
<textbox id="60" bbox="413.528,513.859,415.057,520.272" />
|
<textbox id="60" bbox="413.528,513.859,415.057,520.272" />
|
||||||
<textgroup bbox="56.488,466.640,424.248,586.390">
|
<textgroup bbox="56.488,466.640,424.248,586.390">
|
||||||
<textgroup bbox="56.488,466.640,424.248,586.390">
|
<textgroup bbox="56.488,466.640,424.248,586.390">
|
||||||
<textbox id="61" bbox="350.398,549.316,352.900,559.810" />
|
|
||||||
<textgroup bbox="56.488,466.640,424.248,586.390">
|
<textgroup bbox="56.488,466.640,424.248,586.390">
|
||||||
|
<textbox id="61" bbox="350.398,549.316,352.900,559.810" />
|
||||||
<textgroup bbox="56.488,466.640,424.248,586.390">
|
<textgroup bbox="56.488,466.640,424.248,586.390">
|
||||||
<textbox id="62" bbox="331.508,510.196,335.504,551.268" />
|
<textbox id="62" bbox="331.508,510.196,335.504,551.268" />
|
||||||
<textgroup bbox="56.488,466.640,424.248,586.390">
|
<textgroup bbox="56.488,466.640,424.248,586.390">
|
||||||
|
@ -5891,8 +5891,8 @@
|
||||||
<textbox id="66" bbox="324.578,468.892,375.076,477.355" />
|
<textbox id="66" bbox="324.578,468.892,375.076,477.355" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="67" bbox="219.218,537.266,221.720,547.760" />
|
|
||||||
</textgroup>
|
</textgroup>
|
||||||
|
<textbox id="67" bbox="219.218,537.266,221.720,547.760" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="68" bbox="90.478,470.395,92.841,480.306" />
|
<textbox id="68" bbox="90.478,470.395,92.841,480.306" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
|
@ -5932,11 +5932,11 @@
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
|
||||||
<textbox id="79" bbox="318.048,103.606,320.550,114.100" />
|
<textbox id="79" bbox="318.048,103.606,320.550,114.100" />
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textbox id="80" bbox="435.798,224.046,438.300,234.540" />
|
<textbox id="80" bbox="435.798,224.046,438.300,234.540" />
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
<textgroup bbox="85.308,26.338,451.829,403.890">
|
<textgroup bbox="85.308,26.338,451.829,403.890">
|
||||||
|
@ -5964,16 +5964,16 @@
|
||||||
<textbox id="89" bbox="358.438,188.100,368.446,199.737" />
|
<textbox id="89" bbox="358.438,188.100,368.446,199.737" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="90" bbox="296.198,186.896,298.700,197.390" />
|
<textbox id="90" bbox="184.848,236.096,187.350,246.590" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="91" bbox="206.988,199.946,209.490,210.440" />
|
<textbox id="91" bbox="206.988,199.946,209.490,210.440" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="92" bbox="184.848,236.096,187.350,246.590" />
|
<textbox id="92" bbox="296.198,186.896,298.700,197.390" />
|
||||||
</textgroup>
|
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="93" bbox="308.058,139.676,310.560,150.170" />
|
<textbox id="93" bbox="308.058,139.676,310.560,150.170" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
|
</textgroup>
|
||||||
<textbox id="94" bbox="241.188,127.706,243.690,138.200" />
|
<textbox id="94" bbox="241.188,127.706,243.690,138.200" />
|
||||||
</textgroup>
|
</textgroup>
|
||||||
<textbox id="95" bbox="150.918,356.586,153.420,367.080" />
|
<textbox id="95" bbox="150.918,356.586,153.420,367.080" />
|
||||||
|
|
Loading…
Reference in New Issue