Prty::TreeFormatter - Erzeugung von Baumdarstellungen
Prty::Hash
Der Code
use Prty::TreeFormatter; my $t = Prty::TreeFormatter->new([ [0,'A'], [1,'B'], [2,'C'], [3,'D'], [2,'E'], [2,'F'], [3,'G'], [4,'H'], [1,'I'], [1,'J'], [2,'K'], [2,'L'], [1,'M'], [2,'N'], ]); print $t->asText;
produziert
+--A | +--B | | | +--C | | | | | +--D | | | +--E | | | +--F | | | +--G | | | +--H | +--I | +--J | | | +--K | | | +--L | +--M | +--N
Ein Objekt der Klasse repräsentiert einen Baum, der mit Methoden der Klasse dargestellt (visualisiert) werden kann. Die Baumstruktur wird als eine Liste von Paaren an den Konstruktor übergeben. Ein Paar besteht aus der Angabe des Knotens und seiner Ebene [$level, $node]. Der Knoten $node kann ein Objekt oder ein Text sein. Die Ebene $level ist eine natürliche Zahl im Wertebereich von 0 (Wurzelknoten) bis n. Die Paar-Liste kann aus irgendeiner Baumstruktur mit einer rekursiven Funktion erzeugt werden (siehe Abschnitt "EXAMPLE").
Siehe "SYNOPSIS".
Hier ein Beispiel für eine rekursive Methode einer Anwendung, die eine Klassenhierarchie für eine bestimmte Klasse ($self) ermittelt. Die Methode liefert die Klassenhierarchie als Paar-Liste für Prty::TreeFormatter:
sub classHierarchy { my $self = shift; my @arr; for my $cls ($self->subClasses) { push @arr,map {$_->[0]++; $_} $cls->classHierarchy; } unshift @arr,[0,$self]; return wantarray? @arr: \@arr; }
Hier sind die Knoten $node Objekte, deren Text für die Darstellung im Baum durch eine anonyme Subroutine produziert wird. Die Subroutine wird mittels der Option -getText an $t->asText() übergeben:
-getText
my $cls = $cop->findEntity('Prty/ContentProcessor/Type'); my $arrA = $cls->classHierarchy; print Prty::TreeFormatter->new($arrA)->asText( -getText => sub { my $cls = shift; my $str = $cls->name."\n"; for my $grp ($cls->groups) { $str .= sprintf ": %s\n",$grp->title; for my $mth ($grp->methods) { $str .= sprintf ": %s()\n",$mth->name; } } return $str; }, );
Ein Ausschnitt aus der produzierten Ausgabe:
+--Prty/ContentProcessor/Type : Erzeugung : create() : Objektmethoden : entityFile() : entityId() : entityType() : files() : fileSource() : fileSourceRef() : appendFileSource() : name() : pureCode() : Intern : needsTest() : needsUpdate() | +--Yeah/Type | +--Yeah/Type/Export | : Erzeugung | : create() | : Entitäten | : entities() | : Reguläre Ausdrücke | : excludeRegex() | : selectRegexes() | : Verzeichnisse | : adminDirectories() | : rootDirectory() | : Verzeichnisse | : subDirectories() | : Export | : rewriteRules() | : export() | +--Yeah/Type/Language | +--Yeah/Type/Library | +--Yeah/Type/Package | : Erzeugung | : create() | : Eigenschaften | : level() | : levelName() | : Entitäten | : entities() | : hierarchy() | : package() | : subPackages() | : Reguläre Ausdrücke | : regexes() | ...
$t = $class->new(\@pairs);
Liste von Paaren [$level, $node].
Referenz auf Baum-Objekt.
Instantiiere ein Baum-Objekt und liefere eine Referenz auf dieses Objekt zurück.
$str = $class->asText(@opt);
Format der Ausgabe (s.u.)
Callback-Funktion zum Ermitteln des Textes des Knotens. Der Text kann mehrzeilig sein.
Baumdarstellung (String)
Erzeuge eine Text-Repräsentation des Baums und liefere diese zurück.
debug
0 0 A 1 1 B 2 1 C 3 0 D 2 1 E 2 0 F 3 0 G 4 0 H 1 1 I 1 1 J 2 1 K 2 0 L 1 0 M 2 0 N
compact
A B C D E F G H I J K L M N
tree
1.121
Frank Seitz, http://fseitz.de/
Copyright (C) 2017 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Prty, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Prty
CPAN shell
perl -MCPAN -e shell install Prty
For more information on module installation, please visit the detailed CPAN module installation guide.