Revision ea32f94d
Von Moritz Bunkus vor fast 3 Jahren hinzugefügt
SL/Template/Plugin/KiviLatex.pm | ||
---|---|---|
3 | 3 |
use strict; |
4 | 4 |
use parent qw( Template::Plugin::Filter ); |
5 | 5 |
|
6 |
use SL::Template::LaTeX; |
|
7 |
|
|
6 | 8 |
my $cached_instance; |
7 | 9 |
|
8 | 10 |
sub new { |
... | ... | |
55 | 57 |
sub filter_html { |
56 | 58 |
my ($self, $text, $args) = @_; |
57 | 59 |
|
58 |
$text =~ s{ \r+ }{}gx; |
|
59 |
$text =~ s{ \n+ }{ }gx; |
|
60 |
$text =~ s{ (?:\ |\s)+ }{ }gx; |
|
61 |
$text =~ s{ <ul>\s*</ul> | <ol>\s*</ol> }{}gx; # Remove lists without items. Can happen with copy & paste from e.g. LibreOffice. |
|
62 |
|
|
63 |
my @parts = map { |
|
64 |
if (substr($_, 0, 1) eq '<') { |
|
65 |
s{ +}{}g; |
|
66 |
$html_replace{$_} || ''; |
|
67 |
|
|
68 |
} else { |
|
69 |
$::locale->quote_special_chars('Template/LaTeX', HTML::Entities::decode_entities($_)); |
|
70 |
} |
|
71 |
} split(m{(<.*?>)}x, $text); |
|
72 |
|
|
73 |
return join('', @parts); |
|
60 |
return SL::Template::LaTeX->new->_format_html($text); |
|
74 | 61 |
} |
75 | 62 |
|
76 | 63 |
sub required_packages_for_html { |
Auch abrufbar als: Unified diff
KiviLatex-Plugin: HTML-zu-LaTeX-Wandlung aus SL::Template::LaTeX verwenden
Die Umwandlung von HTML zu LaTeX ist komplex. Es gibt viele Randfälle,
in denen ein falsch platziertes \newline übrig bleibt, über das LaTeX
dann stolpert.
Bisher gab es zwei Implementationen dieses Codes:
1. Im Modul für alte Vorlagen, SL::Template::LaTeX::_format_html
2. Im Modul für neue Vorlagen (inklusive Pflichtenheft),
SL::Template::Plugin::KiviLatex::filter_html
Erstere war deutlich besser getestet und hat deutlich mehr Randfälle
abgedeckt.
Mit dieser Änderung gibt es nur noch eine Implementation in
SL::Template::LaTeX. Diese wird auch von
SL::Template::Plugin::KiviLatex direkt aufgerufen.