Table of Contents

OOBDTemple - Das OOBD Quellkode-Vorlagenwerkzeug

Warum ein weiteres Vorlagenwerkzeug?

Es gibt sicherlich ein Duzend unterschiedliche Vorlagenwerkzeuge, alle nehmen ein Programmiergerüst und ein paar andere Daten und erstellen daraus einen Programmkode.

Wir aber halten Ausschau nach etwas, mit dem wir schreiben und Quellcode testen können wie üblich, dann aber auch zusätzlich Teile innerhalb des Quellkodes zu finden oder zu identifizieren. Diese gleichartigen Teile möchten wir als Vorlage extrahieren, um sie in anderen Quelldateien zu importieren und zu aktualisieren.

Das Prinzip

Stell Dir vor Du hast einen Quellcode:

overall initialization

some specific variable initialization

a generic doTo loop:

for (i=0 ...

            some specific tasks in here
}

specific shutdown

generic shutdown

Nun stell Dir vor einige Marker in den Quellkode einzufügen, welche mitteilen, welche Teile des Kodes generisch sein sollen. Der andere Teil des Quellkodes bleibt unverändert.

//>>>> oobdtemple >>>>

overall initialization

//<<<< oobdtemple <<<<

some specific variable initialization

//>>>> oobdtemple >>>>

a generic doTo loop:

for (i=0 ...

            //<<<< oobdtemple <<<<

            some specific tasks in here

            //>>>> oobdtemple >>>>

}

//<<<< oobdtemple <<<<

specific shutdown

//>>>> oobdtemple >>>>

generic shutdown

//<<<< oobdtemple <<<<

Wie Du sehen kannst, werden die generischen Teile immer von einem »» oobdtemple »» Kode «« oobdtemple «« Konstrukt eingeschlossen.

Aber um verschachtelten Vorlagenkode zu erlauben, benötigen die Marker einen Identifizierer der angibt zu welcher Vorlage er gehört.

Nun gehören alle Marker zu der “base” Vorlage:

//>>>> oobdtemple base >>>>

overall initialization

//<<<< oobdtemple base <<<<

some specific variable initialization

//>>>> oobdtemple base >>>>

a generic doTo loop:

for (i=0 ...

            //<<<< oobdtemple base <<<<

            some specific tasks in here

            //>>>> oobdtemple base >>>>

}

//<<<< oobdtemple base <<<<

specific shutdown

//>>>> oobdtemple base >>>>

generic shutdown

//<<<< oobdtemple base <<<<

Das würde schon so weit funktionieren, aber es wird wahrscheinlich kompliziert zu erkennen, welcher Eröffnungsmarker zu welchem Abschlußmarker gehört. Aus diesem Grund können die Marker benannt werden. Diese Namen sind optional, aber wenn sie genutzt werden, müssen sie jeweils angeglichen sein.

//>>>> oobdtemple base init >>>>

overall initialization

//<<<< oobdtemple base init <<<<

some specific variable initialization

//>>>> oobdtemple base loop>>>>

a generic doTo loop:

for (i=0 ...

            //<<<< oobdtemple base <<<<

            some specific tasks in here

            //>>>> oobdtemple base >>>>

}

//<<<< oobdtemple base loop <<<<

specific shutdown

//>>>> oobdtemple base shutdown >>>>

generic shutdown

//<<<< oobdtemple base shutdown <<<<

Die oobdtemple Kommandos

Oberhalb dieses Textes haben wir gesehen, wie Quellkode versehen mit Vorlagen-Markern aussieht. Nun lass uns überprüfen wie oobdtemple damit arbeitet:

Zunächst nehmen wir etwas einfaches

oobdtemple --struct : Show template structure

oobdtemple template_name --struct file

Druckt die aktuelle Vorlagenstruktur auf die Standartausgabe in die Datei “file”. Dies ist hilfreich um Fehler zu finden, wenn oobdtemple meldet, dass es strukturelle Vorlagenunterschiede gibt.

oobdtemple --extract : Extrahiere Vorlage

     oobdtemple template_name --extract file

Druckt den aktuellen Vorlageninhalt in <file> auf die Standartausgabe. Dies ist hilfreich um eine “frische” Vorlage aus einem gegebenen Quellkode zu erzeugen.


Nun beginnen wir mit dem Kopieren von Vorlagen aus und in Dateien:

oobdtemple --update : Aktualisieren der Quelldatei

oobdtemple template_name --update sourcefile templatefile

Dies aktualisiert den gegenwärtigen Inhalt von <templatefile> in <sourcefile>. Es stoppt , falls die Vorlagenstruktur zwischen <sourcefile> und <templatefile> unterschiedlich ist

oobdtemple --writetemplate : Aktualisieren der Vorlagendatei

oobdtemple template_name --writetemplate sourcefile templatefile

Dies sichert den aktuellen Vorlageninhalt von <sourcefile> nach <templatefile>. Es stoppt, falls die Vorlagenstruktur zwischen <sourcefile> und <templatefile> unterschiedlich ist


Dies waren die Kommandos um Dateien zu bewerten oder zu modifizieren. Die nächsten zwei Kommandos sollten in den Make Prozess integriert werden, um sicherzustellen dass die Vorlage zu dem Quellkode passt, mit dem gearbeitet werden soll.

oobdtemple --check : Überprüfe Quellkode und die Beständigkeit der Vorlagendatei

oobdtemple template_name --check sourcefile templatefile

Überprüft, ob die Vorlage von <templatefile> 1:1 in dem <sourcefile> eingebunden ist. Diese Routine kommt nach dem Aufruf mit dem Rückgabecode 1 zurück falls nicht, anderenfalls mit 0

Aber weil eine Inkonsistenz zwischen dem Quellkode und der Vorlage in der Entwicklungsphase leicht vorkommen kann, gibt es ein spezielles Kommando, welches nur eine Warnung ausgibt und nicht den kompletten Makeprozess abbricht:

oobdtemple --develop : Warnt bei Inkonsistenz zwischen dem Quellkode und der Vorlage

oobdtemple template_name --develop sourcefile templatefile

Ist das gleiche wie –check, aber es schreibt nur Warnungen auf die Standartfehlerausgabe und kommt mit dem Rückgabewert 0 zurück um den Makeprozess nicht abzubrechen

The oobdtemple Struktur Tests

Weil es offensichtlich viel Schaden im Quellkode anrichten kann, wenn man versucht eine Vorlage in diesen zu integrieren der nicht passt, führt oobdtemple ein paar Tests durch, bevor es die Operation durchführt und die beiden Teile verbindet. Wenn einer der Tests negativ ist, wird die Operation unterbrochen und die Dateien bleiben unverändert: