Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package latex2html for openSUSE:Factory checked in at 2026-06-02 19:47:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/latex2html (Old) and /work/SRC/openSUSE:Factory/.latex2html.new.1937 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "latex2html" Tue Jun 2 19:47:00 2026 rev:54 rq:1356617 version:2026 Changes: -------- --- /work/SRC/openSUSE:Factory/latex2html/latex2html.changes 2025-06-23 14:55:23.753121487 +0200 +++ /work/SRC/openSUSE:Factory/.latex2html.new.1937/latex2html.changes 2026-06-02 19:47:24.029331610 +0200 @@ -1,0 +2,13 @@ +Tue Jun 2 06:46:49 UTC 2026 - Petr Gajdos <[email protected]> + +- version update to 2026 + * fix CRLF format input files + * fix links with -rootdir otpion + * config.pl: svg support now works when ghostscript + not installed. + * comment out the hyperref support for the html.sty + command \htmlref. manual now compiles with pdflatex. +- modified patches + * latex2html-share-dir.diff (refreshed) + +------------------------------------------------------------------- Old: ---- latex2html-2025.tar.gz New: ---- latex2html-2026.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ latex2html.spec ++++++ --- /var/tmp/diff_new_pack.obk3ld/_old 2026-06-02 19:47:25.037373362 +0200 +++ /var/tmp/diff_new_pack.obk3ld/_new 2026-06-02 19:47:25.045373694 +0200 @@ -1,7 +1,7 @@ # # spec file for package latex2html # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %define share_dir %{_datadir}/latex2html %define _texmfmaindir %{_datadir}/texmf Name: latex2html -Version: 2025 +Version: 2026 Release: 0 Summary: LaTeX to HTML Converter License: GPL-2.0-or-later ++++++ latex2html-2025.tar.gz -> latex2html-2026.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/Changes new/latex2html-2026/Changes --- old/latex2html-2025/Changes 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/Changes 2026-01-01 16:25:11.000000000 +0100 @@ -112,6 +112,14 @@ # A more detailed log history can be found within the particular files, near # the top. # +#--------- v2026 +# +# - fix CRLF format input files +# - fix links with -rootdir otpion +# - config.pl: svg support now works when ghostscript +# not installed. +# - comment out the hyperref support for the html.sty +# command \htmlref. manual now compiles with pdflatex. # #--------- v2025 # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/IndicTeX-HTML/devnagri.perl new/latex2html-2026/IndicTeX-HTML/devnagri.perl --- old/latex2html-2025/IndicTeX-HTML/devnagri.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/IndicTeX-HTML/devnagri.perl 2026-01-01 16:25:11.000000000 +0100 @@ -331,7 +331,6 @@ sub do_env_pre_tr_devnagri { local($_) = @_; open(DNTR,">dntr.tmp") || print "\n *** cannot open dntr.tmp ***" ; - binmode DNTR; print DNTR "\$\$", &revert_to_raw_tex($_), "\$\$"; close DNTR; &syswait("patc -p $PRE_FILTERS${dd}dng.pat dntr.tmp dntr.tmp1"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/IndicTeX-HTML/itrans.perl new/latex2html-2026/IndicTeX-HTML/itrans.perl --- old/latex2html-2025/IndicTeX-HTML/itrans.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/IndicTeX-HTML/itrans.perl 2026-01-01 16:25:11.000000000 +0100 @@ -336,11 +336,10 @@ , "\#${indic}ifm=".$itrans_info{$indic.'ifm'} , "\#$indic", $itext , "\#end$indic\n" ); open(ITRANS, ">itrans.itx"); - binmode ITRANS;; print ITRANS "$_"; close(ITRANS); &syswait("$ITRANS <itrans.itx >itrans.htm"); - open(ITRANS, "<itrans.htm"); binmode ITRANS; $itext = ''; + open(ITRANS, "<itrans.htm"); $itext = ''; while (<ITRANS>) { next if (/^(\%|$)/); $itext .= $_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/IndicTeX-HTML/malyalam.perl new/latex2html-2026/IndicTeX-HTML/malyalam.perl --- old/latex2html-2025/IndicTeX-HTML/malyalam.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/IndicTeX-HTML/malyalam.perl 2026-01-01 16:25:11.000000000 +0100 @@ -221,7 +221,6 @@ sub do_env_pre_mmtr { local($_) = @_; open(MMTR,">mmtr.tmp") || print "\n *** cannot open mmtr.tmp ***" ; - binmode MMTR; print MMTR "\$\$", &revert_to_raw_tex($_), "\$\$"; close MMTR; &syswait("$PATC -p $MMDIR${dd}mm.pat mmtr.tmp mmtr.tmp1"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/config/config.pl new/latex2html-2026/config/config.pl --- old/latex2html-2025/config/config.pl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/config/config.pl 2026-01-01 16:25:11.000000000 +0100 @@ -441,8 +441,8 @@ use vars qw(%prefs %cfg %newcfg); # This is the central place to modify the release name and date!!! -my $RELEASE = '2025'; -my $VERSION = 'Released January 1, 2025'; +my $RELEASE = '2026'; +my $VERSION = 'Released January 1, 2026'; # -------------------------------------------------------------------------- # Open log @@ -791,10 +791,10 @@ $opt{'PNG'} = &is_true(&get_name('PNG')); $opt{'SVG'} = &is_true(&get_name('SVG')); -unless($opt{'GIF'} || $opt{'PNG'}) { +unless($opt{'GIF'} || $opt{'PNG'} || $opt{'SVG'}) { $opt{'IMAGES'} = 0; $opt{'have_pstoimg'} = 0; - logit("Warning: Both GIF and PNG support disabled. LaTeX2HTML won't generate any images.\n"); + logit("Warning: SVG, GIF, and PNG support disabled. LaTeX2HTML won't generate any images.\n"); } # -------------------------------------------------------------------------- @@ -987,7 +987,8 @@ foreach $veropt (@tryopts) { my ($stat,$msg,$err) = &get_out_err("$dvips $veropt"); $msg .= $err || ''; - if(!$stat && $msg =~ /(?:^| )dvips(?:\(k\)|k|)\s*(\d+[.]?\d*[A-Z]?)/is) { + if(!$stat && ( $msg =~ /(?:^| )dvips(?:\(k\)|k|)\s*(\d+[.]?\d*[A-Z]?)/is || + $msg =~ /(?:^| )MiKTeX\s*(\d+[.]?\d*[A-Z]?)/mis ) ) { $version = $1; last; } @@ -1164,13 +1165,20 @@ while (<GS>) { chomp; - if($flag == 0 && /Ghostscript\s*(?:Version|(?:PRE-|BETA |TESTER )RELEASE|)\s*(\d+[.]?\d*)/i) { + if($flag == 0 && + ( /Ghostscript\s*(?:Version|(?:PRE-|BETA |TESTER )RELEASE|)\s*(\d+[.]?\d*)/i || + /Version:\s*(\d+[.]?\d*)/i # MikTeX version string + ) ) { $gs_version = $1; $flag = 1; } elsif($flag && /^\s*Available devices/i) { $flag = 2; # Now look for the devices } + elsif($flag && /^\s*Devices: /i) { + $flag = 2; # MikTeX devices section, first line includes devices + push(@gs_devs,split(/\s+/,$1)); + } elsif($flag && /^\s*Search path/i) { $flag = 3; # Now look for the gs lib path } @@ -1591,12 +1599,13 @@ $newcfg{'have_pstoimg'} = 1; } else { - $newcfg{'have_images'} = $newcfg{'have_pstoimg'} = 0; - &warn_no_images(); + $newcfg{'have_pstoimg'} = 0; } } -else { - $newcfg{'have_images'} = $newcfg{'have_pstoimg'} = 0; + +if (!$opt{'SVG'} && !$opt{'GIF'} && !$opt{'PNG'}){ + $newcfg{'have_images'} = 0; + &warn_no_images(); } # -------------------------------------------------------------------------- @@ -1619,23 +1628,22 @@ $newcfg{'IMAGE_TYPES'} = ''; # types for latex2html, subset of svg, png, gif $newcfg{'PSTOIMG_TYPES'} = ''; # types for pstoimg, subset of png, gif -if($newcfg{'have_pstoimg'}) { - my @imgtypes = (); - my @pstoimgtypes = (); - if($opt{'SVG'}) { +my @imgtypes = (); +my @pstoimgtypes = (); +if($opt{'SVG'}) { push(@imgtypes,'svg'); - } - if($opt{'PNG'}) { +} +if($newcfg{'have_pstoimg'} && $opt{'PNG'}) { push(@imgtypes,'png'); push(@pstoimgtypes,'png'); - } - if($opt{'GIF'}) { +} +if($newcfg{'have_pstoimg'} && $opt{'GIF'}) { push(@imgtypes,'gif'); push(@pstoimgtypes,'gif'); - } - $newcfg{'IMAGE_TYPES'} = join(' ',@imgtypes); - $newcfg{'PSTOIMG_TYPES'} = join(' ',@pstoimgtypes); } +$newcfg{'IMAGE_TYPES'} = join(' ',@imgtypes); +$newcfg{'PSTOIMG_TYPES'} = join(' ',@pstoimgtypes); + # -------------------------------------------------------------------------- # PNMCUT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/config/install.pl new/latex2html-2026/config/install.pl --- old/latex2html-2025/config/install.pl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/config/install.pl 2026-01-01 16:25:11.000000000 +0100 @@ -295,11 +295,10 @@ split(/\s+/,$cfg{'IMAGE_TYPES'}) : qw(gif); my $iconrx = join('|', @icon_types); -my $destdir=$ENV{"DESTDIR"}; +my $destdir = $ENV{"DESTDIR"} || ''; my $dest1 = "$cfg{'SHLIBDIR'}${dd}icons"; -print STDERR "((( $destdir, $dest1 )))\n"; if((-d "$destdir$dest1" && !-w _) || (-d "$destdir$cfg{'SHLIBDIR'}" && !-w _)) { - print STDERR "Error: Cannot install icons in '$dest1': No write permission.\n"; + print STDERR "Error: Cannot install icons in '$destdir$dest1': No write permission.\n"; $dest1 = ''; } my $dest2 = $cfg{'ICONSTORAGE'} || ''; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/cweb2html/cweb2html new/latex2html-2026/cweb2html/cweb2html --- old/latex2html-2025/cweb2html/cweb2html 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/cweb2html/cweb2html 2026-01-01 16:25:11.000000000 +0100 @@ -258,7 +258,7 @@ open(INPUT,"<$filename") || die "$PRGFILE: error: Could not open $filename\n"; - binmode INPUT; + while (<INPUT>) { $string{'STRING'} .= $_; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/cweb2html/htcweb.perl new/latex2html-2026/cweb2html/htcweb.perl --- old/latex2html-2025/cweb2html/htcweb.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/cweb2html/htcweb.perl 2026-01-01 16:25:11.000000000 +0100 @@ -941,7 +941,6 @@ print "\nReading <$_[0]>..." if $DEBUG; open(INPUT,"<$_[0]"); - binmode INPUT; while (<INPUT>) { $string{'STRING'} .= $_; } @@ -949,7 +948,6 @@ print "\nReading <$_[1]>..." if $DEBUG; open(INPUT,"<$_[1]"); - binmode INPUT; while (<INPUT>) { $string{'STRING'} .= $_; } @@ -1030,7 +1028,6 @@ } } open(INPUT,"<$file") || die "Could not open $file\n"; - binmode INPUT; while (<INPUT>) { $string{'STRING'} .= $_}; $_ = delete $string{'STRING'}; # Blow it away and return the result diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/cweb2html/makemake.pl new/latex2html-2026/cweb2html/makemake.pl --- old/latex2html-2025/cweb2html/makemake.pl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/cweb2html/makemake.pl 2026-01-01 16:25:11.000000000 +0100 @@ -27,10 +27,8 @@ die "Cannot rename to $source.bak, $!\n"; open(OUT,">$source") || die "Cannot open $source, $!\n"; - binmode OUT; open(IN,"<$source.bak"); - binmode IN; while (<IN>) { $string{'STRING'} .= $_; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/docs/hypextra.tex new/latex2html-2026/docs/hypextra.tex --- old/latex2html-2025/docs/hypextra.tex 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/docs/hypextra.tex 2026-01-01 16:25:11.000000000 +0100 @@ -663,7 +663,6 @@ \begin{figure} \begin{makeimage} \end{makeimage} -\setlength{\captionwidth}{7cm} \newcommand{\myalign}{center} \newcommand{\mylist}{UL} \newcommand{\myitem}[2]{\HTMLcode[disc]{LI}{\simpletest{#1}{#2}}} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/docs/manual.tex new/latex2html-2026/docs/manual.tex --- old/latex2html-2025/docs/manual.tex 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/docs/manual.tex 2026-01-01 16:25:11.000000000 +0100 @@ -171,7 +171,7 @@ % \begin{latexonly} -This document accompanies \latextohtml{} version 2025. +This document accompanies \latextohtml{} version 2026. \paragraph{History} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/docs/support.tex new/latex2html-2026/docs/support.tex --- old/latex2html-2025/docs/support.tex 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/docs/support.tex 2026-01-01 16:25:11.000000000 +0100 @@ -28,7 +28,7 @@ \item \appl{Ghostscript} at version 4.02 or later; \item \fn{netpbm} library of graphics utilities, version \textsc{1-mar-94}\\ (check with \fn{pnmcrop} \Cs{version}). -\item \fn{pdftocairo}, if you want to produce SVG images +\item \texttt{pdftocairo}, if you want to produce SVG images (available through the poppler-utils package) \end{itemize} @@ -76,8 +76,7 @@ % \index{dvips@\texttt{dvips} version} \item -\htmladdnormallink{\fn{dvips}} -{ftp://ftp.tex.ac.uk/pub/archive/dviware/dvips} +\fn{dvips} (version~5.516 or later) or \fn{dvipsk}\\ Version 5.62 or higher enhances the performance of image creation with a \emph{significant} speed-up. See latex2html.config for this @@ -95,7 +94,7 @@ \index{image conversion!Postscript@\PS\ to GIF}% \index{GIF!image conversion}% \item -The \htmladdnormallink{\fn{netpbm}}{ftp://ftp.x.org/R5contrib/} +The \fn{netpbm} library of graphics utilities; \fn{netpbm} dated 1 March 1994 is required, else part of the image creation process will fail.\\ Check with: \fn{pnmcrop} \Cs{version}. @@ -108,9 +107,7 @@ If you want PNG images, you need \fn{pnmtopng} (current version is 2.31). It is not part of \fn{netpbm} and requires \fn{libpng-0.89c.tar.gz} and \fn{libz} (1.0.4) (or later versions). -\fn{pnmtopng} supports transparency and interlace mode.\\ -\appl{Netscape Navigator} as well as \appl{MS IE} do support inlined -PNG images. +\fn{pnmtopng} supports transparency and interlace mode. \end{itemize} @@ -171,17 +168,14 @@ below. Thanks to Jens Berger (\texttt{[email protected]}) for providing this list! \begin{itemize} -\item install \fn{WinZip}; +\item install {WinZip}; \item install \TeX/\LaTeXe{} and \fn{dvips}; \item install \Perl{};\\ - E.g.\ \fn{ActivePerl} $509$ or higher from \ActiveStateURL. - Windows $95$ users will also need \fn{DCOM}, it is listed on - that download page, too. -\item install \appl{Ghostscript};\\ - E.g.\ \fn{Aladdin GhostScript} $5.50$. + E.g.\ {ActivePerl} from \ActiveStateURL. +\item install \appl{Ghostscript}; \item install the \fn{netpbm} tools library from \NetpbmWinURL. \item unpack \latextohtml{}, e.g.\ under \verb|C:\TEXMF\LATEX2HTML|; -\item check that the path to \fn{GSWIN32C.EXE} is added to the +\item check that the path to \texttt{GSWIN32C.EXE} is added to the \texttt{PATH} variable in your \texttt{AUTOEXEC.BAT}; \item with \latextohtml{} $99.1$ or higher, edit \texttt{l2hconf.pin}, then run \texttt{CONFIG.BAT} to install the translator;\\ @@ -233,7 +227,7 @@ \htmlrule\index{source code!compressed}% \medskip\noindent Having obtained a compressed \fn{tar} version, save it into a file -\fn{latex2html-2019.tar.gz} say, +\texttt{latex2html-2019.tar.gz} say, then extract its contents with %begin{latexonly} \begin{small} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/latex2html.pin new/latex2html-2026/latex2html.pin --- old/latex2html-2025/latex2html.pin 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/latex2html.pin 2026-01-01 16:25:11.000000000 +0100 @@ -57,6 +57,10 @@ use POSIX; # for ceil() use Encode qw(decode_utf8 encode_utf8); # for russian UTF-8 hack +# Override PERL_UNICODE environment variable, so input encoding can be +# set by \usepackage{inputenc} in latex file. Allow DOS CRLF input files. +use open IN => ':crlf', OUT => ':raw'; + # The following are global variables that also appear in some modules use vars qw($LATEX2HTMLDIR $LATEX2HTMLPLATDIR $SCRIPT %Month %used_icons $inside_tabbing $TABLE_attribs @@ -945,7 +949,7 @@ $TEST_MODE = $DESTDIR if($TEST_MODE); # save path $DESTDIR = ''; $OUT_NODE = 0 unless $FIXEDDIR; - $STYLESHEET = '' if ($STYLESHEET =~ /^\Q$FILE./); + $STYLESHEET = undef if ($STYLESHEET =~ /^\Q$FILE./); } print "\nUnknown commands: " . join(" ", sort keys %unknown_commands) if %unknown_commands; @@ -1136,7 +1140,6 @@ unless($ignore); return undef; } - binmode CATFILE; local($/) = undef; # slurp in whole file my $contents = <CATFILE>; close(CATFILE); @@ -1400,7 +1403,6 @@ $auto_styles =~ s/\|$//; if(open(STYLES, "<$TMP_${dd}styles")) { - binmode STYLES; while(<STYLES>) { if(s/^\s*(\S+)\s*(.*)$/$style = $1; $options = $2;/eo) { &do_require_package($style); @@ -1844,7 +1846,6 @@ unless(open(SINPUT,"<$file")) { die "\nError: Cannot read '$file': $!\n"; } - binmode SINPUT; local(@file_string); print STDOUT "$file" if ($VERBOSITY >1); while (<SINPUT>) { @@ -1929,7 +1930,6 @@ &wrap_shorthand_environments; print STDOUT "\n *** End-of-partition ***" if ($VERBOSITY > 1); if(open(OUT, ">$TMP_$dd$PARTITION_PREFIX$count")) { - binmode OUT; print OUT $_; close(OUT); } else { @@ -1950,7 +1950,6 @@ local($file) = @_; local(%string); if(open(INPUT,"<$file")) { - binmode INPUT; local(@file_string); while (<INPUT>) { push(@file_string, $_ ); @@ -2408,7 +2407,6 @@ open(OUTPUT, ">$CURRENT_FILE") || die "Cannot write '$CURRENT_FILE': $!\n"; - binmode OUTPUT; if ($XBIT_HACK) { # use Apache's XBit hack chmod 0744, $CURRENT_FILE; &check_htaccess; @@ -2417,8 +2415,9 @@ } if ($MULTIPLE_FILES && $ROOTED) { - if ($DESTDIR =~ /^\Q$FIXEDDIR\E[$dd$dd]?([^$dd$dd]+)/) - { $CURRENT_FILE = "$1$dd$CURRENT_FILE" }; + # add subdir for this file +# if ($DESTDIR =~ /^\Q$FIXEDDIR\E[$dd$dd]?([^$dd$dd]+)/) +# { $CURRENT_FILE = "$1$dd$CURRENT_FILE" }; } } &remove_document_env; @@ -3862,7 +3861,6 @@ print "\nWriting image.pre file ...\n"; open(ENV,">.$dd${PREFIX}images.pre") || die "\nCannot write '${PREFIX}images.pre': $!\n"; - binmode ENV; print ENV &make_latex($latex_body); print ENV "\n"; close ENV; @@ -3882,7 +3880,6 @@ # save pre-processor commands in a file: preproc open(CMDS,">.$dd${PREFIX}preproc") || die "\nCannot write '${PREFIX}preproc': $!\n"; - binmode CMDS; print CMDS $preprocessor_cmds ; close CMDS; @@ -3893,7 +3890,6 @@ print "\nWriting image file ...\n"; open(ENV,">.$dd${PREFIX}images.tex") || die "\nCannot write '${PREFIX}images.tex': $!\n"; - binmode ENV; print ENV &make_latex($latex_body); print ENV "\n"; close ENV; @@ -4364,62 +4360,55 @@ L2hos->Symlink("image.$IMAGE_TYPE", "${PREFIX}T$img"); $thumbnail = "${PREFIX}T$img"; } - } elsif ($cropmarkheight{$name}) { - my $p="$TMPDIR$dd$IMAGE_PREFIX$new_num"; - die $! unless -f "$p.png"; - &close_dbm_database if $DJGPP; - my $imgpixeloverex=72.27/($pt_per_ex{$name}*$DVIPNG_DPI); - $imgpixeloverex *=$EXTRA_IMAGE_SCALE if $EXTRA_IMAGE_SCALE ; - print "imgpixeloverex=$imgpixeloverex\n" if ($VERBOSITY > 2); - if ( $name =~ /figure|table/ and $FIGURE_SCALE_FACTOR) + } elsif ($cropmarkheight{$name}) { + my $p="$TMPDIR$dd$IMAGE_PREFIX$new_num"; + die $! unless -f "$p.png"; + &close_dbm_database if $DJGPP; + my $imgpixeloverex=72.27/($pt_per_ex{$name}*$DVIPNG_DPI); + $imgpixeloverex *=$EXTRA_IMAGE_SCALE if $EXTRA_IMAGE_SCALE ; + print "imgpixeloverex=$imgpixeloverex\n" if ($VERBOSITY > 2); + if ( $name =~ /figure|table/ and $FIGURE_SCALE_FACTOR) {$imgpixeloverex*= $FIGURE_SCALE_FACTOR;} - if ($name =~ /equation|eqnarray|display/){ - $imgpixeloverex *= $DISP_SCALE_FACTOR if $DISP_SCALE_FACTOR} - my $millimeter=int(.04*$DVIPNG_DPI); - if ($TRANSPARENT_FIGURES) { - my $TRANSPARENT_COLOR= - $ENV{'TRANSPARENT_COLOR'} || '#FFFFFF'; - # The '=' sign before color value specifies the exact color - # and prevents netpbm from selecting other random color - # if the actual image eventually has no transparency. - $transparent= "-transparent \"=$TRANSPARENT_COLOR\""; - } else { - $transparent =''; - } - my $PPMTO=$IMAGE_TYPE=~m/gif/i? $PPMTOGIF : $PNMTOPNG; - if ($name =~ /figure|table/) { - L2hos->syswait("$PNGTOPNM $p.png $color_quant >$p.ppm"); - L2hos->syswait("$PPMTO --quiet $transparent $p.ppm >${PREFIX}img$new_num.$IMAGE_TYPE"); - } else { - L2hos->syswait("$PNGTOPNM $p.png|$PNMCROP -sides $color_quant >$p.ppm"); + if ($name =~ /equation|eqnarray|display/){ + $imgpixeloverex *= $DISP_SCALE_FACTOR if $DISP_SCALE_FACTOR} + my $millimeter=int(.04*$DVIPNG_DPI); + if ($TRANSPARENT_FIGURES) { + my $TRANSPARENT_COLOR= + $ENV{'TRANSPARENT_COLOR'} || '#FFFFFF'; + # The '=' sign before color value specifies the exact color + # and prevents netpbm from selecting other random color + # if the actual image eventually has no transparency. + $transparent= "-transparent \"=$TRANSPARENT_COLOR\""; + } else { + $transparent =''; + } + my $PPMTO=$IMAGE_TYPE=~m/gif/i? $PPMTOGIF : $PNMTOPNG; - L2hos->syswait("$PNGTOPNM $p.png >$p-full.ppm"); - L2hos->syswait("$PNMCROP -sides -bottom $p-full.ppm >$p-bot.ppm"); - L2hos->syswait("$PNMCROP -sides $p-full.ppm $color_quant >$p.ppm"); + L2hos->syswait("$PNGTOPNM $p.png $color_quant >$p.ppm"); L2hos->syswait("$PPMTO --quiet $transparent $p.ppm >${PREFIX}img$new_num.$IMAGE_TYPE"); - } - $edepth{$name}=$ptdepth{$name}/$pt_per_ex{$name}; - # extra .5pt in depth is border from latex "preview" package - print "edepth{$name}=$edepth{$name}\n" if ($VERBOSITY > 2); - open PPM,"<$p-full.ppm"; binmode(PPM); read(PPM,$_,30);close PPM; - m/^(\d+) (\d+)$/m; - $ehfull = $2; # full image height in pixels - open PPM,"<$p-bot.ppm"; binmode(PPM); read(PPM,$_,30);close PPM; - m/^(\d+) (\d+)$/m; - $ehbot = $2; # image height cropped at bottom - # Image should not be cropped at bottom more than latex-preview border - $ehshift = ($ehfull-$ehbot)*$imgpixeloverex-0.5/$pt_per_ex{$name}; - $ehshift = 0 - if ($ehfull-$ehbot <= ceil(0.5/$imgpixeloverex/$pt_per_ex{$name})); - # Correct image depth if it was cropped at bottom too much - $edepth{$name} -= $ehshift; - # open PPM,"<$p.ppm"; read(PPM,$_,30);close PPM; - # 2019-12-12 shige: 2-44) - open PPM,"<$p.ppm"; binmode(PPM); read(PPM,$_,30);close PPM; - m/^(\d+) (\d+)$/m; - $eheight{$name}=$2*$imgpixeloverex; # image height in ex - print "eheight{$name}=$ehieight{$name}\n" if ($VERBOSITY > 2); - &open_dbm_database if $DJGPP; + + $edepth{$name}=$ptdepth{$name}/$pt_per_ex{$name}; + # extra .5pt in depth is border from latex "preview" package + print "edepth{$name}=$edepth{$name}\n" if ($VERBOSITY > 2); + open PPM,"<$p-full.ppm"; binmode(PPM); read(PPM,$_,30);close PPM; + m/^(\d+) (\d+)$/m; + $ehfull = $2; # full image height in pixels + open PPM,"<$p-bot.ppm"; binmode(PPM); read(PPM,$_,30);close PPM; + m/^(\d+) (\d+)$/m; + $ehbot = $2; # image height cropped at bottom + # Image should not be cropped at bottom more than latex-preview border + $ehshift = ($ehfull-$ehbot)*$imgpixeloverex-0.5/$pt_per_ex{$name}; + $ehshift = 0 + if ($ehfull-$ehbot <= ceil(0.5/$imgpixeloverex/$pt_per_ex{$name})); + # Correct image depth if it was cropped at bottom too much + $edepth{$name} -= $ehshift; + # open PPM,"<$p.ppm"; read(PPM,$_,30);close PPM; + # 2019-12-12 shige: 2-44) + open PPM,"<$p.ppm"; binmode(PPM); read(PPM,$_,30);close PPM; + m/^(\d+) (\d+)$/m; + $eheight{$name}=$2*$imgpixeloverex; # image height in ex + print "eheight{$name}=$ehieight{$name}\n" if ($VERBOSITY > 2); + &open_dbm_database if $DJGPP; } else { # RRM: deal with size data if ($width{$name} < 0) { @@ -7585,10 +7574,8 @@ print "\nError: Cannot write '$FILE.css': $!\n"; return; } - binmode STYLESHEET; if ( -f $EXTERNAL_STYLESHEET ) { if(open(EXT_STYLES, "<$EXTERNAL_STYLESHEET")) { - binmode EXT_STYLES; while (<EXT_STYLES>) { print STYLESHEET $_; } close(EXT_STYLES); } else { @@ -7921,7 +7908,7 @@ &slurp_input($this_file); open(OUTFILE, ">$this_file") || die "\nError: Cannot write file '$this_file': $!\n"; - binmode OUTFILE; + if (($INDEX) && ($SHORT_INDEX) && ($SEGMENT eq 1)) { &make_index_segment($title,$file); } @@ -8037,7 +8024,8 @@ # local($dummy, $file, $title) = split($delim,$toc_section_info{join(' ',@link)}); if ($MULTIPLE_FILES && $ROOTED && $file) { - if (!($DESTDIR =~ /\Q$FIXEDDIR\E[$dd$dd]?$/)) { $file = "..$dd$file" } + # remove subdir for this file, added in &translate +# if (!($DESTDIR =~ /\Q$FIXEDDIR\E[$dd$dd]?$/)) { $file = "..$dd$file" } } # if ($title && ($file ne $current_file || $icon ne $up_visible_mark)) { if ($title && ($file ne $current_file)) { @@ -8093,7 +8081,7 @@ unless ($title); if ($MULTIPLE_FILES && $ROOTED && $file) { - if (!($DESTDIR =~ /\Q$FIXEDDIR\E[$dd$dd]?$/)) { $file = "..$dd$file" } +# if (!($DESTDIR =~ /\Q$FIXEDDIR\E[$dd$dd]?$/)) { $file = "..$dd$file" } } if ($file && !($file eq $currentfile) && (!$NO_NAVIGATION)) { #RRM: allow user-customisation of the REL attribute @@ -8286,7 +8274,6 @@ return(); } if(open(INIT, "<$init_file")) { - binmode INIT; foreach $info_line (<INIT>) { $info_line =~ s/[<>"&]/'&'.$html_special_entities{$&}.';'/eg; $init_contents .= $info_line; @@ -8401,6 +8388,12 @@ ($next_depth, $file, $title) = split($delim,$section_info{$next}); } + + if ($MULTIPLE_FILES && $ROOTED && $file) { + # remove subdir for this file, added in &translate +# if (!($DESTDIR =~ /\Q$FIXEDDIR\E[$dd$dd]?$/)) { $file = "..$dd$file" } + } + $root_file = $file unless $root_file; if ($root_file && $root_file =~ /_mn\./) { $root_file=$` }; # remove any surrounding braces @@ -9049,7 +9042,6 @@ sub post_process_footnotes { &slurp_input($footfile); open(OUT, ">$footfile") || die "Cannot write file '$footfile': $!\n"; - binmode OUT; &replace_markers; &post_post_process if (defined &post_post_process); &adjust_encoding; @@ -9071,7 +9063,6 @@ print "\nError: Cannot write '$filename': $!\n"; return; } - binmode FILE; print FILE $_; close(FILE); } @@ -9587,7 +9578,6 @@ my $script = $SCRIPT || $0; open(PIPE, "$perldoc -t $script |") || die "Fatal: can't open pipe: $!"; - binmode PIPE; while (<PIPE>) { if (/^\s*$/) { next; @@ -10705,7 +10695,6 @@ print "\nError: Cannot write '$urlimg': $!\n"; return; } - binmode IMAGE_MAP; ### HWS Pass server map unchanged from user print IMAGE_MAP "<HTML>\n<BODY>\n<A HREF=\"$map\">\n"; print IMAGE_MAP "<IMG\n SRC=\"$url\" ISMAP $ausemp $altst> </A>"; @@ -10723,8 +10712,6 @@ ($to_prefix, $suffix) = split(/\./, $to); if ($EXTN =~ /$suffix$/) { if (open(FROM, "<$from") && open(HTMP, ">HTML_tmp")) { - binmode FROM; - binmode HTMP; while (<FROM>) { s/$from_prefix\.$IMAGE_TYPE/$to_prefix.$IMAGE_TYPE/g; print HTMP; @@ -10749,7 +10736,6 @@ &replace_markers; &add_dir_to_href if ($DESTDIR); if(open(CAPTIONS, ">${PREFIX}$type.pl")) { - binmode CAPTIONS; print CAPTIONS $_; close (CAPTIONS); } else { @@ -17241,7 +17227,6 @@ if (-f $access_file) { print STDOUT " ... found"; open(HTACCESS, "<$access_file"); - binmode HTACCESS; while (<HTACCESS>) { if (/^\s*XBitHack\s*on\s*$/) { print STDOUT " with XBitHack on"; @@ -18003,7 +17988,7 @@ Put the result in this directory, in a subdirectory with the same name as the LaTeX file, provided the directory exists, or B<-mkdir> is -specified. Same as B<-rooted -dir>. +specified. Looks for .aux and .bbl files in the specified directory. =item B<-dir> I<output_directory> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/amsmath.perl new/latex2html-2026/styles/amsmath.perl --- old/latex2html-2025/styles/amsmath.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/amsmath.perl 2026-01-01 16:25:11.000000000 +0100 @@ -476,7 +476,7 @@ $align = join('', " ALIGN=\"" , (($EQN_TAGS =~ /L/)? 'LEFT' : 'RIGHT'), "\"") unless ($HTML_VERSION < 2.2); - + $env_style{'subequation'} = "width:100%;"; $latex_body .= join('', "\n\\setcounter{equation}{" , $global{'eqn_number'} , "}\n"); $_ .= "%EQNO:".$global{'eqn_number'}."\n"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/color.perl new/latex2html-2026/styles/color.perl --- old/latex2html-2025/styles/color.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/color.perl 2026-01-01 16:25:11.000000000 +0100 @@ -153,7 +153,6 @@ if (-f $file) { if (open(COLORFILE,"<$file")) { print STDOUT "\n(reading colors from $file" if $DEBUG; - binmode COLORFILE; while (<COLORFILE>) { s/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(\w+(\s\w+)*)\s*/ ($r,$g,$b,$name)=($1,$2,$3,$4); @@ -184,7 +183,6 @@ if (-f $file) { if (open(COLORFILE,"<$file")) { print STDOUT "\n(reading colors from $file"; - binmode COLORFILE; @colors = (<COLORFILE>); foreach (@colors) { next if (/^\s*$/); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/frames.perl new/latex2html-2026/styles/frames.perl --- old/latex2html-2025/styles/frames.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/frames.perl 2026-01-01 16:25:11.000000000 +0100 @@ -1126,7 +1126,6 @@ ); &text_cleanup; open(FILE,">$filename") || print "Cannot open $filename $!\n"; - binmode FILE; print FILE $_; close(FILE); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/getimagesize.perl new/latex2html-2026/styles/getimagesize.perl --- old/latex2html-2025/styles/getimagesize.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/getimagesize.perl 2026-01-01 16:25:11.000000000 +0100 @@ -12,7 +12,6 @@ my $type = lc($1); $type = $IMAGE_TYPE unless $type =~ /(gif|png|jpe?g)/; if (open(IMAGE, "<$imagefile")) { - binmode IMAGE; my ($buffer,$magic,$dummy,$width,$height) = ('','','',0,0); binmode(IMAGE); # not harmful un UNIX # if ($IMAGE_TYPE =~ /gif/) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/graphics-support.perl new/latex2html-2026/styles/graphics-support.perl --- old/latex2html-2025/styles/graphics-support.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/graphics-support.perl 2026-01-01 16:25:11.000000000 +0100 @@ -534,7 +534,6 @@ my($file)=@_; my(@bb,$f); if(($f=find_file($file,$GRAPHICS_PATH,['.eps','.ps','.bb'])) && open(PS,$f)){ - binmode PS; while(<PS>){ if(/^%%BoundingBox:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*$/){ @bb=($1,$2,$3,$4); last; }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/html.perl new/latex2html-2026/styles/html.perl --- old/latex2html-2025/styles/html.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/html.perl 2026-01-01 16:25:11.000000000 +0100 @@ -305,7 +305,6 @@ if ($pretag) { # code due to Alan Williams <[email protected]> open(LABELS, "<$labelfile"); - binmode LABELS; print "\nLoading external labels from $labelfile, with prefix $pretag" if ($VERBOSITY > 1); local($translated_stream, $instream); @@ -413,7 +412,6 @@ if ($pretag) { # code due to Alan Williams <[email protected]> open(LABELS, "<$labelfile"); - binmode LABELS; print "\nLoading external labels from $labelfile, with prefix $pretag" if ($VERBOSITY > 1); local($translated_stream, $instream); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/styles/webtex.perl new/latex2html-2026/styles/webtex.perl --- old/latex2html-2025/styles/webtex.perl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/styles/webtex.perl 2026-01-01 16:25:11.000000000 +0100 @@ -227,7 +227,6 @@ &webeq_failed($out_tag); $out_tag = ''; } else { open(TAG, "<$out_tag"); - binmode TAG; $app_tag = join('',<TAG>); close(TAG); # replace webeq fall-back image by LaTeX2HTML's own, or none at all diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/tests/basic.tex new/latex2html-2026/tests/basic.tex --- old/latex2html-2025/tests/basic.tex 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/tests/basic.tex 2026-01-01 16:25:11.000000000 +0100 @@ -61,6 +61,11 @@ \hline \end{tabular} -dif\'{i}cil -dif{\'i}cil -dif\'{\i}cil +Testing accents. +\begin{itemize} +\item \verb|\'{i}| dif\'{i}cil +\item \verb|{\'i}| dif{\'i}cil +\item \verb|\'{\i}| dif\'{\i}cil +\item \verb|\t{oo}| \t{oo} +\item \verb|\H{\i}| \H{\i} +\end{itemize} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/texexpand.pin new/latex2html-2026/texexpand.pin --- old/latex2html-2025/texexpand.pin 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/texexpand.pin 2026-01-01 16:25:11.000000000 +0100 @@ -558,7 +558,6 @@ if($opt{save_styles}) { open(STYLES,">$opt{save_styles}") || die "$prompt Error: Cannot open style file '$opt{save_styles}': $!\n"; - binmode STYLES; } my $out_file = $opt{output}||$opt{out}; if($out_file) { @@ -568,7 +567,6 @@ else { open(OUT,">&STDOUT"); } - binmode OUT; &process_file($infile); # the workhorse... @@ -687,7 +685,6 @@ $includelevel++; open(IN,"<$infile") || die "$prompt Cannot open $infile\n"; - binmode IN; print STDERR "$prompt %--- Processing $infile" if ($debug > 1); # if we don't include this file marker LaTeX2HTML won't split diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/texinputs/html.sty new/latex2html-2026/texinputs/html.sty --- old/latex2html-2025/texinputs/html.sty 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/texinputs/html.sty 2026-01-01 16:25:11.000000000 +0100 @@ -1,6 +1,5 @@ % -% $Id: html.sty,v 1.39 2001/10/01 22:47:06 RRM Exp $ -% LaTeX2HTML Version 2K.1 : html.sty +% LaTeX2HTML Version 2025 : html.sty % % This file contains definitions of LaTeX commands which are % processed in a special way by the translator. @@ -602,7 +601,16 @@ \let\hyperciteno=\hypercitenocite \let\hyperciteext=\hypercitenocite -\ifx\pdfunknown\relax + +% the integration with hyperref is commented out below because it +% did not work with examples such as +% +% \htmlref{\$ACCENT\_IMAGES}{\$ACCENT\_IMAGES} +% +% found in the latex2html manual. The escaped chars would produce +% an error when given as an argument to \hyperref. +% +%\ifx\pdfunknown\relax \renewcommand{\htmlimage}[2][]{} \renewcommand{\htmlref}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlrefdef\else\aftergroup\htmlrefext\fi}} @@ -611,17 +619,22 @@ \renewcommand{\htmlcite}[2][]{#2{\def\tmp{#1}\ifx\tmp\@empty \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} \newcommand{\htmlciteext}[2][]{} -\else - \renewcommand{\htmlimage}[2][]{\hyperimage{#2}} - \renewcommand{\htmlref}[1][]{\def\htmp@{#1}\ifx\htmp@\@empty - \def\htmp@{\htmlrefdef}\else\def\htmp@{\htmlrefext{#1}}\fi\htmp@} - \newcommand{\htmlrefdef}[2]{\hyperref[hyper][#2]{#1}} - \newcommand{\htmlrefext}[3]{% - \hypertarget{#1}{\hskip2bp}\hyperref[hyper][#3]{#2}} - \renewcommand{\htmlcite}[2][]{#2{\def\htmp@{#1}\ifx\htmp@\@empty - \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} - \newcommand{\htmlciteext}[1][]{\cite} -\fi +%\else +% \renewcommand{\htmlimage}[2][]{\hyperimage{#2}} +% \renewcommand{\htmlref}[1][]{\def\htmp@{#1}\ifx\htmp@\@empty +% \def\htmp@{\htmlrefdef}\else\def\htmp@{\htmlrefext{#1}}\fi\htmp@} + %%%% here are two options for defining \htmlrefdef + %%%% here is the original definition + % \newcommand{\htmlrefdef}[2]{\hyperref[hyper][#2]{#1}} + %%%% and here is a definition that handles escaped characters + % \newcommand{\htmlrefdef}[2]{\bgroup\escapechar-1 \hyperref[hyper][\detokenize{#2}]{\detokenize{#1}} \egroup} + %%%% +% \newcommand{\htmlrefext}[3]{% +% \hypertarget{#1}{\hskip2bp}\hyperref[hyper][#3]{#2}} +% \renewcommand{\htmlcite}[2][]{#2{\def\htmp@{#1}\ifx\htmp@\@empty +% \aftergroup\htmlcitedef\else\aftergroup\htmlciteext\fi}} +% \newcommand{\htmlciteext}[1][]{\cite} +%\fi \newcommand{\htmlcitedef}[1]{ \nocite{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/versions/frame.pl new/latex2html-2026/versions/frame.pl --- old/latex2html-2025/versions/frame.pl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/versions/frame.pl 2026-01-01 16:25:11.000000000 +0100 @@ -1202,7 +1202,6 @@ ); &text_cleanup; open(FILE,">$filename") || print "Cannot open $filename $!\n"; - binmode FILE; print FILE $_; close(FILE); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/latex2html-2025/versions/techexpl.pl new/latex2html-2026/versions/techexpl.pl --- old/latex2html-2025/versions/techexpl.pl 2025-01-01 10:47:17.000000000 +0100 +++ new/latex2html-2026/versions/techexpl.pl 2026-01-01 16:25:11.000000000 +0100 @@ -212,7 +212,6 @@ sub TE_check_file_contents { local ($ifile) = @_; open(TEINC, "<$ifile"); - binmode TEINC; my($macrosOK,$macrosNUM,$numlines,$invalid) = (0,0,0,0); my $TE_special_macros_rx = join('|',@TE_special_macros); my $TE_defined_accents_rx = join('|',@TE_defined_accents); ++++++ latex2html-share-dir.diff ++++++ --- /var/tmp/diff_new_pack.obk3ld/_old 2026-06-02 19:47:25.585396061 +0200 +++ /var/tmp/diff_new_pack.obk3ld/_new 2026-06-02 19:47:25.601396724 +0200 @@ -2,7 +2,7 @@ =================================================================== --- config/config.pl.orig +++ config/config.pl -@@ -2020,7 +2020,7 @@ else { +@@ -2061,7 +2061,7 @@ else { $newcfg{'SHLIBDIR'} = $newcfg{'PREFIX'}; } else {
