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

Die Bearbeitung aller Platzhalter bei load, store, sync und apply mit type = 0 ist ab Version 1.1.6 implementiert.

priint:comet InDesign® Plug-Ins, comet_pdf

linklist::release
Link

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.


priint:comet InDesign® Plug-Ins, comet_pdf

linklist::alloc
Link

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


priint:comet InDesign® Plug-Ins, comet_pdf

sync
release

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


priint:comet InDesign® Plug-Ins, comet_pdf

alloc

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


priint:comet InDesign® Plug-Ins, comet_pdf

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:
  • kInvalidAction (0): alle Aktionen
  • kLoadAction (1): Laden
  • kWriteAction (2): Sichern
  • kSyncAction (3): Synchronisierung
  • kBuildAction (4): Aufbau
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
#include "internal/types.h"

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;
}

4.1 R21475

priint:comet InDesign® Plug-Ins, comet_pdf

alloc
get

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

4.1 R21475

priint:comet InDesign® Plug-Ins, comet_pdf

alloc
get

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

Parameter sid ab Version 1.3 (Build 96)

priint:comet InDesign® Plug-Ins, comet_pdf

Verwenden Sie stattdessen linklist::insert_placeholder bzw. linklist::insert_id
alloc
get
insert_placeholder
insert_id

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

Version 1.3 (Build 96)

priint:comet InDesign® Plug-Ins, comet_pdf

Verwenden Sie stattdessen linklist::insert_placeholder bzw. linklist::insert_id
insert_placeholder
insert_id

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.


priint:comet InDesign® Plug-Ins, comet_pdf

length
Link
link::id
link::sid

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

Parameter sid seit Version 1.3 (Build 96)

priint:comet InDesign® Plug-Ins, comet_pdf

alloc
get
Link
link::id
link::sid

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; }

Parameter sid ab Version 1.3 (Build 96)

priint:comet InDesign® Plug-Ins, comet_pdf

remove_pos

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.


priint:comet InDesign® Plug-Ins, comet_pdf

remove_pos

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ür die Aufrufe von next, prev und current muss die aktuelle Listenposition mit first, last oder set_pos gesetzt worden sein. Andernfalls haben die Aufrufe kein definiertes Ergebnis.
Die aktuelle Listenposition wird entsprechend geändert.

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; }


priint:comet InDesign® Plug-Ins, comet_pdf

set_pos
next
prev
last
current

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
Für die Aufrufe von next, prev und current muss vorher die aktuelle Listenposition mit first, last oder set_pos gesetzt worden sein. Andernfalls haben die Aufrufe kein definiertes Ergebnis.
Die aktuelle Listenposition wird entsprechend geändert.


priint:comet InDesign® Plug-Ins, comet_pdf

set_pos
first
prev
last
current

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
Für die Aufrufe von next, prev und current muss vorher die aktuelle Listenposition mit first, last oder set_pos gesetzt worden sein. Andernfalls haben die Aufrufe kein definiertes Ergebnis.
Die aktuelle Listenposition wird entsprechend geändert.


priint:comet InDesign® Plug-Ins, comet_pdf

set_pos
first
next
last
current

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
Für die Aufrufe von next, prev und current muss vorher die aktuelle Listenposition mit first, last oder set_pos gesetzt worden sein. Andernfalls haben die Aufrufe kein definiertes Ergebnis.
Die aktuelle Listenposition wird entsprechend geändert.


priint:comet InDesign® Plug-Ins, comet_pdf

set_pos
first
next
last
current

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
Für die Aufrufe von next, prev und current muss vorher die aktuelle Listenposition mit first, last oder set_pos gesetzt worden sein. Andernfalls haben die Aufrufe kein definiertes Ergebnis.
Die aktuelle Listenposition wird entsprechend geändert.


priint:comet InDesign® Plug-Ins, comet_pdf

set_pos
first
next
prev
last

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.
Die aktuelle Listenposition wird entsprechend geändert.

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)); }


priint:comet InDesign® Plug-Ins, comet_pdf

next
prev
first
last
current
find

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.
1. Neuladen der Platzhalter eines gegebenen Dokumentbereiches

linklist::load (lli)
linklist::load (lli, kDesignateVisibleLayers)
designate int kDesignateDocument Welche Teile des Dokumentes sollen bearbeitet werden?

kDesignateCursor
kDesignateSelected
kDesignateDocument
kDesignateVisibleLayers
kDesignateActiveLayer
2. Neuladen der Platzhalter eines Rahmens

linklist::load (lli, 0, gItemRef)
designate int - unbenutzt
itemRef ItemRef - Bearbeite nur diesen Rahmen.
3. Neuladen der Platzhalter eines Textbereiches

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
#include "internal/types.h"
#include "internal/text.h"

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);

Alle Parameter außer lli ab Version 1.1.4
Die Bearbeitung aller Platzhalter (type=0) ist ab Version 1.1.6 implementiert.
kDesignateVisibleLayers und kDesignateActiveLayer seit Version 1.4 R310, 8. Feb. 2007

priint:comet InDesign® Plug-Ins, comet_pdf

type
alloc

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.
1. Zurückschreiben der Platzhalter eines gegebenen Dokumentbereiches

linklist::store (lli)
linklist::store (lli, kDesignateVisibleLayers)
designate int kDesignateDocument Welche Teile des Dokumentes sollen bearbeitet werden?

kDesignateCursor
kDesignateSelected
kDesignateDocument
kDesignateVisibleLayers
kDesignateActiveLayer
2. Zurückschreiben der Platzhalter eines Rahmens

linklist::store (lli, 0, gItemRef)
designate int - unbenutzt
itemRef ItemRef - Bearbeite nur diesen Rahmen.
3. Zurückschreiben der Platzhalter eines Textbereiches

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
#include "internal/types.h"
#include "internal/text.h"

Siehe die Beispiele bei load

siehe linklist::load

Alle Parameter außer lli ab Version 1.1.4
Die Bearbeitung aller Platzhalter (type=0) ist ab Version 1.1.6 implementiert.
kDesignateVisibleLayers und kDesignateActiveLayer seit Version 1.4 R310, 8. Feb. 2007

priint:comet InDesign® Plug-Ins, comet_pdf

type
load
alloc

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.
#include "internal/types.h"
#include "internal/text.h"
Die Elemente der Eingabeliste signalisieren mit link::sync < 0, dass es keine Platzhalter im Dokument gibt, die den Bedingungen des jeweiligen Elementes entsprechen.

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; }

itemRef und designate seit Version 1.1.4
Die Bearbeitung aller Platzhalter (type=0) ist ab Version 1.1.6 implementiert.
kDesignateVisibleLayers und kDesignateActiveLayer seit Version 1.4 R310, 8. Feb. 2007

priint:comet InDesign® Plug-Ins

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.
1. Aktion auf die Platzhalter eines gegebenen Dokumentbereiches anwenden

linklist::apply (lli)
linklist::apply (lli, kDesignateVisibleLayers)
designate int kDesignateDocument Welche Teile des Dokumentes sollen bearbeitet werden?

kDesignateCursor
kDesignateSelected
kDesignateDocument
kDesignateVisibleLayers
kDesignateActiveLayer
2. Aktion auf die Platzhalter eines Rahmens anwenden

linklist::apply (lli, 0, gItemRef)
designate int - unbenutzt
itemRef ItemRef - Bearbeite nur diesen Rahmen.
3. Aktion auf die Platzhalter eines Textbereiches anwenden

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
#include "internal/types.h"
#include "internal/text.h"

Analog den Beispielen bei load

sihe linklist::load

ab Version 1.1.4
Die Bearbeitung aller Platzhalter (type=0) ist ab Version 1.1.6 implementiert.
kDesignateVisibleLayers und kDesignateActiveLayer seit Version 1.4 R310, 8. Feb. 2007

priint:comet InDesign® Plug-Ins, comet_pdf

type
alloc

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

  • Kein Eintrag - Alle Platzhalter akzeptieren
  • Sonst - IDs der gesuchten Platzhalter
Die Liste kann optional mit einer 0 und bis zu zwei weiteren Zahlen abgeschlossen werden. Werte nach dieser 0 werden wir folgt interpretiert:
  • 0 : Koordinaten der Textplatzhalter nicht berechnen
  • 1 : Koordinaten der Textplatzhalter berechnen (Default)
  • < 0 : Toleranz in Punkten, seit v4.2 R30820
    • sort=kSortRowwise : Platzhalter mit mit einem oberen Abstand ≤ |Toleranz| liegen auf einer Zeile
    • sort=kSortColwise : Platzhalter mit mit einem linken Abstand ≤ |Toleranz| liegen in einer Spalte

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.

#include "internal/types.h"
#include "internal/text.h"

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);

Version 1.2.2 (26. Oktober 2005)
"--visible--" und "--active--" seit Version 1.4 R310, 8. Feb. 2007
"--list--" vseit Version 1.4 R320, 17. März 2007
kSortByZOrder sei Version 2.1 R679, 22. April 2008

priint:comet InDesign® Plug-Ins, comet_pdf

link
linklist::text_collect
comet.link.collect

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

  • Kein Eintrag - Alle Platzhalter akzeptieren
  • Sonst - IDs der gesuchten Platzhalter
Die Liste kann optional mit einer 0 und bis zu zwei weiteren Zahlen abgeschlossen werden. Werte nach dieser 0 werden wir folgt interpretiert:
  • 0 : Koordinaten der Textplatzhalter nicht berechnen (Default)
  • 1 : Koordinaten der Textplatzhalter berechnen
  • < 0 : Toleranz in Punkten, seit v4.2 R30820
    • sort=kSortRowwise : Platzhalter mit mit einem oberen Abstand ≤ |Toleranz| liegen auf einer Zeile
    • sort=kSortColwise : Platzhalter mit mit einem linken Abstand ≤ |Toleranz| liegen in einer Spalte

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.

#include "internal/types.h"
#include "internal/text.h"

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; }

Version 1.3.4 (P/R 107)
"--visible--" und "--active--" seit Version 1.4 R310, 8. Feb. 2007
"--list--" seit Version 1.4 R320, 17. März 2007
kSortByZOrder seit Version 2.1 R679, 22. April 2008

priint:comet InDesign® Plug-Ins, comet_pdf

collect
text_collect
comet.link.collect

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
#include "internal/types.h"
#include "internal/text.h"

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; }

Version 1.4.2, R 560, 9. Jan. 2007

priint:comet InDesign® Plug-Ins, comet_pdf

link
linklist::collect
collect_any
comet.CTextModel.collectLinks

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!
#include "internal/types.h"
#include "internal/text.h"

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; }

Version 3.2.1 R2321, 3.3.2011

priint:comet InDesign® Plug-Ins, comet_pdf

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!)
#include "internal/types.h"
#include "internal/text.h"

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; }

Version 4.0 R5804, 23. Sep 2014
Parameter xmlpath seit v4.0.4, R8450, 16. Jul 2015
Parameter flags seit v4.1, R21700, 2. Feb 2018

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

comet.link.insertTocEntry

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.
#include "internal/types.h"
#include "internal/text.h"

Version 4.1.6 R26027

Verfügbarkeit:
Comet-Plug-Ins, comet_pdf

comet.link.deleteTocEntry

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; }

Seit
1.0.19
Siehe auch
Link
link::id
link::sid

Alphabetic index HTML hierarchy of classes or Java