Eigentlich wollte ich nach dem Modul inventory.py mit dem Modul
inbox.py weitermachen, da diese beiden zusammen gehören. Allerdings werde ich
einen Ausflug zur Artikelklasse einschieben, da einige Funktionen bei inbox.py
eine Rolle spielen.
Wie der Name schon vermuten lässt, handelt es sich bei der Klasse Article um
einen Eintrag im Blog. Anders jedoch als bei ArticleNodes handelt es
sich nicht um die logische Beziehung zu Elternelementen oder nachvolgenden
Artikel sondern um den Inhalt und entsprechende Meta-Angaben.
Ein Objekt der Klasse liest eine Datei (oder ein Datei-ähnliches Objekt) ein, stellt sicher dass alle Metaangaben stimmig sind, kann den eigentlichen Inhalt des Eintrages durch einen Parser schicken um eine HTML-Ausgabe zu erhalten und nach lokalen Verknüpfungen suchen. Aber der Reihe nach:
Der Aufbau eines Eintrages sieht wie folgt aus: Zuerst kommen Zeilen bei denen die Metaangaben stehen. Jeweils ein Schlüsselwort gefolgt durch einen Doppelpunkt und danach der jeweilige Wert der dem Schlüssel zugeordnet ist. Danach erfolgt eine Leerzeile und darauf der eigentliche Blog-Eintrag.
1 2 3 4 | Title: static blog engine – v – article.py Tags: sbe, python Eigentlich wollte ich nach dem Modul […] |
Die folgenden Metaangaben werden momentan verstanden. Groß-/Kleinschreibung ist nicht relevant und fehlende Angaben werden anhand von Einstellungen oder Dateieigenschaften gesetzt.
| Schlüssel | Beschreibung |
|---|---|
| Title | der Titel des Eintrages |
| Author | der Autor |
| Created | Zeitpunkt, wann der Eintrag erstellt wurde, Format: 2010-03-25T11:49:46 |
| Tags | Tags, durch ein Komma getrennt |
| Comments | On oder Off, schaltet Kommentare an oder aus, noch nicht verwendet |
| Trackback | On oder Off, schaltet Trackbacks an oder aus, noch nicht verwendet |
| TagURI | eindeutige Identifizierung des Eintrages, wird automatisch ermittelt |
Ist kein Titel für den Eintrag vorhanden wird innerhalb des Textes nach einer
Überschrift gesucht und die erste die gefunden wird verwendet. Wurde keine
ermittelt wird ein Standardwert aus der Konfiguration benutzte. Für den
Schlüssel Created wird das Erstellungsdatum abgefragt, sofern es sich um ein
Dateiobjekt handelt.
Momentan werden nur zwei Parser unterstützt: Markdown und einen Pseudoparser für HTML – dabei wird einfach der "Text" der Datei unverändert zurückgegeben. Die Unterstützung für andere Parser ist einfach zu bewerkstelligen, sie müssen einfach nur (X)HTML zurückgeben können. Den erstellten HTML-Code wird zwischengespeichert, da es sich meistens um eine relativ aufwendige Prozedur handelt.
Zuerst muss ich klären was ich als "Lokale Links" verstehe. Falls ein Bild mit
einem Eintrag verknüpft wird sollte dies auch einfach in die Inbox gelegt werden
und mit dem Artikel zusammen an den richtigen Ort verschoben werden. Allerdings
gibt es auch Verknüpfungen – z.B. zu einem immer wiederkehrenden Element – die
absolut sind (http://example.com/a_picture.jpg) oder sich auf ein anderes
Verzeichnis verweisen (../previous_day/a_picture.jpg). Nach diesen sollte
nicht gesucht werden. Ich habe für diese den Namen "Lokale Links" gewählt und
sie haben ein recht einfaches Unterscheidundsmerkmal: sie enthalten keinen
Slash /. Eine Art von Links – die in ein Unterverzeichnis
(photos/a_picture.jpg) fällt dabei unter den Tisch obwohl diese durchaus
kopierenswert wären. Da dies meiner Ansicht nach nicht allzuoft vorkommt, kann
man ein Unterverzeichnis auch mal von Hand kopieren oder verschieben. Ein
Artikelobjekt stellt eine Methode zur Verfügung, welche die lokalen Links
extrahiert und zurückgibt.