From: Moritz Bunkus Date: Tue, 9 Feb 2016 10:29:16 +0000 (+0100) Subject: HTML-zu-LaTeX: diverse Sonderfälle bzgl. Zeilenumbrüchen behandeln X-Git-Tag: release-3.4.1~434 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=066cdace62af6f25e9e29249aa0325cc247b132b;p=kivitendo-erp.git HTML-zu-LaTeX: diverse Sonderfälle bzgl. Zeilenumbrüchen behandeln Zeilenumbrüche an verschiedenen Stellen sorgten dafür, dass LaTeX die Fehlmerldung »There's no line to end here« ausspuckte. Die folgenden Sonderfälle werden nun abgefangen und in \vspace*-Anweisungen umgewandelt: ✓ Zeilenumbrüche direkt am Anfang des Texts ✓ Zeilenumbrüche direkt am Anfang eines Absatzes ✓ Zeilenumbrüche nach Umgebungen wie Strich- und Aufzählugnslisten Zusätzlich werden Zeilenumbrüche am Ende des Texts schlicht entfernt. --- diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm index 352f793e1..8a579ef46 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; }