NAME
Prty::ContentProcessor::Type - Basisklasse für Entitäts-Typen
BASE CLASSES
DESCRIPTION
Diese Klasse ist die Basisklasse für alle Plugin-Klassen, die im ContentProcessor mit registerType() definiert werden.
Definition von Subklassen
Die Plugin-Klassen bilden eine Hierarchie von Klassen, an deren Spitze eine allgemeine, abstrakte Klasse steht (stehen sollte), die von der dieser Klasse abgeleitet ist:
package Yeah::Type;
use base qw/Prty::ContentProcessor::Type/;
__PACKAGE__->def(
ContentAllowed=>0,
Attributes=>[qw/
Name
/],
);
Ob der Abschnitt eines Typs einen Inhalt zulässt und welches die zulässigen Attribute sind, wird mit den Klassen-Attributen ContentAllowed
und Attributes
festgelegt. Obige Basisklassen-Definition vereinbart, dass per Default kein Content erlaubt ist und dass das Attribut Name
bei allen (Haupt-)Typen vorkommt.
Die abgeleiteten Klassen ergänzen die Attribut-Liste und überschreiben u.U. das ContentAllowed
-Attribut.
Die Methode "create"() erzeugt aus einem Abschnitts-Objekt eine Instanz des betreffenden Typs, eine sog. Entität, und setzt die für den ContentProcessor essentiellen Attribute (siehe Code der Methode). Die Methode wird in der Typ-Klasse überschrieben und von dort aus gerufen:
package Yeah::Type::Program::Shell;
use base qw/Yeah::Type::Program/;
__PACKAGE__->def(
Attributes=>[qw/
<Spezifische Attribute des Typs>
/],
);
sub create {
my ($class,$sec,$cop,$plg) = @_;
return $class->SUPER::create($sec,$cop,$plg,
<Eigenschaften der Entität>
);
}
Standard-Attribute
Die Basisklassenmethode erweitert das Objekt um grundlegende Informationen und Verküpfungen:
- processor
-
Referenz auf die Processor-Instanz. Diese gibt der Entität u.a. Zugriff auf alle anderen Entitäten.
- plugin
-
Referenz auf die Plugin-Definition. Diese wird von der Methode entityId() herangezogen um die Entity-Id zu generieren.
- testable
-
Attribut, das anzeigt, ob die Entität Programmcode repräsentiert und im Änderungsfall getestet werden kann.
Methoden
Ferner implementiert die Basisklasse folgende Methoden, die überschrieben werden können
- entityId()
-
Liefert den eindeutigen Entitätsbezeichner. Die Basisklassenmethode setzt diesen aus dem Typ-Bezeichner und den Werten der @keyVal-Liste des Plugin zusammen. Kann überschrieben werden, wenn der Entitsbezeichner anders gebildet werden soll.
- name()
-
Liefert den Namen der Entität. Die Basisklassenmethode erzeugt diesen durch geringfügige Änderungen aus dem Wert des Abschnitts-Attributs
Name:
. Kann überschrieben werden, wenn der Name anders hergeleitet werden soll.
oder überschrieben werden müssen
- addSubSection()
-
Ergänze die Entität um einen (Sub-)Abschnitt. Die Basisklassenmethode verarbeitet das Abschnitts-Objekt nicht. Die Methode wird überschrieben.
- files()
-
Liefert die Liste aller Ausgabe-Datei-Objekte der Entität. Die Basisklassenmethode liefert eine leere Liste. Die Methode wird überschrieben.
- pureCode()
-
Liefert bei einer testbaren Entität (s. Attribut
testable
) den Quelltext ohne Inline-Doku und Kommentare. Besteht der Quelltext aus mehreren Dateien (z.B. im Falle von C++), werden diese konkateniert geliefert, denn der Code muss nicht kompilierbar/ausführbar sein. Die Basisklassenmethode liefertundef
. Die Methode wird überschrieben.
METHODS
Erzeugung
create() - Überführe Abschnitts-Objekt in Entität
Synopsis
$ent = $class->create($sec,$cop,$plg,@keyVal);
Description
Erweitere Abschnitts-Objekt $sec und blesse es zu einer Entität.
Arguments
- $sec
-
Referenz auf Abschnitts-Objekt.
- $cop
-
Referenz auf ContentProcessor-Objekt.
- $plg
-
Referenz auf Plugin-Definition.
- @keyVal
-
Attribute, die der Entität hinzugefügt werden.
Returns
Zur Entität geblesstes Abschnitts-Objekt.
Sub-Abschnitte
addSubSection() - Ergänze Entität um Subabschnitts-Objekt
Synopsis
$ent->addSubSection($sec);
Description
Diese Basisklassenmethode nimmt keine Verarbeitung vor, sondern kehrt einfach zurück. Sie wird in Subklassen überschrieben.
Arguments
Objektmethoden
entityFile() - Dateiname der Entität
Synopsis
$file = $ent->entityFile;
$file = $ent->entityFile($dir);
Description
Liefere den Dateinamen der Entität. Dieser besteht aus der Entity-Id und der Entity-Extension. Wenn angegeben, wird diesem Dateinamen der Pfad $dir vorangestellt.
Arguments
Returns
Dateiname
entityId() - Eindeutiger Entitätsbezeichner
Synopsis
$entityId = $ent->entityId;
Description
Liefere einen eindeutigen Bezeichner für die Entität.
files() - Liste der Ausgebadateien
Synopsis
@files = $ent->files;
Description
Liefere die Liste der Dateien, die die Entität generiert. Diese Basisklassenmethode liefert eine leere Liste. Sie wird in Subklassen überschrieben.
name() - Name der Entität
Synopsis
$name = $ent->name;
Description
Liefere den Namen der Entität. Dies ist der Wert des Attributs Name:
, bereinigt um Besonderheiten:
ein Sigil am Namensanfang (z.B.
@@
) wird entferntGleichheitszeichen (
=
) innerhalb des Namens (z.B. bei Klassen) werden durch einen Slash (/
) ersetzt
pureCode() - Quelltext ohne Kommentare und Inline-Doku
Synopsis
$str = $ent->pureCode;
Intern
attributes() - Liste der zulässigen Abschnitts-Attribute
Synopsis
@attributes | $attributeA = $class->attributes;
Description
Ermittele die Liste der Namen der zulässigen Abschnitts-Attribute entlang der Klassenhierarchie und liefere diese zurück. Die Liste ist alphabetisch sortiert.
Returns
Liste der Namen der Abschnitts-Attribute. Im Skalar-Kontext wird eine Referenz auf die Liste geliefert.
contentAllowed() - Inhalt im Abschnitt erlaubt?
Synopsis
$bool = $class->contentAllowed;
Description
Ermittele, ob Abschnitte des Entitätstyps einen Inhalt haben dürfen. Wenn ja, liefert die Methode 1, andernfalls 0.
Returns
Boolscher Wert
VERSION
1.098
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2016 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.