|  line  | 
 stmt  | 
 bran  | 
 cond  | 
 sub  | 
 pod  | 
 time  | 
 code  | 
| 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 package Khonsu::TOC::Outline;  | 
| 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
3
 | 
5
 | 
 
 | 
 
 | 
  
5
  
 | 
 
 | 
36
 | 
 use parent 'Khonsu::Text';  | 
| 
 
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
56
 | 
    | 
| 
 
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
28
 | 
    | 
| 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub attributes {  | 
| 
6
 | 
346
 | 
 
 | 
 
 | 
  
346
  
 | 
  
0
  
 | 
602
 | 
 	my $a = shift;  | 
| 
7
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	return (  | 
| 
8
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
981
 | 
 		$a->SUPER::attributes(),  | 
| 
9
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		page => {$a->RW, $a->OBJ},  | 
| 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		outline => {$a->RW, $a->OBJ},  | 
| 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		outline_position => {$a->RW, $a->DHR},  | 
| 
12
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		end_y => {$a->RW, $a->NUM},  | 
| 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		level => {$a->RW, $a->NUM},  | 
| 
14
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		children => {$a->RW, $a->DAR},  | 
| 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	);  | 
| 
16
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
17
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub add {  | 
| 
19
 | 
346
 | 
 
 | 
 
 | 
  
346
  
 | 
  
0
  
 | 
854
 | 
 	my ($self, $file, $outline, %attributes) = @_;  | 
| 
20
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1141
 | 
 	$self->set_attributes(%attributes);	  | 
| 
21
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
794
 | 
 	my %position = $self->get_points();  | 
| 
22
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1450
 | 
 	$position{y} = $file->page->h - $position{y};  | 
| 
23
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1883
 | 
 	$self->outline_position(\%position);  | 
| 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$outline = $outline->outline()->open()  | 
| 
25
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		->title($self->text)  | 
| 
26
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1270
 | 
 		->dest($self->page->current, '-xyz' => [$position{x}, $position{y}, 0]);  | 
| 
27
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
42507
 | 
 	$self->outline($outline);  | 
| 
28
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1006
 | 
 	return $file;  | 
| 
29
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
30
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
31
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub render {  | 
| 
32
 | 
346
 | 
 
 | 
 
 | 
  
346
  
 | 
  
0
  
 | 
1908
 | 
 	my ($self, $file, %attributes) = @_;  | 
| 
33
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$self->set_attributes(  | 
| 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		pad => '.',  | 
| 
35
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		pad_end => $self->page->num + $attributes{page_offset},  | 
| 
36
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1578
 | 
 		%attributes  | 
| 
37
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	);  | 
| 
38
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1644
 | 
 	$self->SUPER::add($file, align => 'none');	  | 
| 
39
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1173
 | 
 	my %position = $self->get_points();  | 
| 
40
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1546
 | 
 	my $outline_position = $self->outline_position;  | 
| 
41
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1424
 | 
 	$attributes{y} = $position{y} + $self->font->size;  | 
| 
42
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1599
 | 
 	$position{y} = $file->page->h - $position{y};  | 
| 
43
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	my $annotation = $file->page->current->annotation()->rect(  | 
| 
44
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		$position{x}, $position{y}, $position{w}, $position{y} - $self->font->size  | 
| 
45
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1510
 | 
 	)->link($self->page->current, '-xyz' => [$outline_position->{x}, $outline_position->{y}, 0]);  | 
| 
46
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
60998
 | 
 	my $y = $attributes{y};  | 
| 
47
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
693
 | 
 	my $num = $attributes{num};  | 
| 
48
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
520
 | 
 	for (@{$self->children}) {  | 
| 
 
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2168
 | 
    | 
| 
49
 | 
287
 | 
 
 | 
 
 | 
 
 | 
 
 | 
571
 | 
 		$y += $attributes{padding};  | 
| 
50
 | 
287
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
1236
 | 
 		if ($y > $file->page->h - ($file->page->footer ? $file->page->footer->h : 0)) {  | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
51
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
29
 | 
 			$file->open_page($num->(1));  | 
| 
52
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
16
 | 
 			$y = $file->page->header ? $file->page->header->h : 0;  | 
| 
53
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		}  | 
| 
54
 | 
287
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2612
 | 
 		$_->render($file, %attributes, y => $y);  | 
| 
55
 | 
287
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1566
 | 
 		$y = $_->end_y;  | 
| 
56
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
57
 | 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1696
 | 
 	$self->end_y($y);  | 
| 
58
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
59
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 1;  |