X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FTemplate%2FLaTeX.pm;h=da0967ba71a9c321e3d9abb70b6d82f94b5d32fb;hb=555c7cc609504fcb8eaaaaa3d7dfb4ff2297e507;hp=6ec4d96a3feb61d3b2c670080fd3595542e48dba;hpb=d56c9b0850c73bceeeadc534836c8164928cff71;p=kivitendo-erp.git
diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm
index 6ec4d96a3..da0967ba7 100644
--- a/SL/Template/LaTeX.pm
+++ b/SL/Template/LaTeX.pm
@@ -66,6 +66,13 @@ my %html_replace = (
'
' => "\\newline ",
);
+sub _lb_to_space {
+ my ($to_replace) = @_;
+
+ my $vspace = '\vspace*{0.5cm}';
+ return $vspace x (length($to_replace) / length($html_replace{'
'}));
+}
+
sub _format_html {
my ($self, $content, %params) = @_;
@@ -86,7 +93,11 @@ sub _format_html {
} split(m{(<.*?>)}x, $content);
$content = join '', @parts;
- $content =~ s{ (?: [\n\s] | \\newline )+$ }{}gx;
+ $content =~ s{ (?: [\n\s] | \\newline )+ $ }{}gx; # remove line breaks at the end of the text
+ $content =~ s{ ^ \s+ }{}gx; # remove white space at the start of the text
+ $content =~ s{ ^ ( \\newline \ )+ }{ _lb_to_space($1) }gxe; # convert line breaks at the start of the text to vertical space
+ $content =~ s{ ( \n\n+ ) ( \\newline \ )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks at the start of a paragraph to vertical space
+ $content =~ s{ ( \\end\{ [^\}]+ \} \h* ) ( \\newline \ )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks after LaTeX environments like lists to vertical space
return $content;
}
@@ -112,6 +123,9 @@ sub format_string {
// $formatters{ $self->{default_content_type} }
// $formatters{ text };
+ $content =~ s{[^\p{Print}]|\p{Cf}}{}g;
+ $variable =~ s{[^\p{Print}]|\p{Cf}}{}g;
+
return $formatter->($self, $content, variable => $variable);
}
@@ -437,9 +451,9 @@ sub parse {
$contents = "[% TAGS $self->{tag_start} $self->{tag_end} %]\n" . $contents;
}
- $form->prepare_global_vars;
+ my $globals = global_vars();
- $::form->init_template->process(\$contents, $form, \$new_contents) || die $::form->template->error;
+ $::form->template->process(\$contents, { %$form, %$globals }, \$new_contents) || die $::form->template->error;
} else {
$new_contents = $self->parse_block($contents);
}
@@ -482,8 +496,10 @@ sub convert_to_postscript {
$ENV{openin_any} = "p";
for (my $run = 1; $run <= 2; $run++) {
- system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
- "> $form->{tmpfile}.err");
+ if (system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
+ "> $form->{tmpfile}.err") == -1) {
+ die "system call to $latex failed: $!";
+ }
if ($?) {
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
@@ -494,12 +510,14 @@ sub convert_to_postscript {
$form->{tmpfile} =~ s/tex$/dvi/;
- system("dvips $form->{tmpfile} -o -q > /dev/null");
+ if (system("dvips $form->{tmpfile} -o -q > /dev/null") == -1) {
+ die "system call to dvips failed: $!";
+ }
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
if ($?) {
- $self->{"error"} = "dvips : $!";
+ $self->{"error"} = "dvips : $?";
$self->cleanup('dvips');
return 0;
}
@@ -532,8 +550,11 @@ sub convert_to_pdf {
$ENV{openin_any} = "p";
for (my $run = 1; $run <= 2; $run++) {
- system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
- "> $form->{tmpfile}.err");
+ if (system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
+ "> $form->{tmpfile}.err") == -1) {
+ die "system call to $latex failed: $!";
+ }
+
if ($?) {
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
@@ -619,4 +640,15 @@ sub parse_and_create_pdf {
return (file_name => do { $tex_file_name =~ s/tex$/pdf/; $tex_file_name });
}
+sub global_vars {
+ {
+ AUTH => $::auth,
+ INSTANCE_CONF => $::instance_conf,
+ LOCALE => $::locale,
+ LXCONFIG => $::lx_office_conf,
+ LXDEBUG => $::lxdebug,
+ MYCONFIG => \%::myconfig,
+ };
+}
+
1;