Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 066cdace

Von Moritz Bunkus vor fast 9 Jahren hinzugefügt

  • ID 066cdace62af6f25e9e29249aa0325cc247b132b
  • Vorgänger 31e6d33a
  • Nachfolger 2ee1acf2

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.

Unterschiede anzeigen:

SL/Template/LaTeX.pm
66 66
  '<br>'      => "\\newline ",
67 67
);
68 68

  
69
sub _lb_to_space {
70
  my ($to_replace) = @_;
71

  
72
  my $vspace = '\vspace*{0.5cm}';
73
  return $vspace x (length($to_replace) / length($html_replace{'<br>'}));
74
}
75

  
69 76
sub _format_html {
70 77
  my ($self, $content, %params) = @_;
71 78

  
......
86 93
  } split(m{(<.*?>)}x, $content);
87 94

  
88 95
  $content =  join '', @parts;
89
  $content =~ s{ (?: [\n\s] | \\newline )+$ }{}gx;
96
  $content =~ s{ (?: [\n\s] | \\newline )+ $ }{}gx;                                         # remove line breaks at the end of the text
97
  $content =~ s{ ^ \s+ }{}gx;                                                               # remove white space at the start of the text
98
  $content =~ s{ ^ ( \\newline \  )+ }{ _lb_to_space($1) }gxe;                              # convert line breaks at the start of the text to vertical space
99
  $content =~ s{ ( \n\n+ ) ( \\newline \  )+ }{ $1 . _lb_to_space($2) }gxe;                 # convert line breaks at the start of a paragraph to vertical space
100
  $content =~ s{ ( \\end\{ [^\}]+ \} \h* ) ( \\newline \  )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks after LaTeX environments like lists to vertical space
90 101

  
91 102
  return $content;
92 103
}

Auch abrufbar als: Unified diff