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/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/066cdace62af6f25e9e29249aa0325cc247b132b?hp=31e6d33a8e4ec4cf11a25ad63696948bc55f63bc 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; }