cpimg_cat_to_web.pl
--help
| --version
cpimg_cat_to_web.pl
[ --verbose
... | --no_verbose
]
[ --catalog
CATALOG
] [ --webdir
WEBDIR
] [ --wdepattern
WDEPATTERN
]
[ --wsdtemplate
WSDTEMPLATE
] [ --wsddeffname
WSDDEFFNAME
]
[ --cattemplate
CATTEMPLATE
] [ --ifntemplate
IFNTEMPLATE
] [ --overwrite
]
KENNUNG
...
--help
Gibt eine kurze Hilfe aus und zeigt die Voreinstellungen an.
--version
Gibt kurze Hinweise zum Programm und die Version aus.
--verbose
Kopierte Bilddateien und Meldungen über den Programmablauf werden nach STDOUT ausgegeben.
--no_verbose
Diese Option hebt die Wirkung der Option --verbose
auf.
--catalog
CATALOG
Der "Katalog" der Bildergeschichten ist ein Verzeichnis, in dem für jede Bildergeschichte ein Unterverzeichnis liegt. CATALOG
ist der Verzeichnispfad des Katalogs. Die zu kopierenden Bilder liegen in Unterverzeichnissen der Verzeichnisse der Bildergeschichten.
--webdir
WEBDIR
Im Verzeichnis WEBDIR
liegen die Bildergeschichten für das WWW in einzelnen Unterverzeichnissen, die Bilddateien in deren Unterverzeichnissen.
--wdepattern
WDEPATTERN
WDEPATTERN
ist ein Muster für Verzeichnis- oder Dateinamen im WWW-Verzeichnis WEBDIR
, die Bildergeschichten entsprechen. Diese Einstellung wird nur benutzt, wenn keine KENNUNG
in der Befehlszeile angegeben ist. In diesem Fall werden alle Einträge in WEBDIR
mit dem Muster WDEPATTERN
abgeglichen. Das Muster extrahiert aus dem Eintrag eine Kennung.
Wenn der zum Muster passende Verzeichniseintrag (nachfolgend DATEI
genannt) eine Datei (kein Unterverzeichnis) ist, dann bestimmt die Vorlage WSDTEMPLATE
den Namen eines Unterverzeichnisses (nachfolgend UVN
genannt), der zu der Kennung passt. Wenn es keinen Verzeichniseintrag mit dem Namen UVN
gibt, legt das Programm das Unterverzeichnis an. Wenn es dann ein Unterverzeichnis UVN
gibt, aber in diesem Unterverzeichnis keine Datei mit dem Standard-Namen WSDDEFFNAME
, dann wird
nach DATEI
kopiert. Wenn andernfalls UVN
/WSDDEFFNAME
nicht existiert, wird UVN
/DATEI
nach DATEI
kopiert.UVN
/DATEI
Das folgende Beispiel erläutert die Vorgabe-Einstellungen: Das Verzeichnis WEBDIR
enthält die Datei s4711.xml
. Der Name entspricht dem Muster für Bildergeschichten. Das Programm entnimmt aus dem Dateinamen die Kennung 4711
. Der passende Unterverzeichnis-Name ist s4711
. Wenn weder eine Datei noch ein Unterverzeichnis mit diesem Namen existieren, legt das Programm das Unterverzeichnis s4711
an. Wenn dann das Unterverzeichnis s4711
existiert, aber nicht die Datei s4711/story.xml
, dann wird s4711.xml
nach s4711/story.xml
kopiert. Wenn andernfalls s4711/story.xml
existiert, aber nicht s4711/s4711.xml
, dann wird s4711.xml
nach s4711/s4711.xml
kopiert.
--wsdtemplate
WSDTEMPLATE
WSDTEMPLATE
ist die Vorlage für den Namen des Unterverzeichnisses der Bildergeschichte im Verzeichnis WEBDIR
mit einer vorgegebenen Kennung. Der Name des Unterverzeichnisses wird gebildet, indem der Platzhalter ${key}
in WSDTEMPLATE
durch die Kennung ersetzt wird.
--wsddeffname
WSDDEFFNAME
WSDDEFFNAME
ist der Standard-Dateiname einer Bildergeschichte in den Unterverzeichnissen von WEBDIR
. WSDDEFFNAME
wird nur benutzt, wenn keine KENNUNG
in der Befehlszeile angegeben ist und der Name einer Datei im Verzeichnis WEBDIR
dem Muster WDEPATTERN
entspricht.
--cattemplate
CATTEMPLATE
Der Name des Unterverzeichnisses der Bildergeschichte mit einer vorgegebenen Kennung im Verzeichnis CATALOG
ergibt sich, indem in der Vorlage CATTEMPLATE
der Platzhalter ${key}
durch die Kennung ersetzt wird.
--ifntemplate
IFNTEMPLATE
Aus den Bildergeschichten (XML-Dateien) im WWW-Verzeichnis WEBDIR
liest das Programm die Kennungen der benötigten Bilddateien (jpg/@src
). Der Dateiname der zugehörigen Bilddatei wird gebildet, indem in der Vorlage IFNTEMPLATE
der Platzhalter ${img}
durch die Kennung des Bildes ersetzt wird. Bilddateien mit dem passenden Namen werden in allen Unterverzeichnissen des Bildgeschichten-Unterverzeichnisses (s. CATTEMPLATE
) gesucht und in das gleichnamige Unterverzeichnis der Bildgeschichte im WWW-Verzeichnis kopiert. Unterverzeichnisse werden erzeugt, falls nötig. Existierende Bilddateien werden nur dann überschrieben, wenn die Option --overwrite
gesetzt ist.
--overwrite
Existierende Bilddateien überschreiben
Existierende Bilddateien in Unterverzeichnissen des WWW-Verzeichnisses WEBDIR
werden nur dann ersetzt, wenn diese Option gesetzt ist.
KENNUNG
KENNUNG
ist die Kennung einer Bildergeschichte. Wenn die Befehlszeile eine oder mehrere Kennungen von Bildergeschichten enthält, werden nur die Unterverzeichnisse von WEBDIR
verarbeitet, deren Namen sich aus den Kennungen und der Vorlage WSDTEMPLATE
ergeben.
Andernfalls werden zunächst zu allen Dateien in WEBDIR
, deren Name dem Muster WDEPATTERN
entspricht, bei Bedarf entsprechende Unterverzeichnisse erzeugt und dann alle Unterverzeichnisse verarbeitet, deren Name dem Muster WDEPATTERN
entspricht.
Das Programm cpimg_cat_to_web.pl
liest Bildergeschichten (XML-Namensraum http://herbaer.de/xmlns/20080705/imgshow
, imgshow.rng
) in der Vorlage für den Webserver und kopiert die Bilder, auf die diese verweisen, aus dem umfassenden „Katalog” in die passenden Unterverzeichnisse der Vorlage.
Der erste Parameter $args
der Funktionen ist die HASHREF der Befehlszeilen-Argumente.
JpgTagsProcessor
Das package
JpgTagsProcessor
kapselt einen SAX-Behandler, der bei der öffnenen Markierung eines jpg
-Elements eine Funktion aufruft. Der aufgerufenen Funktion wird eine HASHREF als Parameter übergeben, deren Schlüssel die Namen der Attribute des jpg
-Elements sind und deren Werte die Werte der Attribute. Qualifizierten Attributname wird der Namensraum in geschweiften Klammern vorangestellt.
my $filename = "datei.xml"; my $num_jpg_elements = 0; my $code = sub {++$num_jpg_elements}; new JpgTagsProcessor ($code) -> parse_file ($filename); print "$filename enthält $num_jpg_elements jpg-Elemente\n";
process_keys
($args
, $keys
)$keys
ist eine ARRAYREF von Kennungen von Bildergeschichten. Die Funktion ruft ermittelt für jede Kennung den Pfad des zugehörigen Unterverzeichnisses von WEBDIR
(s. WSDTEMPLATE
) und ruft process_websubdir
auf.
process_webdir
($args
, $webdir
, $catalog
)$webdir
ist die Vorlage für den WWW-Server (WWW-Verzeichnis), $catalog
ist das "Katalog"-Verzeichnis, aus dem Bilddateien kopiert werden.
Die Funktion verarbeitet zunächst alle Dateien im Verzeichnis $webdir
, deren Name dem Muster WDEPATTERN
entspricht. Sie legt, falls nötig und möglich, das entsprechenden Unterverzeichnis an (s. WSDTEMPLATE
) und kopiert die Datei in dieses Verzeichnis, falls möglich, mit dem Standard-Namen WSDDEFFNAME
.
Dann ruft sie für alle Unterverzeichnisse von $webdir
, deren Name dem Muster WDEPATTERN
entspricht, die Funktion process_websubdir
auf.
process_websubdir
($args
, $key
, $wsdp
, $catalog
)$key
Die Kennung einer Bildergeschichte. Sie bestimmt zusammen mit der Vorlage CATTEMPLATE
den Namen des Unterverzeichnisses von $catalog
, aus dem die Bilddateien kopiert werden.
$wsdp
Der Pfad eines Unterverzeichnisses des WWW-Verzeichnisses. Alle Dateien in diesem Verzeichnis werden nach Bildverweisen (jpg/@src
- Attributen) durchsucht. Die Bilddateien werden in Unterverzeichnisse dieses Verzeichnisses kopiert.
$catalog
Das Katalog-Verzeichnis.
Die Funktion ermittelt zunächst das Unterverzeichnis von $catalog
zur Kennung $key
und von diesem Verzeichnis eine Liste aller Unterverzeichnisse.
Sie definiert dann einen Behandler für jpg
-XML-Elemente. Aus dem Bildschlüssel (Attribut src
) und der Vorlage IFNTEMPLATE
bestimmt der Behandler den Namen der Bilddatei. Er sucht die Dateien dieses Namens in allen Unterverzeichnissen der Liste und kopiert sie in die gleichnamigen Unterverzeichnisse von $wsdp
. Unterverzeichnisse von $wsdp
werden bei Bedarf erzeugt.
Die Funktion JpgTagsProcessor
::parse_file
verarbeitet alle Dateien in $wsdp
und ruft für jedes jpg
-Element die Behandlungsfunktion auf. Ob die verarbeitete Datei überhaupt eine "richtige" XML-Datei ist, wird hier gar nicht beachtet. Wenn die Datei nicht als XML-Datei verarbeitet werden kann, dann ist es auch keine.
Das Programm ist mit 5.10 entwickelt. Es benutzt die Standard-Module Fcntl
, File::Spec::Functions
und File::Copy
, das CPAN-Module XML::SAX::ParserFactory
und das Modul Herbaer::Readargs
. Es muss auch ein SAX-Parser eingerichtet sein, den XML::SAX::ParserFactory
findet.