Glib::GenPod - POD generation utilities for Glib-based modules
use Glib::GenPod;
# use the defaults: xsdoc2pod ($xsdocparse_output_file, $destination_dir);
# or take matters into your own hands
require $xsdocparse_output_file;
foreach my $package (sort keys %$data) {
print "=head1 NAME\n\n$package\n\n";
print "=head1 METHODS\n\n" . podify_methods ($package) . "\n\n";
}
To make life easy for module maintainers, we also include a do-it-all function, xsdoc2pod(), which does pretty much everything for you. All of the pieces it uses are publically usable, so you can do whatever you like if you don't like the default output.
Several custom POD directives are recognized in the XSubs section. Note that each one is sought as a paragraph starter, and must follow a "=cut" directive.
Within the apidoc PODs, we recognize a few special directives (the ``for\s+'' is optional on these):
=for apidoc
=signature bool Class->foo
=signature ($thing, @other) = $object->foo ($it, $something)
Text in here is included in the generated documentation. You can actually include signature and arg directives at any point in this pod -- they are stripped after. In fact, any pod is valid in here, until the =cut.
=cut
void foo (...)
PPCODE:
/* crazy code follows */
Also, we honor a couple of ``modifiers'' on the =for apidoc line, following the symbol name, if present:
(These are actually handled by Glib::ParseXSDoc, but we list them here because, well, they're an important part of how you document the XS files.)
If you don't want each package to create a separate pod file, then use this function's code as a starting point for your own pretty-printer.
# a couple of special types FooBar Foo::Bar Frob localized frobnicator
C type decorations such as ``const'' and ``*'' are implied (do not include them), and the _ornull variant is handled for you.
This function is called at all of the specified points through out the process of generating pod for a page. Any pod matching the position passed will be returned, undef if no matches were found. If position is undef all pods without sepcific postion information will be returned. pods is a reference to an array of pod hashes.
Returns the new text as a string, or undef if $packagename is not a registered GType.
Returns the new text as a string, or undef if there are no xsubs in $packagename.
If $COPYRIGHT is not set, we will attempt to create one for you, using the values of the variables $YEAR, $AUTHOR, and $MAIN_MOD. $YEAR defaults to the current year, $AUTHORS defaults to 'The Gtk2-Perl Team', and $MAIN_MOD defaults to empty. You want $MAIN_MOD to be set to the main module of your extension for the SEE ALSO section, and on the assumption that a decent license notice can be found in that module's doc, we point the reader there.
So, in general, you will want to specify at least one of these, so that you don't credit your work to us under the LGPL.
To set $COPYRIGHT, $AUTHORS, and/or $MAIN_MOD do something similar to the following in the first part of your postamble section in Makefile.PL. All of the weird escaping is required because this is going through several levels of variable expansion. All occurences of <br> in $COPYRIGHT are replaced with newlines, to make it easier to put in a multi-line string.
POD_SET=\\\$\$Glib::GenPod::COPYRIGHT='Copyright 1999 team-foobar<br>LGPL';
Glib::MakeHelper::postamble_docs_full() does this sort of thing for you.
Uses %Glib::GenPod::basic_types to look for some known basic types, and uses Glib::Type->package_from_cname to look up the registered package corresponding to a C type name. If no suitable mapping can be found, this just returns the input string.
This library is free software; you can redistribute it and/or modify it under the terms of the Lesser General Public License (LGPL). For more information, see http://www.fsf.org/licenses/lgpl.txt