>>>>> On Fri, 25 Oct 2002 15:54:02 +0100 (BST), Matt Sergeant <[EMAIL PROTECTED]> said:
> The pod2axpoint.xsl was meant only for a subset of POD, not all of it. The > idea is to let you write presentations in POD to convert to axpoint > format, not to convert any POD document to a presentation. These words are part of a manpage now;) > Patches are of course always welcome ;-) I'll bite. The patch below is really just a marginal improvement, but I believe it was worth the time spent (at least as a learnign experience for me). Please bear with me if my XSLT looks newbie-ish, that's just what it is. This patch: - adds a manpage written in a POD (manpage acts as a slideshow demo) - adds targets to the Makefile to generate the PDF slideshow - provides recursive templates to generate <point> elements with a level attribute. Up to three levels of nesting of =over/=back sections are supported (that's the same amount as AxPoint supports) - paragraphs are always considered to be one level deeper than the preceding =item - =for sections are ignored - a few hunks are just fixing trailing whitespace Try 'make pdf' in the root directory after applying the patch to see the slideshow. I hope you like it. It's not overwhelming, but it seems to make AxPoint useable for lazy POD writers like me. -- andreas # This is a patch for Pod-SAX-0.11 to update it to Pod-SAX-0.11-ak # # To apply this patch: # STEP 1: Chdir to the source directory. # STEP 2: Run the 'applypatch' program with this patch file as input. # # If you do not have 'applypatch', it is part of the 'makepatch' package # that you can fetch from the Comprehensive Perl Archive Network: # http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz # In the above URL, 'x' should be 2 or higher. # # To apply this patch without the use of 'applypatch': # STEP 1: Chdir to the source directory. # STEP 2: Run the 'patch' program with this file as input. # #### End of Preamble #### #### Patch data follows #### diff -u 'Pod-SAX-0.11/Makefile.PL' 'Pod-SAX-0.11-ak/Makefile.PL' Index: ./Makefile.PL --- ./Makefile.PL Thu Jun 13 15:58:44 2002 +++ ./Makefile.PL Mon Oct 28 18:13:15 2002 @@ -5,4 +5,28 @@ 'PREREQ_PM' => { XML::SAX => 0.10, XML::SAX::Writer => 0.39, Pod::Parser => 0 }, 'ABSTRACT_FROM' => 'lib/Pod/SAX.pm', 'AUTHOR' => 'Matt Sergeant <[EMAIL PROTECTED]>', + 'MAN3PODS' => {"lib/Pod/SAX.pm" => '$(INST_MAN3DIR)/Pod::SAX.$(MAN3EXT)', + "pod2axpoint.xsl" => '$(INST_MAN3DIR)/pod2axpoint.xsl.$(MAN3EXT)', + }, ); + +sub MY::postamble { + q{ + +pdf: pod2axpoint.pdf + acroread pod2axpoint.pdf + +pod2axpoint.pdf: pod2axpoint.axp + axpoint pod2axpoint.axp pod2axpoint.pdf + +pod2axpoint.axp: pod2axpoint.xsl pod2axpoint.pod.xml + xsltproc pod2axpoint.xsl pod2axpoint.pod.xml > $@ + +pod2axpoint.pod.xml: pod2axpoint.xsl + perl -e 'use XML::SAX::Writer;use Pod::SAX;' \\ + -e 'my $$source = shift(@ARGV) or die;' \\ + -e 'my $$output = shift (@ARGV) || \*STDOUT;' \\ + -e 'my $$p = Pod::SAX->new({Handler => XML::SAX::Writer->new()});' \\ + -e '$$p->parse_uri($$source);' pod2axpoint.xsl > $@ +}; +} diff -u 'Pod-SAX-0.11/pod2axpoint.xsl' 'Pod-SAX-0.11-ak/pod2axpoint.xsl' Index: ./pod2axpoint.xsl --- ./pod2axpoint.xsl Mon Jun 24 11:59:54 2002 +++ ./pod2axpoint.xsl Mon Oct 28 18:16:08 2002 @@ -1,9 +1,145 @@ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> +<!-- + +=head1 pod2axpoint.xsl + +=head1 NAME + +pod2axpoint.xsl - Stylesheet to convert XMLified POD to AxPoint format + +=head1 SYNOPSIS + +Use Perl to generate XML from POD: + + use XML::SAX::Writer; + use Pod::SAX; + my $source = shift(@ARGV) or die; + my $output = shift (@ARGV) || \*STDOUT; + my $p = Pod::SAX->new({Handler => XML::SAX::Writer->new()}); + $p->parse_uri($source); + +No perl needed to transform the result to axpoint: + + xsltproc pod2axpoint.xsl foo.pod.xml > foo.axp + +Finally transform that with the axpoint script to PDF: + + axpoint foo.axp foo.pdf + +=head1 DESCRIPTION + +Pod is convenient to write markup. + +AxPoint is a powerful, prominent presentation +markup. + +This XSLT stylesheet attempts to close the gap between POD and +AxPoint. + +It is meant only for a subset of POD, not all of it. The idea is to +let you write presentations in POD to convert to axpoint format, not +to convert any POD document to a presentation. Actually, it fails on a +broad variety of real world POD documents. + +It is also meant only for a subset of AxPoint. The C<transition> +attribute for the C<title>, C<slide>, and C<point> element are not +accessible through POD directives. Nor is the C<metadata> section or +the C<image>, C<colour>, C<table>, C<rect>, C<circle>, C<ellipse>, +C<line>, and C<text> elements. To make these options available, it is +necessary to edit the stylesheet itself. + +=head1 CONFIGURATION + +You are expected to edit pod2axpoint.xsl to contain the speaker, +organisation, etc., maybe a background image, or other metadata. + +=head1 DEMO + +A C<=head1> in the POD starts a new slide and sets the title. The very +first C<=head1> sets the headline on the title page. Anything between +the first and the second C<=head1> is ignored. Edit the stylesheet +metadata section to fill the titlepage. Every paragraph is a point. +There are other ways to generate points too: + +=head2 This is the content of a head2 tag + +=head3 This is the content of a head3 tag + +=over 4 + +=item An item after an over 4 + +And a paragraph within this item. As a paragraph is a point itself, we +enter recursion here and the point gets a deeper level. + +=item Another item, the last one on this slide + +=back + +=head1 DEMO (cont'd) + +A paragraph with B<bold> text, I<italic> text, some C<$code+@code>, all +of them produced with the POD inline tags. The next paragraph is +indented POD, so that it must be rendered as source code: + + sub foo { @{[[1,2]]} }; + my ($one,$two) = @{foo()}; + # my ($list) = foo(); my ($one,$two) = @$list; + print "1[$one] 2[$two]\n"; + +And this is the third (and last) paragraph on this slide. + +=head1 DEMO (cont'd) + +=over 2 + +=item Enjoy nesting (the item) + +Enjoy nesting (the paragraph) + +=over 4 + +=item Enjoy nesting next level (the item) + +Enjoy nesting next level (the paragraph) + +=over 6 + +=item Enjoy nesting 3rd (the item) + +Enjoy nesting 3rd (the paragraph) + +=back + +=back + +=back + +=head1 This Manpage as Slideshow + +In the root directory of the Pod::SAX distribution, run + + make pdf + +and all conversions will happen, finally acroread will be called to +display the slideshow. + +=cut + +--> + <xsl:output method="xml" indent="yes"/> -<xsl:key name="headings" match="para|head2|head3|verbatim|orderedlist|itemizedlist" use="generate-id(preceding::head1[1])"/> +<xsl:key name="headings" + match="/pod/para| + /pod/head2| + /pod/head3| + /pod/verbatim| + /pod/orderedlist| + /pod/itemizedlist" + use="generate-id(preceding::head1[1])"/> <xsl:template match="/"> <slideshow> @@ -12,7 +148,7 @@ <speaker>Ask Bjorn Hansen</speaker> <email>[EMAIL PROTECTED]</email> </metadata> - + <xsl:apply-templates select="/pod/head1[position() > 1]"/> </slideshow> @@ -22,19 +158,13 @@ <xsl:variable name="this-id"> <xsl:value-of select="generate-id(.)"/> </xsl:variable> - + <slide> <title><xsl:apply-templates/></title> <xsl:apply-templates select="key('headings', $this-id)"/> </slide> </xsl:template> -<xsl:template match="para"> - <point> - <xsl:apply-templates/> - </point> -</xsl:template> - <xsl:template match="verbatim"> <source-code> <xsl:apply-templates/> @@ -53,18 +183,64 @@ </b></point> </xsl:template> -<xsl:template match="orderedlist"> - <xsl:apply-templates/> +<xsl:template match="itemizedlist|orderedlist"> + <xsl:param name="level" select="1" /> + <xsl:apply-templates> + <xsl:with-param name="level" select="$level" /> + </xsl:apply-templates> </xsl:template> -<xsl:template match="itemizedlist"> - <xsl:apply-templates/> +<xsl:template match="listitem"> + <xsl:param name="level" select="1" /> + <xsl:for-each select="node()"> + <xsl:choose> + <xsl:when test="name(.) = 'para' + or name(.) = 'listitem' + or name(.) = 'itemizedlist' + or name(.) = 'orderedlist'"> + <xsl:if test="$level < 3"> + <xsl:apply-templates select="."> + <xsl:with-param name="level" select="$level + 1" /> + </xsl:apply-templates> + </xsl:if> + <xsl:if test="$level >= 3"> + <xsl:apply-templates select="."> + <xsl:with-param name="level" select="$level" /> + </xsl:apply-templates> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="c" select="normalize-space(.)" /> + <xsl:if test="$c"> + <point> + <xsl:attribute name="level"> + <xsl:value-of select="$level" /> + </xsl:attribute> + <xsl:value-of select="$c" /> + </point> + <xsl:apply-templates /> + </xsl:if> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> </xsl:template> -<xsl:template match="listitem"> - <point> - <xsl:apply-templates/> - </point> +<xsl:template match="para"> + <xsl:param name="level" select="1" /> + <xsl:variable name='preceder' select="name(preceding-sibling::*[position() = 1])"/> + <xsl:choose> + <xsl:when test="$preceder = 'markup'"> + <!-- ignore the paragraph in a =for section --> + </xsl:when> + <xsl:otherwise> + <point> + <xsl:attribute name="level"> + <xsl:value-of select="$level" /> + </xsl:attribute> + <xsl:apply-templates /> + </point> + </xsl:otherwise> + </xsl:choose> </xsl:template> <xsl:template match="link"> @@ -89,4 +265,4 @@ <xsl:apply-templates/> </xsl:template> -</xsl:stylesheet> \ No newline at end of file +</xsl:stylesheet> #### End of Patch data #### #### ApplyPatch data follows #### # Data version : 1.0 # Date generated : Mon Oct 28 18:18:00 2002 # Generated by : makepatch 2.00_07* # Recurse directories : Yes # Excluded files : (\A|/).*\~\Z # (\A|/).*\.a\Z # (\A|/).*\.bak\Z # (\A|/).*\.BAK\Z # (\A|/).*\.elc\Z # (\A|/).*\.exe\Z # (\A|/).*\.gz\Z # (\A|/).*\.ln\Z # (\A|/).*\.o\Z # (\A|/).*\.obj\Z # (\A|/).*\.olb\Z # (\A|/).*\.old\Z # (\A|/).*\.orig\Z # (\A|/).*\.rej\Z # (\A|/).*\.so\Z # (\A|/).*\.Z\Z # (\A|/)\.del\-.*\Z # (\A|/)\.make\.state\Z # (\A|/)\.nse_depinfo\Z # (\A|/)core\Z # (\A|/)tags\Z # (\A|/)TAGS\Z # (\A|/)RCS\Z # p 'Makefile.PL' 288 1035825195 0100644 # p 'pod2axpoint.xsl' 1885 1035825368 0100644 #### End of ApplyPatch data #### #### End of Patch kit [created: Mon Oct 28 18:18:00 2002] #### #### Patch checksum: 330 9425 59380 #### #### Checksum: 348 10114 50512 #### --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
