Platzhalterlisten.
Allgemeine Beispiele zur Verwendung der Klasse linklist finden sie hier.
Platzhalterlisten. Die Modulmethoden bieten die Möglichkeit, Listen von Platzhaltern zu erstellen und zu verändern. Mit Hilfe der erstellten Listen können Aktionen der Dokumentplatzhalter ausgelöst werden (load, store, sync). Die Ergebnisse der Aktionen werden jeweils in den Listenelementen hinterlegt.
static LinkList linklist::alloc(int intent = 0)
Erzeuge eine neue leere Liste für die Bearbeitung von Platzhaltern. Alle Einträge der Liste haben den gleichen Datentyp Link. Mit dem Parameter intent geben Sie an, in welchem Zusammenhang die Liste verwendet werden soll. Die Liste muss mit linklist::release wieder gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | LinkList | Neue leere Liste. Die Liste muss
mit linklist::release wieder gelöscht werden. 0 : Fehler beim Erzeugen der Liste |
|
intent | int | 0 | Intention (Typ) der Liste, siehe hier |
static int linklist::release(LinkList lli)
Lösche eine mit linklist::alloc angelegte Liste und alle ihre Elemente.
Der Inhalt von Listenelementen (links), die noch im Skript verwendet werden, ist nach dem Löschen ungültig und die Verwendung von Elementen gelöschter Listen führt zum Absturz von InDesign® bzw. comet_pdf.
Auch leere Listen ohne Elemente müssen gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Zu löschende Liste. Die Liste und alle ihre Elemente werden gelöscht.
Der Inhalt von Listenelementen (links), die noch im Skript verwendet werden, ist nach dem Löschen ungültig und die Verwendung von Elementen gelöschter Listen führt zum Absturz von InDesign® bzw. comet_pdf. |
static int linklist::clear(LinkList lli)
Entferne alle Einträge aus der Liste (aber nicht die Liste selbst). Der Aufruf ist insbesondere für die Ergebnislisten von sync sinnvoll, da diese Listen sehr viel Speicher belegen können.
Zum Löschen der Liste selbst und ihrer Elemente verwenden Sie die Funktion release.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList |
static int linklist::type(LinkList lli)
Typ (Intention) der Liste.
Intention | Beschreibung |
0 | Unspezifizierte Liste. Die Listen werden mit collect oder collect_any gefüllt. Danach können die Werte der Elemente mit den Funktionen von Link abgefragt werden. |
1 | Liste mit Platzhaltern. Die Listenelemente enthalten die IDs von Platzhaltern. Mit insert_placeholder können neue Elemente in die Liste eingefügt werden. Die Werte der Elemente können mit link::placeholderid erfragt werden. |
2 | Liste mit Produkten. Die Listenelemente enthalten die IDs von Produkten. Mit insert_id können neue Elemente in die Liste eingefügt werden. Die Werte der Elemente können mit link::id, ... erfragt werden. |
Name | Typ | Default | Beschreibung |
Return | int | Intention (Typ} der Liste 0 : Unspezifiziert 1 : Platzhalter 2 : Produkte |
|
lli | LinkList | - | Gültige LinkList |
static int linklist::length(LinkList lli)
Anzahl der Elemente der Liste.
Name | Typ | Default | Beschreibung |
Return | int | Anzahl der Listenelemente | |
lli | LinkList | - | Gültige LinkList |
int linklist::insert_placeholder(
LinkList lli,
int placeholderId,
KeyValues keyValues,
int actionType,
int pos)
Einfügen eines neuen Platzhalters in eine Liste. Der Aufruf ist nur gültig für Platzhalterlisten oder Listen ohne Typ.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList vom Typ 0 oder 1 |
plID | int | - | ID eines Platzhalters |
keyValues | KeyValues | 0 | Liste von Schlüssel-Wert-Paaren. Enthält die Liste Einträge, werden nur Platzhalter verarbeitet, bei denen alle Funktionsvariablen mit den angegebenen Schlüsseln die zugehörigen Werte haben. Um ODER-Verknüpfungen zu definieren, legen Sie für den jeweiligen Platzhalter mehrere Einträge in der Liste lli an. |
actionType | int | 0 | Aktion, die die angeforderten Funktionsvariablen-Werte definiert.
Erforderlich, wenn keyValues angegeben wurde
Gültige Werte sind:
|
position | int | -1 | Einfügeposition. Das neue Element wird vor der angegebenen Position eingefügt.
Listenpositionen werden bei 0 beginnend gezählt. -1 Anfügen |
Fülle eine Liste mit verschiedenen Platzhalter-Definitionen
#include "internal/types.h" int main () { LinkList lli = linklist::alloc (1); // Platzhalter-Liste // Platzhalter mit bestimmter ID: int err = linklist::insert_placeholder (lli, 123); // beliebige ID, erforderlicher Funktionsvariablen-Wert: KeyValues keyValues = keyvalues::alloc ("resultEntityId", "name"); err = linklist::insert_placeholder (lli, 0, keyValues, kLoadAction); // beliebige ID, alternativer Funktionsvariablen-Wert: keyvalues::put (keyValues, "resultEntityId", "description"); err = linklist::insert_placeholder (lli, 0, keyValues, kLoadAction); // mehrere UND verknüpfte Funktionsvariablen-Werte: keyvalues::put (keyValues, "resultEntityId", "label"); keyvalues::put (keyValues, "tag", "useForTableOfContent"); err = linklist::insert_placeholder (lli, 0, keyValues, kLoadAction); // FEHLER! keyValues darf nur zusammen mit actionType angegeben werden: err = linklist::insert_placeholder (lli, 0, keyValues); // FEHLER! ungültiger actionType: err = linklist::insert_placeholder (lli, 0, keyValues, 7); // Gültig, aber: ID 0 _ohne_ Werteliste liefert keine Ergebnisse: err = linklist::insert_placeholder (lli, 0); // Gültig, aber: ID 0 mit leerer Werteliste liefert ebenfalls keine Ergebnisse: keyvalues::clear (keyValues); err = linklist::insert_placeholder (lli, 0, keyValues, kLoadAction); linklist::release (lli); keyvalues::release (keyValues); return err; }
static int linklist::insert_id(
LinkList lli,
int classid,
int id,
int id2 = 0,
int id3 = 0,
char* sid = "",
int position = -1)
Einfügen einer neuen Produkt-ID in eine Liste. Nur gültig für Objektlisten und Listen ohne Typ.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList vom Typ 0 oder 2 |
classid | int | - | Klassennummer des Platzhalters |
id | int | - | ID des Objektes, mit dem der Platzhalter verbunden ist |
id2 | int | 0 | ID2 des Objektes, mit dem der Platzhalter verbunden ist |
id3 | int | 0 | ID3 des Objektes, mit dem der Platzhalter verbunden ist |
sid | String oder char* | "" | StringID des Objektes. |
position | int | -1 | Einfügeposition. Das neue Element wird vor der angegebenen Position eingefügt.
Listenpositionen werden bei 0 beginnend gezählt. -1 Anfügen |
static int (
LinkList lli,
int classid,
int id = 0,
int id2 = 0,
int id3 = 0,
int position = -1,
char* sid = "")
Einfügen eines neuen Elementes in eine Liste. Die Parameterzahl der Funktion muss zum Listentyp passen, Platzhalterlisten haben eine Zahl, Objektlisten vier.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList |
⇨ Objektliste | |||
classid | int | - | Klassennummer des Platzhalters |
id | int | - | ID des Objektes, mit dem der Platzhalter verbunden ist |
id2 | int | - | ID2 des Objektes, mit dem der Platzhalter verbunden ist |
id3 | int | - | ID3 des Objektes, mit dem der Platzhalter verbunden ist |
position | int | -1 | Einfügeposition. Das neue Element wird vor der angegebenen Position eingefügt.
Listenpositionen werden bei 0 beginnend gezählt. -1 Anfügen |
sid | String oder char* | "" | StringID des Objektes. |
⇨ Platzhalter-IDs oder unbestimmter Typ | |||
plID | int | - | ID eines Platzhalters |
position | int | -1 | Einfügeposition. Das neue Element wird vor der angegebenen Position eingefügt.
Listenpositionen werden bei 0 beginnend gezählt. -1 Anfügen |
static int (
LinkList lli,
int classid,
int id = 0,
int id2 = 0,
int id3 = 0,
char* sid = "",
int position = -1)
Wie insert, aber mit veränderter Parameterreihenfolge. Die StringID folgt direkt den drei ObjektIDs.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList |
⇨ Objektliste | |||
classid | int | - | Klassennummer des Platzhalters |
id | int | - | ID des Objektes, mit dem der Platzhalter verbunden ist |
id2 | int | - | ID2 des Objektes, mit dem der Platzhalter verbunden ist |
id3 | int | - | ID3 des Objektes, mit dem der Platzhalter verbunden ist |
sid | String oder char* | "" | StringID des Objektes. |
position | int | -1 | Einfügeposition. Das neue Element wird vor der angegebenen Position eingefügt.
Listenpositionen werden bei 0 beginnend gezählt. -1 Anfügen |
⇨ Platzhalter-IDs oder unbestimmter Typ | |||
plID | int | - | ID eines Platzhalters |
position | int | -1 | Einfügeposition. Das neue Element wird vor der angegebenen Position eingefügt.
Listenpositionen werden bei 0 beginnend gezählt. -1 Anfügen |
static Link linklist::get(LinkList lli, int position)
Hole ein Element der Liste. Das erhaltene Element darf niemals mit link::release gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | Link | Element an der angegebenen Listenposition oder 0 | |
lli | LinkList | - | Gültige LinkList |
position | int | - | 0-basierte Listenposition. Ist die Position -1 oder größer als die Listenlänge, wird das letzte Listenelement zurückgegeben. |
static int linklist::find(
LinkList lli,
int classid,
int id = 0,
int id2 = 0,
int id3 = 0,
char* sid = "")
Enthält die Liste ein Element mit den angegebenen Werten? Es wird die (0-basierte) Position des ersten gefundenen Elementes zurückgegeben. Die Parameterzahl der Funktion muss zum Listentyp passen, Platzhalterlisten haben eine Zahl, Produktlisten vier.
Name | Typ | Default | Beschreibung |
Return | int | Listenposition oder -1 | |
lli | LinkList | - | Gültige LinkList |
⇨ Objektliste | |||
classid | int | - | Klassennummer des Platzhalters |
id | int | - | ID des Objektes |
id2 | int | - | ID2 des Objektes |
id3 | int | - | ID3 des Objektes |
sid | String oder char* | "" | StringID des Objektes. |
⇨ Platzhalter-IDs oder unbestimmter Typ | |||
plID | int | - | ID eines Platzhalters |
static int linklist::remove(
LinkList lli,
int classid,
int id,
int id2,
int id3,
char* sid = "")
Entfernen alle Auftreten eines Elementes aus einer Liste. Verweise auf die gelöschten Element sind danach ungültig. Die Parameterzahl der Funktion muss zum Listentyp passen, Platzhalterlisten haben eine Zahl, Objektlisten vier.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList |
⇨ Objektliste oder unbestimmter Typ | |||
classid | int | - | Klassennummer des Platzhalters |
id | int | - | ID des Objektes |
id2 | int | - | ID2 des Objektes |
id3 | int | - | ID3 des Objektes |
sid | String oder char* | "" | StringID des Objektes. |
⇨ Platzhalter-IDs oder unbestimmter Typ | |||
plID | int | - | ID eines Platzhalters |
Fülle eine Liste und lösche danach gleich wieder einige Einträge
int main () { int i = 0; LinkList lli = linklist::alloc (2); // Liste mit Produkt-IDs Link lk;
// Liste füllen for (i=1; i<6; i++) linklist::insert (lli, 1, i, i*2, i*3); linklist::insert (lli, 1, 11, 22, 33, 1); linklist::insert (lli, 1, 11, 22, 33, 4);
// Alle Elemente <11, 22, 33> aus der Liste löschen linklist::remove (lli, 1, 11, 22, 33);i = 0; for ( lk = linklist::first (lli); lk != 0; lk = linklist::next (lli)) { showmessage ("3. Liste %d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
linklist::release (lli); return 0; }
static int linklist::remove_pos(LinkList lli, int position)
Entfernen des angegebenen Elementes aus einer Liste. Verweise auf dieses Element sind danach ungültig.
Name | Typ | Default | Beschreibung |
lli | LinkList | - | Gültige LinkList |
position | int | - | 0-basierte Listenposition. Ist die Position -1 oder größer als die Listenlänge, wird das letzte Listenelement gelöscht. |
static Link linklist::first(LinkList lli)
Hole das erste Element einer Liste. Ist die Liste leer oder kein weiteres Element mehr verfügbar, gibt der Aufruf 0 zurück.
Name | Typ | Default | Beschreibung |
Return | Link | Gefundenes Element der Liste oder 0. | |
lli | LinkList | - | Gültige LinkList |
Fülle eine Liste und durchlaufe sie einmal vorwärts.
int main () { int i = 0; LinkList lli = linklist::alloc (2); // List mit Produkt-IDs Link lk;
// Liste füllen for (i=1; i<6; i++) linklist::insert (lli, 1, i, i*2, i*3); linklist::insert (lli, 1, 11, 22, 33, 1); linklist::insert (lli, 1, 11, 22, 33, 4);
// Schreibe alle Elemente i = 0; for ( lk = linklist::first (lli); lk != 0; lk = linklist::next (lli)) { showmessage ("1. Liste %d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
linklist::release (lli); return 0; }
Das zweite Beispiel füllt ebenfalls eine Liste. Dann wird die Listenposition auf einen bestimmten Eintrag der Liste gestellt und die Liste einmal von dort aus durchlaufen.
int main () { int i = 0; LinkList lli = linklist::alloc (2); // List of product (record) ids Link lk;
// Liste füllen for (i=1; i<6; i++) linklist::insert (lli, 1, i, i*2, i*3); linklist::insert (lli, 1, 11, 22, 33, 1); linklist::insert (lli, 1, 11, 22, 33, 4);
// Listenanfang auf das Element <3, 6, 9> setzen linklist::set_pos (lli, linklist::find (lli, 1, 3, 6, 9)); i = 0; for ( lk = linklist::current (lli); lk != 0; lk = linklist::next (lli)) { showmessage ("2. Liste %d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
linklist::release (lli); return 0; }
static Link linklist::next(LinkList lli)
Hole das nächste Element einer Liste. Ist die Liste leer oder kein weiteres Element mehr verfügbar, gibt der Aufruf 0 zurück.
Name | Typ | Default | Beschreibung |
Return | Link | Gefundenes Element der Liste oder 0. | |
lli | LinkList | - | Gültige LinkList |
static Link linklist::prev(LinkList lli)
Hole das vorhergehende Element einer Liste. Ist die Liste leer oder kein weiteres Element mehr verfügbar, gibt der Aufruf 0 zurück.
Name | Typ | Default | Beschreibung |
Return | Link | Gefundenes Element der Liste oder 0. | |
lli | LinkList | - | Gültige LinkList |
static Link linklist::last(LinkList lli)
Hole das letzte Element einer Liste. Ist die Liste leer oder kein weiteres Element mehr verfügbar, gibt der Aufruf 0 zurück.
Name | Typ | Default | Beschreibung |
Return | Link | Gefundenes Element der Liste oder 0. | |
lli | LinkList | - | Gültige LinkList |
static Link linklist::current(LinkList lli)
Hole das aktuelle Element einer Liste. Ist die Liste leer oder kein weiteres Element mehr verfügbar, gibt der Aufruf 0 zurück.
Name | Typ | Default | Beschreibung |
Return | Link | Gefundenes Element der Liste oder 0. | |
lli | LinkList | - | Gültige LinkList |
static int linklist::set_pos(LinkList lli, int position)
Setze die aktuelle Listenposition. Listenpositionen kleiner 0 oder größer Listenlänge (length) setzen die Listenposition auf den Anfang der Liste.
Name | Typ | Default | Beschreibung |
lli | LinkList | - | Gültige LinkList |
position | int | - | 0-basierte Listenposition. Ist die Position <0 oder größer als die Listenlänge, die Listenposition auf den Listenanfang gesetzt. |
Fülle eine Liste und durchlaufe sie vom Element (1, 3, 6, 9) ausgehend bis zum Ende.
int i = 0; LinkList lli = linklist::alloc (); Link lk;
for (i=1; i<6; i++) linklist::insert (1, i, i*2, i*3);
i = 0; linklist::set_pos (linklist::find (lli, 1, 3, 6, 9)); for ( lk = linklist::first (lli); lk != 0; lk = linklist::next ()) { showmessage ("%d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
static int linklist::load(LinkList lli, int designate = kDesignateDocument)
Neuladen von verknüpften Platzhaltern des Dokumentes. Die Funktion führt die Laden-Aktionen der gefundenen Platzhalter im angegebenen Bereich aus.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList vom Typ 1 (Platzhalter-IDs) oder 2 (Produkt-IDs). Bei Listen vom Typ 0 werden eventuelle Listeneinträge ignoriert und alle Platzhalter der Zielrahmen/-texte bearbeitet. |
⇨ Wo soll nach Platzhaltern im Dokument gesucht werden? Es gibt drei Möglichkeiten. | |||
linklist::load (lli) linklist::load (lli, kDesignateVisibleLayers) |
|||
designate | int | kDesignateDocument | Welche Teile des Dokumentes sollen bearbeitet werden? kDesignateCursor kDesignateSelected kDesignateDocument kDesignateVisibleLayers kDesignateActiveLayer |
linklist::load (lli, 0, gItemRef) |
|||
designate | int | - | unbenutzt |
itemRef | ItemRef | - | Bearbeite nur diesen Rahmen. |
linklist::load (lli, -2, 0, 0) linklist::load (lli, 0, kEnd, gItemRef) |
|||
start | int | - | Ab welcher Textposition sollen die Platzhalter neu geladen werden? Befindet sich die Anfangsposition
innerhalb eines Platzhalters, wird sie automatisch bis zum Beginn des Platzhalters nach vorne verschoben. >= 0 : Textposition kSelection : Aktuelle Textauswahl. Die folgende Längeangabe wird in diesem Fall ignoriert. |
len | int | - | Länge des Textes, dessen Platzhalter neu geladen werden sollen. Befindet sich die Endposition innerhalb
eines Platzhalters, wird sie automatisch bis zum Platzhalterende nach hinten verschoben. >= 0 : Längenangabe kEnd : Textende |
itemRef | ItemRef | - | 0 : aktuellen Text bearbeiten sonst Text dieses Rahmens bearbeiten |
Aktualisiere alle Platzhalter des aktuellen Dokumentes.
#include "internal/types.h"
int main() { LinkList lli = linklist::alloc(); // Use an unspecified list here only
linklist::load(lli, kDesignateDocument); linklist::release(lli);
return 0; }
Aktualisiere alle Sortennamen, Familiennamen, Namen und Spezieskürzel im Dokument.
int main () { int i = 0; LinkList lli = linklist::alloc (1); // Platzhalterliste Link lk;
// Liste füllen linklist::insert (lli, 1); // Sortenname linklist::insert (lli, 3); // Familienname linklist::insert (lli, 4); // Name linklist::insert (lli, 6); // Spezieskürzel
linklist::load (lli);
linklist::release (lli); return 0; }
Hier einige Beispiele über die Verwendung der Parameter zur Bestimmung der Zielobjekte
linklist::load (lli); // Gesamtes Dokument linklist::load (lli, 1); // Gesamtes Dokument linklist::load (lli, 2); // Aktuelle Rahmenauswahl
linklist::load (lli, 0, frame); // Diesen Rahmen bearbeiten linklist::load (lli, 0, kEnd, frame); // Gesamter Text eines Rahmens linklist::load (lli, 0, kEnd, 0); // Gesamter aktiver Text linklist::load (lli, -2, 0, 0); // Aktuelle Textauswahl
// // Der folgende Aufruf ist missverständlich : // Verwende die Position der aktuellen Textauswahl // aber nicht unbedingt den aktuellen Text. // linklist::load (lli, -2, 0, frame);
static int linklist::store(LinkList lli)
Zurückschreiben von verknüpften Platzhaltern des Dokumentes in den Datenbestand. Die Funktion führt die Store-Aktionen der gefundenen Platzhalter im angegebenen Bereich aus.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList mit type = 1 oder 2 Bei Listen vom Typ 0 (meist in Aufrufen von collect oder collect_any verwendet) werden eventuelle Listeneinträge ignoriert und alle Platzhalter der Zielrahmen/-texte bearbeitet. |
⇨ Wo soll nach Platzhaltern im Dokument gesucht werden? Es gibt drei Möglichkeiten. | |||
linklist::store (lli) linklist::store (lli, kDesignateVisibleLayers) |
|||
designate | int | kDesignateDocument | Welche Teile des Dokumentes sollen bearbeitet werden? kDesignateCursor kDesignateSelected kDesignateDocument kDesignateVisibleLayers kDesignateActiveLayer |
linklist::store (lli, 0, gItemRef) |
|||
designate | int | - | unbenutzt |
itemRef | ItemRef | - | Bearbeite nur diesen Rahmen. |
linklist::store (lli, -2, 0, 0) linklist::store (lli, 0, kEnd, gItemRef) |
|||
start | int | - | Ab welcher Textposition sollen die Platzhalter neu geladen werden? Befindet sich die Anfangsposition
innerhalb eines Platzhalters, wird sie automatisch bis zum Beginn des Platzhalters nach vorne verschoben. >= 0 : Textposition kSelection : Aktuelle Textauswahl. Die folgende Längeangabe wird in diesem Fall ignoriert. |
len | int | - | Länge des Textes, dessen Platzhalter neu geladen werden sollen. Befindet sich die Endposition innerhalb
eines Platzhalters, wird sie automatisch bis zum Platzhalterende nach hinten verschoben. >= 0 : Längenangabe kEnd : Textende |
itemRef | ItemRef | - | 0 : aktuellen Text bearbeiten sonst Text dieses Rahmens bearbeiten |
Siehe die Beispiele bei load
siehe linklist::load
static int linklist::sync(
LinkList lli,
LinkList results,
int doExec = 0,
ItemRef frameRef = 0)
Überprüfen von verknüpften Platzhaltern des Dokumentes. Die Funktion führt die Sync-Aktionen der gefundenen Platzhalter im angegebenen Bereich aus.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList vom Typ 1 (Platzhalter-IDs) oder 2 (Produkt-IDs). Bei Listen vom Typ 0 werden eventuelle Listeneinträge ignoriert und alle Platzhalter der Zielrahmen/-texte bearbeitet. |
results | LinkList | - | Ergebnisliste. Die Liste muss mit alloc initialisiert sein und wird vor der Ausführung geleert. |
doExec | int | 0 | 0 : Ermittle den aktuellen Status der Platzhalter ohne voherige überprüfung 1 : Führe vor der Berechnung die Sync-Aktionen der Platzhalter aus. |
⇨ Welche Dokumentrahmen sollen bearbeitet werden? Bei Angabe eines Rahmens im Parameter itemRef, wird der Parameter designate ignoriert. | |||
designate | int | kDesignateDocument | Welche Teile des Dokumentes sollen bearbeitet werden?
Wird nur ausgewertet, wenn der Parameter itemRef gleich 0 ist. kDesignateCursor kDesignateSelected kDesignateDocument kDesignateVisibleLayers kDesignateActiveLayer |
itemRef | ItemRef | 0 | Bearbeite nur diesen Rahmen. |
Ermittle die Platzhalterdaten aller Sortennamen, Familiennamen, Namen und Spezieskürzel im Dokument.
int main () { int i = 0; LinkList lli = linklist::alloc (1); // Platzhalterliste LinkList rets = linklist::alloc (0); // Beliebige Liste Link lk; String content = string::alloc (); char page[256];
// Liste füllen linklist::insert (lli, 1); linklist::insert (lli, 3); linklist::insert (lli, 4); linklist::insert (lli, 6); linklist::insert (lli, 12); linklist::insert (lli, 44444);
linklist::sync (lli, rets, 0); for ( lk = linklist::first (rets); lk; lk = linklist::next (rets)) { char m[500];
strcpy (m, "Platzhalter %d <%d, %d, %d>"); strcat(m, "\n Inhalt : %s"); strcat(m, "\n Status : %d"); strcat(m, "\n Seite : %d (%s)"); strcat(m, "\n Position : %d-%d"); strcat(m, "\n Textlänge : %d");
showmessage (m, link::placeholderid (lk), link::id (lk), link::id2 (lk), link::id3 (lk), link::gettext (lk, content), link::sync (lk), link::pagenum (lk), link::pagestr (lk, page), link::pos (lk)+link::length (lk) link::textlen (lk)); } linklist::release (rets);
// Nicht gefundene Platzhalter for ( lk = linklist::first (lli); lk; lk = linklist::next (lli)) { if (link::sync (lk) < 0) { showmessage ("Platzhalter %d nicht gefunden", link::placeholderid (lk)); } }
linklist::release (lli); string::release (content); return 0; }
static int linklist::apply(
LinkList lli,
int actionID,
int designate)
Führe eine angegebene Aktion verknüpfte Platzhalter des Dokumentes aus. Die Funktion führt die angegebene Aktion actionID für alle im angegebenen Bereich gefundenden Platzhalter aus.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList vom Typ 1 (Platzhalter-IDs) oder 2 (Produkt-IDs). Bei Listen vom Typ 0 werden eventuelle Listeneinträge ignoriert und alle Platzhalter der Zielrahmen/-texte bearbeitet. |
actionID | int | - | Gültige ID der Datenbanktabelle iQuest.actions. Die Aktion kann ein Skript oder eine SQL-Anweisung sein. |
⇨ Wo soll nach Platzhaltern im Dokument gesucht werden? Es gibt drei Möglichkeiten. | |||
linklist::apply (lli) linklist::apply (lli, kDesignateVisibleLayers) |
|||
designate | int | kDesignateDocument | Welche Teile des Dokumentes sollen bearbeitet werden? kDesignateCursor kDesignateSelected kDesignateDocument kDesignateVisibleLayers kDesignateActiveLayer |
linklist::apply (lli, 0, gItemRef) |
|||
designate | int | - | unbenutzt |
itemRef | ItemRef | - | Bearbeite nur diesen Rahmen. |
linklist::apply (lli, -2, 0, 0) linklist::apply (lli, 0, kEnd, gItemRef) |
|||
start | int | - | Ab welcher Textposition sollen die Platzhalter neu geladen werden? Befindet sich die Anfangsposition
innerhalb eines Platzhalters, wird sie automatisch bis zum Beginn des Platzhalters nach vorne verschoben. >= 0 : Textposition kSelection : Aktuelle Textauswahl. Die folgende Längeangabe wird in diesem Fall ignoriert. |
len | int | - | Länge des Textes, dessen Platzhalter neu geladen werden sollen. Befindet sich die Endposition innerhalb
eines Platzhalters, wird sie automatisch bis zum Platzhalterende nach hinten verschoben. >= 0 : Längenangabe kEnd : Textende |
itemRef | ItemRef | - | 0 : aktuellen Text bearbeiten sonst Text dieses Rahmens bearbeiten |
Analog den Beispielen bei load
sihe linklist::load
static int linklist::collect(
LinkList lli,
int page = 0,
char* layer = "",
int edge = 8,
int sort = 0,
...)
Sammle die mit einem Produkt verknüpften Platzhalter eines gegebenen Dokumentbereiches.
Platzhalter werden über ihre
PlatzhalterID definiert und müssen verknüpft sein. Wird eine Rahmenliste übergeben (layer == "--list--"), werden auch unverknüpfte Platzhalter
aufgesammelt. Sollen auch unverknüpfte Platzhalter
in die Ergebisliste aufgenommen werden können, verwenden Sie bitte die Funktion collect_any. Die Ergebnisse der Suche können
zeilen- oder spaltenweise sortiert werden.
Die Funktion kann dafür verwendet werden, den am weitesten in einer angegebenen Seitenecke liegenden Platzhalter zu finden. In diesem Fall enthält die Ergebnisliste maximal ein Ergebnis. Als Abstand zu einer Ecke wird die Summe von X- und Y-Wert der entsprechenden Rahmenecke verwendet : Linke obere Seitenecke - links oben des Rahmens, Rechte obere Seitenecke - rechts oben des Rahmens. Haben zwei Rahmen den gleichen Abstand, wird der höhere (resp. tiefere) Rahmen verwendet.Im Bild liegt der rote Rahmen mit dieser Abstandsdefinition am nächsten zur linken oberen Seitenecke. Wird er entfernt (oder enthält einen Platzhalter, der nicht verwendet werden soll), gewinnt der grüne Rahmen. (Grün und Blau haben zwar den gleichen Abstand zur Ecke, grün liegt aber höher.) Der orange Rahmen wird nicht gefunden. Er liegt zwar am höchsten, aber er liegt leider auch zeimlich weit rechts (und das ist sowieso nie gut).
Standardmässig werden auch die XY-Koordinaten von Textplatzhaltern berechnet. Diese Angaben sind immer in Punkten relativ zur linken oberen Rahmenecke. Beachten Sie bitte, dass in diesem Fall Platzhalter, die ganz oder teilweise im Übersatz liegen, nicht gefunden werden. Wollen Sie auch Platzhalter des Übersatzes einsammeln, muss die optionale Liste der Platzhalter mit ,0,0 beendet werden, siehe die optionale Parameter in der letzten Zeile der Parameter-Tabelle.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList with type = 0 |
page oder frames | int oder ItemList | 0 | wenn (layer ungleich "--list--") Dokumentseite (1-basiert) 0 - aktuelle Seite wenn (layer = "--list--") Liste von Dokumentrahmen Unter InDesign® Server und comet_pdf ist die aktuelle Seite nicht definiert. |
layer | String oder char* | "" | Einschränkung der Suche auf die angegebene Ebene "" : alle Ebenen "--visible--" : nur sichtbare Ebenen "--active--" : nur die aktive Ebene "--list--" : Zweiter Funktionsparameter ist eine Rahmenliste |
edge | int | kFirstIgnore | Alle Platzhalter oder Platzhalter einer festgelegten Ecke finden kFirstIgnore - alle Platzhalter kFirstLeftTop kFirstRightTop kFirstOuterTop - linke Seiten linke obere Ecke, rechte Seiten rechte obere Ecke kFirstInnerTop - linke Seiten rechte obere Ecke, rechte Seiten linke obere Ecke kFirstLeftBottom kFirstRightBottom kFirstOuterBottom - linke Seiten linke untere Ecke, rechte Seiten rechte untere Ecke kFirstInnerBottom - linke Seiten rechte untere Ecke, rechte Seiten linke untere Ecke |
sort | int | kSortNo | Sortiere die Ergebnisliste kSortNo - nicht sortieren kSortColwise - nach linker Rahmenkante von oben nach unten sortiert. Im obigen Bild ergibt sich blau rot grün orange kSortRowwise - nach Rahmenoberkante von links nach rechts sortiert. Im obigen Bild ergibt sich orange rot grün blau kSortByZOrder - Ein Rahmen, der einen anderen Rahmen verdecken kann, steht in der Liste weiter oben. Dabei wird nicht ausgewertet, ob ein Rahmen einen anderen tatsächlich überdeckt, sondern nur, ob er das kann! |
... | int | beliebig |
Liste der Platzhalter-IDs, die akzeptiert werden
Beachten Sie bitte, dass Platzhalter, die ganz oder teilweise im Textübersatz liegen, keine (vollständigen) XY-Koordinaten haben. Platzhalter, die ganz oder teilweise im Textübersatz liegen, werden deshalb bei aktivierter Koordinatenberechnung nicht in die Ergebnisliste aufgenommen. |
Alle Platzhalter der Ebene Ebene 1 der aktuellen Dokumentseite
linklist::collect (lli, 0, "Ebene 1", kFirstIgnore);
Alle (auch solche die ganz oder teilweise im Übersatz liegen) Platzhalter der Ebene Ebene 1 der aktuellen Dokumentseite.
linklist::collect (lli, 0, "Ebene 1", kFirstIgnore, kSortNo, 0, 0);
Alle Platzhalter mit den IDs 400, 600 und 700 der Ebene Ebene 1 der aktuellen Dokumentseite.
linklist::collect (lli, 0, "Ebene 1", kFirstIgnore, kSortNo, 400, 600, 700);
Erster Platzhalter mit der ID 400, 600 oder 700 der inneren oberen Seitenecke der Ebene Ebene 1 der aktuellen Dokumentseite
linklist::collect (lli, 0, "Ebene 1", kFirstInnerTop, kSortNo,// wird ignoriert 400, 600, 700);
Erster Platzhalter mit der ID 400, 600 oder 700 der inneren oberen Seitenecke der Ebene Ebene 1 der aktuellen Dokumentseite. Im Unterschied zum letzten Beispiel soll hier aber die Berechnung der Koordinaten von Textplatzhaltern unterbunden werden. Beachten Sie die zwei Nullen am Ende der Platzhalter-IDs, die erste 0 beendet die Liste, die zweite 0 schaltet die Berechnung der Textkoordinanten ab.
linklist::collect (lli, 0, "Ebene 1", kFirstInnerTop, kSortNo,// wird ignoriert 400, 600, 700, 0, 0);
static int linklist::collect_any(
LinkList lli,
int page = 0,
char* layer = "",
int edge = 8,
int sort = 0,
...)
Sammle die Platzhalter eines gegebenen Dokumentbereiches.
Die Funktion ist vollständig identisch mit der Funktion collect - mit zwei Ausnahmen : Rahmen müssen selbst keinen Platzhalter haben, um durchsucht zu werden und standardmäßig ist die Berechnung der Koordinaten von Textplatzhaltern abgeschaltet.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList mit type = 0 |
page oder frames | int oder ItemList | 0 | wenn (layer ungleich "--list--") Dokumentseite (1-basiert) 0 - aktuelle Seite wenn (layer = "--list--") Liste von Dokumentrahmen Unter InDesign® Server und comet_pdf ist die aktuelle Seite nicht definiert. |
layer | String oder char* | "" | Einschränkung der Suche auf die angegebene Ebene "" : alle Ebenen "--visible--" : nur sichtbare Ebenen "--active--" : nur die aktive Ebene "--list--" : Zweiter Funktionsparameter ist eine Rahmenliste |
edge | int | kFirstIgnore | Alle Platzhalter oder Platzhalter einer festgelegten Ecke finden kFirstIgnore - alle Platzhalter kFirstLeftTop kFirstRightTop kFirstOuterTop - linke Seiten linke obere Ecke, rechte Seiten rechte obere Ecke kFirstInnerTop - linke Seiten rechte obere Ecke, rechte Seiten linke obere Ecke kFirstLeftBottom kFirstRightBottom kFirstOuterBottom - linke Seiten linke untere Ecke, rechte Seiten rechte untere Ecke kFirstInnerBottom - linke Seiten rechte untere Ecke, rechte Seiten linke untere Ecke |
sort | int | kSortNo | Sortiere die Ergebnisliste kSortNo - nicht sortieren kSortColwise - nach linker Rahmenkante von oben nach unten sortiert. Im obigen Bild ergibt sich blau rot grün orange kSortRowwise - nach Rahmenoberkante von links nach rechts sortiert. Im obigen Bild ergibt sich orange rot grün blau kSortByZOrder - Ein Rahmen, der einen anderen Rahmen verdecken kann, steht in der Liste weiter oben. Dabei wird nicht ausgewertet, ob ein Rahmen einen anderen tatsächlich überdeckt, sondern nur, ob er das kann! |
... | int, ... | optional |
Liste der Platzhalter-IDs, die akzeptiert werden
Beachten Sie bitte, dass Platzhalter, die ganz oder teilweise im Textübersatz liegen, keine (vollständigen) XY-Koordinaten haben. Platzhalter, die ganz oder teilweise im Textübersatz liegen, werden deshalb bei aktivierter Koordinatenberechnung nicht in die Ergebnisliste aufgenommen. |
Sammle alle Platzhalter eines Rahmens und schreibe Informationen über die gefundenen Platzhalter ins Logfile. Achten Sie darauf, die Liste flist mit itemlist::clear wieder zu leeren. Der Rahmen frameRef wurde nicht in query_links allokiert.
#include "internal/types.h" #include "internal/text.h"
int query_links (ItemRef frameRef) { ItemList flist = itemlist::alloc (); LinkList lli = linklist::alloc (); ItemRef fr = item::alloc (); Link li; int inOverset = 0;
itemlist::append (flist, frameRef); linklist::collect_any (lli, flist, "--list--", kFirstIgnore, kSortNo); itemlist::clear (flist); // otherwise itemlist::release will delete frameRef too! wlog ("", "# %d Placeholders found.\n", linklist::length (lli));
li = linklist::first (lli); while (li) { if (!link::isframe (li)) { inOverset = textmodel::get_frame_containing (link::frame (li), link::pos (li), fr); if (!inOverset && link::length (li) > 0) { inOverset = textmodel::get_frame_containing (link::frame (li), link::pos (li)+link::length (li), fr); }
wlog ("", "# [%d, %d]", link::pos (li), link::pos (li)+link::length (li)); wlog ("", " %d (%d)", item::getint (link::frame (li)), item::getint (fr)); if (inOverset == -1) wlog ("", " in Overset"); wlog ("", "\n"); }
li = linklist::next (lli); }
linklist::release (lli);
return 0; }
int main () { query_links (gFrame); return 0; }
static int linklist::text_collect(
LinkList lli,
ItemRef frameRef,
int pos,
int len,
int cto,
...)
Platzhalter eines Textes oder eines Textbereiches suchen.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList. Nach erfolgreicher Ausführung entält die Liste die Links des Text(bereiches) sortiert nach ihrer Textposition. Inhalte von Tabellen werden dabei zeilenweise sortiert. |
frameRef | ItemRef | 0 | Rahmen, der den Text enthält. Wenn Text über mehrere miteinander verlinkte Rahmen
läuft, wird immer im gesamten Text gesucht. 0 : aktueller Textrahmen |
pos | int | 0 | Startposition |
len | int | kEnd | Länge des Textes, der durchsucht werden soll |
cto | int | 0 | (CheckTextCoordinates) Sollen die xy-Koordinaten des Platzhalteranfangs berechnet werden. Diese
Option ist sehr rechenintensiv! 0 : xy-Koordinaten nicht berechnen 1 : xy-Koordinaten berechnen (aufwendig!) |
... | int | optional | Lister der PlatzhalterIDs, die akzeptiert werden Kein Eintrag - Alle Platzhalter akzeptieren sonst - nur Platzhalter mit den genannten IDs akzeptieren Beispiele : ..., 1, 2 : Nur Platzhalter mit ID 1 oder 2 |
Das Beispiel ermittelt den aktuell im Text ausgewählten Textplatzhalter (von Martin Lucke).
#include "internal/types.h" #include "internal/text.h"
int main () { ItemRef txtframe = item::alloc (); LinkList lli = linklist::alloc (1); Link lk; int start, len, re;
textmodel::selection (&start, &len);
if(start >= 0) { re = textmodel::get_frame(start, txtframe); if (re >= 0) { linklist::text_collect(lli, txtframe, start, 1); if (linklist::length(lli)) { lk = linklist::first(lli); showmessage("Platzhalter gefunden!\n"); } else showerror("Sie haben keinen Paltzhalter ausgewählt!"); } else showerror( serror (re)); } else showerror("Sie haben keinen Text ausgewählt!"); linklist::release(lli); item::release(txtframe);
return 0; }
Zwischen zwei Platzhaltern soll dann (und nur dann) wenn beide Platzhalter nicht leer sind, ein Absatztrenner eingefŸgt werden. Ist einer der beiden Platzhalter leer, wird der Absatztrenner entfernt. Sind beide leer, wird zusŠtzlich die Textgröße der Platzhalter stark verkleinert. Das Skript kann als Gestaltungregel verwendet werden.
int main () { LinkList lli = linklist::alloc (); String s1 = string::alloc (); // content of first placeholder String inter = string::alloc (); // text between the two placeholders String s2 = string::alloc (); // content of second placeholder int i0; // start of placeholder 1 int i1; // end of placeholder 1 int i2; // start of placeholder 2 int i3; // end of placeholder 2 Table T = table::alloc ();
// collect placeholders linklist::text_collect (lli, gFrame, 0, frame::textlength (gFrame, 0)); if (linklist::length (lli) < 2) return 0;
// get the content of the first two placeholders string::set (s1, string::get_netweight (link::content (linklist::get (lli, 0)), 1, 1)); string::set (s2, string::get_netweight (link::content (linklist::get (lli, 1)), 1, 1));
// get the text between the two placeholders i0 = link::pos (linklist::get (lli, 0)); i1 = link::pos (linklist::get (lli, 0)) + link::length (linklist::get (lli, 0)); i2 = link::pos (linklist::get (lli, 1)); i3 = link::pos (linklist::get (lli, 1)) + link::length (linklist::get (lli, 1)); if (i2 > i1) frame::gettext (gFrame, inter, i1, i2-i1);
// set the text size table::get (T, gFrame, 0); if ( string::compare (s1, "<0x200B>") == 0 && string::compare (s2, "<0x200B>") == 0) { textmodel::set_fontsize (gFrame, i0, (i3-i0)+1, 0.2); if (table::is_valid (T)) table::space_before (T, 0.0); } else { textmodel::set_fontsize (gFrame, i0, (i3-i0)+1, 12.0); if (table::is_valid (T)) table::space_before (T, 4.0); }
// fix intermediate text if ( string::compare (s1, "<0x200B>") != 0 && string::compare (s2, "<0x200B>") != 0) { // both placeholder NOT empty, insert a paragraph if (string::compare (inter, "\r") != 0) { frame::replace (gFrame, "%!TT<ParaStyle:><ParaStyle:>", i1, i2-i1, 0); textmodel::clear_placeholders (i1, i2-i1, gFrame); } } else { // both placeholders empty, remove the paragraph if (i2 > i1) { frame::replace (gFrame, "", i1, i2-i1, 0); } }
return 0; }
static int linklist::sort(LinkList lli, sortfunc cmpFunc)
Sortiere eine LinkListe.
Die Vergleichfunktion cmpFunc muss im Skript definiert sein und folgenden Typ haben
int yourCmpFunction (Link a, Link b)
Die Funktion wird verwendet um zu testen, ob die Reihenfolge der beiden Listenobjekte a und b stimmt oder nicht. Beim Aufruf steht a vor b in der Liste. Soll diese Reihenfolge getauscht werden, geben Sie in der Funktion eine 1 zurück, sonst 0.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | LinkList | - | Gültige LinkList. |
cmpFunc | int yourCmpFunction (Link a, Link b) | - | Vergleichsfunktion. Die Funktion wird verwendet um zu testen,
ob die Reihenfolge der beiden Listenobjekte a und b stimmt oder nicht.
Beim Aufruf steht a vor b in der Liste. Soll diese Reihenfolge getauscht werden,
geben Sie in der Funktion eine 1 zurück, sonst 0. Die Funktion wird in der Regel lokal im Skript definiert. Globale Variablen des Skriptes dürfen in der Funktion nicht verwendet werden! |
Sammle alle Platzhalter der Seite, auf der der Skriptrahmen liegt und sortiere diese Liste in verschiedenen Reihenfolgen. Die Ergebnisse werden jweils ins Logfile geschrieben.
#include "internal/text.h" #include "internal/types.h"
int w_lli (LinkList lli, char * trailer) { Link p; char pgs[100]; int i = 0;
wlog ("", "%s\n", trailer); while (i < linklist::length(lli)) { p = linklist::get (lli, i); wlog ("", "Pos %d, Seite %s [%d %d %d] : '%s'\n", link::pos (p), link::pagestr(p,pgs), link::id(p), link::id2(p), link::id3(p), link::content (p)); i++; } wlog ("", "\n"); }
int byName_asc (Link a, Link b) { char s1 [8000]; char s2 [8000];
strcpy (s1, link::content (a)); strcpy (s2, link::content (b));
if (strcmp (s1, s2) > 0) return 1;
else return 0; }
int byName_desc (Link a, Link b) { char s1 [8000]; char s2 [8000];
strcpy (s1, link::content (a)); strcpy (s2, link::content (b));
if (strcmp (s1, s2) < 0) return 1;
else return 0; }
int byPosition_asc (Link a, Link b) { if (link::pos (a) > link::pos (b)) return 1;
else return 0; }
int main () { LinkList lli = linklist::alloc (0);
linklist::collect(lli, page::get(gFrame), "", kFirstIgnore , 0, 0);
w_lli (lli, "Original");
linklist::sort (lli, byName_asc); w_lli (lli, "By name (ascent)");
linklist::sort (lli, byName_desc); w_lli (lli, "By name (descent)");
linklist::sort (lli, byPosition_asc); w_lli (lli, "By position (ascent)");
return 0; }
static int linklist::insert_toc_entry(
LinkList placeholderList,
int designate = kDesignateDocument,
char* publication = 0,
char* documentId = 0,
char* xmlpath = 0,
int flags = 0)
Anlegen von Inhaltsverzeichnis-Einträgen.
Die Funktion sammelt die für ein Inhaltsverzeichnis nötigen Dokumentdaten. Über eine Platzhalterliste legen Sie fest, welche Platzhalter dabei beachtet werden sollen. Sind Sie aktuell mit einem PublishingServer verbunden, werden die Daten zum Server übertragen. Zum Abruf dieser Einträge stellt das Java-Server-Plugin CometTableOfContents Plugin spezielle DataQuery-Methoden zur Verfügung. Diese können in DataProvidern verwendet werden und über Text-Platzhalter der Entität Table Of Contents im Dokument angesprochen werden. Vorher im PubServer angelegte Verzeichniseinträge derselben Platzhalter und desselben Bereichs werden beim Aufruf dieser Funktion gelöscht.
Die Funktion legt kein Inhaltsverzeichnis im Dokument an. Sie sammelt lediglich die Daten, die für ein Inhaltsverzeichnis nötig sind.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder ErrorCode | |
placeholderList | LinkList | - | Liste beim Anlegen der Einträge zu berücksichtigender Platzhalter IDs, leere Liste = alle Platzhalter. Die Liste muß mit linklist::alloc(1); allokiert werden. |
designate | int | - | zu bearbeitender Bereich: kDesignateDocument kDesignateVisibleLayers kDesignateActiveLayer |
publication | String oder char* | "" | Name / ID der Publikation. Die Angabe wird nur für die Ausgabe verwendet. 0 oder "" : Wert des XML-Attributs publication des Root-Elementes der XML-Struktur des Dokumentes |
documentId | String oder char* | "" | ID des Dokuments. Die Angabe wird nur für die Ausgabe verwendet. 0 oder "" : Wert des XML-Attributs documentId des Root-Elementes der XML-Struktur des Dokumentes |
xmlpath | String oder char* | "" | Sichern der Daten in eine XML-Datei. Bestehende XML-Dateien werden überschrieben. Mit PubServer-Verbindung "" : Keine zusätzliche XML-Datei schreiben sonst : vollständiger Pfad für die XML-Ausgabe. Ohne PubServer-Verbindung "" : XML 'neben' das InDesign®-Dokument legen. Bei neuen ungesicherten Dokumenten wird in den Dokumente-Ordner geschrieben. sonst : vollständiger Pfad für die XML-Ausgabe. |
flags | int | 0 | Zusatzangaben als Addition der folgenden Werte 1 : Inlines können in die Ergebnisse aufgenommen werden 2 : Ergebnisse sortieren nach Seitennummer, XY-Position, Textposition 8 : Versteckte Rahmen können in die Ergebnisse aufgenommen werden ('Versteckt' heißt, der Rahmen wurde auf 'Unsichtbar / Versteckt / Sichtbarkeit : Nein' (oder wie immer Sie das nennen) gestellt. Es heißt nicht, dass der Rahmen unsichtbar ist, weil Ebene, Farbe, Transparenz, Position (Übersatz, Arbeitsfläche) o.Ä. den Rahmen unsichtbar machen!) |
Anlegen von Verzeichniseinträgen für das gesamte Dokument
#include "internal/types.h"
int main () { LinkList placeholders = linklist::alloc(1); int result = linklist::insert_toc_entry(placeholders, kDesignateDocument, "myPublication", "12345");
linklist::release(placeholders); return result; }
Anlegen von Verzeichniseinträgen nur eines bestimmten Platzhalters
#include "internal/types.h"
int main () { LinkList placeholders = linklist::alloc(1); int result;
linklist::insert(placeholders, 67301234);
// use publication and documentId from document XML attributes result = linklist::insert_toc_entry(placeholders, kDesignateDocument);
linklist::release(placeholders); return result; }
static int linklist::delete_toc_entry(
LinkList placeholderList,
int designate = kDesignateDocument,
char* publication = 0,
char* documentId = 0)
Löschen von Inhaltsverzeichnis-Einträgen.
Die Funktion löscht vorher mit insert_toc_entry angelegte Verzeichniseinträge. Analog zu insert_toc_entry wird über die Parameter placeholderList, designate und die Publikations / Dokument-IDs festgelegt, welche der Einträge gelöscht werden sollen.
Der Aufruf entspricht einem Aufruf von insert_toc_entry in einem leeren Dokument.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder ErrorCode | |
placeholderList | LinkList | - | Liste zu löschender Platzhalter IDs, leere Liste = alle Platzhalter. Die Liste muß mit linklist::alloc(1); allokiert werden. |
designate | int | - | zu bearbeitender Bereich. Unterstützt werden kDesignateDocument, kDesignateVisibleLayers und kDesignateActiveLayer |
publication | String oder char* | "" | Name / ID der Publikation, Standard ist der Wert des XML-Attributs <publication> des Dokument Root Elements. Die Angabe wird nur für die Ausgabe verwendet. |
documentId | String oder char* | "" | ID des Dokuments, Standard ist der Wert des XML-Attributs <documentId> des Dokument Root Elements. Die Angabe wird nur für die Ausgabe verwendet. |
Aufbau einer Liste. Danach wird die Liste dreimal durchlaufen. Im ersten Durchlauf werden alle Elemente geschrieben. Danach wird ab der Position des Elementes <1, 3, 6, 9> geschrieben. Vor dem dritten Durchlauf werden alle Elemente <1, 11, 22, 33> gelöscht
int main () { int i = 0; LinkList lli = linklist::alloc (2); // Produkte-Liste Link lk;
// Liste füllen for (i=1; i<6; i++) linklist::insert (lli, 1, i, i*2, i*3); linklist::insert (lli, 1, 11, 22, 33, 1); linklist::insert (lli, 1, 11, 22, 33, 4);
// Schreibe alle Elemente i = 0; for ( lk = linklist::first (lli); lk != 0; lk = linklist::next (lli)) { showmessage ("1. Liste %d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
// Listenanfang auf das Element <1, 3, 6, 9> setzen linklist::set_pos (lli, linklist::find (lli, 1, 3, 6, 9)); i = 0; for ( lk = linklist::current (lli); lk != 0; lk = linklist::next (lli)) { showmessage ("2. Liste %d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
// Das Element <1, 11, 22, 33> aus der Liste löschen linklist::remove (lli, 1, 11, 22, 33);i = 0; for ( lk = linklist::first (lli); lk != 0; lk = linklist::next (lli)) { showmessage ("3. Liste %d. Element : %d <%d, %d, %d>", ++i, link::classid (lk), link::id (lk), link::id2 (lk), link::id3 (lk)); }
linklist::release (lli); return 0; }
Aktualisiere alle Sortennamen, Familiennamen, Namen und Spezieskürzel im Dokument.
int main () { int i = 0; LinkList lli = linklist::alloc (1); // Platzhalterliste Link lk;
// Liste füllen linklist::insert (lli, 1); // Sortenname linklist::insert (lli, 3); // Familienname linklist::insert (lli, 4); // Name linklist::insert (lli, 6); // Spezieskürzel
linklist::load (lli);
linklist::release (lli); return 0; }
Ermittle die Platzhalterdaten aller Sortennamen, Familiennamen, Namen und Spezieskürzel im Dokument.
int main () { int i = 0; LinkList lli = linklist::alloc (1); // Platzhalterliste LinkList rets = linklist::alloc (0); // Beliebige Liste Link lk; String content = string::alloc (); char page[256];
// Liste füllen linklist::insert (lli, 1); linklist::insert (lli, 3); linklist::insert (lli, 4); linklist::insert (lli, 6); linklist::insert (lli, 12); linklist::insert (lli, 44444);
linklist::sync (lli, rets, 0); for ( lk = linklist::first (rets); lk; lk = linklist::next (rets)) { char m[500];
strcpy (m, "Platzhalter %d <%d, %d, %d>"); strcat(m, "\n Inhalt : %s"); strcat(m, "\n Status : %d"); strcat(m, "\n Seite : %d (%s)"); strcat(m, "\n Position : %d-%d"); strcat(m, "\n Textlänge : %d");
showmessage (m, link::placeholderid (lk), link::id (lk), link::id2 (lk), link::id3 (lk), link::gettext (lk, content), link::sync (lk), link::pagenum (lk), link::pagestr (lk, page), link::pos (lk)+link::length (lk) link::textlen (lk)); } linklist::release (rets);
// Nicht gefundene Platzhalter for ( lk = linklist::first (lli); lk; lk = linklist::next (lli)) { if (link::sync (lk) < 0) { showmessage ("Platzhalter %d nicht gefunden", link::placeholderid (lk)); } }
linklist::release (lli); string::release (content); return 0; }
Alphabetic index HTML hierarchy of classes or Java