chiark / gitweb /
layout/layout: when segment spec runs out, properly account for the rounding error
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 5 Dec 2010 02:31:19 +0000 (02:31 +0000)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 5 Dec 2010 02:31:19 +0000 (02:31 +0000)
layout/layout

index 616e16f2f61e7d0204c49d72424310953033f1c9..fac0f7603488d756f4d6ae8419e72b716abc824a 100755 (executable)
@@ -821,6 +821,7 @@ sub segment_used__print ($) {
     $segused_currentpt= undef;
 }
     
+sub segment_used__len ($$);
 sub segment_used__len ($$) {
     my ($used,$pt) = @_;
     $segused_incurrent += $used;
@@ -829,11 +830,19 @@ sub segment_used__len ($$) {
     $segments[1] -= $used;
     return if $segments[1] > 0;
 
+    my $defer= -$segments[1];
+    $segused_incurrent -= $defer;
+
     segment_used__print($pt);
     segment_used_begin($pt);
 
     @segments= @segments[2..$#segments];
     o("% segments @segments\n");
+
+    if (@segments > 2 && $defer > $segments[1]) {
+       warn "will recursively end two segments at same point";
+    }
+    segment_used__len($defer,$pt);
 }
     
 sub segment_state_save () {