use strict;
+use Cwd;
+use Unicode::Normalize qw();
+
sub new {
my $type = shift;
$form->{"__odd__"} = (($i + 1) % 2) == 1;
$form->{"__counter__"} = $i + 1;
- if ( ref $description_array eq 'ARRAY'
- && scalar @{$description_array} == scalar @{$ary}
- && $self->{"chars_per_line"} != 0)
- {
- my $lines = int(length($description_array->[$i]) / $self->{"chars_per_line"});
- my $lpp;
-
- $description_array->[$i] =~ s/(\\newline\s?)*$//;
- $lines++ while ($description_array->[$i] =~ m/\\newline/g);
- $lines++;
-
- if ($current_page == 1) {
- $lpp = $self->{"lines_on_first_page"};
- } else {
- $lpp = $self->{"lines_on_second_page"};
- }
-
- # Yes we need a manual page break -- or the user has forced one
- if ( (($current_line + $lines) > $lpp)
- || ($description_array->[$i] =~ /<pagebreak>/)
- || ( ref $longdescription_array eq 'ARRAY'
- && $longdescription_array->[$i] =~ /<pagebreak>/)) {
- my $pb = $self->{"pagebreak_block"};
-
- # replace the special variables <%sumcarriedforward%>
- # and <%lastpage%>
-
- my $psum = $form->format_amount($self->{"myconfig"}, $sum, 2);
- $pb =~ s/$self->{tag_start_qm}sumcarriedforward$self->{tag_end_qm}/$psum/g;
- $pb =~ s/$self->{tag_start_qm}lastpage$self->{tag_end_qm}/$current_page/g;
-
- my $new_text = $self->parse_block($pb, (@indices, $i));
- return undef unless (defined($new_text));
- $new_contents .= $new_text;
-
- $current_page++;
- $current_line = 0;
- }
- $current_line += $lines;
- }
-
if ( ref $linetotal_array eq 'ARRAY'
&& $i < scalar(@{$linetotal_array})) {
$sum += $form->parse_amount($self->{"myconfig"}, $linetotal_array->[$i]);
my $keyword_pos = $pos - 1 + $tag_start_len;
- if ((substr($text, $keyword_pos, 2) eq 'if') || (substr($text, $keyword_pos, 3) eq 'foreach')) {
+ if ((substr($text, $keyword_pos, 2) eq 'if') || (substr($text, $keyword_pos, 7) eq 'foreach')) {
$depth++;
} elsif ((substr($text, $keyword_pos, 4) eq 'else') && (1 == $depth)) {
while ($i < $num_lines) {
my $line = $lines->[$i];
- if ($line !~ m/^${comment_start}\s*config\s*:(.*)${comment_end}$/i) {
+ if ($line !~ m/^${comment_start}\s*config\s*:(.*?)${comment_end}$/i) {
$i++;
next;
}
my $self = shift;
my $lines = shift;
- my (%used_packages, $document_start_line);
+ my (%used_packages, $document_start_line, $last_usepackage_line);
foreach my $i (0 .. scalar @{ $lines } - 1) {
if ($lines->[$i] =~ m/\\usepackage[^\{]*{(.*?)}/) {
$used_packages{$1} = 1;
+ $last_usepackage_line = $i;
} elsif ($lines->[$i] =~ m/\\begin{document}/) {
$document_start_line = $i;
}
}
- $document_start_line = scalar @{ $lines } - 1 if (!defined $document_start_line);
+ my $insertion_point = defined($document_start_line) ? $document_start_line
+ : defined($last_usepackage_line) ? $last_usepackage_line
+ : scalar @{ $lines } - 1;
- if (!$used_packages{textcomp}) {
- splice @{ $lines }, $document_start_line, 0, "\\usepackage{textcomp}\n";
- $document_start_line++;
+ foreach my $package (qw(textcomp)) {
+ next if $used_packages{$package};
+ splice @{ $lines }, $insertion_point, 0, "\\usepackage{${package}}\n";
+ $insertion_point++;
}
}
my $contents = join("", @lines);
- # detect pagebreak block and its parameters
- if ($contents =~ /$self->{tag_start_qm}pagebreak\s+(\d+)\s+(\d+)\s+(\d+)\s*$self->{tag_end_qm}(.*?)$self->{tag_start_qm}end(\s*pagebreak)?$self->{tag_end_qm}/s) {
- $self->{"chars_per_line"} = $1;
- $self->{"lines_on_first_page"} = $2;
- $self->{"lines_on_second_page"} = $3;
- $self->{"pagebreak_block"} = $4;
-
- substr($contents, length($`), length($&)) = "";
- }
-
- $self->{"forced_pagebreaks"} = [];
-
my $new_contents = $self->parse_block($contents);
if (!defined($new_contents)) {
$main::lxdebug->leave_sub();
return 0;
}
- binmode OUT, ":utf8" if $::locale->is_utf8;
- print(OUT $new_contents);
+ if ($::locale->is_utf8) {
+ binmode OUT, ":utf8";
+ print OUT Unicode::Normalize::normalize('C', $new_contents);
+
+ } else {
+ print OUT $new_contents;
+ }
if ($form->{"format"} =~ /postscript/i) {
return $self->convert_to_postscript();
$form->{tmpfile} =~ s/\Q$userspath\E\///g;
my $latex = $self->_get_latex_path();
+ my $old_home = $ENV{HOME};
+ my $old_openin_any = $ENV{openin_any};
+ $ENV{HOME} = $userspath =~ m|^/| ? $userspath : getcwd();
+ $ENV{openin_any} = "p";
for (my $run = 1; $run <= 2; $run++) {
system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
"> $form->{tmpfile}.err");
if ($?) {
- $self->{"error"} = $form->cleanup();
- $self->cleanup();
+ $ENV{HOME} = $old_home;
+ $ENV{openin_any} = $old_openin_any;
+ $self->{"error"} = $form->cleanup($latex);
return 0;
}
}
$form->{tmpfile} =~ s/tex$/dvi/;
system("dvips $form->{tmpfile} -o -q > /dev/null");
+ $ENV{HOME} = $old_home;
+ $ENV{openin_any} = $old_openin_any;
+
if ($?) {
$self->{"error"} = "dvips : $!";
- $self->cleanup();
+ $self->cleanup('dvips');
return 0;
}
$form->{tmpfile} =~ s/dvi$/ps/;
$form->{tmpfile} =~ s/\Q$userspath\E\///g;
my $latex = $self->_get_latex_path();
+ my $old_home = $ENV{HOME};
+ my $old_openin_any = $ENV{openin_any};
+ $ENV{HOME} = $userspath =~ m|^/| ? $userspath : getcwd();
+ $ENV{openin_any} = "p";
for (my $run = 1; $run <= 2; $run++) {
system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
"> $form->{tmpfile}.err");
if ($?) {
- $self->{"error"} = $form->cleanup();
- $self->cleanup();
+ $ENV{HOME} = $old_home;
+ $ENV{openin_any} = $old_openin_any;
+ $self->{error} = $form->cleanup($latex);
return 0;
}
}
+ $ENV{HOME} = $old_home;
+ $ENV{openin_any} = $old_openin_any;
$form->{tmpfile} =~ s/tex$/pdf/;
$self->cleanup();
}
sub _get_latex_path {
- return $main::latex_bin || 'pdflatex';
+ return $::lx_office_conf{applications}->{latex} || 'pdflatex';
}
sub get_mime_type() {