Mercurial > pub > Impl
diff _doc/make.pl @ 64:259cd3df6e53
Doc generation
Minor fixes
author | wizard |
---|---|
date | Mon, 15 Mar 2010 17:45:13 +0300 |
parents | |
children | 2840c4c85db8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/_doc/make.pl Mon Mar 15 17:45:13 2010 +0300 @@ -0,0 +1,130 @@ +#!/usr/bin/perl -w +use strict; + +use Pod::POM; +use Pod::POM::View::HTML; +use File::Spec; + +our $LibDir = '../Lib/IMPL'; +our $OutDir = 'html'; + +our $index = { name => 'root' }; + +sub process_file { + my ($fname,@path) = @_; + + (my $name = $path[$#path]) =~ s/\.pm$//; + + (my $fileUrl = File::Spec->catfile(@path)) =~ s/\.pm$/.html/i; + + $index->{items}{$name}{name} = $name; + $index->{items}{$name}{url} = $fileUrl; + + (my $fnameOut = File::Spec->catfile($OutDir,@path)) =~ s/\.pm$/.html/i; + + my $dir =$OutDir; + foreach my $part (@path[0..$#path-1]) { + $dir = File::Spec->catdir($dir,$part); + mkdir $dir unless -d $dir; + } + + open my $hPod, "<:encoding(cp1251)", $fname or die "Failed to open $fname for input: $!"; + open my $hOut, ">:encoding(utf-8)", $fnameOut or die "Failed to open $fnameOut for output: $!"; + + my $parser = Pod::POM->new( ); + + my $pom = $parser->parse_file($hPod); + + print $hOut PodViewHTML->print($pom); +} + +sub process_dir { + my ($dirname,@dirs) = @_; + + opendir my $hdir, $dirname or die "faield to open dir $dirname: $!"; + + foreach my $entry (readdir $hdir) { + next if grep $_ eq $entry, '.','..'; + + my $path = "$dirname/$entry"; + + print "$path"; + + if (-d $path) { + print "\n"; + local $index = exists $index->{items}{$entry} ? $index->{items}{$entry} : ($index->{items}{$entry} = {name => $entry}); + process_dir($path,@dirs,$entry); + } elsif ($entry =~ /\.(pm|pod)$/) { + print "\tprocessed\n"; + process_file($path,@dirs,$entry); + } else { + print "\tskipped\n"; + } + } +} + +sub build_index { + my ($hout,$index) = @_; + + print $hout "\n<ul>\n"; + + if ($index->{items}) { + foreach my $itemKey (sort keys %{$index->{items}}) { + my $item = $index->{items}{$itemKey}; + print $hout "<li>"; + print $hout "<a href='$item->{url}'>" if $item->{url}; + print $hout $item->{name}; + print $hout "</a>" if $item->{url}; + build_index($hout,$item) if $item->{items}; + print $hout "</li>\n"; + } + } + + print $hout "</ul>\n"; +} + +`rm -r html`; +mkdir 'html' unless -d 'html'; + +process_dir($LibDir); + +open my $hout, ">:encoding(utf-8)", "$OutDir/index.html" or die "failed to open index.html for output: $!"; + +print $hout <<HEADER; +<html> +<head> +<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/> +<title>IMPL reference</title> +</head> +<body> +HEADER + +build_index($hout,$index); + +print $hout <<FOOTER; +</body> +</html> +FOOTER + +package PodViewHTML; +use base qw(Pod::POM::View::HTML); + +sub view_pod { + my ($self, $pod) = @_; + return "<html>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /> + \n<body bgcolor=\"#ffffff\">\n" + . $pod->content->present($self) + . "</body>\n</html>\n"; +} +sub view_begin { + my ($self,$begin) = @_; + $begin->format =~ /code/i ? return "<pre>\n".join ("",$begin->text())."</pre>\n" : return $self->SUPER::view_begin($begin); +} + +sub view_seq_link { + my ($self,$text) = @_; + + $text->text =~ /(?:(\w+)\s+)(\w+(?:\:\:\w+)*)/; + + +} \ No newline at end of file