Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / SL / Template / LaTeX.pm
index b70e152..c6d54d5 100644 (file)
@@ -5,6 +5,7 @@ use parent qw(SL::Template::Simple);
 use strict;
 
 use Cwd;
+use Unicode::Normalize qw();
 
 sub new {
   my $type = shift;
@@ -62,47 +63,6 @@ sub parse_foreach {
     $form->{"__odd__"}     = (($i + 1) % 2) == 1;
     $form->{"__counter__"} = $i + 1;
 
-    if (   ref $description_array       eq 'ARRAY'
-        && scalar @{$description_array} == scalar @{$ary}
-        && $self->{"chars_per_line"}    != 0)
-    {
-      my $lines = int(length($description_array->[$i]) / $self->{"chars_per_line"});
-      my $lpp;
-
-      $description_array->[$i] =~ s/(\\newline\s?)*$//;
-      $lines++ while ($description_array->[$i] =~ m/\\newline/g);
-      $lines++;
-
-      if ($current_page == 1) {
-        $lpp = $self->{"lines_on_first_page"};
-      } else {
-        $lpp = $self->{"lines_on_second_page"};
-      }
-
-      # Yes we need a manual page break -- or the user has forced one
-      if (   (($current_line + $lines) > $lpp)
-          || ($description_array->[$i]     =~ /<pagebreak>/)
-          || (   ref $longdescription_array eq 'ARRAY'
-              && $longdescription_array->[$i] =~ /<pagebreak>/)) {
-        my $pb = $self->{"pagebreak_block"};
-
-        # replace the special variables <%sumcarriedforward%>
-        # and <%lastpage%>
-
-        my $psum = $form->format_amount($self->{"myconfig"}, $sum, 2);
-        $pb =~ s/$self->{tag_start_qm}sumcarriedforward$self->{tag_end_qm}/$psum/g;
-        $pb =~ s/$self->{tag_start_qm}lastpage$self->{tag_end_qm}/$current_page/g;
-
-        my $new_text = $self->parse_block($pb, (@indices, $i));
-        return undef unless (defined($new_text));
-        $new_contents .= $new_text;
-
-        $current_page++;
-        $current_line = 0;
-      }
-      $current_line += $lines;
-    }
-
     if (   ref $linetotal_array eq 'ARRAY'
         && $i < scalar(@{$linetotal_array})) {
       $sum += $form->parse_amount($self->{"myconfig"}, $linetotal_array->[$i]);
@@ -335,26 +295,19 @@ sub parse {
 
   my $contents = join("", @lines);
 
-  # detect pagebreak block and its parameters
-  if ($contents =~ /$self->{tag_start_qm}pagebreak\s+(\d+)\s+(\d+)\s+(\d+)\s*$self->{tag_end_qm}(.*?)$self->{tag_start_qm}end(\s*pagebreak)?$self->{tag_end_qm}/s) {
-    $self->{"chars_per_line"} = $1;
-    $self->{"lines_on_first_page"} = $2;
-    $self->{"lines_on_second_page"} = $3;
-    $self->{"pagebreak_block"} = $4;
-
-    substr($contents, length($`), length($&)) = "";
-  }
-
-  $self->{"forced_pagebreaks"} = [];
-
   my $new_contents = $self->parse_block($contents);
   if (!defined($new_contents)) {
     $main::lxdebug->leave_sub();
     return 0;
   }
 
-  binmode OUT, ":utf8" if $::locale->is_utf8;
-  print(OUT $new_contents);
+  if ($::locale->is_utf8) {
+    binmode OUT, ":utf8";
+    print OUT Unicode::Normalize::normalize('C', $new_contents);
+
+  } else {
+    print OUT $new_contents;
+  }
 
   if ($form->{"format"} =~ /postscript/i) {
     return $self->convert_to_postscript();
@@ -381,15 +334,17 @@ sub convert_to_postscript {
 
   my $latex = $self->_get_latex_path();
   my $old_home = $ENV{HOME};
-  $ENV{HOME}   = $userspath =~ m|^/| ? $userspath : getcwd() . "/" . $userspath;
+  my $old_openin_any = $ENV{openin_any};
+  $ENV{HOME}   = $userspath =~ m|^/| ? $userspath : getcwd();
+  $ENV{openin_any} = "p";
 
   for (my $run = 1; $run <= 2; $run++) {
     system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
            "> $form->{tmpfile}.err");
     if ($?) {
       $ENV{HOME} = $old_home;
-      $self->{"error"} = $form->cleanup();
-      $self->cleanup();
+      $ENV{openin_any} = $old_openin_any;
+      $self->{"error"} = $form->cleanup($latex);
       return 0;
     }
   }
@@ -398,10 +353,11 @@ sub convert_to_postscript {
 
   system("dvips $form->{tmpfile} -o -q > /dev/null");
   $ENV{HOME} = $old_home;
+  $ENV{openin_any} = $old_openin_any;
 
   if ($?) {
     $self->{"error"} = "dvips : $!";
-    $self->cleanup();
+    $self->cleanup('dvips');
     return 0;
   }
   $form->{tmpfile} =~ s/dvi$/ps/;
@@ -427,20 +383,23 @@ sub convert_to_pdf {
 
   my $latex = $self->_get_latex_path();
   my $old_home = $ENV{HOME};
-  $ENV{HOME}   = $userspath =~ m|^/| ? $userspath : getcwd() . "/" . $userspath;
+  my $old_openin_any = $ENV{openin_any};
+  $ENV{HOME}   = $userspath =~ m|^/| ? $userspath : getcwd();
+  $ENV{openin_any} = "p";
 
   for (my $run = 1; $run <= 2; $run++) {
     system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
            "> $form->{tmpfile}.err");
     if ($?) {
-      $ENV{HOME} = $old_home;
-      $self->{"error"} = $form->cleanup();
-      $self->cleanup();
+      $ENV{HOME}     = $old_home;
+      $ENV{openin_any} = $old_openin_any;
+      $self->{error} = $form->cleanup($latex);
       return 0;
     }
   }
 
   $ENV{HOME} = $old_home;
+  $ENV{openin_any} = $old_openin_any;
   $form->{tmpfile} =~ s/tex$/pdf/;
 
   $self->cleanup();