Gestaltungsregeln sind Skripte, die mit Rahmen verbunden werden und in den folgenden Situationen ausgeführt werden können:
Rahmen können beliebig viele Gestaltungsregeln haben. Jede Regel kann mit zusätzlichen Parametern versehen werden.
Darüber hinaus können Gestaltungsregeln mit Bedingungen versehen werden welche beliebig geschachtelt werden können.
Auf diese Art und Weise lassen sich komplexe Entscheidungsbäume abbilden.
Typ | Icon | Beschreibung |
Nach Laden | ![]() |
Nach dem Laden der Platzhalter eines Rahmens. Der Rahmen selbst muss keinen Platzhalter haben. |
Nach Größen- und Positionsänderungen | ![]() |
Die Regel wird jedesmal, wenn der Rahmen seine Gösse oder Position im Dokument ändert, ausgeführt. Sie sollten diesen Regeltyp sparsam verwenden. |
Die Ausführung von Gestaltungsregeln kann von Bedingungen abhängig gemacht werden. Neben einer Reihe von Standardbedingungen können Sie auch hier eigene Bedingungen erstellen. Bedingungen können einen ELSE-Zweig haben und beliebig tief geschachtelt werden. Bedingungen können nicht negiert oder mit 'Und' oder 'Oder' verknüpft werden. Die entsprechenden Konstruktionen können aber einfach umformuliert werden:
Eine Regel R soll ausgeführt werden, wenn die Bedingung A nicht erfüllt ist.
Führen Sie in diesem Fall die Regel im else-Zweig aus:
if A
else
R
end
Die Regel R soll ausgeführt werden, wenn die Bedingungen A und B erfüllt sind.
Setzen Sie die zweite Bedingung als Unterbedingung in die erste:
if A
if B
R
end
end
Die Regel R soll ausgeführt werden, wenn entweder die Bedingung A oder die Bedingung B (oder beide) erfüllt sind.
Die naheliegende Lösung, zwei if-Anweisungen hintereinander zu machen, einmal für A und einmal für B, hat einen kleinen Schönheitsfehler : Wenn A und B beide erfüllt sind, wird R zweimal ausgeführt. Verwenden Sie in diesem Fall besser folgende Konstruktion:
if A
R
else
if B
R
end
end
Der Ausführungsstatus von Bedingungen wird automatisch aus den Statusfeldern der darunterliegenden Regeln berechnet. Der Ausführstatus von Bedingungen kann nicht manuell gesetzt werden.
Einige Regeln sind fest eingebaut verfügbar. Hier eine Aufstellung aller Standard-Regeln für Textrahmen und Bilder:
Name | ID | Beschreibung |
Rahmen anpassen | -22 |
Passe die Rahmengröße an den Inhalt an. Mehrzeilige Textrahmen werden in der Höhe angepasst. |
Rahmengröße setzen | -28 |
Setze die Breite und Höhe des Rahmens. |
Rahmengröße proportional setzen | -200 |
Setzt die Größe eines Rahmens proportional. Hierfür wird die gewünsche Größe einer Seite (Horizontal / Vertikal) und optional eine Maximalgröße der anderen Seite angegeben. |
Unsichtbar/Sichtbar | -10 | Mache den Rahmen unsichtbar/sichtbar. Unsichtbare Rahmen können mit frame::show oder in der Ebenenpalette wieder sichtbar gemacht werden. |
Auf Ebene verschieben | -4 |
Verschiebe den Rahmen auf die angegebene Ebene. Existiert die Ebene noch nicht, wird sie hinter der im zweiten Parameter angegebenen Ebene angelegt. Fehlt der erste Ebenenname wird eine neue Ebene mit einem automatischen Namen generiert. Fehlt die zweite Angabe, werden neue Ebenen als vorderste Ebene angelegt. Zusätzlich können Sie festlegen, ob Ebenensperrungen ignoriert werden sollen oder nicht. Achtung: Werden Rahmen auf gesperrte Ebenen verschoben, kann sich dadurch die Dokumentauswahl ändern! |
Text anpassen | -8 | Skaliere den Text so, dass der Rahmen möglichst ausfüllt wird und kein Overset besteht. Wird der erste Parameter auf 'ja' gesetzt, werden Texte ohne Übersatz nicht verändert. |
Rahmen positionieren | -13 | Verschiebe den Rahmen relativ zur Position eines anderen Rahmens der selben Cometgruppe. Der Rahmen muss dabei eine größere Kennung haben, als der Bezugrahmen. |
• Verschiedenes | ||
Beep | -16 | Gibt einen Ton aus wenn die Regel ausgeführt wird. |
Nachricht zeigen | -17 | Zeigt einen Dialog mit einer Nachricht. |
Logmeldung schreiben | -18 | Schreibt eine Meldung in die Logdatei. |
Weitere Standardregeln können hinzukommen.
Die Tabelle beschreibt alle verfügbaren Standardbedingungen.
Name | ID | Beschreibung |
Hochformat | -4 | Ist der Rahmen im Hochformat. |
Auf Ebene | -8 | Liegt der Rahmen auf einer der angegebenen Ebenen? Sie können bis zu vier Ebenennamen angeben. Die Namen können reguläre Ausdrücke (PCRE) sein.
Anfang/Ende von Ebenennamen prüfen Mit '\AEbene' werden alle Ebenen akzeptiert, die mit 'Ebene' beginnen. Mit 'de_DE\Z' finden Sie alle Ebenen, die auf 'de_DE' enden. |
• Gesamttext des Rahmens | ||
Textübersatz | -1 | Hat der Text des Rahmens eine übersatz? |
Letzter Textrahmen | -2 | Ist der Rahmen der letzte oder einzige Rahmen einer Kette verlinkter Textrahmen? |
• Struktur | ||
Sonst | 0 | Fügen Sie einen ELSE-Zweig in die Bedingung ein. |
Weitere Standardbedingungen können hinzukommen.
Sie können beliebig viele eigene Regeln für Rahmen und Textplatzhalter definieren. Die Regeln werden in actions.xml bzw. der Tabelle actions mit den folgenden ClassIDs definiert:
ClassID 36 : Rahmenregeln
Der in actions vergebene Name wird im Popup der Regeln gezeigt. Wenn Sie Trennlinien einfügen wollen, verwenden Sie als Namen ein Minus (-). Mit der Sequenznummer können Sie die Reihenfolge im Menü festlegen.
Die von Adobe bereitgestellten Entwicklungswerkzeuge für Plugins sehen leider keine Popupmenüs mit Untermenüs vor. Sie können Ihre Gestaltungsregeln daher leider auch nicht in Untermenüs sortieren.
Die Skripte von Gestaltungsregeln können alle Skriptfunktionen verwenden. Beachten Sie aber, dass Aufrufe wie document::close zu Fehlern führen können.
Die Skripte sollten mit den folgenden Includes beginnen :
#include "internal/types.h"
#include "internal/text.h"
In allen Aufrufen von Gestaltungsregeln ist der aktuelle Rahmen wie üblich mit gFrame definiert.
Zusätzlich zu den allgemein gültigen globalen Variablen wie gFrame, gDocument, ... sind eine Reihe weiterer globaler Variablen definiert:
Name | Typ | Beschreibung |
gFrameLeftBefore gFrameTopBefore gFrameRightBefore gFrameBottomBefore |
float |
Aktuelle Rahmen-Koordinaten vor Anwenden der Regel. |
gParam1 gParam2 gParam... |
char* |
Jedes Skript hat zusätzliche Paramater, deren Werte in der Palette definiert werden können : Die Werte werden am Rahmen pro Regel und Bedingung hinterlegt. über die Konfiguration der Parameter siehe hier. Wenn die Parameter Zahlen enthalten, müssen diese Zahlen mit val bzw. fval aus dem String ermittelt werden. Die Parameterwerte dürfen im Skript geändert werden. Erlaubt ist eine Maximallänge von 5000 Zeichen. |
gWhen |
int |
In welcher Situation wurde die Regel aufgerufen? Einer der Werte 1, 2, 4, 8 oder 16, siehe hier. |
Im Gegensatz zu allen anderen globalen Variablen dürfen die Inhalte von gParam1-n im Skript geändert werden. Der String darf dabei aber nicht länger als 5000 Zeichen werden. Änderungen an den Variablen gelten nur innerhalb der ausführenden Regel.
Die Felder inputdocumentation und outputdocumentation werden für die in der Palette angezeigte Skriptbeschreibung und die Parameter verwendet. Folgende Syntax wird erwartet:
Feld | Inhalt | Beschreibung |
inputdocumentation | Standard_Situationen##Erlaubte_Situationen##Beschreibung | Die ersten beiden Angaben sind jeweils eine Zahl.
Sie geben an, wann das Skript standardmässig ausgeführt werden soll (erste Angabe) und welche Situationen
überhaupt erlaubt sind (zweite Zahl). Unten folgt ein Beispiel.
Folgende Werte sind definiert (und können jeweils addiert werden) : 2 ![]() 1 ![]() 32 ![]() 4 ![]() 8 ![]() Das dritte Feld enthält eine Kurzbeschreibung der Regel, die in den Tooltips der Palette gezeigt wird. |
outputdocumentation | ParamLabel1##ParamLabel2##ParamLabel3##ParamLabel3
ParamLabelN = Label[^^Defaultvalue][////Beschreibung] |
Die Strings werden zur Beschriftung der Parameter verwendet, die jede Regel haben darf. Die Angaben sollten kurz sein! Am Ende des Namens (noch hinter einem mit ^^ getrennenten möglichen Defaultwert, aber vor eventuellen Parameterlisten) kann eine Beschreibung des Parameters angefügt werden. Der Beschreibung wird als Tooltip am Parameter gezeigt. Die Beschreibung beginnt mit der Einleitung //// und darf, um sie von eventuellen Parameterlisten unterscheiden zu können, keine Zeilentrenner enthalten. Zeilentrenner innerhalb der Beschreibung können mit der Angabe <br> erzeugt werden. Weitere HTML-Tags sind nicht definiert. Beachten Sie bitte:
|
Hier ein Beispiel für die Beschreibung einer Regel.
inputdocumentation einer Gestaltungsregel, die nach dem Laden ausgeführt werden soll, aber für alle anderen Situationen außer nach dem Aufbau erlaubt sein soll. Beim Einfügen der Regel wird dann automatisch immer der Pfeil gesetzt sein. ändert ein Benutzer diese Einstellung, kann er alle Felder außer den Bausteinen aktivieren.
2##15##Ihre Dokumentation
2 ist "Laden"
Regeln haben häufig eine feste Liste von Werten für einen Parameter, die in einem Popup gezeigt werden sollen. Sie können dem Parameternamen eine durch Zeilentrenner (\n, \n\r, \r, 
, 
) getrennte Liste von Werten mitgeben*. Diese Werte werden dann in einem Popup hinter dem Parameternamen gezeigt. Im Dokument hinterlegt wird dann immer der ausgewählte Wert des Popupmenüs. Paramentername und -werte werden getrimmt (alle Whitespaces davor und dahinter werden entfernt). Als Parameterwert wird der im Popup ausgewählte Text weitergegeben.
Ein ! am Beginn eines Eintrages markiert den Eintrag als Default-Eintrag. Ein Minus (-) erzeugt einen Trenner im Popup.
* In den Eingabefeldern der Workbench können leider keine Zeilentrenner eingegeben werden, bzw. werden diese Zeilentrenner automatisch wieder entfernt. Sie können als Trenner der einzelnen Werte von Popupmenüs daher auch die Zeichenfolge :I: (Doppelpunkt, großes i, Doppelpunkt) verwenden.
Um Parametern ohne Wertelisten einen Defaultwert zuzuweisen, schreiben Sie diesen Wert, getrennt durch ^^ (und vor einer möglichen, mit //// getrennten Beschreibung des Parameters), hinter den Namen des Parameters.
Gestaltungsregel mit den zwei Parametern X und Y . X kann die Werte links/mitte/oben haben. X kann die Werte oben/mitte/unten haben. Beide Werte können über Popupmenüs eingestellt werden. Der Parameter Abstand soll mit dem Wert 14,1 vorbelegt werden.
<outputdocumentation>X links !mitte rechts ##Y:I:oben:I:!mitte:I:unten ##Abstand^^14,1##[unbenutzt] </outputdocumentation>
Die Einträge der Popupmenüs können auch dynamisch geladen werden, wenn der jeweilige Dokument-Rahmen in der Palette Gestaltungsregeln gezeigt wird. Die Einträge der Popupmenüs können dabei über Standardfunktionen (z.B. alle verfügbaren Absatzstile) geladen werden. Erfüllt keine der Standardfunktionen Ihre Wünsche, können Sie auch selbst ein Skript schreiben und das Popup damit füllen.
In der Werteliste des Parameters geben Sie dazu anstelle einzelner Werte das Schlüsselwort @LOADLIST gefolgt von der Funktion oder der ID Ihrer definierten Aktion an :
@LOADLIST Standardfunktion | ActionID [Defaulteintrag]
Das Popup enthält als Standard immer den Wert "Leer". Zwischen diesem Eintrag und den dynamischen Werten wird ein Trenner eingefügt. Es kann nur ein @LOADLIST-Eintrag pro Parameter angegeben werden.
Der zweite Parameter einer Gestaltungsregel kann als Wert einen existierenden Absatzstil bekommen. Wurde noch kein Wert ausgewählt, wird Parastyle 1 als Standard ausgewählt.
<outputdocumentation>Variable Werte links !mitte rechts ##Stil @LOADLIST parastyles "Parastyle 1" ##[unbenutzt] ...
Die folgenden Standardlisten sind definiert. Sie werden einfach über ihren Namen (case sensitiv) angesprochen. Nach dem Funktionsnamen kann eine Zahl oder ein String zur Definition des Defaulteintrages folgen.
Funktion | Defaultauswahl | Beschreibung |
parastyles |
String oder Index Fehlt die Angabe, wird der "Leer"-Eintrag des Menüs ausgewählt. Enthält der String Leerzeichen, muss er in Anführungszeichen gesetzt werden. Sie können die Auswahl auch über den Index setzen. Beachten Sie, dass dabei die ersten beiden Einträge ("Leer" und der Trenner) mitgezählt werden und dass die Zählung 0-basiert ist. Ihr eigentlicher erster Eintrag hat also den Index 2. |
Alle im aktuellen Dokument definierten Absatzstile (siehe Palette Absatzformate) |
charstyles | Alle im aktuellen Dokument definierten Zeichenstile (siehe Palette Zeichenformate) |
In dieser Regel werden alle Parameter dynamisch geladen:
<outputdocumentation>Schrift @LOADLIST parastyles 2 ##Zeichenstil @LOADLIST charstyles <outputdocumentation>
Zusätzlich zu den o.g. Standardlisten können auch eigene Listen für Parameter implementiert werden. Diese Skripte müssen die ClassID 44 haben. Sie werden jedesmal ausgeführt, wenn ein Rahmen in der Palette Gestaltungsregeln ausgewählt wird. Im Skript muss jeweils die hier definierte globale StringList gValues gefüllt werden. Folgende globale Variablen sind neben den allgemeinen globalen Variablen und gFrame definiert :
Name | Typ | Beschreibung |
gValues |
StringList |
Diese Werte sollen im Popup angezeigt werden. Sollen die Werte lokalisiert werden, müssen Sie das mit Hilfe der Funktion translate im Skript machen. |
gDefaultEntry | int* |
Index für den Defaulteintrag der Liste. Beachten Sie, dass dabei die ersten beiden Einträge ("Leer" und der Trenner) mitgezählt werden und dass die Zählung 0-basiert ist. Ihr eigentlicher erster Eintrag hat also den Index 2. |
gRuleID | int | ID der aufrufenden Regel |
gRuleName | char* | Name der aufrufenden Regel |
In dieser Regel werden die Werte für den ersten Parameter mit Hilfe der Aktion 20014 geladen:
<outputdocumentation>Werteliste @LOADLIST 20014 ##Unbenutzt##Unbenutzt##Unbenutzt <outputdocumentation>
Das ist ein gültiges Skript zum Laden einer dynamischen Werteliste:
int main () { stringlist::append (gValues, "aaa"); // index 2 stringlist::append (gValues, "bbb"); // index 3 stringlist::append (gValues, "ccc"); // index 4 stringlist::append (gValues, "-"); stringlist::append (gValues, "111"); stringlist::append (gValues, "222"); stringlist::append (gValues, "333"); *gDefaultEntry = 4; return 0; }
Ebenso wie eigene Regeln können auch eigene Bedingungen implementiert werden. Die Bedingungen werden ebenfalls in actions.xml bzw der Tabelle actions mit den folgenden ClassIDs definiert:
ClassID 45 : Bedingungen für Rahmenregeln
Ob eine Bedingung erfüllt ist oder nicht, wird über den return-Wert der main-Funktion des Skriptes angegeben :
Rückgabewert | Beschreibung |
return 0; | Bedingung nicht erfüllt |
sonst | Bedingung erfüllt |
Die Bedingung ist erfüllt, wenn im Parameter 1 der IF-Anweisung eine Zahl ungleich 0 steht. Ist der Parameter 1 gleich 0 (oder ein String) ist die Bedingung nicht erfüllt.
int main () { return val (gParam1); }
Bedingungen verfügen über die gleichen Umgebungsvariablen wie die Regeln, siehe hier.
Die Konfiguration inklusive der Parameterlisten für Bedingungs-Parameter und ihre Beschreibung wird auf die gleiche Weise wie in den Regeln gemacht, siehe hier. Die Angaben zur Ausführung der Bedingung in inputdocumentation müssen angegeben werden, werden aber ignoriert.