epic-ts
[kivitendo-erp.git] / SL / Template / Plugin / KiviLatex.pm
index 21725cb..ca40971 100644 (file)
@@ -58,6 +58,7 @@ sub filter_html {
   $text =~ s{ \r+ }{}gx;
   $text =~ s{ \n+ }{ }gx;
   $text =~ s{ (?:\ |\s)+ }{ }gx;
+  $text =~ s{ <ul>\s*</ul> | <ol>\s*</ol> }{}gx; # Remove lists without items. Can happen with copy & paste from e.g. LibreOffice.
 
   my @parts = map {
     if (substr($_, 0, 1) eq '<') {
@@ -81,3 +82,98 @@ EOLATEX
 }
 
 return 'SL::Template::Plugin::KiviLatex';
+__END__
+
+=pod
+
+=encoding utf8
+
+=head1 NAME
+
+SL::Template::Plugin::KiviLatex - Template::Toolkit plugin for
+escaping text for use in LaTeX templates
+
+=head1 SYNOPSIS
+
+From within a LaTeX template. Activate both Template::Toolkit in
+general and this plugin in particular; must be located before
+C<\begin{document}>:
+
+  % config: use-template-toolkit=1
+  % config: tag-style=$( )$
+  $( USE KiviLatex )$
+
+Later escape some text:
+
+  $( KiviLatex.format(longdescription) )$
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item C<filter $text>
+
+Escapes characters in C<$text> with the appropriate LaTeX
+constructs. Expects normal text without any markup (no HTML, no XML
+etc). Returns the whole escaped text.
+
+=item C<filter_html $html>
+
+Converts HTML markup in C<$html> to the appropriate LaTeX
+constructs. Only the following HTML elements are supported:
+
+=over 2
+
+=item * C<b>, C<strong> – bold text
+
+=item * C<it>, C<em> – italic text
+
+=item * C<ul> – underlined text
+
+=item * C<s> – striked out text
+
+=item * C<sub>, C<sup> – subscripted and superscripted text
+
+=item * C<ul>, C<ol>, C<li> – unordered lists (converted to an itemized
+list), ordered lists (converted to enumerated lists) and their list
+items
+
+=item * C<p>, C<br> – Paragraph markers and line breaks
+
+=back
+
+This function is tailored for working on the input of CKEditor, not on
+arbitrary HTML content. It works nicely in tandem with the
+Rose::DB::Object helper functions C<…_as_restricted_html> (see
+L<SL::DB::Helper::AttrHTML/attr_html>).
+
+Attributes are silently removed and ignored. All other markup and the
+normal text are escaped the same as in L</filter>.
+
+=item C<init>
+
+=item C<new>
+
+Initializes the plugin. Automatically called by Template::Toolkit when
+the plugin is loaded.
+
+=item C<required_packages_for_html>
+
+Returns LaTeX code loading packages that are required for the
+formatting done with L</filter_html>. This function must be called and
+its output inserted before the C<\begin{document}> line if that
+function is used within the document.
+
+It is not required for normal text escaping with L</filter>.
+
+=back
+
+=head1 BUGS
+
+Nothing here yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
+
+=cut