use strict; ### ###################################################################### ### ###################################################################### package Devel::Diagram::Render::UXF20::Package; # A UML "package", which is (several) Perl modules sub Render { my ($self, $pckg) = @_; my $xml = < $pckg->{'Name'} $pckg->{'_fileName'} EOT for my $className ( keys %{$pckg->{'Classes'}} ) { next unless $className; #temp $xml .= Render Devel::Diagram::Render::UXF20::Class($pckg->{'Classes'}->{$className}); } $xml .= ' '; return $xml; } ### ###################################################################### ### ###################################################################### package Devel::Diagram::Render::UXF20::Class; # A UML "class" is a Perl "package" sub Render { my ($self, $clss) = @_; my $note = ''; # hmmm? what? my $xml = < $note $clss->{'Name'} $note EOT for my $operationName ( keys %{$clss->{'Operations'}} ) { my $operation = $clss->{'Operations'}->{$operationName}; $xml .= Render Devel::Diagram::Render::UXF20::Operation($operation); } for my $attributeName ( keys %{$clss->{'Attributes'}} ) { my $attribute = $clss->{'Attributes'}->{$attributeName}; $xml .= Render Devel::Diagram::Render::UXF20::Attribute($attribute); } $xml .= ' '; return $xml; } ### ###################################################################### ### ###################################################################### package Devel::Diagram::Render::UXF20::Operation; # Discovered as "sub something {" sub Render { my ($self, $operation) = @_; my $note = ''; # hmmm? what? my $xml = < $operation->{'Name'} $note EOT return $xml; } ### ###################################################################### ### ###################################################################### package Devel::Diagram::Render::UXF20::Attribute; # Discovered by pattern matching sub Render { my ($self, $attribute) = @_; my $note = ''; # hmmm? what? my $xml = < $attribute->{'Name'} $note EOT return $xml; } ### ###################################################################### ### ###################################################################### ### ###################################################################### ### ###################################################################### ### ###################################################################### ### ###################################################################### ### ###################################################################### package Devel::Diagram::Render::UXF20; # A container for all the stuff we'll discover here. use vars qw($VERSION); $VERSION = sprintf("%d.%02d", q$Revision: 1.0 $ =~ /(\d+)\.(\d+)/); ####################################################################################### ####################################################################################### sub Render { my ($cls, $diagram) = @_; my $xml = < EOT my $date = localtime; my $moduleVersion = ''; # hmmm . . . $xml .= < Generator Devel::Diagram::Render::UXF20 version $VERSION Author Glenn Wood Date $date Version $moduleVersion EOT # Loop over all Packages, rendering each via Devel::Diagram::Render::UXF20::Package map { my $pkg = $diagram->{'Packages'}->{$_}; if ( ref($pkg) eq 'HASH' ) {warn Dumper($pkg)."\nFROM: '$_'}"; next;} $xml .= Render Devel::Diagram::Render::UXF20::Package($pkg); } keys %{$diagram->{'Packages'}}; $xml .= ''; return $xml; } 1; =pod =head1 NAME Devel::Diagram::Render::UXF20 - Render a Devel::Diagram as UXF 2.0 =head1 SYNOPSIS =head1 DESCRIPTION See http://www.yy.ics.keio.ac.jp/~suzuki/project/uxf/uxf.html =head1 AUTHOR C is written and maintained by Glenn Wood, http://search.cpan.org/search?mode=author&query=GLENNWOOD. =head1 COPYRIGHT Copyright (c) 2003 Glenn Wood All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut