1#!perl 2# Test that Pod::LaTeX works 3# This test relies on the DATA filehandle 4# DATA contains the latex that is used for comparison 5# and the pod that was used to generate it. The two 6# are separated by '=pod' 7# Note that if the translator is adjusted the output tex 8# will probably not match what is currently there. You 9# will need to adjust it to match (assuming it is correct). 10 11use Test; 12use strict; 13 14BEGIN { plan tests => 177 } 15 16use Pod::LaTeX; 17 18# The link parsing changed between v0.22 and v0.30 of Pod::ParseUtils 19use Pod::ParseUtils; 20my $linkver = $Pod::ParseUtils::VERSION; 21 22# Set up an END block to remove the test output file 23END { 24 unlink "test.tex"; 25}; 26 27ok(1); 28 29# First thing to do is to read the expected output from 30# the DATA filehandle and store it in a scalar. 31# Do this until we read an =pod 32my @reference; 33while (my $line = <DATA>) { 34 last if $line =~ /^=pod/; 35 push(@reference,$line); 36} 37 38# Create a new parser 39my $parser = Pod::LaTeX->new; 40ok($parser); 41$parser->Head1Level(1); 42# Add the preamble but remember not to compare the timestamps 43$parser->AddPreamble(1); 44$parser->AddPostamble(1); 45 46# For a laugh add a table of contents 47$parser->TableOfContents(1); 48 49# Create an output file 50open(OUTFH, "> test.tex" ) or die "Unable to open test tex file: $!\n"; 51 52# Read from the DATA filehandle and write to a new output file 53# Really want to write this to a scalar 54$parser->parse_from_filehandle(\*DATA,\*OUTFH); 55 56close(OUTFH) or die "Error closing OUTFH test.tex: $!\n"; 57 58# Now read in OUTFH and compare 59open(INFH, "< test.tex") or die "Unable to read test tex file: $!\n"; 60my @output = <INFH>; 61 62ok(@output, @reference); 63for my $i (0..$#reference) { 64 next if $reference[$i] =~ /^%%/; # skip timestamp comments 65 66 # if we are running a new version of Pod::ParseUtils we need 67 # to change the link text. This is a kluge until we drop support 68 # for older versions of Pod::ParseUtils 69 if ($linkver < 0.29 && $output[$i] =~ /manpage/) { 70 # convert our expectations from new to old new format 71 $reference[$i] =~ s/Standard link: \\emph\{Pod::LaTeX\}/Standard link: the \\emph\{Pod::LaTeX\} manpage/; 72 $reference[$i] =~ s/\\textsf\{sec\} in \\emph\{Pod::LaTeX\}/the section on \\textsf\{sec\} in the \\emph\{Pod::LaTeX\} manpage/; 73 } 74 ok($output[$i], $reference[$i]); 75} 76 77close(INFH) or die "Error closing INFH test.tex: $!\n"; 78 79 80__DATA__ 81\documentclass{article} 82\usepackage[T1]{fontenc} 83\usepackage{textcomp} 84 85%% Latex generated from POD in document (unknown) 86%% Using the perl module Pod::LaTeX 87%% Converted on Sat Apr 5 21:16:02 2003 88 89 90\usepackage{makeidx} 91\makeindex 92 93 94\begin{document} 95 96\tableofcontents 97 98\section{Introduction\label{Introduction}\index{Introduction}} 99\begin{itemize} 100 101\item 102 103Always check the return codes of system calls. Good error messages should 104go to STDERR, include which program caused the problem, what the failed 105system call and arguments were, and (\textbf{very important}) should contain 106the standard system error message for what went wrong. Here's a simple 107but sufficient example: 108 109\begin{verbatim} 110 opendir(D, $dir) or die "can't opendir $dir: $!"; 111\end{verbatim} 112 113\item 114 115Line up your transliterations when it makes sense: 116 117\begin{verbatim} 118 tr [abc] 119 [xyz]; 120\end{verbatim} 121 122 123The above should be aligned since it includes an embedded tab. 124 125 126\item 127 128Think about reusability. Why waste brainpower on a one-shot when you 129might want to do something like it again? Consider generalizing your 130code. Consider writing a module or object class. Consider making your 131code run cleanly with \texttt{use strict} and \texttt{-w} (or \texttt{use warnings} in 132Perl 5.6) in effect. Consider giving away your code. Consider changing 133your whole world view. Consider... oh, never mind. 134 135 136\item 137 138Be consistent. 139 140 141\item 142 143Be nice. 144 145\end{itemize} 146\section{Links\label{Links}\index{Links}} 147 148 149This link should just include one word: \textsf{Pod::LaTeX} 150 151 152 153This link should include the text \texttt{test} even though 154it refers to \texttt{Pod::LaTeX}: \textsf{test}. 155 156 157 158Standard link: \emph{Pod::LaTeX}. 159 160 161 162Now refer to an external section: \textsf{sec} in \emph{Pod::LaTeX} 163 164\section{Lists\label{Lists}\index{Lists}} 165 166 167Test description list with long lines 168 169\begin{description} 170 171\item[{Some short text}] \mbox{} 172 173Some additional para. 174 175\begin{itemize} 176 177\item 178 179Nested itemized list 180 181 182\item 183 184Second item 185 186\end{itemize} 187 188\item[{some longer text than that}] \mbox{} 189 190and again. 191 192 193\item[{this text is even longer and greater than}] \textbf{40 characters} 194 195Some more content for the item. 196 197 198\item[{this is some text with \textit{something across}}] \textbf{the 40 char boundary} 199 200This is item content. 201 202 203\item[{square [ bracket in item}] \mbox{} 204 205Square bracket content 206 207\end{description} 208 209 210And this should be an enumerated list without any cruft after the numbers or additional numbers at all. 211 212\begin{enumerate} 213 214\item 215 216item 1 217 218 219\item 220 221item 2 222 223\end{enumerate} 224\section{Escapes\label{Escapes}\index{Escapes}} 225 226 227Test some normal escapes such as $<$ (lt) and $>$ (gt) and $|$ (verbar) and 228\texttt{\~{}} (tilde) and \& (amp) as well as $<$ (Esc lt) and $|$ (Esc 229verbar) and \textfractionsolidus{} (Esc sol) and $>$ (Esc gt) and \& (Esc amp) 230and " (Esc quot) and even $\alpha$ (Esc alpha). 231 232\section{For blocks\label{For_blocks}\index{For blocks}} 233 Some latex code \textbf{here}. 234 235 236 237Some text that should appear. 238 239 240 241Some more text that should appear 242 243Some latex in a \textsf{begin block} 244 245and some more 246 247\begin{equation} 248a = \frac{3}{2} 249\end{equation} 250 251 252 253Back to pod. 254 255\printindex 256 257\end{document} 258=pod 259 260=head1 Introduction 261 262=over 4 263 264=item * 265 266Always check the return codes of system calls. Good error messages should 267go to STDERR, include which program caused the problem, what the failed 268system call and arguments were, and (B<very important>) should contain 269the standard system error message for what went wrong. Here's a simple 270but sufficient example: 271 272 opendir(D, $dir) or die "can't opendir $dir: $!"; 273 274=item * 275 276Line up your transliterations when it makes sense: 277 278 tr [abc] 279 [xyz]; 280 281The above should be aligned since it includes an embedded tab. 282 283=item * 284 285Think about reusability. Why waste brainpower on a one-shot when you 286might want to do something like it again? Consider generalizing your 287code. Consider writing a module or object class. Consider making your 288code run cleanly with C<use strict> and C<-w> (or C<use warnings> in 289Perl 5.6) in effect. Consider giving away your code. Consider changing 290your whole world view. Consider... oh, never mind. 291 292=item * 293 294Be consistent. 295 296=item * 297 298Be nice. 299 300=back 301 302=head1 Links 303 304This link should just include one word: L<Pod::LaTeX|Pod::LaTeX> 305 306This link should include the text C<test> even though 307it refers to C<Pod::LaTeX>: L<test|Pod::LaTeX>. 308 309Standard link: L<Pod::LaTeX>. 310 311Now refer to an external section: L<Pod::LaTeX/"sec"> 312 313 314=head1 Lists 315 316Test description list with long lines 317 318=over 4 319 320=item Some short text 321 322Some additional para. 323 324=over 4 325 326=item * 327 328Nested itemized list 329 330=item * 331 332Second item 333 334=back 335 336=item some longer text than that 337 338and again. 339 340=item this text is even longer and greater than 40 characters 341 342Some more content for the item. 343 344=item this is some text with I<something across> the 40 char boundary 345 346This is item content. 347 348=item square [ bracket in item 349 350Square bracket content 351 352=back 353 354And this should be an enumerated list without any cruft after the numbers or additional numbers at all. 355 356=over 4 357 358=item 1) 359 360item 1 361 362=item 2. 363 364item 2 365 366=back 367 368=head1 Escapes 369 370Test some normal escapes such as < (lt) and > (gt) and | (verbar) and 371~ (tilde) and & (amp) as well as E<lt> (Esc lt) and E<verbar> (Esc 372verbar) and E<sol> (Esc sol) and E<gt> (Esc gt) and E<amp> (Esc amp) 373and E<quot> (Esc quot) and even E<alpha> (Esc alpha). 374 375=head1 For blocks 376 377=for latex 378 Some latex code \textbf{here}. 379 380Some text that should appear. 381 382=for comment 383 Should not print anything 384 385Some more text that should appear 386 387=begin latex 388 389Some latex in a \textsf{begin block} 390 391and some more 392 393\begin{equation} 394a = \frac{3}{2} 395\end{equation} 396 397=end latex 398 399Back to pod. 400 401=cut 402