Comet-Platzhalter

Letzte Änderung :
30.07.2025, 07:35 Uhr

Platzhalter sind die zentralen Objekte der WERK II Plugins. Sie verbinden Teile von InDesign®-Dokumenten mit externen Werten aus Datenbanken, XML- oder CSV-Dateien, Excel-Tabellen oder speziellen Internetdiensten. Jeder Platzhalter kann mit vier Aktionen verknüpft werden :

Zur Beschreibung der Aktion können folgende Anweisungstypen verwendet werden : Zusätzlich kann jede WERK II Palette mit eigenen sogenannten Palettenaktionen erweitert werden. Diese Aktionen werden in das jeweilige Palettenmenü eingefügt und müssen in cscript erstellt sein. Aktionen werden von WERK II und Partnern von WERK II erstellt und müssen an die jeweilige verfügbare Datenquelle angepasst sein.

Damit Skripte auf die aktuelle Dokumentumgebung zurückgreifen können, sind einige globale Variablen vordefiniert. Die folgende Tabelle beschreibt diese Variablen. Soweit nicht anders vermerkt, dürfen die Werte dieser Variablen in Skripten nicht verändert werden. Insbesondere dürfen Variablen, deren Werte Zeiger sind (z.B. gItem oder gFrame) nicht gelöscht werden.
Name Datentyp Definitionsbereich Beschreibung
gRun int Aufrufsituation eines Skriptes siehe Beschreibung der Variable gRun
gRecordID int Platzhalter- und Doppelklickskripte 1. ID des Objektes, das mit dem Platzhalter verbunden ist
gRecordID2 int 2. ID des Objektes, das mit dem Platzhlatzer verbunden ist
gRecordID3 int 3. ID des Objektes, das mit dem Platzhlatzer verbunden ist
gRecordStringID char* String-ID des Objektes, das mit dem Platzhlatzer verbunden ist.
gRecordStringID1 char* Erster Teil oder RootTableRecordStringID der mit |--| zusammengesetzten Multi-StringID des Objektes (oder die StringID), das mit dem Platzhlatzer verbunden ist.
gRecordStringID2 char* Zweiter Teil oder ColumnRecordStringID der mit |--| zusammengesetzten Multi-StringID des Objektes (oder leer), das mit dem Platzhlatzer verbunden ist.
gRecordStringID char* Dritter Teil oder RowRecordStringID der mit |--| zusammengesetzten Multi-StringID des Objektes (oder leer), das mit dem Platzhlatzer verbunden ist.
gStart int Platzhalterskripte Startposition eines Textplatzhalters
gLen int Länge des Textplatzhalters, undefiniert bei Rahmenplatzhaltern, siehe gLen
gFrame ItemRef Bei Rahmenplatzhaltern der Rahmen, bei Textplatzhaltern der Rahmen des Textes
gOutFrame ItemRef Der Inhalt der Variablen darf geändert werden, siehe gOutFrame, item::copy
gPlaceholderID int ID des Platzhalters
gPlaceholderType int [Ab v4.2 R32672] Typ des Platzhalters:
  • 1 text
  • 2 textframe
  • 3 imageframe
  • 4 xml element
  • 5 document
  • 6 multi frames
  • 7 multi text
  • 8 autoTable
  • 9 CrossRef
  • 10 SerialText
  • 11 SerialFrame
  • 12 SerialPageitem
gCreated char* Wann wurde der Platzhalter im Dokument erzeugt? Format YYYYMMDDHHMMSS.
gModified char* Wann wurde der Platzhalter im Dokument zum letzten Mal geladen? Format YYYYMMDDHHMMSS.
gNewValue char*

Der Inhalt der Variablen darf geändert werden. Max: 2 GB Zeichen.

Setzt den Text des "Neuen Wertes" bei Laden-Scripten in der Aufgabenliste. Die Variable ist in Aufrufen der Aufgabenpalette nur dann definiert, wenn der der neue Wert eines Platzhalters ermittelt werden soll. Das sind die sog. Sync-Calls des Laden-Skriptes von Platzhaltern mit der Sync-ID -1. In allen anderen Aufrufen der Laden-Skripte ist die Variable 0. Testen Sie die Variable vor ihrer Verwendung also immer auf 0! Ist die Variable ungleich 0, dürfen keine Änderungen am InDesign®-Dokument gemacht werden!

In Textgestaltungsregeln ist die Variable ebenfalls definiert. Hintergrund ist, dass Gestaltungsregeln den Platzhaltertext ändern können. So kann etwa an einen Preis automatisch eine Währung angefügt werden. Werden diese Platzhalter mit Hilfe des Aufgaben-Managements geprüft, würden dann jedesmal Abweichungen vom Datenbestand gefunden (der ja die Währung nicht enthält). Die Gestaltungsregel muss also dem Aufgaben-Management "mitteilen", wie es Texte verändert. Zu diesem Zweck erhält die Regel den aktuellen Wert des Datenbestandes in der Variable gNewValue - und schreibt alle Änderungen auch wieder dorthin zurück.

In Skripten für Trenntexte können Sie die Varibale mit dem gewünschten Trenntext füllen. Der Inhalt darf TaggedText sein. Beachten Sie hier auch die Art des Trenntextes, die in gDelimiterType angegeben ist.

gOldValue char* [seit v3.3 R3243, 29.10.2012] Mit gOldValue wird der Dokument-Wert eines Platzhalters in der Aufgabenpalette definiert. Der Wert wird normalerweise automatisch aus dem Dokument berechnet. In seltenen Ausnahmenfällen soll aber ein davon abweichender Wert gezeigt werden. Die Variable darf nicht mit mehr als 2 GB Zeichen beschrieben werden. Testen Sie vor dem Setzen des Wertes immer, ob die Variable einen Wert ungleich 0 hat (if (gOldValue) ...).
gSyncChanged int* nur in Load- und Sync-Skripten

Der Status eines Platzhalters wird nach erfolgreichem Laden automatisch auf Okay gesetzt. Wurde der Status mit placeholder::set_sync bereits im Skript gesetzt, kann das automatische Setzen mit der Skriptanweisung (*gSyncChanged = 1;) unterbunden werden.

Bei Sync-Skripten wird der Platzhalterstatus dagegen nicht automatisch gesetzt. Soll er nach erfolgreicher Beendigung des Skriptes automatisch auf Okay gesetzt werden, muss im Skript die Anweisung (*gSyncChanged = 0;) gegeben werden.

Bei Fehlern wird in beiden Skripttypen unabhängig vom Wert von gSyncChanged der Status auf Fehler gesetzt.
gExportValue char*

Ist das Menü Verhalten beim Laden von Platzhaltern -> Laden und exportieren in Aktualisierungsordner aktiviert, werden Platzhalterinhalte im aktuellen Aktualisierungsordner gesichert. Bei Platzhaltern mit einem cScript als Laden-Skript wird dabei der Inhalt der Variable gExportValue verwendet.

Der Inhalt der Variable darf nicht länger als 6 MB sein. Längere Inhalte führen zum Absturz von InDesign®!

Mehr Informationen zum Aktualisierungsverhalten finden Sie hier und in den Skriptfuntionen prefs::set_updatetype, ... .

gTimestamp int Der Wert ist in der aktuellen Version immer 0.
gLink char* Bei Rahmenplatzhaltern der vollständige Pfad auf das Bild, das im Rahmen gezeigt wird. Sonst ist der String leer.
gLinkFolder char* Bei Rahmenplatzhaltern der Pfad auf das Bild, das im Rahmen gezeigt wird. Der Pfad enthält keinen Pfadtrenner am Ende. Sonst ist der String leer.
gLinkName char* Bei Rahmenplatzhaltern der Name des Bildes, das im Rahmen gezeigt wird. Sonst ist der String leer.
gRepagination int 0 : Allgemeiner Skriptaufruf
1 : Aufruf des Skriptes während der automatischen Seitennummernaktualisierung nach dem Platzhalterladen im gesamten Dokument oder ausgelöst durch einen Aufruf der Funktionen book::repaginate oder document::update_crossrefs.
gDelimiterType int Typ des Trenntextes in eimem Aufruf eines Trenntext-Skriptes

(1) kPrefix
(2) kPrefixIfEmpty
(4) kPostFix
(8) kPostFixIfEmpty
gScriptType int Produktaufbau (Aktionen mit ClassID 14) 1 kPreScript
2 kPreRule
3 kPostRule
4 kExtraPlacement
5 kTextflowPreScript
6 kTextflowPreRule
7 kTextflowPostRule
gPage int* 1-basierte Seitennummer auf der sich der Aufbau gerade befindet. Legt das Skript neue Seiten an, muss der Inhalt dieser Variable angepasst werden.
gMasterpage char* Musterseitenname. Der Wert kann beim Anlegen neuer Seiten im Skript verwendet werden.
gProducts ProductList Liste der Produkte, die aufgebaut werden sollen. Die Liste kann im kPreScript bearbeitet werden.

In Skripten des Tabellenaufbaus ist ebenfalls eine globale Variable gProducts definiert. Sie ist dort aber vom Datentyp IDTypeList.
gProduct Product Dieses Produkt wird gerade aufgebaut. Die Variable hat nur in den Skripttypen kPreRule und kPostRule einen Wert. Die Variable darf nicht gelöscht werden.
gIndexOffset int* Aktuell verwendeter Index im Raster des Produktaufbaues. Rasterelemente werden aufsteigend nach ihrer ID verwendet. Eine Erhöhung des Wertes bewirkt, dass beim Produktaufbau entsprechend viele Rasterplätze übersprungen werden. Wird dabei das Seitenende erreicht, wird eine neue Seite angelegt und das Produkt am Seitenanfang platziert.
gErrMess char* Fehlerbeschreibung, maximal 1023 Zeichen.
gPageitemID int* Ersatztemplates (Aktionen mit ClassID 15) Aktuelle Template-ID. Soll ein anderes Template verwendet werden, kann der Wert der Variable entsprechend geändert werden.

Alle anderen globalen Variablen des Skriptes dürfen nicht geändert werden!
gPageitemName char* [Ab v3.3 R2630] Templatename

"" bei Aufrufen außerhalb des Seitenaufbaus (z.B. beim manuellen Platzierenen eines Produktes)
gPage int Nummer der Seite, auf der das aktuelle Template eingefügt werden soll (1-basiert).
gLayer char* Layer, auf dem das Template eingefügt werden soll. Die Variable enthält nicht den aktuellen Layer, sondern die Layerangabe des Skriptes, durch das das Template einegefügt werden soll, also etwa den Wert des Parameters layer im Aufruf von document::insert_macro.
gPositionX, gPositionY, gPositionX_out, gPositionY_out, gPosition_changed, float, float, float*, float*, int* Position, an der das Template, das das Skript auslöst, eingesetzt werden soll.

Achtung: Da der nächste freie Stellplatz (auch) von der Größe des Templates abhängt, kann die tatsächliche Einfügeposition von dieser Angabe abweichen.

Eine Beschreibung der Variablen gPositionX_out, gPositionY_out, gPosition_changed finden Sie hier.
gGridPosX, gGridPosY float, float [Ab v3.3 R2630] Einfügeposition innerhalb eines 1:N-Elements relativ zum Element

Achtung: Da der nächste freie Stellplatz (auch) von der Größe des Templates abhängt, kann die tatsächliche Einfügeposition von dieser Angabe abweichen.

0.0, 0.0 : bei Aufrufen außerhalb des Seitenaufbaus (z.B. beim manuellen Platzierenen eines Produktes)
gElementLeft, gElementTop, gElementRight, gElementBottom float, float, float, float [Ab v3.3 R2630] Koordinaten des aktuellen Seitenelementes

AchtungDa der nächste freie Stellplatz (auch) von der Größe des Templates abhängt, kann die tatsächliche Einfügeposition von dieser Angabe abweichen.

0.0, 0.0, 0.0, 0.0 : bei Aufrufen außerhalb des Seitenaufbaus (z.B. beim manuellen Platzierenen eines Produktes)
gElement gElementName int, char* [Ab v3.3 R2630] Aktuelles Seitenelement des Aufbaus (1-basiert). Achtung Bei 1:N-Elementen können mehrere Skriptaufrufe mit dem gleichen Element gemacht werden. Testen Sie in diesem Fall auch die Variablen gGridPosX und gGridPosY.

0, "" : bei Aufrufen außerhalb des Seitenaufbaus (z.B. beim manuellen Platzierenen eines Produktes)
gPageTemplateID gPageTemplateName int, char* [Ab v3.3 R2630] Aktuelles Seitentemplate des Aufbaus.

0, "" : bei Aufrufen außerhalb des Seitenaufbaus (z.B. beim manuellen Platzierenen eines Produktes)
gClicked int Doppelklickskripte (Aktionen mit ClassID
18 - Produktrecherche, 19 - Dokumentpalette, 20 - Previewspalette)
Nur in Doppelklick-Skripten
Eine Zeile der Liste der Palette wurde doppelt geklickt. Die Variable enthält die 0-basierte Zeilennummer.
gDocument ItemRef - Aktuelles Frontdokument oder Dokument der Dokumentbeobachtung.
gDocumentID char* Skripte der Dokumentbeobachtung
und
Publikationsskripte
Dokument-ID, siehe document::setid und document::getid

Ab R12535, 7. Sep 2016 ist die Variable auch in Platzhalterskripten und in Skripten des Tabellenmodules definiert.
gDocumentPath Pfad des Dokumentes. Achtung : In den Skripten vor dem Öffnen, nach dem Schließen und bei neuen Dokumenten ist die Variable leer!
gDocumentPathPDF

Pfad des PDF-Dokumentes.

In comet_pdf enthält die Variable den vollständigen Pfad des Ausgabe-PDFs. In InDesign® wird lediglich die Dateiendung des Pfades durch .pdf ersetzt.

gBeforeMetaData int

Bevor die Metadaten erzeugt werden (oder erzeugt werden könnten), ruft comet_pdf einmal den DocWatcher "Before-Close" auf. In diesem Fall ist gBeforeMetaData gleich 1. Sonst hat die Konstante immer den Wert 0.

gSourcefolder char* Stapelbearbeitung (Aktionen mit ClassID 22) Die Variablen enthalten die vollständigen Pfade von Eingangs-, Ausgangs- und Fehlerordner der Stapelverarbeitung. Bei datenbankgestütztem Stapelbetrieb werden diese Ordner von der Datenbank fetsgelegt und können sich bei jeder Bearbeitung ändern. Sonst werden als Ein- und Ausgangsordner die gesetzten Hotfolder verwendet. In diesem Fall gibt es keinen speziellen Fehlerordner und gErrorfolder ist gleich gDestfolder
gDestfolder
gErrorfolder
gObjectPath
gTemplatePath
gJobID int ID des aktuellen Batch-Jobs.
gEditionID, gEditionID2, gEditionID3 int Infoskripte der Palette "Editionen" (Aktionen mit ClassID 28) ID der Edition
gEditionStringID char* StringID der Edition
gEditionName char* Name der Edition (1. Spalte der Palette)
gEditionPublication char* Art der Edition (2. Spalte der Palette)
gEditionPages int Seiten der Edition (3. Spalte der Palette)
gEditionDate char* Datum der Edition (4. Spalte der Palette)
gTableID int* Laden-Skripte der Tabellenplatzhalter Diese Skripte werden ausgeführt, wenn ein Tabellenplatzhalter durch eine Tabelle ersetzt werden soll. Zum Aufbau der Tabelle selbst werden die weiter unten beschriebenen Tabellenaufbau-Skripte verwendet.

ID der Tabelle , die eingefügt werden soll. Die ID verweist auf einen Eintrag der Tabelle/XML-Datei pageitems.

z.B.: *gTableID = 34;
gBuildTable int* Automatischen Aufbau unterbinden : *gBuildTable = 0;. Der Aufbau der Tabelle sollte dann mit table::build im Rahmenplatzhalter gemacht werden.
gTable ItemRef Aufbau von Tabellen (Aktionen mit ClassID 23) Diese Skripte werden ausgeführt, um zu ermitteln, welche Produkte für den Aufbau einer Tabelle verwendet werden sollen. Um einen Tabellenplatzhalter durch seine Tabelle zu ersetzen, werden die Ladenskripte von Tabellenplatzhaltern verwendet.

Verweis auf die Tabelle, die aufgebaut wird. Zum Zeitpunkt des Aufrufes ist die Tabelle zurückgesetzt (siehe table::reset und es sind noch keine neuen Zeilen oder Spalten angelegt.
gRow int Aufrufende Zelle
gColumn
gProducts IDTypeList Alle Produkte, die von der Aktion in die Tabelle eingefügt werden sollen, werden in diese Liste eingetragen. Verwenden Sie dazu Anweisungen der Form idtypelist::append (gProducts, 1, 0, 0, "");.

Skripte des Produktaufbaus verwenden ebenfalls eine Liste des Namens gProducts, aber diese Liste ist vom Typ ProductList.
gMoreGroups StringList Für jedes in gProducts eingefügte Produkt sollte eine Angabe über zusätzliche Gruppen für die erzeugten Tabellenzellen gemacht werden. Diese Gruppennamen müssen eindeutig sein. Sollen mehrere Gruppen verwendet werden, werden die Gruppennamen durch Leerzeichen getrennt. Gruppennamen mit Leerzeichen werden in Anführungszeichen gesetzt:
  • Gruppe_1
  • Gruppe_1 parent
  • "Gruppe 1" parent
Verwenden Sie dazu Anweisungen der Form

char str[1000];
stringlist::append (gMoreGroups, sprintf (str, "\"Gruppe %d\"", idtypelist::length (gProducts)+1));
gRootTableRecordID int Root-ID der Tabelle
gRootTableRecordID2
gRootTableRecordID3
gRootTableRecordStringID char*
gColumnRecordID int ID der Tabellenspalte
gColumnRecordID2
gColumnRecordID3
gColumnRecordStringID char*
gRowRecordID int ID der Tabellenzeile
gRowRecordID2
gRowRecordID3
gRowRecordStringID char*
gCellRecordID int [seit v3.3.1 R3387] ID der Tabellenzelle
gCellRecordID2
gCellRecordID3
gCellRecordStringID char*
gTable ItemRef Tabellengestaltung (Aktionen mit ClassID 24) Verweis auf die Tabelle, die bearbeitet wird.
gAreaLeft int Zu bearbeitender Bereich der Tabelle. Der Bereich beginnt bei Left, Top und endet vor Right, Bottom.
gAreaTop
gAreaRight
gAreaBottom
gMasterFrame ItemRef itemlist::logical_groups Skripte (Aktionen mit ClassID 34) siehe itemlist::logical_groups
gCheckFrame

PubServer spezifische Variablen

Verschiedene

Siehe hier. Die Werte der Variablen werden aus den StringIDs der jeweiligen RecordIDs ermittelt und haben nur in Comet4-PUBSERVER-Verbindungen sinnvolle Werte. In anderen Verbindungen sind die Variablen zwar definiert, Ihre Inhalte sollten aber nicht verwendet werden.

In SQL-Anweisungen, soap calls und xmlquery Aufrufen von Aktionen kann auf die aktuelle Umgebung mit Tags der Form <Tagname> zugegriffen werden. In den Tagnamen wird Groß- und Kleinschreibung unterschieden.

Alle Wertenamen, die Strings (char*) als Ergebnisse liefern, werden automatisch in Anführungszeichen gesetzt. Anführungszeichen in den Strings werden maskiert. Um den Wert eines Strings direkt einzusetzen, können die Tags mit einem Präfix versehen werden.

Der alte Bezeichner StringID (in dieser Schreibweise) wird nicht gequoted. Einfache Anführungszeichen innerhalb der StringID werden verdoppelt.

Prefix Beschreibung Beispiel abc'def ergibt ...
ohne einfache Anführungszeichen im Strings werden verdoppelt, der String wird in einfache Anführungszeichen gesetzt <layer> 'abc''def'
'Unquoted_ 'einfache Anführungszeichen im Strings werden verdoppelt '<Unquoted_layer>
<parent.parent.Unquoted_Name>
'abc''def
'Content_ 'Wert unverändert übernehmen '<Content_layer>
<parent.parent.Content_Name>
'abc'def
Diese Strings produzieren mit Sicherheit Fehler und werden nicht unterstützt 'abc'def'
Bitte beachten Sie, dass die Angaben Unquoted_ und Content_ immer vor dem letzten '_'-getrennten Wort des Tags angegeben werden!

[Ab R 1401, 1. Juli 2009] Zur Berechnung von String-Tags (char*) stehen die folgenden Funktionen zur Verfügung :

Die Funktionen werden dem Tagnamen durch Blank getrennt angefügt. Sie dürfen beliebig viele Funktionen anfügen, aber die Funktionen nicht schachteln. Jede Funktion bearbeitet den aktuellen Wert des Tags. Die selben Funktionen können auch zur Berechnung der Spalten eines xmlquery-Aufrufes verwendet werden.

Zur Ermittlung der Dateiendung des Wertes des <document>-Tags kann folgende Anweisung verwendet werden :

<document reverse token (0, ".") reverse>
- String umdrehen (abc.indd wird zu ddni.cba)
- erstes durch '.' getrenntes Token (ddni)
- wieder zurückdrehen (indd)

Folgende Tags sind definiert:
Name Datentyp Definitionsbereich Beschreibung
ID int nur in Platzhalteraktionen und in Aktionen des Tabellenaufbaus

Beim Tabellenaufbau wird die auslösende Tabellenzelle als Referenz für Texte, Seiten, Ebenen, ... verwendet.
1. ID des Objektes, das mit dem Platzhalter verbunden ist
ID2 int 2. ID des Objektes, das mit dem Platzhlatzer verbunden ist
ID3 int 3. ID des Objektes, das mit dem Platzhlatzer verbunden ist
STRINGID char* String-ID des Objektes, das mit dem Platzhlatzer verbunden ist.

Bis Version 1.4 R373 wurde der Bezeichner StringID verwendet. Dieser Bezeichner ist weiterhin gültig, bei der Ersetzung wird der Wert aber nicht automatisch in Anführungszeichen gesetzt.
STRINGID1 char* Erster Teil oder RootTableRecordStringID der |--| getrennten Multi-StringID des Objektes (oder StringID), das mit dem Platzhlatzer verbunden ist.

Analog des bis Version 1.4 R373 definierten Bezeichners StringID kann hier auch der Bezeichner StringID1 verwendet werden. Bei der Ersetzung wird der Wert aber nicht automatisch in Anführungszeichen gesetzt.
STRINGID2 char* Zweiter Teil oder ColumnRecordStringID der |--| getrennten Multi-StringID des Objektes (oder leer), das mit dem Platzhlatzer verbunden ist.

Analog des bis Version 1.4 R373 definierten Bezeichners StringID kann hier auch der Bezeichner StringID2 verwendet werden. Bei der Ersetzung wird der Wert aber nicht automatisch in Anführungszeichen gesetzt.
STRINGID3 char* Dritter Teil oder RowRecordStringID der |--| getrennten Multi-StringID des Objektes (oder leer), das mit dem Platzhlatzer verbunden ist.

Analog des bis Version 1.4 R373 definierten Bezeichners StringID kann hier auch der Bezeichner StringID3 verwendet werden. Bei der Ersetzung wird der Wert aber nicht automatisch in Anführungszeichen gesetzt.
text, textplus char* Aktueller Dokumenttext des Platzhalters. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportPlain bzw. kExportPlusPlain. Mit der 'plus'-Variante werden zusätzlich alle automatischen Seitennummern, Absatznamen und Fußnoten-Vereise durch ihre aktuellen Werte ersetzt.
text_notypografics textplus_notypografics char* Aktueller Dokumenttext des Platzhalters. Alle typografischen Anführungszeichchen werden durch normale Anführungszeichen ersetzt. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportPlainNoTypografics bzw. kExportPlusPlainNoTypografics. Mit der 'plus'-Variante werden zusätzlich alle automatischen Seitennummern, Absatznamen und Fußnoten-Vereise durch ihre aktuellen Werte ersetzt.
taggedtext char* Aktueller Dokumenttext des Platzhalters im InDesign® TaggedText Format. Beim Erstellen des Exportes werden immer die Einstellungen ASCII, Windows-Zeilentrenner, Ausführlich verwendet. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportTagged.

Achtung: [Ab v3.3 R2580 (20.07.2011)] Comet-Platzhalter sind ab diesem Release Bestandteil des normalen TaggedText-ImportExports. Hier finden Sie weitere Informationen dazu.
tttext char* Aktueller Dokumenttext des Platzhalters im WERK II %!TT-Format. Beim Erstellen des Exportes werden immer die Einstellungen ASCII, Windows-Zeilentrenner, Ausführlich verwendet. Absatz- und Zeichenstile werden nicht mit exportiert. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportTT.

Achtung: [Ab v3.3 R2580 (20.07.2011)] Comet-Platzhalter sind ab diesem Release Bestandteil des normalen TaggedText-ImportExports. Hier finden Sie weitere Informationen dazu.
w2text char* Aktueller Dokumenttext des Platzhalters im WERK II %!TT-Format. Beim Erstellen des Exportes werden immer die Einstellungen ASCII, Windows-Zeilentrenner, Ausführlich verwendet. Absatz- und Zeichenstile werden nicht mit exportiert. In den Export werden dieTextplatzhalter des Dokumenttextes eingefügt. Das Tag darf nicht verwendet werden, um den Text von Textplatzhaltern zu exportieren. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportW2.

Achtung: [Ab v3.3 R2580 (20.07.2011)] Comet-Platzhalter sind ab diesem Release Bestandteil des normalen TaggedText-ImportExports. Hier finden Sie weitere Informationen dazu.
unitext, unitextplus char* Reiner Textimport, alle Sonderzeichen (Ascii > 127) werden codiert in der Form \00FC. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportUnitext bzw. kExportPlusUnitext. Mit der 'plus'-Variante werden zusätzlich alle automatischen Seitennummern, Absatznamen und Fußnoten-Vereise durch ihre aktuellen Werte ersetzt.
xunitext, xmlunitext, unitextplus, xmlunitextplus char* Reiner Textimport, alle Sonderzeichen (Ascii > 127) werden codiert in der Form <0x00FC>. Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExport(Plus)XUnitext bzw. kExport(Plus)XMLUnitext. Mit der 'plus'-Variante werden zusätzlich alle automatischen Seitennummern, Absatznamen und Fußnoten-Vereise durch ihre aktuellen Werte ersetzt.
rtftext char* Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportRTF.
xhtml char* Der Export entspricht dem Ergebnis der Funktion textmodel::gettext mit dem Formatparameter kExportHTMLWithStyles.
textlen int Länge des aktuellen Platzhaltertextes in Buchstaben
link char* Vollständiger Pfad inkl. Dateinamen auf das Bild eines Grafikrahmens oder Leerstring
linkfolder char* Vollständiger Pfad ohne Dateinamen auf das Bild eines Grafikrahmens oder Leerstring. Pfadrtrenner am Ende des Pfades werden entfernt.
linkname, linknameN char* Name der in einem Grafikrahmen angezeigten Datei oder Leerstring. Hinter dem Namen darf eine positive ganze Zahl stehen, sie gibt die Anzahl der Pfadteile an, die angegeben werden sollen. Bei 2 wird der Ordner der Datei mit zurückgegeben (bilder/name.jpg), bei 3 der Ordner des Ordners (aktuell/bilder/name.jpg) usw.. Besteht der vollständige Pfad aus weniger Ordnern, wird der gesamte Pfad zurückgegeben.
random char* Für Testzwecke Zufallszahl im Bereich 0-255.
placeholderID int nur in Platzhalteraktionen [ab Release R 230] ID des auslösenden Platzhalters
created char* [ab Release R 230] Datum und Uhrzeit der Erstellung des Platzhalters im Format yyyymmddhhmmss
modified char* [ab Release R 230] Datum und Uhrzeit der letzten Änderung des Platzhalters im Format yyyymmddhhmmss
Platzhalterwerte siehe Spalte Typ der Tabelle der Platzhalterwerte [ab Version 2.1 R 811] Alle in der Tabelle angeführten Begriffe können in der Form <Name> verwendet werden. Unquoted_ und Content_ sind als Präfix erlaubt.
document char* immer Name der InDesign®-Datei
folder char* Ordner, in dem sich die Datei befindet. Der Pfad wird systemkonform angegeben.
folderX char* Ordner, in dem sich die Datei befindet. Im Pfad sind alle Windows-Pfadtrenner (\) ersetzt durch /. (Empfohlen für xmlquery, soap, und die Skriptsprache.)
path char* Vollständiger Pfad auf das Dokument. Der Pfad wird systemkonform angegeben.
path9 char* Vollständiger Pfad auf das Dokument im Format von Mac OS 9
pathX char* Vollständiger Pfad auf das Dokument. Im Pfad sind alle Windows-Pfadtrenner (\) ersetzt durch /. (Empfohlen für xmlquery, soap, und die Skriptsprache.)
pages int Anzahl der Seiten im Dokument
page int 1-basierte Nummer der Seite im Dokument. In Platzhalterskripten und beim Tabellenaufbau wird dabei der Rahmen des Platzhalters als Basis verwendet.

[Ab v3.3 R3901] Außerhalb von Platzhalterskripten und Tabellenaufbau geben die Desktop-Varianten die aktuell aktive Seite zurück. Im Serverbetrieb bleibt die Variable leer.
pagestr char* Seitennummer wie sie im Dokument verwendet wird.

[Ab v3.3 R3901] Ausserhalb von Platzhalterskripten und Tabellenaufbau geben die Desktop-Varianten die aktuell aktive Seite zurück. Im Serverbetrieb bleibt die Variable leer.
layer,
layer.1
layer.2
layer.3
char* Ebenenname. Mit der Endung .1, .2, .3 wird dabei nur der n.te Teil eines #-getrennten Ebenennamens geholt.

Liegt der aktuelle Platzhalter auf der Ebene CH#de, dann ergibt sich:

<layer.1> = "CH"
<layer.2> = "de"
<layer.3> = ""
[Ab v3.3 R3901] Ausserhalb von Platzhalterskripten und Tabellenaufbau geben die Desktop-Varianten die aktuell aktive Ebene zurück. Im Serverbetrieb bleibt die Variable leer.
documentID int Comet-ID des Dokumentes, siehe document::setid und document::getid
documentID2
documentID3
documentSTRINGID char*
application char* [Ab R1145] Vollständiger Pfad zum verwendeten InDesign®
plugins [Ab R1145] Vollständiger Pfad zum Plugins-Ordner des verwendeten InDesign®
comet [Ab R1145] Vollständiger Pfad zum Ordner der Comet-Plugins des verwendeten InDesign®
xmlfolder [Ab R1145] Vollständiger Pfad des aktuellen XML-Datenpools (oder leer)
cache [Ab R1145] Vollständiger Pfad des verwendeten Comet-Daten-Cahches bei XML und SOAP. Bei ODBC-Verbindungen ist die Angabe leer.
now char* immer Aktuelles Datum und aktuelle Zeit. Bei String-Ergebnissen erfolgt die Angabe in dem Format, das in den Voreinstellungen des Rechners/Benutzers angegeben ist.
date char*
time char*
day int
month int
year int
hour int
minute int
second int
dayOfWeek int
dayOfYear int
weekOfYear int
date_sep char*
time_sep char*
am char*
pm char*
os char* immer Betriebssystem, unter dem das Plugin läuft
Mac OS X
Windows
version char* Aktuelle Version der WERK II Plugins
version_id int siehe system::version
is_server int siehe system::is_server
author char* Matthias [Paul] Seidel
vendor char* WERK II
currency char* Aktuelles Währungssymbol des Betriebssystemes
host char* Rechnername
login char* Name, unter dem der Benutzer am Rechner angemeldet ist
lang char* siehe system::language
tcpip char* siehe system::tcpip
macid char* siehe system::macid
user char* bei gültiger Datenbankverbindung oder bei gültiger Verbindung zu einem SOAP-Service im Internet Angaben zum Login auf der Datenbank oder dem SOAP-Service
userid int
server char*
database char*
client char*
encoding int Folgende Werte werden zurückgegeben:
  • 0 : keine Kodierung
  • 1 : UTF8
  • 2 : Unicode 16Bit
  • 3 : Unicode 32Bit
sessionId char* Nur bei gültiger PubServer-Verbindung

Aktuelle Session-ID, siehe auch system::session_id
publication_id int Sendungsplanung, Sendungsrecherche In Sendungsplanung und Sendungsrecherche beim Laden von "Genre"
publication_code char*
brandID int Arbeitsvorbereitung beim Suchen der ListenIDs (PanelStatement 19) ID des Popupmenüs 'Suchen'
brand char* Wert des Popupmenüs 'Suchen'
label char* Eintrag bei 'Bezeichnung'
depth int Laden der ID der Doppelklick-Aktion Lade die ID einer Aktion, die beim Doppelklick des Eintrages in der Produktrecherche (PanelStatement 95) oder der Dokumentpalette (Panelstatement 96) ausgeführt werden soll. ausgeführt werden soll.
searchvalue1 char* Laden der Einträge der Produktrecherche Werte der Suchfelder der Palette. An Strings wird automatisch ein %-Wildcard angehangen. Leere Felder bekommen den Wert "%". Sonst wird das Tag durch den Wert des Suchfeldes ersetzt, es erfolgt keine Umwandlung in Großbuchstaben.
searchvalue2
searchvalue3
searchvalue4
searchvalue1_nopercent char* Werte der Suchfelder der Palette ohne % am Ende. Leere Felder bekommen den Wert "". Sonst wird das Tag durch den Wert des Suchfeldes ersetzt, es erfolgt keine Umwandlung in Großbuchstaben.
searchvalue2_nopercent
searchvalue3_nopercent
searchvalue4_nopercent
pageitemID int [Ab v4.1.6 R24942] Template des Produktes, dessen Untereinträge geladen werden sollen
type char* Laden der Templates Eingestellter Wert des Popupmenüs "Typ". Die Angaben enthalten Name und ID des des ausgewählten Eintrages (Einstellung "beliebig" : "%", 0).
typeid int
RootTableRecordID int Tabellenmodul ID des Objektes, mit dem die Tabelle verknüpft ist.
RootTableRecordID2
RootTableRecordID3
RootTableRecordStringID char*
ColumnRecordID int ID des Objektes, mit dem die Tabellenspalte verknüpft ist.
ColumnRecordID2
ColumnRecordID3
ColumnRecordStringID char*
RowRecordID int ID des Objektes, mit dem die Tabellenzeile verknüpft ist.
RowRecordID2
RowRecordID3
RowRecordStringID char*
CellRecordID int [seit v3.3.1 R3387] ID des Objektes, mit dem die Tabellenzelle verknüpft ist.
CellRecordID2
CellRecordID3
CellRecordStringID char*
RowParent. - [seit v3.3.1 R3387] Ermittle eine Eltern-ID einer Zelle. Durch mehrfache ~Parent-Angaben kann die "Abstammung" der Zelle zurückverfolgt werden. Hat eine Zelle in der angegebenen Richtung keine Elternzelle mehr, wird der Bezeichner durch 0 bzw. "" ersetzt.

Beispiele für Eltern-IDs

    <RowParent.RowRecordID>
    <RowParent.RowParent.CellRecordID>
    <RowParent.ColParent.CellRecordID>
ColParent.
PubServer spezifische Tags Verschiedene

Siehe hier. Die Werte der Variablen werden aus den StringIDs der jeweiligen RecordIDs ermittelt und haben nur in Comet4-PUBSERVER-Verbindungen sinnvolle Werte. In anderen Verbindungen sind die Variablen zwar definiert, Ihre Inhalte sollten aber nicht verwendet werden.

Jede Aktion kann in cscript geschrieben werden. In den meisten Fällen ist es aber ausreichend (und schneller), einen der Datenquelle entsprechenden Befehl ausführen zu lassen, der die gewünschten Daten holt oder schreibt:

Rückgabe : Genau eine Textspalte. select name from products where id = <ID>
"products.xml" select name node products.product where id=<ID>

Bei Bildplatzhaltern wird die Stringangabe als Dateipfad ausgewertet. Die Angabe muss als vollständiger Pfad erfolgen, darf aber mit den üblichen $DESKTOP, ... -Angaben beginnen. Nach der Pfadangabe dürfen weitere optionale Parameter folgen. Sollen Parameter übersprungen werden, müssen die vorangehenden Parameter mit Defaultwerten gefüllt werden.
Name Datentyp Default Beschreibung
Bildposition int 5 Position des Bildes im Rahmen, siehe Bildpositionen
Bildgröße / BoundingBox float 0.0 Skaliere das Bild auf diese Größe. Das Bild wird so skaliert, dass die größere Bildseite den gegebenen Wert annimmt.

0.0 : Bild proportional in den Rahmen einpassen. Ist das Bild kleiner als der Rahmen, wird es nicht verändert.

>0.0 : Bild proportional in einen quadratischen Rahmen dieser Größe einpassen. Ist das Bild kleiner, wird es nicht verändert.

<0.0 : Bild proportional in einen quadratischen Rahmen des Betrages dieser Größe einpassen. Ist das Bild kleiner, wird es entsprechend vergössert.
Freistellpfadindex int 0 0-basierter Freistellpfad des Bildes. Wird der Freistellpfad gefunden, wird das Bild automatisch freigestellt.

  -1 : Pfadname verwenden. Ist der Pfadname leer, wird das Bild nicht freigestellt.
Name des Freistellpfades String "" Name eines existierenden Freistellpfades im Bild. Wird der Freistellpfad gefunden, wird das Bild automatisch freigestellt. Die Angabe wird ignoriert, wenn der gegebene Pfadindex <0 ist. Unter InDesign® Server wird der Parameter nicht unterstützt, benutzen Sie hier bitte den Index des Pfades.
Freistellparameter int 0 Zusätzliche Angaben zur Bildfreistellung. Die Angaben können addiert werden.

  1: Invert the resulting path by combining with a path equal to the bounds of the image.
  2: Force edge detection to use the high resolution source image (potentially much slower but higher quality. Although the 72 dpi proxy does a pretty good job).
  4: For edge detection, do we remove the holes or leave them in.
  8: For edge detection, do we only detect edges within the visible portions of the image? That is, do we crop the image to its frame before performing edge detection?
cliptoFrame int 0 Soll der Freistellpfad als Rahmenbegrenzung verwendet werden?

  0 : Bestehenden Rahmen behalten
  1 : Rahmen ändern
tolerance float 0.0 A tolerance value specifying how close to the original path we must be if we smooth the path.
0.0 indicates a perfect match. Smoothing may simplify the path, reducing the number of points.
minPathSize float 0.0 subpaths smaller than the minPathSize will be deleted
inset float 0.0 how far to inset the path
Alphakanal-Index int -2 0-basierter Index eines Alphakanales im Bild

  -2 : Alphakanal nicht verwenden
  -1 : Namen des Alphakanales verwenden
Name des Alphakanales String "" Name eines existierenden Alphakanales im Bild. Die Angabe wird ignoriert, wenn der gegebene AlphaIndex -2 ist. Unter InDesign® Server wird der Parameter nicht unterstützt, benutzen Sie hier bitte den Index des Pfades.

Sync-Skripte werden ausgeführt, um zu überprüfen, ob der Inhalt eines Platzhalters noch mit der Datenbank übereinstimmt. In den Skripten wird mit placeholder::set_sync der neue Status des Platzhalters gesetzt. Mehr Infos darüber finden Sie unter placeholder::set_sync.

[Ab v3.3 R2580] Implementierung und Pflege der Sync-Aktionen erfordern einen enormen Aufwand. Zudem müssen die Aktionen im allgemeinen angepasst werden, wenn die Aktion zum Laden des Platzhalters geändert wird. Dieser Aufwand kann vermieden werden, setzen Sie die Sync-ID des Platzhalters einfach auf -1! In diesem Fall wird automatisch die Laden-Aktion des Platzhalters aufgerufen. Besteht die Aktion aus einem select/xmlget, kann aus dem Ergebnis (und der Anzahl der erhaltenen Ergebnisse) der Sync-Status des Platzhalters einfach ermittelt werden. Skripte müssen nur geringfügig geändert werden : Das Ergebnis muss in die char*-Variable gNewValue eingetragen werden.

Die meisten Laden-Skripte enthalten bereits eine Behandlung der Variablen gNewValue. Hier haben Sie nämlich bisher den neuen Wert des Platzhalters für die Aufgabenpalette eingetragen. Genau diese Variable ist jetzt auch in Laden-Skripten, die vom Sync gerufen werden, definiert. Auch hier dürfen maximal 2 MB an den String übergeben werden.

In wiederholenden Elementen setzen Sie den Sync-Status bitte immer auf -1. Hinweise zur Implementierung eigener Sync-Skripte für wiederholende Elemente finden Sie hier.

Prüfen Sie in jedem Fall, dass gNewValue ungleich 0 ist (if (gNewValue) ...). Ist das so, handelt es sich um einen automatischen Sync-Call oder einen Aufruf der Aufgaben-Palette zur Berechnung des neuen Platzhalterwertes. In beiden Fällen bekommt der Platzhalter natürlich den gleichen Text. Kopieren Sie in diese Variable den gesamten Text, den ihr Platzhalter erhalten soll. Das Skript sollte danach sofort verlassen werden ohne Änderungen am Dokument vorzunehmen.

Unabhängig davon, ob die Ladenaktion eine Anweisung oder ein Skript ist, wenn ein Ergebnis gefunden wird, wird dieses Ergebnis danach mit dem tatsächlichen Platzhalterinhalt verglichen. Dabei werden jeweils die "Netto"inhalte der Strings verglichen. Die Netto-Werte der Strings werden wie folgt beberechnet :

Automatische Sync-Calls können auch in Bildplatzhaltern verwendet werden. in anderen Rahmenplatzhaltern könne Sie verwendet werden, machen aber in der Regel wenig Sinn.

Für den Aufbau wiederholender Elemente wird das Build-Skript des Platzhalters ausgeführt. Load-, Sync- und Store-Skripte haben bei diesen Platzhaltern keine Bedeutung und werden ignoriert. Der Aufruf muss folgende Ergebnisspalten liefern:

Der Formatstring ist als semikolongetrennte Liste von Definitionen der Art Eigenschaft=Wert aufgebaut. Die folgende Tabelle beschreibt alle Eigenschaften und ihre zugehörigen Werte.
Der Formatstring wird für jedes einzufügende Template neu gelesen aber type, pin und cell werden nur beim ersten Element übernommen
Wird die gleiche Eigenschaft in einem Formatstring mehrfach gesetzt, wird der letzte gegebene Wert verwendet. Die in der Tabelle sandfarben hinterlegten Eigenschaften sind Bitfelder deren Werte addiert werden. So kann die post-Eigenschaft die Werte delete_parent und autoload und einige Aktionen haben, der Pin pin aber nur einen Wert.

Hier finden Sie ein Beispiel für ein wiederholendes Element mit freier Platzierung.
Eigenschaft Wert(e) Default Beschreibung
type row
column
table (cols)
stagger
area
stagger

Anordnung der Elemente. Der Wert table erfordert die Angabe einer Spaltenzahl. Die Grösse der ersten Spalte kann in cell definiert werden. Bei der Angabe table wird keine Tabelle aufgebaut, sondern die Einträge werden nur Form einer Tabelle platziert.

Die Angabe des Types wird nur im ersten Element ausgewertet. Bei allen folgenden Elementen wird sie ignoriert!

area : [Ab Comet 4.1 R12400] Anordnung der Elemente basierend auf einem oder mehreren Layoutrahmen. Einstellungen zum Aufbautyp area machen Sie in der Palette Bereichsaufbau. Die Option ignoriert die Einstellungen pin, offset, scale, rotate und fit.
pin lt, ct, rt, lc, ce, rc, lb, cb, rb

[ + (float, float) ]
lt

An welcher Ecke des wiederholenden Rahmens sollen die Elemente eingefügt werden? Der Pin wird nur beim ersten Element ausgewertet. In allen weiteren Elementen wird er ignoriert.

Optional kann hinter der Angabe des Referenzpunktes ein Offset im Format + (float, float) angefügt werden. Der Offset wird für jedes Element ausgewertet, bezieht sich aber immer auf den Pin des ersten Elementes.

cell (float, float) (0.0, 0.0) Grösse der Tabellenzellen bei stagger=table (N). Ist einer der beiden Werte 0.0, wird die Grösse des ersten Templates verwendet.
offset (float, float) (10.0, 10.0) Horizontaler und vertikaler Abstand vom Vorgänger-Template.
scale (pin, float, float, fit) (lt, 1.0, 1.0, ignore) Skaliere das Template nach dem Einfügen um den gegebenen Faktor. Als Referenzpunkt der Skalierung muss einer der Wert von pin angegeben werden. Nach dem Skalieren kann die Rahmengröße mit einem der fit-Werte angepasst werden.
rotate (pin, float, fit) (lt, 0.0, ignore) Drehe das Template nach dem Einfügen um den gegebenen Winkel. Als Referenzpunkt der Drehung muss einer der Wert von pin angegeben werden. Nach dem Drehen kann die Rahmengrösse mit einem der fit-Werte angepasst werden.
layer "string" "" Auf welcher Ebene soll die Ebene platziert werden? Die Ebene muss existieren. Ist der String leer, werden die wiederholenden Elemente auf der gleichen Ebene wie der auslösende Rahmen angelegt.
fit frame
frame_content
ignore
ignore Rahmen an Inhalt oder Inhalt an Rahmen anpassen
link (classID1[, classID2]*)   Verknüpfe alle Platzhalter der angegebenen ClassIDs mit dem übergebenen Objekt. Als ClassIDs kann eine kommagetrennte Liste von Zahlen angegeben werden. Mit der Angabe von 0 werden alle Platzhalter des Templates mit dem Objekt verlinkt.
Angaben der Form link=(1, 2, 3, 0) sind zwar nicht falsch. Da aber durch die 0 alle Platzhalter verlinkt, genügt auch link=(0).
checker if_not_exists
ignore_pagesize
check_pagesize
reset
 
  • if_not_exists : Prüfe, ob ein Objekt der gleichen Klasse und ID bereits im Dokument enthalten ist. Diese Prüfung kann zeitaufwendig sein.
  • ignore_pagesize : Neue Rahmen werden geprüft, ob sie noch auf die Seite passen. Das Flag schaltet diese Prüfung ab.
  • check_pagesize : Die Rahmen werden gegen die Seitengröße getestet (Default-Verhalten).
  • reset : Zurücksetzen aller Prüffunktionen (keine Prüfung, ob Objekte existieren, Seitengröße prüfen).
post delete_parent
delete_parent_always
autoload
autobuild
group
reset


actionID
ignore Die verschiedenen Flags werden zu unterschiedlichen Zeiten ausgewertet:
  • autoload Nach dem Einfügen eines Templates werden alle Platzhalter des Templates geladen.
  • autobuild [Seit v4.1 R16006] Nach dem Einfügen eines Templates werden alle Wiederholende-Elemente-Platzhalter des Templates aufgebaut.
  • delete_parent Nach dem Einfügen des letzten Templates wird der auslösende Rahmen gelöscht. Findet ein Element keine Wiederholungen, wird der Rahmen nicht gelöscht.
  • delete_parent_always [Seit v3.3.1 R4500] Wie delete_parent, aber der Rahmen wird auch dann gelöscht, wenn keine Wiederholungen gefunden werden. Achtung:Es wird genau die Schreibweise post=delete_parent_always OHNE Leerzeichen erwartet.
  • group Nach dem Einfügen des letzten Templates werden alle eingefügten Templates gruppiert. Wenn der auslösende Rahmen nicht vorher gelöscht wurde, wird dieser Rahmen zur Gruppe hinzugefügt.
  • actionID [Seit v3.3 R2688, 28.10.2011] Ausführen der Aktion mit der angegebenen ID. Die Aktion wird ganz am Ende des Prozesses ausgegeführt. In der Aktion sind folgende globale Variablen definiert:
    Variable Typ Beschreibung
    gRecordID int ID des Objektes, mit dem der Platzhalter aufgebaut wurde
    gRecordID2
    gRecordID3
    gRecordStringID char*
    gRecordStringID1
    gRecordStringID2
    gRecordStringID3
    gPlaceholderID int ID des Platzhalters
    gFrames ItemList Liste der aufgebauten Rahmen
    gFrame ItemRef [Seit v4.3 R36680] Erster Rahmen des auslösenden Bereichsaufbaus.

    In älteren Versionen können Sie den ersten Bereichsrahmen wie folgt ermitteln:

    fr	= item::alloc ();
    itemlist::get (gFrames, fr, 0);
     
    area1	= item::alloc ();
    item::define (
     		area,
     		0,
     		placeholder::get_value (fr, "RepetitionParent"));

    Enthält der Beereichsaufbau nur ein Element, soll der Rahmen dieses Elements auf die Größe des ersten Bereichs vergrößert werden.

    int main ()
    {
     	ItemRef 		fr			= item::alloc ();
     	float			w, h;
     
     	if (itemlist::length (gFrames) == 1)
     	{
     		frame::get_size (gFrame, &w, &h);
     
     		itemlist::get (gFrames, fr, 0);
     		frame::resize (fr, w, h);
     		frame::fit_image (fr, 5, 5);
     	}
     
     	item::release (fr);
     	item::release (area);
     
     	return 0;
    }

Nach dem Einfügen jedes Templates werden alle in den Templates definierten Platzhalter mit dem aktuellen Objekt verknüpft und geladen. Nachdem alle wiederholenden Elemente eingefügt wurden, werden sie in einem Rahmen gruppiert. Hier der nötige Formatstring.

link 	= (0);
post 	= autoload;
post 	= group;

Füge die Sortenbilder einer Staude gestaffelt über (pin=lt) dem erzeugenden Rahmen ein. Die Bilder werden dabei um 50% vergrößert (scale=(lt, 1.5, 1.5, frame_content)). Zum Schluss wird der Originalrahmen gelöscht. Hier der nötige Formatstring.

type 	= stagger;
pin 	= lt;
offset 	= (20.0, 20.0);
link 	= (1, 3, 5, 6);
post 	= autoload;
post 	= delete_parent;
scale 	= (lt, 1.5, 1.5, frame)

Die Sortenbilder einer Staude werden gefächert (rotate) zentriert unter (pin=cb) den erzeugenden Rahmen gesetzt. Die Bilder drehen sich um die rechte untere Ecke. Für die Darstellung sind außdem die Angaben von type und offset wichtig. Der angegebene String für rotate funktioniert nur für Verbindungen zu Datenbanken bei denen rownum definiert ist, etwa Oracle.. Hier der nötige Formatstring.

type 	= stagger;
pin  	= cb;
offset 	= (0.0, 0.0);
post 	= autoload;
rotate 	= (rb, '||to_char(rownum*-10.0)||'.0)

[Ab v3.3 r3860, 11. Juni 2013] Die aus den Angaben type, pin, cell und offset berechnete Position der Wiederholungen kann mit Hilfe des Ersatztemplate-Skriptes konfiguriert werden. Setzen Sie in diesem Skript die hier definierten globalen Variablen gPositionX_out und gPositionY_out auf die gewünschten Werte. Zum Schutz vor Rundungsfehlern muss bei Änderungen dieser Werte gleichzeitig die Variable gPosition_changed auf den Wert 1 gesetzt werden.

Die wiederholenden Elemente sollen jeweils um den Offset (10, 10) verschoben werden.

∗gPositionX_out = ∗gPositionX_out + 10.0;
∗gPositionY_out = ∗gPositionY_out + 10.0;
∗gPosition_changed = 1;

Beachten Sie bitte, dass trotz eventueller Änderungen der Position die nächste Position nach den Regeln der in type, pin, cell und offset gemachten Angaben berechnet wird. Beachten Sie außerdem, dass das Ersatztemplate-Skript im Template des wiederholenden Elementes festgelegt werden muß und nicht im Template des Produktes.

[Ab Comet 4.1 R19001] können die Daten dieses Aufrufes auch per cScript ermittelt werden. Dazu werden in dem Script globale Variablen definiert die im Script gefüllt werden.
Folgende Globale Variablen müssen dazu gefüllt werden:

Variablenname Datentyp Beschreibung
gProductIDs IDTypeList Liste von Produkten die als wiederholende Elemente aufgebaut werden sollen
gClassID int ClassID der Produkte
gPageItemIDs List Liste von Templates die für die Produkte in gProductIDs verwendet werden. Muss genau so lang sein wie gProductIDs
gFormat String FormatString, siehe unten
gElements ElementList [Ab v4.1 R19501] Liste der aufzubauenden Elemente. Hat die Liste mindestens einen Eintrag, bleiben die anderen Variablen unberücksichtigt. Weitere Informationen finden Sie hier.
gPrivateSync int*

[Ab v4.1 R21400] Die Variablen dienen der der eigenen Berechnung des Synchron-Status wiederholender Elemente. Sie sind nur bei Aufrufen der Sync-Aufrufen definiert. Sonst haben Sie den Wert 0. Vor dem Zugriff auf die Variablen muß mindestens eine der Variablen auf 0 geprüft werden! Die im Dokument aufgebauten Elemente eines wiederholenden Elementes finden Sie mit Hilfe der Funktion

   elementlist::get_area_built_elements.

  • gPrivateSync Default 0. Setzen Sie den Wert auf 1 (*gPrivateSync=1;), wenn die Sync-Berechnung des Skripte verwendet werden soll. Sonst wird die Standard-Auswertung für den Sync-Status verwendet.
  • gState Default 1 (Okay). Setzen Sie hier den gewünschten Status des wiederholenden Elementes, siehe set_sync.
  • gSyncChanged Default 0. Wenn Sie set_sync im Skript selbst machen, tragen Sie hier den Wert 1 ein. Sonst wird der Status von gState automatisch gesetzt.
  • gOldValue Default "". Der String wird bei der Auswahl des Elementes in der Aufgabenpalette als Dokumenttext gezeigt. Beachten Sie bitte, dass die Variable vom Typ String ist.
  • gNewValue Default "". Der String wird bei der Auswahl des Elementes in der Aufgabenpalette als Datenquelle-Text gezeigt. Beachten Sie bitte, dass die Variable vom Typ String ist.

gState int*
gSyncChanged int*
gOldValue String
gNewValue String

Für ein gültiges Resultat müssen folgende Kriterien erfüllt sein:

Baue drei Produkte als wiederholende Elemente auf und benutze die Templates mit den IDs 45, 46 und 47.

int main()
{
 	string::set(gFormat, "type=area;post=autoload");
  idtypelist::append(gProductIDs, 1, 0, 0, "");   idtypelist::append(gProductIDs, 2, 0, 0, "");   idtypelist::append(gProductIDs, 3, 0, 0, "");
  list::append(gPageItemIDs, 45);   list::append(gPageItemIDs, 46);   list::append(gPageItemIDs, 47);
  return 0; }

Ab Comet 4.1 R19501 kann alternativ auch die globale Liste gElements vom Typ ElementList gefüllt werden. Enthält diese Liste Werte, werden andere Angaben (in gProductIDs, gPageItemIDs, gFormat und gClassID) ignoriert. FormatString und ClassID werden in diesem Fall vom ersten Eintrag der Liste übernommen.

Diese Variante bietet sich besonders an, wenn die Daten eines wiederholenden Elements über den Aufruf einer Java Methode ermittelt werden, die Integration erledigt sich - wie unten stehendes Beispiel zeigt - dann fast von selbst:

get element data via Java method call from a customer Java method

#include "[pubserver]/plugin/com.plugin.data.ElementData.c"
int main() {    ElementList elements = loadChildBucketsAsElements(gPSRecordId, gPSEntityId);
   elementlist::add_all (gElements, elements, 1); // remove, but do NOT clear the elements from original list    elementlist::release (elements);
   return 0; }

Wiederholende Elemente werden vom Sync-Check der Aufgabenpalette geprüft. Dazu wird das Build-Script des Platzhalters ausgeführt und die Liste gElements gefüllt.

Im Sync-Aufruf des Build-Skriptes haben die Variablen gPrivateSync, gState, ... (siehe hier) Werte ungleich 0. Werden diese Werte unverändert gelassen, wird ein Standard-Sync innerhalb der Plugins verwendet: Die Liste gElements muß die gleiche Anzahl Elemente in der gleichen Reihenfolge haben wie im Dokument.

Das Skript kann aber auch einen eigenen Sync implementieren. Holen Sie dazu mit Hilfe der Funktion elementlist::get_area_built_elements alle im Element enthaltenen Produkte und Rahmen. Die erhaltene Liste kann das Skript gegen die Liste gElements testen. Das Ergebnis des Tests teilen Sie den Plugins in der Variable gState mit :

    *gState=...;

Wichtig: Wenn Sie eine eigene Sync-Berechnung durchgeführt haben, muss die Variable gPrivateSync den Inhalt 1 bekommen:

    *gPrivateSync=1;

Achten Sie bitte immer darauf, die Sync-Variablen vor ihrer Verwendung auf 0 zu testen, also etwa:

    if (gPrivateSync) *gPrivateSync=1;

Hier ein komplettes Beispiel aus dem artwork Showcase inkl. eigenem Sync. Das Skript sammelt alle für einen Künstler verfügbaren Kunstwerke. Zur Demonstration werden am Ende des Skriptes die Sync-Daten angenwendet, geben aber immer den Status 'Gelöscht' zurück.

#include  "internal/types.h"
int wframes (ItemList li) {   int i, j, first = 1;   ItemRef fr = item::alloc ();   ItemRef frj = item::alloc ();   ItemList sub;
  for (i = 0; i < itemlist::length (li); i++)   {   itemlist::get (li, fr, i);
  // The element can be an InDesign group.   // Otherwise, the subloop can also be omitted.   //   sub = itemlist::subframes (fr);   for (j = 0; j < itemlist::length (sub); j++)   {   itemlist::get (sub, frj, j);   if (!first) wlog ("", ", ");   else wlog ("", "\t");   wlog ("", "%d", item::getint (frj));   first = 0;   }   itemlist::release (sub);   }   wlog ("", "\n");
  item::release (fr);   item::release (frj);
  return 0; }
int main () {   Query qu = sql::query (sql::dbconnection ());   int i, id1, id2, id3, classid, templateid;   String sid = string::alloc ();   String fmt = string::alloc ();   Element e;   ElementList built;
  // Get artworks from database   query::send (qu, "select ?, ?, id, \"\", 3, 1, \"type=area;post=autoload\"");   query::send (qu, " from artworks where artistid = ?");
  query::input (qu, kInt, gRecordID);   query::input (qu, kInt, gRecordID2);   query::input (qu, kInt, gRecordID2);
  query::output (qu, kInt, &id1);   query::output (qu, kInt, &id2);   query::output (qu, kInt, &id3);   query::output (qu, kString, sid);   query::output (qu, kInt, &classid);   query::output (qu, kInt, &templateid);   query::output (qu, kString, fmt);
  query::exec (qu);
  while (query::fetch (qu))   {   wlog ("", "%d %d %d '%s' %d %d %s\n", id1, id2, id3, sid, classid, templateid, fmt);
  e = element::alloc (id1, id2, id3, sid);   element::set_classid (e, classid);   element::set_templateid (e, templateid);   element::set_formatstring (e, fmt);
  elementlist::append (gElements, e);   }
  query::close (qu);
  // Get artworks from document in case of syncs only   if (gPrivateSync)   {   built = elementlist::alloc ();   elementlist::get_area_built_elements (gFrame, built);   for (i = 0; i < elementlist::length (built); i++)   {   e = elementlist::get (built, i);   wlog ("", "%d [%d %d %d] with template %d of parent frame %d (order no %d)\n",   i,   element::id (e),   element::id2 (e),   element::id3 (e),   element::templateid (e),   item::getint (element::masterframe (e)),   element::ordernumber (e));   wframes (element::frames (e));   }
  *gPrivateSync = 1;   if (elementlist::length (gElements) == elementlist::length (built)) *gState = 1;   else *gState = -1;
  string::set (gOldValue, "Already installed: %d", elementlist::length (built));
  elementlist::release (built);   }
  return 0; }

Zum Anlegen eines Platzhalters für wiederholende Elemente müssen die folgenden Schritte ausgeführt werden :

  1. Anlegen eines Platzhalters.
    -- Datenbank
    insert into placeholder (..., RelatedToID, ...) values (..., 6, ...)
    
    -- XML, SOAP
    In der Datei placeholder.xml wird ein neuer Eintrag angelegt.
    : <type>multi frames</type> :
  2. Eintragen der ID (beispielsweise 301) für die Aktion, die zum Erzeugen der Elemente ausgeführt werden soll.
    -- Datenbank
    update placeholder set CharacterStyleID = 301 where ID = ...
    
    -- XML, SOAP
    Ändern der Datei placeholder.xml.
    : <styleid>301</styleid> :
  3. Anlegen der Aktion mit der entsprechenden ID
    -- Datenbank
    insert into actions (ID, ...) values (301)
    
    -- XML, SOAP
    Anlegen eines neuen Eintrages in actions.xml.
    : <id>301</id> :
  4. Implementierung der Aktion. Öffnen Sie dazu die Palette #Platzhalterwerte, tragen in das Editfeld Script: der Maske die ActionID (301) ein, drücken das Button neben dem Feld und schreiben die Aktion wie oben beschrieben.

[ab Comet 3.1 R1864, 7. Mai 2010] In den Paletten der Comet-Plugins kann an verschiedenen Stellen der Name eines Objekte angezeigt werden :

Dieser Name kann vom Platzhalter über den Datenpool berechnet werden. Dazu wird in actions eine Aktion definert, die aus einer gegebenen Objekt-ID den Namen des Objektes bestimmen kann. In der Platzhalter-Definition wird die ID dieser Aktion im folgenden Feld angegeben :

Datenverbindung Typ Attribut
XML, SOAP int metadata.placeholder.objectnameid der Datei placeholder.xml
ODBC und Oracle int ObjectNameID in der Tabelle placeholder

Sie können die Aktion sowohl als select als auch als Skript implementieren. Ein Select muss dabei genau eine Ergebnisspalte (den Objektnamen) liefern. Im Skript übergeben Sie den Objektnamen der global definierten Variable gObjectName. Er darf maximal 7999 Zeichen lang sein. gObjectName darf nicht gelöscht werden! Die folgende Tabelle enthält alle im Objektnamen-Skript definierten globalen Variablen :

Variable Typ Beschreibung
gRecordID, gRecordID2, gRecordID2 int ID des Objektes, dessen Name ermittelt werden soll
gRecordStringID,

gRecordStringID1, gRecordStringID2, gRecordStringID3

char*
gPlaceholderID int ID des aufrufenden Platzhalters
gCreated char* Datum und Uhrzeit, wann der Platzhalter im Dokument angelegt und zuletzt geändert wurde

Format : YYYYMMDDHHMMSS

gModified
gObjectName char [8000] Tragen Sie hier den Objektnamen ein.

Der Name darf nicht länger als 7999 Zeichen sein. Die Variable darf nicht gelöscht werden.

gFrame ItemRef Bei Rahmenplatzhaltern der Rahmen, sonst Verweis auf ungültigen Rahmen (also item::getint (gFrame) == 0)
gDocument ItemRef Verweis auf das Dokument des Platzhalters

Wenn Sie den Objektname durch ein Skript berechnen lassen sollten Sie darauf achten, dass das Skript keine Änderungen im Dokument macht.

Warum wird für den Objektnamen nicht einfach die Angabe der Produktrecherche verwendet?

  1. In der Palette können verschiedene Anweisungen zum Laden von Produkten verwendet werden, in denen das Produkt auch unterschiedliche Namen haben kann.

  2. Ein Produkt muss gar nicht in der Produktrecherche enthalten sein.

  3. Die Produktliste ist hierarchisch aufgebaut. Um ein Produkt in der Hierarchy zu finden, muss im schlimmsten Fall die gesamte Hierarchy durchsucht werden.

  4. Die Produkt-Hierarchy kann verschiedene Blickweisen auf ein Produkt enthalten. So kann ein Produkt jeweils unter Leistung, Farbe, und Hersteller zu finden sein. Aus den Produktnamen 2000W, Edelstahl und Claire können Sie nicht schließen, dass es sich um die Waschmaschine X2000 handelt

Das Beispiel zeigt einen XMLQuery zum Laden eines Produktnamens

"$DATAFILE"
xmlget titel || "TODO-TITEL"
    node books.productgroup
    where productgroupID = <ID2>
    node bookwhere bookID = <ID>

Und hier ein sehr einfaches Skript zur Berechnung eines Objektnamens

int main ()
{
    sprintf (gObjectName, "ObjectName [%d, %d, %d, \"%s\"]",
        gRecordID,
        gRecordID2,
        gRecordID3,
        gRecordStringID);
    return 0;
}

static int placeholder::define(
  ItemRef frameRef,
  int plid,
  int id,
  int id2 = 0,
  int id3 = 0,
  char* sid = "",
  int startPos = -1,
  int len = 0)

Definiere für den angegeben Rahmen oder Textteil einen Platzhalter und verbinde ihn mit dem angegeben Objekt. Der Inhalt des Platzhalters wird nicht geladen. Verwenden Sie dazu die Funktion load.

Beim Setzen des Platzhalters wIRd geprüft, ob der Platzhalter im Datenpool definiert und vom passenden Typ (Rahmenplatzhalter für Rahmen, Textplatzhalter für Text) ist.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Gültige Rahmenreferenz

0 : aktueller Skriptrahmen oder -text
plid int - PlatzhalterID

0 : Undefinierter leerer Platzhalter
-2 : Platzhalter löschen. In Texten werden auch Platzhalter am Beginn und am Ende des Textbereiches automatisch vollständig entfernt. Beim Entfernen von Rahmenplatzhaltern bleiben die IDs eines mglw. verlinkten Objektes im Rahmen erhalten. Soll auch die Objekt-ID entfernt werden, muss VOR placeholder::define die Funktion placeholder::link mit der Objekt-ID 0 (oder -2), 0, 0, "" gerufen werden.

-3 : (Nur bei Textplatzhaltern) Platzhalter genau im angegebenen Textbereich löschen. sonst : Der Platzhalter muss eine relatedToID haben, die für Texte erlaubt ist (siehe hier)
id int - ID des verknüpften Datenbankobjektes
id2 int 0 ID2 des verknüpften Datenbankobjektes
id3 int 0 ID3 des verknüpften Datenbankobjektes
sid String oder char* "" StringID des verknüpften Datenbankobjektes. Ein Produkt wird nur dann gefunden, wenn alle 3 IDs und die StringID übereinstimmen.
startPos int -1 Startposition im Text, ab der der Platzhalter definiert werden soll.

-1 : Rahmenplatzhalter ändern (und nicht Textplatzhalter)
len int 0 Länge des Textes, dessen Platzhalter geändert werden sollen.

[Ab R1112, 5. Januar 2009] Bei Angabe von -1 wird der Platzhalter außerhalb von Tabellen bis zum Ende des aktuellen Textes gesetzt. In Tabellen wird der Platzhalter in diesem Fall bis zum Ende der Tabellenzelle gesetzt.
#include "internal/text.h"
#include "internal/types.h"
#include "internal/text.h"
int main () { placeholder::define (gFrame, -2, 0); placeholder::define (gFrame, -2, 0, 0, 0, "", 0, kEnd);
return 0; }

Das folgende Beispiel ändert alle unbekannten Platzhalter, die in der Cometgruppe eines Rahmens gefunden werden.

#include "internal/types.h"
int relink (Link lk, int pid, IDTypeList infos) { int result = 1; int pos; IDType info; String label = string::alloc (); String title = string::alloc (); String dialogSpec = string::alloc (); String v = string::alloc (); int newID;
while (1) { if (pid <= 0) { result = 0; break; }
pos = idtypelist::find (infos, pid); if (pos >= 0) { // This placeholder ID has already been found and edited. // We'll do the same now. // info = idtypelist::get (infos, pos); newID = idtype::id2 (info); } else { // Ask for the new placeholder id. // string::set (v, "%d", pid); if (link::pos (lk) >= 0) { string::set (title, "Replace Text Placeholder %d", pid); string::set (label, "TEXT %d [%d, %d] : New Text Placeholder", item::getint (link::frame (lk)), link::pos (lk), link::pos (lk)+link::length (lk)); textmodel::select (link::frame (lk), link::pos (lk), link::length (lk)); } else { string::set (title, "Replace Frame Placeholder %d", pid); string::set (label, "FRAME %d : New Frame Placeholder", item::getint (link::frame (lk))); frame::select (link::frame (lk)); }
if (!askstring (v, label, title, "Replace", 0, 0)) { result = -1199; break; } if (string::length (v) == 0) break; newID = string::to_int (v); if (newID <= 0) break;
idtypelist::append (infos, pid, newID, 0, ""); }
if (newID > 0) { result = placeholder::define (   link::frame (lk),   newID,   link::id (lk),   link::id2 (lk),   link::id3 (lk),   link::sid (lk),   link::pos (lk),   link::length (lk)); } else { result = 0; }
break; } string::release (title); string::release (label); string::release (dialogSpec); string::release (v);
return result; }
int main () { int cid = frame::get_cometgroup(gFrame); ItemList M = itemlist::get_cometgroup_members (0, cid, 1); LinkList lli = linklist::alloc (); Link lk; int pid; DBC dbc = sql::connection (); XMLTree tree; Query qu; IDTypeList pids = idtypelist::alloc (); IDTypeList new_pids = idtypelist::alloc (); int pos; int result;
// Sanity check // if (gRun > 1) return 0; if (!itemlist::length (M)) { showmessage ("No frame selected or the frame is not in a Comet Group."); return 0; }
// Get all defined placeholders of the data pool // if (dbc) { qu = sql::query (dbc); query::send (qu, "select ID from placeholder where ID > 0"); query::output (qu, kInt, &pid); query::exec (qu); while (query::fetch (qu)) { idtypelist::append (pids, pid, 0, 0, ""); } query::close (qu); } else { tree = xmlquery::open ("placeholder.xml", 0, 1); xmlquery::send (tree, "select id node metadata.placeholder where id > 0"); xmlquery::output (tree, kInt, &pid); xmlquery::exec (tree); while (xmlquery::fetch (tree)) { idtypelist::append (pids, pid, 0, 0, ""); } xmlquery::close (tree); }
// Collect all placeholders used in the // Comet Group of gFrame // linklist::collect_any (lli, M, "--list--");
// Walk through all placeholders // for (lk = linklist::first (lli); lk != 0; lk = linklist::next (lli)) { pid = link::placeholderid (lk); if (idtypelist::find (pids, pid) < 0) { result = relink (lk, pid, new_pids); if (result) { if (result == 1) beep (); else if (result != -1199) { showmessage ("Error %d while replacing placeholder %d\n\n%s", result, pid, serror (result)); } break; } } }
// Clean up // linklist::release (lli); itemlist::release (M); idtypelist::release (pids); idtypelist::release (new_pids);
return 0; }

sid seit Version 1.3 (Build 96) startPos und len seit Version 2.1, R 1014 ,1. Nov. 2008

priint:comet InDesign® Plug-Ins, Illustrator

load
comet.placeholder.set

static int placeholder::defined(
  ItemRef itemRef,
  int textIndex = -1,
  int* startPos = 0,
  int* len = 0)

Ist der gegebene Rahmen mit einem Platzhalter verknüpft? Der Platzhalter kann dabei undefiniert oder 0 sein.

Name Typ Default Beschreibung
Return int   0 : Rahmen nicht verknüpft/kein Platzhalter an der Textstelle
1 : Rahmen mit Platzhalter verknüpft/Platzhalter an der Textstelle
itemRef ItemRef - Gültiger Dokumentrahmen oder Textrahmen
textIndex int -1 Textposition (0-basiert)

<0 : Teste den Rahmen
sonst : Teste die angegebene Textstelle. In diesem Fall muss itemRef ein gültiger Textrahmen sein.
startPos int* 0 Ist die Textstelle mit einem Platzhalter verknüpft, enthält die Variable nach Ausführung des Aufrufes die Textposition, an der der Platzhalter beginnt.
len int* 0 Ist die Textstelle mit einem Platzhalter verknüpft, enthält die Variable nach Ausführung des Aufrufes die Länge des Platzhalters

Version 1.4 R320, 28. Feb. 2007
textIndex, startPos, len seit Version 2.1 R 811, 7.7.2008

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

static int placeholder::link(
  ItemRef placedItem,
  int classid,
  int id,
  int id2 = 0,
  int id3 = 0,
  int textStart = -1,
  int textLen = -1,
  char* sid = "",
  int doLoad = 0,
  int applyRules = 0,
  int changeStatics = 0)

Verbinde alle Platzhalter der gegebenen KlassenID eines Rahmens und aller seiner Unterobjekte mit einem Datensatz. Der Befehl wirkt wie Auswahl des Rahmens im Dokument (als einziger Rahmen) und Anklicken eines Objektes der entsprechenden Klasse in ihrem Panel (z.B. eine Staude), wenn im Panel das automatische Laden abgeschaltet ist (grauer Pfeil unten links). Im gesamten Text und den Texten aller Inline-Rahmen und allen Unterrahmen werden alle Platzhalter mit der angegebenen KlassenID mit dem angegebenen Objekt verknüpft.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
placedItem ItemRef - Rahmen. Ist die Angabe leer (=0), wird versucht, das Textmodell oder den Rahmen des Skriptes zu verwenden.
classid int - Von WERK II vergebene KlassenID Es werden nur die Platzhalter des ID-Objektes geladen, die die angegeben classid enthalten. Bei Angabe von 0 werden alle Platzhalter geladen.
id int - ID des Datenbankobjektes
id2 int 0 ID2 des Datenbankobjektes
id3 int 0 ID3 des Datenbankobjektes
textStart int -1 Startposition im Text

>=0 : Bearbeite Textplatzhalter erst ab dieser Textposition. Der Parameter textLen muss > 0 sein und der übergebene Rahmen placedItem muss ein Textrahmen sein.
-1 : Alle Text- und Rahmenplatzhalter neu verknüpfen
-2 : Nur den Rahmenplatzhalter neu verknüpfen [Ab Version 3.2 R2267, 7. Feb. 2011]
textLen int -1 Länge des Textes, dessen Platzhalter verändert werden sollen.
sid String oder char* "" StringID des verknüpften Datenbankobjektes. Ein Produkt wird nur dann gefunden, wenn alle 3 IDs und die StringID übereinstimmen.
doLoad int 0 Sofort nach dem Verlinken auch Laden?

0 : Nein
1 : Ja. Wie placeholder::load mit placeholder = 0 und recordids = 0 direkt nach dem Aufruf von placeholder::link. Der einzige Unterschied ist, dass in diesem Fall auch alle über Tabellenplatzhalter aufgebauten Tabellen wieder richtig sind - was sie bei der Verwendung von zwei separaten Aufrufen nicht sind.
applyRules int 0 nur wenn doLoad = 1 Für einzelne Textplatzhalter werden normalerweise keine Gestaltungsregeln aufgerufen. Wollen Sie die "Nach dem Laden"-Regeln des Rahmens () bei Anwendung der Funktion auf Textbereiche trotzdem ausführen, setzen Sie den Parameter auf 1.

0 : Nein
1 : Ja
changeStatics int 0 Dürfen auch feste Produktverknüpfungen geändert werden?

0 : Nein
1 : Ja
int main ()
{
    ItemList			masters	= itemlist::selected ();
itemlist::apply (placeholder::link, masters, 1, 0, 3, 1, 0, 0, -1, -1, "116507", 1, 1);
return 0; }

Der automatische Zugriff auf Textmodel oder Rahmen des Skriptes und die Einschränkung des Textbereiches sind ab Version 1.1.7, Januar 2005 möglich.
Parameter doLoad und applyRules ab v3.3 R3042, 6. Sept. 2012
Parameter changeStatics seit v4.0.5 R14200, 9. Dec 2016

priint:comet InDesign® Plug-Ins, comet_pdf

item
textmodel::restore
link2
comet.placeholder.link
comet.CFrame.link
item
textmodel::restore
link2

static int placeholder::link2(
  ItemRef placedItem,
  int classid,
  int id,
  int id2 = 0,
  int id3 = 0,
  char* sid = "",
  int textStart = -1,
  int textLen = -1,
  int doLoad = 0,
  int applyRules = 0,
  int changeStatics = 0)

Wie link, aber eine andere Reihenfolge der IDs. Die StringID folgt direkt auf die drei IDs.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
placedItem ItemRef - Rahmen. Ist die Angabe leer (=0), wird versucht, das Textmodell oder den Rahmen des Skriptes zu verwenden.
classid int - Von WERK II vergebene KlassenID Es werden nur die Platzhalter des ID-Objektes geladen, die die angegeben classid enthalten. Bei Angabe von 0 werden alle Platzhalter geladen.
id int - ID des Datenbankobjektes
id2 int 0 ID2 des Datenbankobjektes
id3 int 0 ID3 des Datenbankobjektes
sid String oder char* "" StringID des verknüpften Datenbankobjektes. Ein Produkt wird nur dann gefunden, wenn alle 3 IDs und die StringID übereinstimmen. Werden keine StringIDs verwendet, wird der Wert mit "" angegeben.
textStart int -1 Startposition im Text

>=0 : Bearbeite Textplatzhalter erst ab dieser Textposition. Der Parameter textLen muss > 0 sein und der übergebene Rahmen placedItem muss ein Textrahmen sein.
-1 : Alle Text- und Rahmenplatzhalter neu verknüpfen
-2 : Nur den Rahmenplatzhalter neu verknüpfen [Ab Version 3.2 R2267, 7. Feb. 2011]
textLen int -1 Länge des Textes, dessen Platzhalter verändert werden sollen.
doLoad int 0 Sofort nach dem Verlinken auch Laden?

0 : Nein
1 : Ja. Wie placeholder::load mit placeholder = 0 und recordids = 0 direkt nach dem Aufruf von placeholder::link. Der einzige Unterschied ist, dass in diesem Fall auch alle über Tabellenplatzhalter aufgebauten Tabellen wieder richtig sind - was sie bei der Verwendung von zwei separaten Aufrufen nicht sind.
applyRules int 0 nur wenn doLoad = 1 Für einzelne Textplatzhalter werden normalerweise keine Gestaltungsregeln aufgerufen. Wollen Sie die "Nach dem Laden"-Regeln des Rahmens () bei Anwendung der Funktion auf Textbereiche trotzdem ausführen, setzen Sie den Parameter auf 1.

0 : Nein
1 : Ja
changeStatics int 0 Dürfen auch feste Produktverknüpfungen geändert werden?

0 : Nein
1 : Ja
int main ()
{
    ItemList			masters	= itemlist::selected ();
itemlist::apply (placeholder::link2, masters, 1, 0, 3, 1, 0, 0, "116507", -1, -1, 1, 1);
return 0; }

Parameter doLoad und applyRules ab v3.3 R3042, 6. Sept. 2012
Parameter changeStatics seit v4.0.5 R14200, 9. Dec 2016

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

item
textmodel::restore
link
comet.placeholder.link

static int placeholder::change_tags(
  ItemRef placedItem,
  int classid,
  char* info,
  int value,
  int dest = 3,
  int startPos = 0,
  int len = -1,
  int updateActions = 0,
  int takeCareOnMe = 0)

In einem angegebenen Rahmen werden alle gefundenen Platzhalter geändert. Die folgende Tabelle gibt an, welche Platzhalterwerte geändert werden können. Die Angaben sind (im Gegesatz zu den Tagnamen) case insensitive.Der Parameter value kann abhängig vom Wert von info vom Typ int oder char* sein. Die folgende Tabelle gibt alle definierten Werte von info mit dem jeweils erwarteten Datentyp an.
Name Typ Bemerkungen
Placeholder, Platzhalter int Die zugehörige Platzhalterdefinition sollte existieren und vom richtigen Typ (siehe RelatedTo) sein.
ID Objekt-ID, bestehend aus drei Zahlen und einem String.
ID2
ID3
STRINGID
STRINGID1, STRINGID2, STRINGID3
char*
Class int KlassenID der Objekte, die mit diesem Platzhalter verknüpft werden können.
Select IDs der Aktionen, die vom Platzhalter ausgeführt werden können. ObjectNameID seit Version 3.1 R1880, 7. Mai 2010
Sync
Update
Lov
ObjectNameID
RelatedTo Typ des Platzhalters
   0 : Undefiniert
   1 : text
   2 : textframe
   3 : imageframe
   4 : xmlelement
   5 : Document action
   6 : multi frames (Repeated Element)
   7 : multi text (Repeated Text)
   8 : table
   9 : crossref
   10 : serialtext
   11 : serialframe
   12 : serialpageitem
   -2000 : Excel-unterstützte Tabelle (Plugin XCell)
Color ID einer Farbe. Die Farbe wird benutzt, um den Platzhalter in der Platzhalterpalette und im Dokument dazustellen.
SyncStateInvisible Kann der Platzhalter einen Status (siehe get_sync) anzeigen oder nicht?
   0 : nicht anzeigen
   1 : Status kann gezeigt werden
LoadConstraint Unbenutzt. Folgende Werte sind vorgesehen:
   0 : Undefiniert
   1 : always ask
   2 : ask once
   3 : never ask
Format

Bei Wiederholenden Elementen wird hier die ID der Aktion angegeben, die ausgeführt werden soll, wenn die Elemente angelegt werden sollen.

In Textplatzhaltern erhalten/setzen Sie damit das Stringvergleichsskript (Textvergleich in der Palette Platzhalterwerte) des Platzhalters.

Sonst ist das Feld unbenutzt.

group GruppenID eines Platzhalterrahmens. Die GruppenID wird beim Dokumentaufbau vergeben, dass Rahmen auf gleiche Rasterplätze kommen, obwohl sie nicht in InDesign® gruppiert wurden.
Name char* Bei Excel-unterstützten Tabellen enthält der Pfad auf die zugehörige Excel-Tabelle. Relative Pfade werden ausgehend vom Dokument bestimmt.
Table Prüfsumme, nicht ändern!
Created Datumsangabe im Format YYYYMMDDHHMMSS
Modified
grid int Deprecated
gridElement
PreRule
PostRule
PreRuleParams char*
PostRuleParams
AdParams
Infos1 char*

Zusätzliche Informationen zum Platzhalter. Die Angaben sind auf 4000 Zeichen begrenzt. Ist die Angabe länger als 4000 Zeichen, wird der Leerstring verwendet.

Infos2 kann zusätzlich zur Darstellung eines Textlabels am Platzhalter verwendet werden. Das Label wird nur in Rahmenplatzhaltern gezeigt! Hier ein Screenshot:

Labels müssen mit msg_Color beginnen. Folgende Farben werden unterstützt: red, comet, orange, yellow , blue. Danach folgt der anzuzeigende Text. Der im Screenshot gezeigte Text wird durch den Infos2-Text msg_comet Das ist mir eine Last, 2,3,4 erzeugt.

Infos2
SequenceNr int Reihenfolge, in der die Rahmen eines Templates beim Einfügen geladen werden. Ist keine Sequenzenummer angegeben (0), werden die Rahmen in einer von InDesign® definierten Reihenfolge geladen. Die Angabe hat nur beim Einfügen von Templates, die aus mehreren Rahmen bestehen, eine Bedeutung. Die selbe Reihenfolge für das Skript, das nach dem Einfügen (PostScript) ausgeführt werden soll, anzuwenden.
PostScript Nach dem Einfügen des Rahmens über ein Template kann eine Nachbearbeitungprozedur ausgeführt werden. Die ID gibt die Nummer der Aktion an, die ausgeführt werden soll. Die Aktionen Rahmen-Postskripte müssen die ClassID 16 haben. Besteht ein Template aus mehreren Rahmen, kann über SequenceNr die Reihenfolge der Ausführung festgelegt werden.
ShowPostScript Sollen die Sequenznummer und die Postscript-ID im Dokument gezeigt werden. Die Anzeige erfolgt nur, wenn auch Platzhalter angezeigt werden.
TextflowType int Wie soll der Rahmen im Textfluss verwendet werden?

0 : Inhalt einfügen
1 : Rahmen als Inline einfügen
2 : Nicht einfügen
TextflowOnly Ist der Rahmen Teil eines Templates, kann mit diesem Wert gesteuert werden, ob der Rahmen nur beim Textfluss-Aufbau verwendet werden soll.

0 : Rahmen normal verwenden
1 : Rahmen nur beim Textfluss verwenden. In diesem Fall wird der Rahmen, wann immer das Template normal (Produktaufbau über build_products, Drag and Drop, Template einsetzen, ...) ins Dokument eingefügt wird, nicht mit ins Dokument übernommen
TextflowUsage Intern, Wert nicht verändern!
AdaptSequ Intern, Wert nicht verändern!
AdaptGroup char* Intern, Wert nicht verändern!
PageitemID int

Id des Templates, mit dem dieser Rahmen aufgebaut wurde.

Template-ID vs. Produkttemplate-ID

Stellen Sie sich vor, ein Produkt wird mit dem Template 100 aufgebaut und bekommt die Rahmen 1, 2, 3. Rahmen 2 legt dabei mit document::place_items und Template 300 zwei weitere Rahmen (4 und 5) an.

Bis v3.2.3 haben die Rahmen dann die folgende PageitemID :

  • Rahmen 1 : 100
  • Rahmen 2 : 100
  • Rahmen 3 : 100
  • Rahmen 4 : 300
  • Rahmen 5 : 300
Wird das Dokument jetzt reorganisiert, kann nicht mehr eindeutig festgestellt werden, mit welchem Template das Produkt aufgebaut wurde und die Reorganisation verwendet möglicherweise jetzt statt des gewünschten Templates 100 das Template 300 für das Produkt.

[Ab v3.3] beinhaltet PageitemID deshalb für alle Rahmen des Produktes die eindeutige Produkttemplate-ID, hier also 100 :

  • Rahmen 1 : 100
  • Rahmen 2 : 100
  • Rahmen 3 : 100
  • Rahmen 4 : 100
  • Rahmen 5 : 100
Mit dem (ab v3.3 R2701) verfügbaren Wert PageitemDirectID kann man die ID des Templates erhalten, mit der ein Rahmen eingefügt wurde.

PageitemDirectID int [Ab v3.3 R2701] ID des Templates, das den Rahmen ins Dokument eingefügt hat, siehe auch unter "PageitemID" eine Zeile weiter oben.
OrgPageitemID int [Ab v3.3.1 R3212] Ein Produkt soll mit einem bestimmtem Template aufgebaut werden. Dieses Template hat ein TemplateID-Skript und statt des übergebenen Templates wird ein anderes Template verwendet. In OrgPageitemID steht noch, mit welchem Template das Produkt aufgebaut werden sollten.

Also sagen wir
  • Produkt mit Template 100
  • TemplateID-Skript von Template 100 errechnet als ID 110
  • OrgPageitemID = 100
  • Pageitem = 110
  • PageitemDirectID = 110
SmartInfo char* Informationen zum Template-Verhalten. Der String ist aufgebaut wie in der folgenden Tabelle beschrieben. Sie können den Inhalt der SmartInfo ändern. Achten Sie dabei aber darauf, dass der String gemäß der folgenden Tabelle syntaktisch korrekt bleibt. Die einzelnen Felder werden dabei jeweils durchLeerzeichen getrennt. Falsche Angaben können zu Fehlern in Programm und Dokument führen! Der String kann von WERK II um weitere Daten ergänzt werden. Fügen Sie hier keine eigenen Daten an! Eigene Daten können Sie in den Feldern Infos1 und Infos2 ablegen. Unter frame::get_smart_item_data und frame::set_smart_item_data finden Sie weitere Informationen.

Type              Beschreibung
String Kennung. Der große Buchstabe im Kreis. Die Kennung darf nur aus einem Zeichen bestehen.
int [0-23] Farb-ID. In welcher Farbe wird das Templateverhalten dargetstellt? Die Farbe wird von den Comet-Plugins automatisch vergeben.
int [0-6] Seitentyp des Rahmens

0 : undefiniert
1 : links
2 : rechts
3 : Fortsetzung rechts
4 : Fortsetzung links
5 : Spread
6 : Fortsetzung Spread
int [0-3] Typ

0 : normal
1 : mit Fortsetzung (Dreieck)
2 : Wiederholung (unbenutzt)
3 : mit Fortsetzung, aber fester Höhe (ungefülltes Dreieck)
String Interne ID. Nicht ändern!
int Flags (Bitfeld)

0x00000001 : Rahmenplatzhalter laden
0x00000002 : Textplatzhalter laden
int [0-3] Flächentyp

0 : Bounding Box
1 : Pfad (Stern)
2 : Pfad mit Löchern (ungefüllter Stern)
3 : ignorieren (Minus)
ObjectNameID int ID der Action, mit der der Objektname berechnet werden kann
BuiltByID, BuiltByID2, BuiltByID3, BuiltByStringID int, int, int, char* ID des Produktes, mit dem der Rahmen aufgebaut wurde
BuildRemains int [Ab v4.1.6 R26360] Anzahl der Elemente, die nicht mehr in den/die Rahmen des wiederholenden Elementes gepasst haben und deshalb nicht ins Dokument eingefügt wurden, siehe auch hier
Chapter int [unbenutzt] Absatz-ID. Alle Rahmen, die zum gleichen Absatz gehören, haben die gleiche ID. Absätze entstehen durch Seitenumbrüche beim Seitenaufbau.
ChapterRule int [unbenutzt] Absatzregel. 0 : neue linke Seite, 1 : neue Seite, 2 : neue rechte Seite
HeightFromTemplate char* Originalhöhe des Rahmens aus dem Template als char*. Der Wert kann mit fval zu einem float gemacht werden.
OriginBBox char* Originale BBox des Rahmens aus dem Template. Blank-getrennter String aus float-Zahlen. Mit string::get_token_count, string::get_token und string::to_float kann der String in seine Komponenten zerlegt werden.
Prefix[+Apply]
Postfix[+Apply]
char*

Text, der vor/nach dem Platzhalter außerhalb des eigentlichen Platzhalters eingefügt wird, wenn der Inhalt des Platzhalter nicht leer ist.

Prä- und Postfixe werden erst beim Neuladen der Platzhalters angewendet. Mit der Angabe +Apply wird der Text sofort (und ohne Neuladen) angewendet.

PrefixIfEmpty[+Apply]
PostfixIfEmpty[+Apply]
char*

Text, der vor/nach dem Platzhalter außerhalb des eigentlichen Platzhalters eingefügt wird, wenn der Inhalt des Platzhalter leer ist.

Prä- und Postfixe werden erst beim Neuladen der Platzhalters angewendet. Mit der Angabe +Apply wird der Text sofort (und ohne Neuladen) angewendet.

Continue int Zu welcher Fortsetzungsgruppe einer Cometgruppe gehört der Rahmen? Rahmen des Haupttemplates haben die Nummer 0. Angelegte Fortsetzungen werden durchgezählt.
PageBreakID int [Ab v3.3 R2718, 17.11.2011] Kapitel-ID. Die Kapitel-ID wird in der Cometgruppenansicht oben links angezeigt und für Seitenumbrüche bei Reorganisationen des Dokumentes verwendet.

Alle Produkte mit gleicher (oder leerer) Kapitel-ID gehören zum selben Kapitel. Ein Wechsel der Kapitel-ID in den Produkten bedeutet einen Seitenwechsel. Seitentyp und -template werden dabei aus den Angaben von PageBreakTemplateID und PageBreakType genommen.

Die Kapitel-ID muss in allen Rahmen einer Cometgruppe gesetzt werden. Standardmässig wird dabei die UID der ersten Seite des Kapitels verwendet. Über cScript können keine UIDs von Seiten ermittelt werden. Sie können deshalb auch die ID der Cometgruppe oder die UID des Rahmens verwenden. Wichtig ist lediglich, dass die Kapitel-ID dokumentweit eindeutig ist.

Zum Ändern der Kapitel-IDs einer Rahmenliste können Sie Anweisungen wir folgt verwenden :

    itemlist::apply (placeholder::change_tags, frames, 1, 0, 0, "PageBreakID", groupID, kFramePlaceholder);

PageBreakTemplateID [Ab v3.3 R2718, 17.11.2011] Seitentemplate für die neue Seite. Es darf auch das gleiche Seitentemplate wie im vorigen Kapitel verwendet werden.
PageBreakType [Ab v3.3 R2718, 17.11.2011]
  • 0 : neue linke Seite
  • 1 : neue Seite
  • 2 : neue rechte Seite
PageBreakLayers char* [Ab v3.3 R2718, 17.11.2011] Gestaltungsebenen des Kapitels. Geben Sie hier eine durch Leerzeichen getrennte und jeweils in Anführungszeichen gesetzte Liste der Namen der gewünschten Gestaltungsebenen an. Die Ebenen müssen nicht im Dokument existieren. Folgende Werte können als Platzhalternamen variabler Ebenen verwendet werden :
  • "ab++#--background" : Alle Ebenen hinter der aktuellen Ebene
  • "ab++#--except layerName" : Alle Ebenen außer layerName
  • "ab++#--behind layerName" : Alle Ebenen hinter layerName

Beispiel "\"aaa\" \"bbb\" \"ab++#--background\""

RepetitionParent int

UID des ersten Rahmens eines Bereichsaufbaues, ein wiederholendes Element aufgebaut hat. Ist ein Rahmen nicht als wiederholendes Element aufgebaut wurden, hat das Attribut den Wert 0.

Mit der RepetitionParent kann man leicht eine Referenz des ersten Rahmens des Bereichsaufaues definieren:

item::define (
 	areaFrame,
 	0,
 	placeholder::get_value (
 			fr,
 			"RepetitionParent"));

Ein naheliegende Verwendung von RepetitionParent ist das Post-Skript wiederholender Elemente

Allgemeine Informationen zum Bereichsaufbau finden Sie hier.

LayoutRules char* String zur Definition der Gestaltungsregeln. Mehr Informationen dazu finden Sie hier.
StaticLink int Eigenschaft Feste Produktverknüpfung des Platzhalters
BuildUsage int Wie soll der Rahmen im Textflußaufbau verwendet werden?
  • 0 : Inhalt einfügen
  • 1 : Rahmen als Inline einfügen
  • 2 : Nicht verwenden
Siehe auch hier.
FunctionVariables char* Funktionsvariablen, siehe hier
HashValues char* Fixierter Inhalt des Platzhalter, siehe hier.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
placedItem ItemRef - Rahmen
classid int - Nur Platzhalter dieser Klasse bearbeiten oder 0
info String oder char - Welche Information des Tag soll geändert werden ? Siehe obige Tabelle Platzhalterwerte
value int/String oder char* - neuer Wert. Der Datentyp muss der obigen Tabelle entsprechen. Für den Datentyp char* können Sie auch String verwenden.
dest int kAnyPlaceholder Welche Platzhalter sollen geändert werden?

kFramePlaceholder Ändere nur den Platzhalter des Rahmens
kTextPlaceholder Ändere die Platzhalter im Text. Enthält der Text Inlines, werden auch deren Platzhalter geändert.
kAnyPlaceholder Ändere alle Platzhalter
startPos int 0 Ab welcher Textposition können Platzhalter geändert werden?
Bei dest = kFramePlaceholder wird die Angabe ignoriert.
len int kEnd Länge des Textes, in dem Platzhaltern geändert werden dürfen
Bei dest = kFramePlaceholder wird die Angabe ignoriert.
updateActions int 0 Sollen die ActionIDs und die Farbe der Platzhalter ebenfalls neu geladen werden, wenn die PlatzhalterID (info = "Placeholder" oder "Platzhalter") geändert wird?

0 : Nein
sonst : Ja, lade die IDs für Laden, Sichern, Sync und ListOfValues und die Farb-ID neu.

[ab v4.2 R33300] Zusätzlich wird auch die 'relatedTo'-Eigenschaft des Platzhalters aaktualisiert.
takeCareOnMe int 0 In Laden-Aktionen von Platzhaltern können die Änderungen auch den aktuellen Platzhalter betreffen. Soll dieser Platzhalter ebenfalls geändert werden?

0 : nein
1 : ja
#include "internal/text.h"
#include "internal/types.h"
char	dt[256];
placeholder::change_tags (placedItem,   0,   "Modified",   system::now (dt, kShortDateLongTime));

Ermittle einige Platzhalterinfos des Platzhalters der aktuellen Textauswahl. Danach werden die Werte des Platzhalters geändert und die Änderungen überprüft. Der Textcursor sollte sich bei Skriptausführung in einem Platzhalter befinden. Achten Sie insbesondere darauf, bei Mehrfachverwendung von sget_value diese Ergebnisse in Zwischenvariablen zu übertragen.

#include "internal/text.h"
#include "internal/types.h"
int main () { Table T = table::alloc (); ItemRef frame = item::alloc(); List cols = list::alloc (); int start, len, l, t, r, b; int pstart, plen; char stringid [2000]; char infos1 [2000]; int placeholderID;
textmodel::selection (&start, &len, frame, 0, T, &l, &t, &r, &b); if (start < 0) return 0;
// read values placeholderID = placeholder::get_value (gFrame, "Placeholder", start, &pstart, &plen); strcpy (stringid, placeholder::sget_value (gFrame, "STRINGID", start)); strcpy (infos1, placeholder::sget_value (gFrame, "Infos1", start)); wlog ("", "Placeholder %d (before) [%d, %d]\n", placeholderID, pstart, pstart+plen); wlog ("", "\tStringID\t: '%s'\n", stringid); wlog ("", "\tInfos1\t: '%s'\n", infos1);
// change values placeholder::change_tags (gFrame, 0, "STRINGID", "stringid changed", kTextPlaceholder, start, len); placeholder::change_tags (gFrame, 0, "Infos1", "info changed", kTextPlaceholder, start, len);
// re-read values strcpy (stringid, placeholder::sget_value (gFrame, "STRINGID", start)); strcpy (infos1, placeholder::sget_value (gFrame, "Infos1", start)); wlog ("", "Placeholder %d (after) [%d, %d]\n", placeholderID, pstart, pstart+plen); wlog ("", "\tStringID\t: '%s'\n", stringid); wlog ("", "\tInfos1\t: '%s'\n", infos1);
return 0; }

Parameter dest seit Version 1.4 (R334), 13. April 2007
Parameter startPos und len seit Version 1.4 (R472), 13. Juni 2007 Parameter updateActions seit Version 2.1 (R1760), 19. Feb. 2010

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

item
placeholder::get_value
comet.placeholder.setTagValue

static int placeholder::get_value(
  ItemRef itemRef,
  char* info,
  int textIndex = -1,
  int* startPos = 0,
  int* len = 0)

Ist ein Rahmen mit einem Platzhalter verbunden, wird der Wert des angegebenen Slots ermittelt. Werte <0 signalisieren einen Fehler, e.g. der Rahmen hat keinen Platzhalter oder die Referenz ist kein Rahmen. Ist ein Textindex >=0 gegeben, muss der Rahmen itemRef ein Textrahmen sein. In diesem Fall wird an der Textstelle nach einem Platzhalter gesucht und dessen gesuchter Wert zurückgegeben.

Name Typ Default Beschreibung
Return int   Wert des Platzhalterslots. Es werden nur Werte ermittelt, die in der Tabelle Platzhalterwerte als int-Werte angegeben sind. Für Stringwerte siehe sget_value.
itemRef ItemRef - Rahmen
info String oder char* - Welche Information des Platzhalters soll ermittelt werden ? Siehe obige Tabelle Platzhalterwerte. Mit der Funktion können nur int-Slotwerte ermittelts werden.
textIndex int -1 Textposition (0-basiert)

<0 : Teste den Rahmen
sonst : Teste die angegebene Textstelle. In diesem Fall muss itemRef ein gültiger Textrahmen sein.
startPos int* 0 Ist die Textstelle mit einem Platzhalter verknüpft, enthält die Variable nach Ausführung des Aufrufes die Textposition, an der der Platzhalter beginnt.
len int* 0 Ist die Textstelle mit einem Platzhalter verknüpft, enthält die Variable nach Ausführung des Aufrufes die Länge des Platzhalters
#include "internal/text.h"
#include "internal/types.h"

Ermittle einige Platzhalterinfos des Platzhalters der aktuellen Textauswahl. Danach werden die Werte des Platzhalters geändert und die Änderungen überprüft. Der Textcursor sollte sich bei Skriptausführung in einem Platzhalter befinden. Achten Sie insbesondere darauf, bei Mehrfachverwendung von sget_value diese Ergebnisse in Zwischenvariablen zu übertragen.

#include "internal/text.h"
#include "internal/types.h"
int main () { Table T = table::alloc (); ItemRef frame = item::alloc(); List cols = list::alloc (); int start, len, l, t, r, b; int pstart, plen; char stringid [2000]; char infos1 [2000]; int placeholderID;
textmodel::selection (&start, &len, frame, 0, T, &l, &t, &r, &b); if (start < 0) return 0;
// read values placeholderID = placeholder::get_value (gFrame, "Placeholder", start, &pstart, &plen); strcpy (stringid, placeholder::sget_value (gFrame, "STRINGID", start)); strcpy (infos1, placeholder::sget_value (gFrame, "Infos1", start)); wlog ("", "Placeholder %d (before) [%d, %d]\n", placeholderID, pstart, pstart+plen); wlog ("", "\tStringID\t: '%s'\n", stringid); wlog ("", "\tInfos1\t: '%s'\n", infos1);
// change values placeholder::change_tags (gFrame, 0, "STRINGID", "stringid changed", kTextPlaceholder, start, len); placeholder::change_tags (gFrame, 0, "Infos1", "info changed", kTextPlaceholder, start, len);
// re-read values strcpy (stringid, placeholder::sget_value (gFrame, "STRINGID", start)); strcpy (infos1, placeholder::sget_value (gFrame, "Infos1", start)); wlog ("", "Placeholder %d (after) [%d, %d]\n", placeholderID, pstart, pstart+plen); wlog ("", "\tStringID\t: '%s'\n", stringid); wlog ("", "\tInfos1\t: '%s'\n", infos1);
return 0; }

textIndex, startPos, len seit Version 2.1 R 811, 7.7.2008

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

item
placeholder::change_tags
sget_value
textmodel::get_placeholder
comet.placeholder.getTagValue

static char* placeholder::sget_value(
  ItemRef itemRef,
  char* info,
  int textIndex = -1,
  int* startPos = 0,
  int* len = 0)

Ist ein Rahmen mit einem Platzhalter verbunden, wird der Wert des angegebenen Slots ermittelt. Ist ein Textindex >=0 gegeben, muss der Rahmen itemRef ein Textrahmen sein. In diesem Fall wird an der Textstelle nach einem Platzhalter gesucht und dessen gesuchter Wert zurückgegeben.

Name Typ Default Beschreibung
Return char*   0 - Fehler
Sonst : Wert des Platzhalterslots. Es werden nur Werte ermittelt, die in der Tabelle Platzhalterwerte als char*-Werte angegeben sind. Für Integerwerte siehe get_value.

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

itemRef ItemRef - Rahmen
info char* - Welche Information des Platzhalters soll ermittelt werden ? Siehe obige Tabelle Platzhalterwerte Mit der Funktion können nur String-Slotwerte ermittelts werden.
textIndex int -1 Textposition (0-basiert)

<0 : Teste den Rahmen
sonst : Teste die angegebene Textstelle. In diesem Fall muss itemRef ein gültiger Textrahmen sein.
startPos int* 0 Ist die Textstelle mit einem Platzhalter verknüpft, enthält die Variable nach Ausführung des Aufrufes die Textposition, an der der Platzhalter beginnt.
len int* 0 Ist die Textstelle mit einem Platzhalter verknüpft, enthält die Variable nach Ausführung des Aufrufes die Länge des Platzhalters
#include "internal/text.h"
#include "internal/types.h"

Ermittle einige Platzhalterinfos des Platzhalters der aktuellen Textauswahl. Danach werden die Werte des Platzhalters geändert und die Änderungen überprüft. Der Textcursor sollte sich bei Skriptausführung in einem Platzhalter befinden. Achten Sie insbesondere darauf, bei Mehrfachverwendung von sget_value diese Ergebnisse in Zwischenvariablen zu übertragen.

#include "internal/text.h"
#include "internal/types.h"
int main () { Table T = table::alloc (); ItemRef frame = item::alloc(); List cols = list::alloc (); int start, len, l, t, r, b; int pstart, plen; char stringid [2000]; char infos1 [2000]; int placeholderID;
textmodel::selection (&start, &len, frame, 0, T, &l, &t, &r, &b); if (start < 0) return 0;
// read values placeholderID = placeholder::get_value (gFrame, "Placeholder", start, &pstart, &plen); strcpy (stringid, placeholder::sget_value (gFrame, "STRINGID", start)); strcpy (infos1, placeholder::sget_value (gFrame, "Infos1", start)); wlog ("", "Placeholder %d (before) [%d, %d]\n", placeholderID, pstart, pstart+plen); wlog ("", "\tStringID\t: '%s'\n", stringid); wlog ("", "\tInfos1\t: '%s'\n", infos1);
// change values placeholder::change_tags (gFrame, 0, "STRINGID", "stringid changed", kTextPlaceholder, start, len); placeholder::change_tags (gFrame, 0, "Infos1", "info changed", kTextPlaceholder, start, len);
// re-read values strcpy (stringid, placeholder::sget_value (gFrame, "STRINGID", start)); strcpy (infos1, placeholder::sget_value (gFrame, "Infos1", start)); wlog ("", "Placeholder %d (after) [%d, %d]\n", placeholderID, pstart, pstart+plen); wlog ("", "\tStringID\t: '%s'\n", stringid); wlog ("", "\tInfos1\t: '%s'\n", infos1);
return 0; }

textIndex, startPos, len seit Version 2.1 R 811, 7.7.2008

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

item
placeholder::change_tags
get_value
textmodel::get_placeholder
comet.placeholder.getTagValue

static int placeholder::can_create_items(ItemRef frameRef)

Ist ein Rahmen mit einem Platzhalter verbunden und enthält dieser Platzhalter eine Build-Action?

Name Typ Default Beschreibung
Return int   Enthält der Rahmen einen Platzhalter, der Untereinträge anlegen kann?
frameRef ItemRef - Rahmen
itemable = placeholder::can_create_items (item);


priint:comet InDesign® Plug-Ins

static int placeholder::update_link_states(int classid = 0)

Aktualisiere die Linkbuttons in den Paletten. Um die Datensätze einer Palette vollständig neu zu laden, können Sie den Befehl list::relaod verwenden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
classid int - Von WERK II vergebene Palettennummer
0 - Buttons aller geöffneten Paletten aktualisieren
err_code = placeholder::updade_link_states (1);


priint:comet InDesign® Plug-Ins

list::reload

static int placeholder::prepare_statement(int classid = 0)

Ersetze alle <Tags> der Anweisung durch ihre aktuellen Werte des gegebenen Platzhalters.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Gültige Rahmenreferenz

0 : Aktueller Skriptrahmen
textStart int - Textposition

>=0 : Textplatzhalter an der gegebenen Textposition verwenden
< 0 : Rahmenplatzhalter verwenden
stmt String oder char* - Anweisung, deren <Tags> ersetzt werden sollen.

Die Ersetzungen werden direkt im Eingabestring gemacht. Der Parameter muß also in jedem Fall eine Variable (und kein fester Wert) sein!

ACHTUNG : Bei der Verwendung von char* muß die Variable genügend groß allokiert sein, um das Ergebnis aufnehmen zu können!
int actionType - Die Angabe ist nur für die Ersetzung der Funktionsvariablen des Platzhalter nötig:

kLoadAction (1)
kWriteAction (2)
kSyncAction (3)
kBuildAction (4)
int maxLen -1 Maximale Länge des Ergebnisses im Parameter stmt. Die Angabe hat nur für stmt vom Type char* Bedeutung.

-1 : Beliebige Länge (Oder in anderen Worten : Ich bin sicher, dass meine char*-Variable genügend Platz hat.)
#include "internal/types.h"

v4.2 R30123, 2. März 2022

priint:comet InDesign® Plug-Ins, comet_pdf

static int placeholder::load(
  ItemRef frameRef,
  int classid = 0,
  int textStart = -1,
  int textLen = -1,
  int applyRules = 0,
  List placeholders = 0,
  IDTypeList recordIDs = 0)

Lade alle Platzhalter eines Rahmens oder Textes incl. seiner Unterobjekte. Optional kann die Auswahl der Platzhalter auf eine bestimmte Klasse eingeschränkt werden. Der Befehl erledigt das, was beim Verbinden eines Rahmens durch Anklicken eines Objektes aus der Objektliste der Klasse (z.B. die Liste der Produkte) nach dem Setzen der IDs durch den aktivierten grünen Pfeil unten rechts im Fenster ausgelöst wird.Im gesamten Text und den Texten aller Inline-Rahmen und allen Unterrahmen werden alle Platzhalter mit der angegebenen KlassenID mit dem angegebenen Objekt neu geladen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen. Ist die Angabe leer (=0), wird versucht, das Textmodell oder den Rahmen des Skriptes zu verwenden.
classid int 0 Von WERK II vergebene KlassenID Es werden nur die Platzhalter des ID-Objektes geladen, die die angegeben classid enthalten. Bei Angabe von 0 werden alle Platzhalter geladen.
textStart int -1 Startposition im Text

>=0 : Bearbeite Textplatzhalter erst ab dieser Textposition. Der Parameter textLen muss > 0 sein und der übergebene Rahmen placedItem muss ein Textrahmen sein.
-1 : Alle Text- und Rahmenplatzhalter neu laden
-2 : Nur den Rahmenplatzhalter neu laden, ab Version 3.2 R2267, 7. Feb. 2011
textLen int -1 Länge des Textes, dessen Platzhalter verändert werden sollen.
applyRules int 0 [Ab Version 3.1, R1550] Für einzelne Textplatzhalter werden normalerweise keine Gestaltungsregeln aufgerufen. Wollen Sie die "Nach dem Laden"-Regeln des Rahmens () bei Anwendung der Funktion auf Textbereiche trotzdem ausführen, setzen Sie den Parameter auf 1.

0 : Nein
1 : Ja
placeholders List 0 Liste von Platzhalter-IDs. Die Bearbeitung wird auf diese Textplatzhalter eingeschränkt.
recordids IDTypeList 0 Liste von Object-IDs. Die Bearbeitung wird auf diese Objekte eingeschränkt.

Um einen Rahmen (und seine Unterobjekte) zu verknüpfen und zu laden ist folgende Sequenz erforderlich:

placeholder::link (item, 1, 4, 2, 2);
placeholder::load (item, 1);

Der automatische Zugriff auf Textmodel oder Rahmen des Skriptes und die Einschränkung des Textbereiches sind ab Version 1.1.7, Januar 2005 möglich.

Parameter applyRules seit Version 3.1, R1550, 18. Sept. 2009

placeholders und recordids seit Version 3.2 R2220, 6. Dez. 2010

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

placeholder::link
comet.placeholder.load
comet.CFrame.load

static int placeholder::store(
  ItemRef itemRef,
  int classid = 0,
  int textStart = -1,
  int textLen = -1)

Schreibe die Daten aller Platzhalter eines Rahmens oder Textes incl. seiner Unterobjekte auf die Datenbank. Optional kann die Auswahl der Platzhalter auf eine bestimmte Klasse eingeschränkt werden.Im gesamten Text und den Texten aller Inline-Rahmen und allen Unterrahmen werden alle Platzhalter mit der angegebenen KlassenID mit dem angegebenen Objekt geschrieben.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
itemRef ItemRef - Rahmen. Ist die Angabe leer (=0), wird versucht, das Textmodell oder den Rahmen des Skriptes zu verwenden.
classid int 0 Von WERK II vergebene KlassenID Es werden nur die Platzhalter des ID-Objektes geladen, die die angegeben classid enthalten. Bei Angabe von 0 werden alle Platzhalter geladen.
textStart int -1 Startposition im Text

>=0 : Bearbeite Textplatzhalter erst ab dieser Textposition. Der Parameter textLen muss > 0 sein und der übergebene Rahmen placedItem muss ein Textrahmen sein.
-1 : Alle Text- und Rahmenplatzhalter sichern
-2 : Nur den Rahmenplatzhalter sichern, ab Version 3.2 R2267, 7. Feb. 2011
textLen int -1 Länge des Textes, dessen Platzhalter verändert werden sollen.
err_code = placeholder::store (item, 1);

Der automatische Zugriff auf Textmodel oder Rahmen des Skriptes und die Einschränkung des Textbereiches sind ab Version 1.1.7, Januar 2005 möglich.

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CFrame.store

static int placeholder::sync(
  LinkList lli,
  LinkList results,
  int doExec = 0,
  ItemRef frameRef = 0)

überprüfen von Platzhaltern. Der Aufruf ist entspricht linklist::sync.

v4.0.5 R13178, 16. Sep 2016

static int placeholder::build(ItemRef itemRef)

Führe das build-Skript zum Anlegen wiederholender Elemente eines Rahmens aus. Für den Platzhalter des Rahmens muss gelten :
Platzhalter-Typ Skript
XML, SOAP type = multi frames styleid > 0
Datenbank RelatedToID = 6 CharacterStyleID > 0
RelatedTo kMultiFrame (=6)
CharacterStyleID > 0

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
itemRef ItemRef - Rahmen
#include "internal/text.h"
#include "internal/types.h"
err_code = placeholder::build (item);


priint:comet InDesign® Plug-Ins

comet.placeholder.build
comet.CFrame.build

static char* placeholder::path(ItemRef itemRef, char* path)

Hole den Pfad eines Bildrahmens. Die Funktion kann 0 zurückgeben.

Name Typ Default Beschreibung
Return String oder char* (Abhängig von Parameter path)   Vollständiger Pfad auf die Bilddatei, entspricht Parameter path
itemRef ItemRef - Rahmen
path String oder char* - Reservierter Speicher für das Ergebnis

Das Beispiel verzichtet auf den 0-Test, es dürfen nur Bildrahmen ausgewählt sein.

int main ()
{
    char s[800];
showmessage (placeholder::path (gFrame, s)); return 0; }


priint:comet InDesign® Plug-Ins, comet_pdf

static int placeholder::sync_definitions(int type = 0)

Aktualisiere die Definitionen der Platzhalter des gesamten Dokumentes. Beim Anlegen von Platzhaltern im Dokument werden die aktuellen Datenbankdefinitionen des Platzhalters in das Dokument geschrieben. Werden die Definitionen der Datenbank geändert, können die entsprechenden Dokumentwerte nicht automatisch angepasst werden. Mit sync_definitions kann diese Aktualisierung erledigt werden.

Die Methode kann darüber hinaus auch dafür verwendet werden, die Platzhalterdefinitionen des gesamten Dokumentes an eine neue Plugin-Version anzupassen. Dieser Schritt wird empfohlen bei allen Aktualisieren der WERK II Plugins ab Juli 2005 auf neuere Versionen. Hier eine Liste der Updates

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
type int 0 Welche Daten sollen geändert werden?
0 : Platzhalterwerte
1 : Datum (Angelegt/Geändert) initialisieren
2 : Aufbauregeln initialisieren
3 : Infos initialisieren
4 : Sequenznummern initialisieren
-1 : Alles ab Datum initialisieren

Version 1.1.6

priint:comet InDesign® Plug-Ins

static int placeholder::get_sync()

Hole den Synchronstatus des Platzhalters, der das Skript ausgelöst hat.

Name Typ Default Beschreibung
Return int   -1199 : Status konnte nicht ermittelt werden

Markierung Status Wert Beschreibung
kLoadError -4 Fehler beim Laden
kHide -3 Keine Markierung
kNoObject -2 Record-ID nicht gefunden
kChanged -1 Geändert
kDeleted 0 Gelöscht
kOkay 1 Okay
kNotUnique 2 Objekt nicht eindeutig
#include "internal/text.h"
#include "internal/types.h"

Version 1.1.6

priint:comet InDesign® Plug-Ins, comet_pdf

static int placeholder::set_sync(int state)

Ändere den Synchronstatus des Platzhalters, der das Skript ausgelöst hat. Der Aufruf hat nur in Skripten eine Wirkung, die von der Sync- oder Laden-Aktion eines Platzhalters aufgerufen werden.

Der Platzhalterstatus wird im Normalfall nach dem Laden automatisch gesetzt. Haben Sie den Status im Skript verändert, teilen Sie das der Skriptumgebung mit der Anweisung

   *gSyncChanged = 1;

mit. Der Status des Platzhalters wird dann nicht mehr verändert.

Wurde das Ladenskript als Sync-Skript aufgerufen wird (Platzhalter mit SynID -1, siehe hier), wird das Ergebnis von gSyncChanged behandelt wie in Laden-Skripten : Wenn Sie den Wert von gSyncChanged auf 1 ändern, wird der Platzhalterstatus nach der Skriptausführung von den Plugins nicht mehr geändert.

Es wird davon ausgegangen, dass Sie den Status im Skript setzen. Haben Sie keinen Status gesetzt, muss das der Skriptumgebung mit der Anweisung

   *gSyncChanged = 0;

mitgeteilt werden. In diesem Fall wird der Status dann automatisch gesetzt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
value int - neuer Wert

Include von "internal/types.h" erforderlich

Markierung Status Wert Beschreibung
kLoadError -4 Fehler beim Laden
kHide -3 Keine Markierung
kNoObject -2 Record-ID nicht gefunden
kChanged -1 Geändert
kDeleted 0 Gelöscht
kOkay 1 Okay
kNotUnique 2 Objekt nicht eindeutig
#include "internal/text.h"
#include "internal/types.h"

Version 1.1.6

priint:comet InDesign® Plug-Ins, comet_pdf

static int placeholder::replace(
  int placeholderID,
  char* str,
  int maxlen = -1)

Platzhalterspezifische Ersetzungen in einem String.über die XML-Konfigurationsdatei xentities.xml können platzhalterspezifische Ersetzungen der XML-Ergebnisse definiert werden. Besonders in Sync-Skripten, in denen die Originalwerte von Platzhaltern mit denen im InDesign®-Dokument verglichen werden, ist es nötig, die über die Entities definierten automatisch durchgeführten Ersetzungen manuell ausführen zu können. Der Befehl placeholder::replace verändert den angegebenen String so, als wäre er vom Platzhalter mit der angegebenen ID geladen worden. Der String str wird durch den Aufruf verändert. Wenn der Datentyp char* ist, muss er genügend groß allokiert sein, um die Ersetzungen aufnehmen zu können.

Name Typ Default Beschreibung
Return String oder char* (Abhängig von Parameter str)   Zur leichteren Verwendung Aufrufes des wird der übergebene String str auch als Rückgabewert verwendet.
placeholderID int - PlatzhalterID
str String oder char* - Zeichenkette, in der die Ersetzungen gemacht werden sollen. Wenn der Datentyp char* ist, muss die Variable über genügend reservierten Speicher verfügen, um die Ersetzungen aufnehmen zu können.
maxlen int -1 maximale Länge des Ergebnisses. Der Parameter wird ausgewertet, wenn im String str tatsächlich Ersetzungen gemacht werden und der Datentyp von str char* ist.

-1 - Das haben wir selbst im Griff
sonst - Strings werden bei Bedarf bei dieser Länge abgeschnitten und 0-terminiert. Beachten Sie, dass in diesem Fall noch ein Byte für die abschließende 0 benötigt wird.
char		str[31];
:
placeholder::replace (12, str, 30);


priint:comet InDesign® Plug-Ins

static int placeholder::reload_panel(long classid, int reloadAll = 0)

Neuladen der Datensätze einer Palettenliste. Wenn Sie die komplette Palettenliste neu laden wollen, rufen Sie die Funktion mit dem Parameter reloadAll = 1 auf, sonst werden nur die Einträge selbst neu geladen. Wenn sie nur die Linkbuttons der Liste(n) aktualisieren wollen, können sie den Befehl placeholder::update_link_states verwenden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
classid int - Von WERK II vergebene Palettennummer
0 - alle geöffneten und unterstützten Paletten aktualisieren

Die folgenden Paletten werden unterstützt:
  • kPanelProducts
  • kPanelPublications
  • kPanelPreviews
  • kPanelURLLink
  • kPanelPageTemplates (seit v4.1.8 R30020)
reloadAll int 0 Komplette Liste neu laden?

0 : Nein, nur die Listeneinträge neu laden
1 : Ja, die Liste komplett neu laden

Parameter reloadAll neu seit Version 2.1 R 684, 25 April 2008

priint:comet InDesign® Plug-Ins

placeholder::update_link_states
list::reload

static int placeholder::to_xml_element(
  ItemRef frame,
  int pos,
  int len,
  char* parent,
  char* name = 0,
  int index = -1)

Lege zu Comet-Platzhaltern entsprechende XML-Elemente an. Sie können entweder zum Rahmenplatzhalter oder zu den Textplatzhaltern eines Textbereiches zugehörige XML-Elemente anlegen. Die Elemente enthalten außer dem Verweis auf den Rahmen oder die Textstelle die folgenden Attribute zur Beschreibung des Platzhalters :

Den umgekehrten Weg vom XML-Element zum Platzhalter gehen Sie mit Hilfe der Anweisung xml::to_placeholder.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frame ItemRef - Gültiger Rahmen
0 : aktueller Skriptrahmen oder Rahmen des aktuellen Textes
pos int - Textposition, ab der Platzhalter zu XML-Elementen gemacht werden sollen

kTotalEnd Platzhalter des Rahmens. In diesem Fall muss der Rahmen kein Textrahmen sein. Ist der Rahmen nicht mit einem Platzhalter verknüpft, hat der Funktionsaufruf keine Wirkung. Platzhalter im Text des Rahmens werden nicht bearbeitet.

kSelection Die Platzhalter in der aktuellen Textauswahl werden bearbeitet. Ist keine Textauswahl gesetzt oder befindet sich in einem anderen Rahmen, wird der Fehler 313 (noSelectionErr) zurückgegeben.

sonst : 0-basierte Textposition. Die Position ist text-relativ, nicht platzhalter-relativ, bezieht sich also auf den gesamten Text. Befinden sich im angegebenen Textbereich keine Platzhalter, bleibt der Aufruf ohne Wirkung.
len int - Länge des Textes, dessen Platzhalter bearbeitet werden. Bei kTotalEnd und kSelection hat der Parameter keine Bedeutung

. kEnd Bis zum Textende
parent String oder char* "" Unter diesem XML-Element soll das Element für den Rahmen angelegt werden. Ist der Pfad noch nicht angelegt, werden die entsprechenden Elemente automatisch angelegt. Ist für den Rahmen bereits ein Element angelegt, wird es an die entsprechende Stelle der XML-Hierarchie verschoben.

Die XML-Elemente für Textplatzhalter müssen sich immer im Element des Rahmens selbst befinden. Existiert noch kein solches Element, wird es angelegt. Die parent-Angabe ist in diesem Fall also eigentlich die Großeltern-Generation. Existiert schon ein Element, werden alle Elemente, die sich im angegebeen Textbereich gelöscht.
name String oder char* "" Name des XML-Elementes. Existiert das Element bereits, wird es bei >Bedarf umbenannt.

"" : Platzhalternamen verwenden. In diesem Fall müssen Sie darauf achten, dass all Ihre Platzhalter XML-konforme Namen haben (Sie müssen also mit einem Buchstaben oder '_' beginnen und dürfen danach nur die Buchstaben a-z, A-Z, Ziffern oder das Zeichen '_' enthalten.) Ungültige Zeichen im Namen werden automatisch durch '_' ersetzt.

Existiert für den Textrahmen von Textplatzhaltern noch kein XML-Element und ist der Name leer, bekommt diese Element den Namen Frame_UID (mit UID = eindeutige Dokumentnummer des Rahmens (siehe item::getint))

sonst : XML-konformer Name des Elementes.
index int kEnd 0-basierte Position des Elementes im Eltern-Elementes. Bei Textplatzhaltern wird die Angabe zur Positionierung des Elementes ignoriert, die Reihenfolge wird über die Texposition bestimmt.

. kEnd Ans Ende anfügen
#include "internal/text.h"
#include "internal/types.h"

Lege für alle Rahmen-und Textplatzhalter der Rahmen der aktuellen Seite XML-Elemente an. Die Elemente der Rahmen werden im Oberelement pg_SeitenNummer angelegt. Erschrecken Sie nicht, das Skript wirkt etwas länger, aber es macht ja auch eine Menge!

Der erste Teil ist nur dafür, aus den Text-Rahmen der Seite jeweils die ersten Rahmen von Verkettungen herauszusuchen. Das ist nicht unbedingt nötig, da aber die Textplatzhalter jeweils im gesamten Text bearbeitet werden sollen, würden Elemente in Verkettungen evtl. mehrmals angelegt. (Sie werden zwar zuvor auch wieder gelöscht, das Ergebnis wäre also in jedem Fall richtig, aber so ist es dann doch schneller.)

#include "internal/text.h"
#include "internal/types.h"
int main () { int result; ItemList frames = itemlist::pageframes (-1); ItemList frames1 = itemlist::alloc (); int len = itemlist::length (frames); ItemRef frame = item::alloc (); ItemRef frame1 = item::alloc (); int i = 0; int pg; char pgstr [512]; char parent [512]; int a, b, idx;
page::get_str (pgstr, gFrame); pg = page::get (gFrame); sprintf (parent, "/Seitennummer_%s", pgstr);
/ Work on the first frame on text models only. while (i < len) { itemlist::get (frames, frame, i++); if (frame::is_textframe (frame, &a, &b, &idx, frame1)) { if (itemlist::get_pos (frames1, frame1) < 0) { itemlist::append (frames1, frame1); } } else itemlist::append (frames1, frame); }
len = itemlist::length (frames1); i = 0; while (i < len) { itemlist::get (frames1, frame, i++); wlog ("", "# Tagging placeholders of %d\n", item::getint (frame));
/ Frame result = placeholder::to_xml_element ( frame, kTotalEnd, 0, parent, "", // use default name -1); // append
/ Text content if (result == 0 && frame::is_textframe (frame)) { result = placeholder::to_xml_element ( frame, 0, kEnd, parent, "", // use default name -1); // append }
wlog ("", "# Tagging placeholders of %d done with '%s'\n", item::getint (frame), serror (result)); }
return 0; }

Version 2.1 R 1155, 22.2.2009

priint:comet InDesign® Plug-Ins

define
xml::to_placeholder

static int (int* start, int* len)

Hat der Platzhalter des Skriptes einen Präfix-Platzhalter und wenn ja, ermittle dessen Position und Länge.

In Skripten zum Aufbau eines Trenntextes liefert die Funktion keine gesicherten Werte!

Hier finden Sie weitere Informationen zu Präfixen und Postfixen von Platzhaltern.

Name Typ Default Beschreibung
Return int   Präfix-Platzhalter des aktuellen Skriptplatzhalters. Ist kein Präfix-Platzhalter vorhanden oder hat das Skript selbst gar keinen Platzhalter, gibt die Funktion 0 zurück.

1 : Prefix-Platzhalter gefunden
0 : Kein Prefix-Platzhalter gefunden
start int* 0 Ausgabe : Hier beginnt der Präfix-Platzhalter. Die Angabe ist textmodel-relativ.

-1 : Die Rückgabe -1 bedeutet, dass das Skript keinen Platzhalter oder keinen aktuellen Text hat.
len int* 0 Ausgabe : Länge des Präfix-Platzhalters
#include "internal/text.h"
#include "internal/types.h"

v3.3 R3243, 30.10.2012

priint:comet InDesign® Plug-Ins

seit v4.1 R24701

static int (int* start, int* len)

Hat der Platzhalter des Skriptes einen Postfix-Platzhalter und wenn ja, ermittle dessen Position und Länge.

In Skripten zum Aufbau eines Trenntextes liefert die Funktion keine gesicherten Werte!

Hier finden Sie weitere Informationen zu Präfixen und Postfixen von Platzhaltern.

Name Typ Default Beschreibung
Return int   Postfix-Platzhalter des aktuellen Skriptplatzhalters. Ist kein Postfix-Platzhalter vorhanden oder hat das Skript selbst gar keinen Platzhalter, gibt die Funktion 0 zurück.

1 : Postfix-Platzhalter gefunden
0 : Kein Postfix-Platzhalter gefunden
start int* 0 Ausgabe : Hier beginnt der Postfix-Platzhalter. Die Angabe ist textmodel-relativ.

-1 : Die Rückgabe -1 bedeutet, dass das Skript keinen Platzhalter oder keinen aktuellen Text hat.
len int* 0 Ausgabe : Länge des Postfix-Platzhalters
#include "internal/text.h"
#include "internal/types.h"

v3.3 R3243, 30.10.2012

priint:comet InDesign® Plug-Ins

seit v4.1 R24701

static int placeholder::is_valid_funcvar(
  ItemRef frameRef,
  int textIndex,
  char* name,
  int actionType = 1)

Prüfe die Existenz einer Funktionsvariable.

Die Funktion prüft, ob der Platzhalter eine Wertzuweisung für eine Funktionsvariable hat. Sie prüft nicht, ob die Variable im Zielskript selbst definiert ist!

Name Typ Default Beschreibung
Return int   0 : Fehler oder Variable nicht definiert
1 : Variable hat einen definierten Wert
ItemRef frameRef - gültige Rahmenreferenz

0 : aktueller Skriptrahmen
int textIndex - Textindex des Platzhalters

>= 0 : Textindex des Textplatzhalters
< 0 : Rahmenplatzhalter
String oder char* name - Variablenname
int actionType 1 Skript der Funktionsvariable

1 : Ladenskript
2 : Sichernskript
3 : Syncskript
4 : Aufbauskript

v4.1 R14341, 4. Jan 2017

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

get_funcvar_val
set_funcvar_val

static char* placeholder::get_funcvar_val(
  ItemRef frameRef,
  int textIndex,
  char* name,
  int actionType = 1)

Hole den Wert einer Funktionsvariable eines Platzhalters.

Name Typ Default Beschreibung
Return char*   Wert der Variable im Platzhalter

"" : Im Fehlerfall gibt die Funktion einen Leerstring zurück. In diesem Fall sollten Sie mit is_valid_funcvar prüfen, ob dieser Wert wirklich ein Fehler ist oder ob die Variable tatsächlich den Wert "" hat.

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

ItemRef frameRef - gültige Rahmenreferenz

0 : aktueller Skriptrahmen
int textIndex - Textindex des Platzhalters

>= 0 : Textindex des Textplatzhalters
< 0 : Rahmenplatzhalter
String oder char* name - Variablenname
int actionType 1 Skript der Funktionsvariable

1 : Ladenskript
2 : Sichernskript
3 : Syncskript
4 : Aufbauskript

v4.1 R14341, 4. Jan 2017

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

is_valid_funcvar
set_funcvar_val
comet.placeholder.getFuncVarValue

static int placeholder::set_funcvar_val(
  ItemRef frameRef,
  int textIndex,
  char* name,
  int actionType = 1,
  char* newValue = "")

Setze den Wert einer Funktionsvariable eines Platzhalters.

Existiert für den gegebenen Variablennamen noch kein Wert, wird ein neuer Eintrag für diesen Namen im Platzhalter angelegt (Nicht bei Illustrator!). Im Skript kann diese Variable aber voraussichtlich nicht verwendet werden. Um undefinerte Wertzuweisungen zu vermeiden, sollte die Existenz der Variable zuvor mit is_valid_funcvar geprüft werden.

Änderungen der Werte von Funktionsvariablen haben keinen Einfluß auf den Wert der Variable im aktuellen Skript. (Den neuen Wert können Sie hier ja auch direkt verwenden.)

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ItemRef frameRef - gültige Rahmenreferenz

0 : aktueller Skriptrahmen
int textIndex - Textindex des Platzhalters

>= 0 : Textindex des Textplatzhalters
< 0 : Rahmenplatzhalter
String oder char* name - Variablenname
int actionType 1 Skript der Funktionsvariable

1 : Ladenskript
2 : Sichernskript
3 : Syncskript
4 : Aufbauskript
String oder char* newValue "" Neuer Wert der Variable

v4.1 R14341, 4. Jan 2017

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

is_valid_funcvar
get_funcvar_val
comet.placeholder.setFuncVarValue

Letzte Änderung
30.07.2025, 07:35 Uhr
Autor
Paul Seidel

Alphabetic index HTML hierarchy of classes or Java