#!/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
}