You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							1.6 KiB
						
					
					
				| #!/usr/bin/perl | |
|  | |
| # Script taken from https://gitlab.com/derobert/random-toys/blob/master/pdf/pdftoc-to-latex | |
| # Manually adapt for sphinxdoc generated pdf | |
| use 5.024; | |
| use strict; | |
| use warnings qw(all); | |
| use IPC::Run3; | |
| use LaTeX::Encode; | |
| use Encode qw(decode); | |
|  | |
| my @levels | |
| 	= qw(chapter section subsection subsubsection paragraph subparagraph); | |
| my @counters; | |
|  | |
| my ($data_enc, $data); | |
| run3 ['pdftk', $ARGV[0], 'dump_data_utf8'], undef, \$data_enc; | |
| $data = decode('UTF-8', $data_enc, Encode::FB_CROAK); | |
|  | |
| my @latex_bm; | |
|  | |
| my $bm; | |
| foreach (split(/\n/, $data)) { | |
| 	/^Bookmark/ or next; | |
| 	if (/^BookmarkBegin$/) { | |
| 		add_latex_bm($bm) if $bm; | |
| 		$bm = {}; | |
| 	} elsif (/^BookmarkLevel: (\d+)$/a) { | |
| 		++$counters[$1 - 1]; | |
| 		$#counters = $1 - 1; | |
| 		$bm->{number} = join(q{.}, @counters); | |
| 		$bm->{level} = $1 - 1; | |
| 	} elsif (/^BookmarkTitle: (.+)$/) { | |
| 		# In Sphinx title include a utf-8 icon of a link, so remove it | |
| 		my $title = substr($1, 0, -1); | |
| 		$bm->{title} = latex_encode($title); | |
| 	} elsif (/^BookmarkPageNumber: (\d+)$/a) { | |
| 		$bm->{page} = $1; | |
| 	} else { | |
| 		die "Unknown Bookmark tag in $_\n"; | |
| 	} | |
| } | |
| add_latex_bm($bm) if $bm; | |
|  | |
| print <<LATEX; | |
| \\documentclass{report} | |
| \\title{Guide de montage Vhéliotech v1.0} | |
| \\renewcommand{\\familydefault}{\\sfdefault} | |
| \\setcounter{page}{2} | |
| \\begin{document} | |
| ${ \join('', @latex_bm) } | |
| \\end{document} | |
| LATEX | |
|  | |
| exit 0; | |
|  | |
| sub add_latex_bm { | |
| 	my $bm     = shift; | |
| 	# Don't extract subtitle with level > 1 | |
| 	if ($bm->{level} > 1) { | |
| 		return; | |
| 	} | |
| 	 | |
| 	my $level  = $levels[$bm->{level}]; | |
| 	my $number = $bm->{number}; | |
| 	my $title  = $bm->{title}; | |
| 	my $page   = $bm->{page} + 2; | |
|  | |
| 	push @latex_bm, <<LINE; | |
| \\contentsline {$level}{\\numberline {$number}$title}{$page}% | |
| LINE | |
| }
 | |
| 
 |