#!/usr/bin/perl -s

our($s,$e,$x,$l,$skp,$debug,$q, ## slides ; evince ; xelatex ; lualatex ; quiet ; 
    $lang,$ps,$a,$notoc,$geo,$t, $b6, $ag,     ## language(for dici);  #toc(for md) #geo(for md) ; type
    $ag2, $tit);   ## tit for pandoc

use strict;
my $f = shift or die;
$x       = $x   ?'-x'  :'';
$l       = $l   ?'-l'  :'';
my $popt = ($notoc ?'' :'--toc') . ($tit ? " -M 'title=$tit'" : '');
$ps      = $ps  ?'-ps' :'';  ## FIXME for abc -> pdf
$skp     = $skp ?'-skp':'';
$lang  //= "PT";
$geo   //= "a4paper,margin=2cm" ;
$geo     = "b6paper,margin=1.2cm" if $b6 ;
$geo  = "paperwidth=105.67mm,paperheight=226mm,margin=1cm,bottom=1.5cm" if $ag2;
$geo  = "paperwidth=135.67mm,paperheight=296mm,margin=1.5cm,bottom=1.5cm" if $ag;
#$geo="paperwidth=116mm,paperheight=246mm,margin=15mm,bottom=12mm,mag=900" if $ag2;
my $ap   = $a   ? "-a $a" : "";

my $MF="TFMFONTS=/usr/share/texlive/texmf-dist/fonts//:/home/jj/.texlive2018/texmf-var/fonts//";

unlink(<__ppdflatex__*>);

if( ($f =~ /(.*)\.(lhs)$/) or    ### a.tex  a.tlpp   a.
    (not -f $f and -f "${f}lhs"  )){
   my $a=$1;
   _syst("teximporter $f > $a._lhs")==0 or die("Error\n");
   _syst("lhs2TeX $a._lhs -o $a.ptex")==0 or die("Error\n");
   _syst("$MF ppdflatex -s -Q $a.ptex")==0 or die("Error\n");
   if(-f $f) { $f="$a.pdf" ;}
   else      { $f="${f}pdf";}
#   if(-f $f) { $f="$a._tex" ;}
#   else      { $f="${f}_tex";}
}

if( ($f =~ /(.*)\.(pre|[p]?tex|tlpp)$/) or    ### a.tex  a.tlpp   a.
    (not -f $f and -f "${f}tex"  )){
   my $a=$1;
   _syst("$MF ppdflatex $skp $x $l -Q $f")==0 or die("Error\n");
   if(-f $f) { $f="$a.pdf" ;}
   else      { $f="${f}pdf";}
}

if( $t eq "abc" or $f =~ /(.*)\.abc$/){                 ### a.abc
  my $a = $1;
  my $b=join(" ",map {"'$_'"} @ARGV);

  if($ps){
    _syst ("abcm2ps $ap -c '$f' $b -O _.ps");
    _syst ("ps2pdf -sPAPERSIZE=a4  _.ps _.pdf");
  }
  else {
    _syst ("abcm2ps $ap -c -v '$f' $b  -O _jpdf.svg","ok");
    _syst ("rsvg-convert -f pdf _jpdf0*.svg -o _.pdf");
    unlink(<_jpdf0*>);
  }
  $f = "_.pdf";
}

if($f =~ /(.*)\.svg/){                  ### a.svg
  my $a = $1;
  _syst ("rsvg-convert -f pdf $1.svg -o _.pdf");
  $f = "_.pdf";
}

if($f =~ /(.*)\.ipynb/){                  ### a.ipynb
  my $a = $1;
  my $b=join(" ",map {"'$_'"} @ARGV);

  if ($s){
    # _syst ("pandoc -V numbersections --slide-level 2  --toc -t beamer '$1.ipynb' -o _.pdf");
    _syst ("pandoc '$1.ipynb' $b -s -d $ENV{HOME}/.jpdf/slides-pandoc.def -t beamer -o _.pdf");
  }
  else {
    warn ("pandoc -V geometry:$geo -V numbersections $popt -t pdf '$1.ipynb' $b -o _.pdf");
    _syst ("pandoc -V geometry:$geo -V numbersections $popt -t pdf '$1.ipynb' $b -o _.pdf");
  }
  $f = "_.pdf";
}


if( $t eq "md" or $f =~ /(.*)\.md/){                  ### a.md
  my $a = $t ? $f : $1 ;
  my $b=join(" ",map {"'$_'"} @ARGV);
  my $tmpformat="";

  if ($l){  $tmpformat = "--pdf-engine=lualatex"; }
  if ($s){
    # _syst ("pandoc -V numbersections --slide-level 2  --toc -t beamer '$a.md' -o _.pdf");
    _syst ("pandoc '$a.md' $b -s -d $ENV{HOME}/.jpdf/slides-pandoc.def -t beamer -o _.pdf");
  }
  else {
    warn ("pandoc -V geometry:$geo -V numbersections $popt -t latex $tmpformat '$a.md' $b -o _.pdf");
    _syst ("pandoc -V geometry:$geo -V numbersections $popt -t latex $tmpformat '$a.md' $b -o _.pdf");
  }
  $f = "_.pdf";
}

if($f =~ /(.*)\.dici/){                  ### a.dici
  my $a = $1;
  _syst ("dici  -lang=$lang < '$a.dici'  > '__$a.tex'");
  _syst ("jpdf -q  '__$a.tex'");
  $f = "__$a.pdf";
}

if($f =~ /(.*)\.naterm/){                  ### a.naterm
  my $a = $1;
  _syst ("naterm -lua -lang=$lang < '$a.naterm'  > '__$a.tex'");
  _syst ("jpdf -l -q  '__$a.tex'");
  $f = "__$a.pdf";
}

if($f =~ /(.*\/)?(.*)\.tmx/){                  ### a.tmx
  _syst ("tmx2pdf-prince '$1$2.tmx' ");
  $f = "${1}__$2.pdf";
}

if(   $f =~ /(.*)\.odp$/                   ### a.odp
   or $f =~ /(.*)\.pptx$/                  ### a.pptx
   or $f =~ /(.*)\.ppt$/){                 ### a.ppt
   unless(-f "__$1.pdf" and -M $f > -M "__$1.pdf") {
         _syst ("unoconv -T 10 -o '__$1.pdf' -d presentation $f ");}
  $f = "__$1.pdf";
}

if($f =~ /(.*)\.dot$/){                 ### a.dot
  _syst ("dot -Tpdf -O '$f'");
  $f = "$f.pdf";
}

exit if $q;

# if   ($s and $e){ _syst("evince -w --presentation -p 1 '$f'"); }
if   ($s and $e){ _syst("evince --presentation -p 1 '$f'"); }
elsif($s       ){ _syst("xpdf -fullscreen '$f'"); }
elsif($e       ){ _syst("evince --fullscreen  -p 1 '$f'"); }
else            { _syst("xpdf -fullscreen -z cont '$f'"); }


sub _syst{ my ($a,$b)=@_;
 $b ||= "die";
 if($debug){ print STDERR "debug: $a\n"; }
 if(system($a) != 0){
   if($b eq "die"){ die ("system $a failed:\n\t $? $!")}
   else           { warn("system $a failed:\n\t $? $!")}
 }
}

__END__

=head1 NAME

jpdf - xpdf de Latex, abc, dot, ...

=head1 SYNOPSIS

 jpdf f.tex
 jpdf a.pdf
 jpdf a.{svg,dot,abc}
 jpdf a.

=head1 DESCRIPTION

Convert file to PDF and shows it using xpdf, full width, continuos.

=head2 Options

 jpdf -s slidest.tex      -s = fullscreen (not continuos)
   -e         use evince  (default: xpdf)
   -x         use xelatex
   -l         use lualatex
   -skp       skip ppdflatex preprocessor
   -q         quiet (dont preview result)
   -lang=po   define a language for dici format
   -ps        for abc files abcm2ps → ps → pdf
   -a
   -geo=b6paper,margin=1.2cm     Latex page geometry(def: "a4paper,margin=2cm") 

=head1 AUTHOR

J.Joao Almeida, jj@di.uminho.pt

=head1 SEE ALSO

perl(1), xpdf

=cut