Once again syncing after too long an absence
[p5sagit/p5-mst-13.2.git] / pod / perlpod.pod
CommitLineData
a0d0e21e 1=head1 NAME
2
cb1a09d0 3perlpod - plain old documentation
a0d0e21e 4
5=head1 DESCRIPTION
6
7A pod-to-whatever translator reads a pod file paragraph by paragraph,
8and translates it to the appropriate output format. There are
9three kinds of paragraphs:
b74bceb9 10L<verbatim|/"Verbatim Paragraph">,
11L<command|/"Command Paragraph">, and
12L<ordinary text|/"Ordinary Block of Text">.
a0d0e21e 13
b74bceb9 14=head2 Verbatim Paragraph
a0d0e21e 15
16A verbatim paragraph, distinguished by being indented (that is,
17it starts with space or tab). It should be reproduced exactly,
18with tabs assumed to be on 8-column boundaries. There are no
19special formatting escapes, so you can't italicize or anything
20like that. A \ means \, and nothing else.
21
b74bceb9 22=head2 Command Paragraph
23
24All command paragraphs start with "=", followed by an
a0d0e21e 25identifier, followed by arbitrary text that the command can
26use however it pleases. Currently recognized commands are
27
28 =head1 heading
29 =head2 heading
0e06870b 30 =head3 heading
31 =head4 heading
a0d0e21e 32 =item text
33 =over N
34 =back
4633a7c4 35 =cut
cb1a09d0 36 =pod
c7c9f956 37 =for X
38 =begin X
39 =end X
cb1a09d0 40
b74bceb9 41=over 4
42
43=item =pod
44
45=item =cut
46
cb1a09d0 47The "=pod" directive does nothing beyond telling the compiler to lay
116160e3 48off parsing code through the next "=cut". It's useful for adding
49another paragraph to the doc if you're mixing up code and pod a lot.
cb1a09d0 50
b74bceb9 51=item =head1
52
53=item =head2
54
0e06870b 55=item =head3
56
57=item =head4
58
59Head1, head2, head3 and head4 produce first, second, third and fourth
60level headings, with the text in the same paragraph as the "=headn"
61directive forming the heading description.
cb1a09d0 62
b74bceb9 63=item =over
64
65=item =back
66
67=item =item
68
116160e3 69Item, over, and back require a little more explanation: "=over" starts a
70section specifically for the generation of a list using "=item" commands. At
71the end of your list, use "=back" to end it. You will probably want to give
72"4" as the number to "=over", as some formatters will use this for indentation.
cb1a09d0 73This should probably be a default. Note also that there are some basic rules
74to using =item: don't use them outside of an =over/=back block, use at least
75one inside an =over/=back block, you don't _have_ to include the =back if
76the list just runs off the document, and perhaps most importantly, keep the
77items consistent: either use "=item *" for all of them, to produce bullets,
78or use "=item 1.", "=item 2.", etc., to produce numbered lists, or use
79"=item foo", "=item bar", etc., i.e., things that looks nothing like bullets
80or numbers. If you start with bullets or numbers, stick with them, as many
54310121 81formatters use the first "=item" type to decide how to format the list.
cb1a09d0 82
b74bceb9 83=item =for
84
85=item =begin
86
87=item =end
88
116160e3 89For, begin, and end let you include sections that are not interpreted
90as pod text, but passed directly to particular formatters. A formatter
91that can utilize that format will use the section, otherwise it will be
92completely ignored. The directive "=for" specifies that the entire next
93paragraph is in the format indicated by the first word after
94"=for", like this:
c7c9f956 95
54310121 96 =for html <br>
c7c9f956 97 <p> This is a raw HTML paragraph </p>
98
116160e3 99The paired commands "=begin" and "=end" work very similarly to "=for", but
100instead of only accepting a single paragraph, all text from "=begin" to a
54310121 101paragraph with a matching "=end" are treated as a particular format.
c7c9f956 102
103Here are some examples of how to use these:
104
105 =begin html
a6006777 106
c7c9f956 107 <br>Figure 1.<IMG SRC="figure1.png"><br>
a6006777 108
c7c9f956 109 =end html
a6006777 110
c7c9f956 111 =begin text
a6006777 112
c7c9f956 113 ---------------
114 | foo |
115 | bar |
116 ---------------
a6006777 117
c7c9f956 118 ^^^^ Figure 1. ^^^^
a6006777 119
c7c9f956 120 =end text
121
122Some format names that formatters currently are known to accept include
123"roff", "man", "latex", "tex", "text", and "html". (Some formatters will
124treat some of these as synonyms.)
125
116160e3 126And don't forget, when using any command, that the command lasts up until
cb1a09d0 127the end of the B<paragraph>, not the line. Hence in the examples below, you
3fe9a6f1 128can see the empty lines after each command to end its paragraph.
cb1a09d0 129
130Some examples of lists include:
131
132 =over 4
133
134 =item *
135
136 First item
137
138 =item *
139
140 Second item
141
142 =back
143
144 =over 4
145
146 =item Foo()
147
148 Description of Foo function
149
150 =item Bar()
151
152 Description of Bar function
153
154 =back
a0d0e21e 155
b74bceb9 156=back
157
b74bceb9 158=head2 Ordinary Block of Text
159
160It will be filled, and maybe even
a0d0e21e 161justified. Certain interior sequences are recognized both
162here and in commands:
163
ee8c7f54 164 I<text> Italicize text, used for emphasis or variables
165 B<text> Embolden text, used for switches and programs
166 S<text> Text contains non-breaking spaces
167 C<code> Render code in a typewriter font, or give some other
168 indication that this represents program text
a0d0e21e 169 L<name> A link (cross reference) to name
5f05dabc 170 L<name> manual page
171 L<name/ident> item in manual page
172 L<name/"sec"> section in other manual page
173 L<"sec"> section in this manual page
a0d0e21e 174 (the quotes are optional)
cb1a09d0 175 L</"sec"> ditto
b74bceb9 176 same as above but only 'text' is used for output.
4b6a7270 177 (Text can not contain the characters '/' and '|',
178 and should contain matched '<' or '>')
b74bceb9 179 L<text|name>
180 L<text|name/ident>
181 L<text|name/"sec">
182 L<text|"sec">
183 L<text|/"sec">
c47ff5f1 184
a0d0e21e 185 F<file> Used for filenames
cb1a09d0 186 X<index> An index entry
fa859636 187 Z<> A zero-width character
c7c9f956 188 E<escape> A named character (very similar to HTML escapes)
1294c5d8 189 E<lt> A literal <
190 E<gt> A literal >
4b6a7270 191 E<sol> A literal /
192 E<verbar> A literal |
1294c5d8 193 (these are optional except in other interior
194 sequences and when preceded by a capital letter)
c7c9f956 195 E<n> Character number n (probably in ASCII)
7f3dfc00 196 E<html> Some non-numeric HTML entity, such
197 as E<Agrave>
a0d0e21e 198
5455df32 199Most of the time, you will only need a single set of angle brackets to
200delimit the beginning and end of interior sequences. However, sometimes
201you will want to put a right angle bracket (or greater-than sign '>')
202inside of a sequence. This is particularly common when using a sequence
203to provide a different font-type for a snippet of code. As with all
204things in Perl, there is more than one way to do it. One way is to
205simply escape the closing bracket using an C<E> sequence:
206
207 C<$a E<lt>=E<gt> $b>
208
209This will produce: "C<$a E<lt>=E<gt> $b>"
210
211A more readable, and perhaps more "plain" way is to use an alternate set of
212delimiters that doesn't require a ">" to be escaped. As of perl5.5.660,
213doubled angle brackets ("<<" and ">>") may be used I<if and only if there
214is whitespace immediately following the opening delimiter and immediately
215preceding the closing delimiter!> For example, the following will do the
216trick:
217
218 C<< $a <=> $b >>
219
220In fact, you can use as many repeated angle-brackets as you like so
221long as you have the same number of them in the opening and closing
222delimiters, and make sure that whitespace immediately follows the last
223'<' of the opening delimiter, and immediately precedes the first '>' of
224the closing delimiter. So the following will also work:
225
226 C<<< $a <=> $b >>>
227 C<<<< $a <=> $b >>>>
228
229This is currently supported by pod2text (Pod::Text), pod2man (Pod::Man),
230and any other pod2xxx and Pod::Xxxx translator that uses Pod::Parser
2311.093 or later.
232
233
b74bceb9 234=head2 The Intent
3141265f 235
a0d0e21e 236That's it. The intent is simplicity, not power. I wanted paragraphs
237to look like paragraphs (block format), so that they stand out
238visually, and so that I could run them through fmt easily to reformat
239them (that's F7 in my version of B<vi>). I wanted the translator (and not
240me) to worry about whether " or ' is a left quote or a right quote
5f05dabc 241within filled text, and I wanted it to leave the quotes alone, dammit, in
a0d0e21e 242verbatim mode, so I could slurp in a working program, shift it over 4
243spaces, and have it print out, er, verbatim. And presumably in a
244constant width font.
245
246In particular, you can leave things like this verbatim in your text:
247
248 Perl
249 FILEHANDLE
250 $variable
251 function()
252 manpage(3r)
253
254Doubtless a few other commands or sequences will need to be added along
255the way, but I've gotten along surprisingly well with just these.
256
257Note that I'm not at all claiming this to be sufficient for producing a
258book. I'm just trying to make an idiot-proof common source for nroff,
259TeX, and other markup languages, as used for online documentation.
cb1a09d0 260Translators exist for B<pod2man> (that's for nroff(1) and troff(1)),
b74bceb9 261B<pod2text>, B<pod2html>, B<pod2latex>, and B<pod2fm>.
a0d0e21e 262
b74bceb9 263=head2 Embedding Pods in Perl Modules
4633a7c4 264
265You can embed pod documentation in your Perl scripts. Start your
116160e3 266documentation with a "=head1" command at the beginning, and end it
267with a "=cut" command. Perl will ignore the pod text. See any of the
268supplied library modules for examples. If you're going to put your
269pods at the end of the file, and you're using an __END__ or __DATA__
3fe9a6f1 270cut mark, make sure to put an empty line there before the first pod
116160e3 271directive.
cb1a09d0 272
273 __END__
274
275 =head1 NAME
276
277 modern - I am a modern module
278
3fe9a6f1 279If you had not had that empty line there, then the translators wouldn't
cb1a09d0 280have seen it.
281
b74bceb9 282=head2 Common Pod Pitfalls
1294c5d8 283
284=over 4
285
286=item *
287
288Pod translators usually will require paragraphs to be separated by
3fe9a6f1 289completely empty lines. If you have an apparently empty line with
1294c5d8 290some spaces on it, this can cause odd formatting.
291
292=item *
293
294Translators will mostly add wording around a LE<lt>E<gt> link, so that
295C<LE<lt>foo(1)E<gt>> becomes "the I<foo>(1) manpage", for example (see
296B<pod2man> for details). Thus, you shouldn't write things like C<the
297LE<lt>fooE<gt> manpage>, if you want the translated document to read
298sensibly.
299
49877630 300If you need total control of the text used for a link in the output
301use the form LE<lt>show this text|fooE<gt> instead.
b74bceb9 302
1294c5d8 303=item *
304
5fdefdaa 305The B<podchecker> command is provided to check pod syntax
88d14829 306for errors and warnings. For example, it checks for completely
307blank lines in pod segments and for unknown escape sequences.
308It is still advised to pass it through
1294c5d8 309one or more translators and proofread the result, or print out the
310result and proofread that. Some of the problems found may be bugs in
311the translators, which you may or may not wish to work around.
312
313=back
314
cb1a09d0 315=head1 SEE ALSO
316
88d14829 317L<pod2man>, L<perlsyn/"PODs: Embedded Documentation">,
318L<podchecker>
4633a7c4 319
cb1a09d0 320=head1 AUTHOR
a0d0e21e 321
322Larry Wall
323