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