Einrückungs-Stack

Top  Previous  Next

Skripte > Klassen-Elemente und C++-Befehle > Parserklasse-Methoden > Plugin-Methoden > Einrückungs-Stack

 

Eine häufige Aufgabe bei der Ausgabe von Text besteht darin, bestimmte Abschnitte gegenüber anderen einzurücken. Zur Erleichterung dieser Aufgabe gibt es ein Klassenelement des Plugins, das eine Stapel (einen Stack) von Einrückungs-Werten verwaltet. Ein solcher Wert bezeichnet die Anzahl von Zeichen, z.B. Leerzeichen, die der Ausgabe des eigentlichen Zeilentextes vorausgeschickt werden sollen. Einen Stack solche Werte gibt es, um mit verschachtelte Einrückungen arbeiten zu können.

 

Beispiel:

 

Ein typischer Fall sind die Einrückungen, die Programmcode besser lesbar machen sollen:

 

for ( int i = 0; i < 10; i++)

{

if ( i == 5 )

{

func1 ();

func2 ();

}

}

 

Hier wird zunächst die for-Schleife eingerückt, dann die if-Abfrage und dann werden die Funktionsaufrufe nochmals weiter eingerückt. Beim Schließen der geschweiften Klammern wird jeweils zu vorherigen Einrückung zurückgegangen.

Befinden sich die nicht eingerückten Texte der Code-Zeilen z.B. in dem Vektor (vstr) v, so kann die obige Ausgabe folgendermaßen erreicht werden:

 

{{

PushIndent(2);  // gesamten Text 2 Zeichen einrücken

 

for( int i == 0; i < v.size(); i++)

{

if( v[ I ] == "}";  // auf vorherige Einrückung zurück, wenn schließende Klammer folgt

PopIndent( 2 );

 

out << indent << v[ i ];

 

if( v[ I ] == "{";  // weiter einrücken nach öffnender Klammer

IncrIndent( 2 );

}

}}

 

 

Die zentrale Anweisung dieses Beispiels ist:

 

out << indent << v[ i ];

 

 

indent ist ein Klassenelement, das zum einen den Stack der Einrückungwerte enthält, das zum anderen aber auch - wie hier gezeigt - direkt zur Formatierung der Ausgabe verwendet werden kann, indem es einem Stream übergeben wird, d.h. indem es in die Kette der mit "<<" verbundenen Ausgabeelementen für out eingefügt wird. Normalerweise wird es als erstes der Elemente aufgeführt werden. Andernfalls entstünden statt Einrückungen Lücken im Text.

 

indent kann direkt nur innerhalb der <<-Kette verwendet werden.

 

 

str  IndentStr() const

 

Über diese Funktion erhält man einen String, der nur aus Leerzeichen besteht. Die Länge des Strings ist durch den aktuell oben auf dem Stack liegenden Wert bestimmt.

 

 

Methoden, die den Wert der Einrückung bestimmen, sind:

 

void SetIndenter(char xc)

 

Das Zeichen, das zur Einrückung verwendet wird ist standardmäßig das Leerzeichen. Mit der Funktion SetIndenter kann auch ein anderes Zeichen hierfür gesetzt werden, z.B. der Tabulator: '\t'.

 

 

void PushIndent( int xi )

 

Durch diesen Befehl wird der neue Wert xi zur Einrückung auf den Stack gelegt.

 

 

void IncrIndent( int xi )

 

Durch diesen Befehl wird ebenfalls ein neuer Wert zur Einrückung auf den Stack gelegt. Der neue Wert ergibt sich als Summe aus dem letzen Wert und der Zahl xi.

 

void PopIndent()

 

Der letze Einrückungs-Wert wird vom Stack entfernt.

 

 

void ClearIndents()

 

Alle Werte werden aus dem Einrückungs-Stack entfernt.

 

 

 

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English