X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FTemplate%2FLaTeX.pm;h=a862431d81f4e32c28efedb2f3c3fcb56728be53;hb=8a40e3dd0f638557b8c666fe708ccbc1ac709c4e;hp=d1c2080188b389f3cac4db9230fe688111d00ee3;hpb=8eb972fd373d0363cd3dc3cd6777c0d3f076111f;p=kivitendo-erp.git diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm index d1c208018..a862431d8 100644 --- a/SL/Template/LaTeX.pm +++ b/SL/Template/LaTeX.pm @@ -5,6 +5,7 @@ use parent qw(SL::Template::Simple); use strict; use Cwd; +use Unicode::Normalize qw(); sub new { my $type = shift; @@ -62,6 +63,7 @@ sub parse_foreach { $form->{"__odd__"} = (($i + 1) % 2) == 1; $form->{"__counter__"} = $i + 1; + #everything from here to the next marker should be removed after the release of 2.7.0 if ( ref $description_array eq 'ARRAY' && scalar @{$description_array} == scalar @{$ary} && $self->{"chars_per_line"} != 0) @@ -102,6 +104,7 @@ sub parse_foreach { } $current_line += $lines; } + #stop removing code here. if ( ref $linetotal_array eq 'ARRAY' && $i < scalar(@{$linetotal_array})) { @@ -134,7 +137,7 @@ sub find_end { my $keyword_pos = $pos - 1 + $tag_start_len; - if ((substr($text, $keyword_pos, 2) eq 'if') || (substr($text, $keyword_pos, 3) eq 'foreach')) { + if ((substr($text, $keyword_pos, 2) eq 'if') || (substr($text, $keyword_pos, 7) eq 'foreach')) { $depth++; } elsif ((substr($text, $keyword_pos, 4) eq 'else') && (1 == $depth)) { @@ -353,8 +356,13 @@ sub parse { 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 +389,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 +408,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,27 +438,30 @@ 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(); } sub _get_latex_path { - return $main::latex_bin || 'pdflatex'; + return $::lx_office_conf{applications}->{latex} || 'pdflatex'; } sub get_mime_type() {