Bearbeiten des Dokumenttextes.

Letzte Änderung :
30.07.2025, 07:35 Uhr

Bearbeiten des Dokumenttextes. Skripten steht das aktuelle Textmodell des Dokumentes automatisch zur Verfügung. Ist kein Text und kein Textrahmen verfügbar, haben die Aufrufe keine Bedeutung. Für die Verwendung der Methoden ist der Include von text.h nötig:

#include "internal/text.h"

In aller Regel wird das aktive Textmodell eines Skriptes automatisch definiert und steht dem Skript zu Verfügung. Es ist nicht nötig, die aktuelle Textauswahl oder deren Rahmen zu adressieren. Die nötigen Berechnungen werden von den Skripten übernommen.

Die in den Skripten verwendeten Textindizees beziehen sich immer auf den aktuellen Wirkungsbereich eines Skriptes, also etwa einen Platzhalter und nicht auf die gesamte Textbox. Der Index 0 verweist also nicht auf das erste Zeichen des aktuellen Textrahmens sondern auf das erste Zeichen des Aufrufers.

In Textplatzhaltern ist das Textmodel automatisch durch den Text bestimmt. Die Textindizees sind durch Anfang und Ende des Platzhalter bestimmt.

Ist der Platzhalter mit einem Grafikrahmen verknüpft, steht kein Textmodel zur Verfügung.

Die priint:comet Paletten können sogenannte Palettenaktionen enthalten. Diese Aktionen sind entweder über über das Paletten-Flyout oben rechts im Panel oder im Programmmenü (Plug-ins -> Palettenname -> ...) (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) ausführbar. Diese Skripte sind gewöhnlich in cscript geschrieben. Hier ist das aktuelle Textmodell dann definiert, wenn das Textwerkzeug aktiv ist oder wenn der jeweilige Rahmen, für den das Skript ausgeführt wird, ein Textrahmen ist. Siehe dazu auch unter gRun.

Wird die Palettenaktion für einen Grafikrahmen ausgeführt, steht kein Textmodel zur Verfügung.

Skripte können als Wert von XML-Attributen eines Dokumentes angegeben werden. In diesem Fall gehört zu dem XML-Tag, dessen Attributwert das Skript ist, möglicherweise ein Text- oder Grafikrahmen, der den Inhalt des XML-Tags anzeigt. Wird das Skript ausgeführt, wird dem Skript automatisch das zugehörige XML-Element mitgegeben. Über dieses Element kann das zugehörige Textmodel während der Skriptausführung ermittelt werden und steht den folgenden Funktionen zur Verfügung.

Ist ein XML-Element nicht mit einem Rahmen sondern mit einem Stück Text verknüpft, beziehen sich die Indexpositionen automatisch auf diese Textauswahl; die Position 0 ist also der Textanfang für das XML-Element, nicht die des Textes.

static int textmodel::available()

Ist im Skript überhaupt ein Textmodel verfügbar? Position und Länge des verfügbaren Textes können mit start und length erfragt werden.

Name Typ Default Beschreibung
Return int   1 Text verfügbar
Return int   0 kein Text verfügbar
#include "internal/text.h"
if (!textmodel::available ()) return;


priint:comet InDesign® Plug-Ins, comet_pdf
start
length
fulllength

static int textmodel::start(int recalc = 0)

Anfangsposition des Dokumenttextes, über den das Skript verfügen darf. Skripte dürfen gewöhnlich nicht den gesamten Text des verfügbaren Textmodells bearbeiten. So dürfen Skripte, die von Textplatzhaltern ausgelöst werden, natürlich nur über den Text verfügen, der zum Platzhalter der Aktion gehört. Die Funktion gibt den Wert der globalen Variable gStart zurück.

Name Typ Default Beschreibung
Return int   >= 0 Text verfügbar
Return int   -1 kein Text verfügbar
recalc int 0 Aus Performancegründen wird die Startposition des Platzhalters nur beim Skriptstart direkt aus dem Dokument berechnet. Danach wird sie nur anpasst, wenn Funktionsaufrufe des Skriptes das erfordern.

Soll die Position aus dem Dokument neu berechnet werden?

0 : Nein, verwende die vom Skript berechnete Startposition

1 : Ja, Platzhalterposition aus dem Dokument neu berechnen. Dabei wird auch die Länge des Platzhalters neu berechnet.
#include "internal/text.h"
int	startPos = textmodel::start ();

recalc seit v4.1 R24701

priint:comet InDesign® Plug-Ins, comet_pdf
available
length
gStart
fulllength
comet.CTextModel.getStart

static int textmodel::length()

Länge des Dokumenttextes, über den das Skript verfügen darf. Skripte dürfen gewöhnlich nicht den gesamten Text des verfügbaren Textmodells bearbeiten. So dürfen Skripte, die von Textplatzhaltern ausgelöst werden, natürlich nur über den Text verfügen, der zum Platzhalter der Aktion gehört. Die Funktion gibt den Wert der globalen Variable gLen zurück. Um die Gesamtlänge des Textes zu ermittlen, kann die Funktion textmodel::fulllength verwendet werden.

Name Typ Default Beschreibung
Return int   >= 0 Länge des verfügbaren Textes
Return int   -1 kein Text verfügbar
recalc int 0 Aus Performancegründen wird die Länge des Platzhalters nur beim Skriptstart direkt aus dem Dokument berechnet. Danach wird sie nur anpasst, wenn Funktionsaufrufe des Skriptes das erfordern.

Soll die Länge aus dem Dokument neu berechnet werden?

0 : Nein, verwende die vom Skript berechnete Länge

1 : Ja, Platzhalterlänge aus dem Dokument neu berechnen. Dabei werden auch die Startposition des Platzhalters und gStart neu berechnet.
#include "internal/text.h"
int	endPos = -1;
if (textmodel::available ())
 	endPos = textmodel::start () + textmodel::length ();

recalc seit v4.1 R24701

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator
available
length
gLen
fulllength
comet.CTextModel.getLength

static int textmodel::get_frame(int textPos, ItemRef frameRef = 0)

Ermittle den Textrahmen an einer festgelegten Textposition. Befindet sich die Textstelle im Übersatz, wird der erste Rahmen der Rahmenkette in frameRef zurückgegeben. Es wird das Textmodel des Skriptes verwendet.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

-1 : Kein Rahmen (mehr) gefunden -2 : Kein Textmodel
textPos int - Textposition, zu der der Rahmen ermittelt werden soll. In Textplatzhaltern ist die Angabe platzhalterrelativ.
frameRef ItemRef 0 Allokierter Zeiger für das Ergebnis
#include "internal/text.h"

Version 2.0 R 630, 19. März 2008

priint:comet InDesign® Plug-Ins
get_frame_containing
comet.CTextModel.getFrame

static int textmodel::get_frame_containing(
  ItemRef frameRef,
  int textPos,
  ItemRef resultRef = 0,
  int* column = 0)

Ermittle den Textrahmen an einer festgelegten Textposition. Befindet sich die Textstelle im Übersatz, wird der erste Rahmen der Rahmenkette in resultRef zurückgegeben.

Unter comet_pdf muß zur Bestimmung der Rahmens ein zusätzlicher Renderer-Lauf durchgeführt werden. Das ist ein sehr zeitaufwändiger Prozeß!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

-1 : Die Textstelle befindet sich im Übersatz, resultRef enthält den ersten Rahmen der Kette.
frameRef ItemRef - Gültige Rahmenreferenz

0 : aktueller Skriptrahmen
textPos int - Textposition, zu der der Rahmen ermittelt werden soll. Die Angabe ist rahmenrelativ.
resultRef ItemRef 0 Allokierter Zeiger für das Ergebnis.
column int* 0 0-basierte Spaltennummer im Textrahmen. comet_pdf ignoriert diesen Parameter.

0 : Ausgabe der Spaltennummer ignorieren
#include "internal/text.h"
int main ()
{
    char 		str[2048];
    int			textPos	= 0;
    int			result	= 0;
    ItemRef		fr		= item::alloc ();
strcpy (str, "0"); if (!askstring (str, "text position", "frame @ text position", "", "", 0)) return 0; textPos = val (str);
result = textmodel::get_frame_containing (gFrame, textPos, fr); if (result == -1) showerror ("Text position %d in overset", textPos); else if (result == 0) showmessage ("Text position %d is in frame %d", textPos, item::getint (fr)); else showerror ("Fehler '%s'", serror (result));
return 0; }

Sammle alle Platzhalter eines Rahmens und schreibe Informationen über die gefundenen Platzhalter ins Logfile. Achten Sie darauf, die Liste flist mit itemlist::clear wieder zu leeren. Der Rahmen frameRef wurde nicht in query_links allokiert.

#include "internal/types.h"
#include "internal/text.h"
int query_links (ItemRef frameRef) { ItemList flist = itemlist::alloc (); LinkList lli = linklist::alloc (); ItemRef fr = item::alloc (); Link li; int inOverset = 0;
itemlist::append (flist, frameRef); linklist::collect_any (lli, flist, "--list--", kFirstIgnore, kSortNo); itemlist::clear (flist); // otherwise itemlist::release will delete frameRef too! wlog ("", "# %d Placeholders found.\n", linklist::length (lli));
li = linklist::first (lli); while (li) { if (!link::isframe (li)) { inOverset = textmodel::get_frame_containing (link::frame (li), link::pos (li), fr); if (!inOverset && link::length (li) > 0) { inOverset = textmodel::get_frame_containing (link::frame (li), link::pos (li)+link::length (li), fr); }
wlog ("", "# [%d, %d]", link::pos (li), link::pos (li)+link::length (li)); wlog ("", " %d (%d)", item::getint (link::frame (li)), item::getint (fr)); if (inOverset == -1) wlog ("", " in Overset"); wlog ("", "\n"); }
li = linklist::next (lli); }
linklist::release (lli);
return 0; }
int main () { query_links (gFrame); return 0; }

Version 3.1 R2222, 9. Dez. 2010
Parameter column seit v4.0.5 R21556, 23. Okt 2017
Verfügbar für comet_pdf seit v4.1.8 R28010, 25. Jan 2021
Rückgabewert von column gefixt in v5.0 R35400

priint:comet InDesign® Plug-Ins, comet_pdf
get_frame
position_visible

static int textmodel::get_placeholder(
  ItemRef frame,
  int pos,
  int* start = 0,
  int* length = 0,
  int* phID = 0,
  idtype* id = 0)

Ermittle den Platzhalter an einer Textposition.

Name Typ Default Beschreibung
Return int   0 : Platzhalter gefunden
sonst : Fehlercode, kein Platzhalter gefunden
frame ItemRef - Gültiger Rahmen
0 : aktueller Skriptrahmen oder Rahmen des aktuellen Textes
pos int - Zeichenposition im Text. 0-basiert

Die Zeichenposition ist global, nicht platzhalter-relativ.
start int* 0 Bei erfolgreichem Return der Funktion :

Startposition des gefundenen Platzhalters
len int* 0 Bei erfolgreichem Return der Funktion :

Länge des gefundenen Platzhalters in Zeichen
phID int* 0 Bei erfolgreichem Return der Funktion :

ID des gefundenen Platzhalters
id IDType 0 Bei erfolgreichem Return der Funktion :

ID des Objektes, mit dem der Platzhalter verknüpft ist

Das Skript fügt einen Absatztrenner ein, wenn der Platzhalter direkt dahinter länger 1 ist. In Skripten Trenntexte von Platzhaltern wird damit ein Absatztrenner als Postfix-Text des Platzhaltes erzeugt.

Achtung : In produktiven Anwendungen sollte der Test auf Länge 1 ersetzt werden durch die Prüfung auf einen Leer-Platzhalter (<0x200B>)!

int main ()
{
    int 	res;
    int 	pid, s, len;
    IDType	id = idtype::alloc ();
res = textmodel::get_placeholder (gFrame, gStart+gLen, &s, &len, &pid, id);
if (res == 0 && len > 1) { textmodel::insert ("%!TT", gLen); }
return 0; }

v4.1 R24702, 5. Feb 2019 (TẾT 2019)

priint:comet InDesign® Plug-Ins

placeholder::get_value
placeholder::sget_value

static int textmodel::position_visible(ItemRef frameRef, int textPos)

Ist eine gegebene Textposition sichtbar oder im Übersatz? Die Funktion prüft die gesamte Textkette des Textes des gegebenen Rahmens.

Name Typ Default Beschreibung
Return int   1 : sichtbar
0 : unsichtbar oder Fehler
frameRef ItemRef - Gültige Rahmenreferenz

0 : aktueller Skriptrahmen
textPos int - Textposition, zu der der Rahmen ermittelt werden soll. Die Angabe ist rahmenrelativ.
#include "internal/text.h"
int main ()
{
    ItemRef		parent	= item::alloc ();
    int			tpos;
    int			visi;
if (frame::isinline (gFrame)) { frame::textframe (gFrame, parent);
tpos = frame::inlinepos (gFrame); visi = textmodel::position_visible (parent, tpos);
if (visi) wlog ("", "# Inline frame %d is visible at text position %d.\n", item::getint (gFrame), tpos); else wlog ("", "# Inline frame %d is at hidden text position %d.\n", item::getint (gFrame), tpos); }
return 0; }

Version 3.1 R2223, 22. Dez. 2010

priint:comet InDesign® Plug-Ins
get_frame_containing
comet.CTextModel.isPositionVisible

static int textmodel::force_redraw(ItemRef frameRef = 0, int textPos = -1)

Neuzeichnen des Textes im InDesign®. Diese Aufrufe sind sehr teuer, sie sollten nur dann gemacht werden, wenn sie unbedingt erforderlich sind. Zum Neuzeichnen des kompletten Dokumentfensters verwenden Sie die Funktion document::force_redraw.

Unter comet_pdf hat der Aufruf keine Wirkung.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

frameRef ItemRef 0 Textrahmen
0 : aktueller Text
textPos int kEnd Bis zu welcher Textposition soll der Text neu gezeichnet werden?

kEnd : Bis zum Textende
#include "internal/text.h"

Version 2.0 R 634, 20. März 2008

priint:comet InDesign® Plug-Ins
document::force_redraw
comet.CTextModel.redraw

static int textmodel::get_table(
  ItemRef frameRef,
  int textPos,
  ItemRef tableRef,
  int* left = 0,
  int* top = 0,
  int* right = 0,
  int* bottom = 0,
  int* anchor = 0,
  int* anchorLen = 0,
  int* tableStart = 0,
  int* tableLen = 0,
  int* cellStart = 0,
  int* cellEnd = 0)

Ermittle Tabelle und Zellenbereich an einer beliebigen Textposition eines Textrahmens.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

1115 : Fehlende(r) Parameter
1 : Textposition nicht innerhalb einer Tabelle
200 : frameRef leer, falsch oder kein Textrahmen oder textPos == kSelection und die Auswahl ist kein Text oder Textrahmen
frameRef ItemRef - Gültiger Textrahmen

0 : aktueller Rahmen des Skriptes
textPos int - Texposition innerhalb des Textes von frameRef
tableRef Table - Allokierter Speicher für die gefundene Tabelle.

Ist frameRef ein gültiger Textrahmen aber textPos ist außerhalb einer Tabelle, erhält der Parameter die Referenz auf ein leeres Objekt.
left, top int* 0 Linke obere Ecke des Zellbereiches, in dem die Textposition liegt (0-basiert).

Ist frameRef ein gültiger Textrahmen aber textPos ist außerhalb einer Tabelle, erhalten die Parameter den Wert -1.
right, bottom int* 0 Ende des Zellbereiches (0-basiert wie immer). Die Angaben sind die erste Zeile/Spalte außerhalb des Zellbereiches. Liegt die Textposition in (einfachen) der Zelle 1, 1 erhalten sie also für [left, top, right, bottom] = [0, 0, 1, 1].

Ist frameRef ein gültiger Textrahmen aber textPos ist außerhalb einer Tabelle, erhalten die Parameter den Wert -1.
anchor, anchorLen int* 0 Ankerposition und -länge der Tabelle im Text.

Ist frameRef ein gültiger Textrahmen aber textPos ist außerhalb einer Tabelle, erhalten die Parameter den Wert -1.
tableStart, tableLen int* 0 Textbereich des Tabelleninhaltes. Dieser Textbereich darf niemals direkt verändert werden. Verwenden Sie dazu immer die entsprechenden table-Methoden.

Ist frameRef ein gültiger Textrahmen aber textPos ist außerhalb einer Tabelle, erhalten die Parameter den Wert -1.
cellStart, cellLen int* 0 Textbereich der Zelle (oder Zellfläche) innerhalb von tableStart bis tableStart+tableLen. Zellentext wird immer durch ein internes Return abgeschlossen, das nicht entfernt werden darf und bei der Zellenlänge mitgezählt wird. Der Text Clara ergibt also die Länge 6.

Ist frameRef ein gültiger Textrahmen aber textPos ist außerhalb einer Tabelle, erhalten die Parameter den Wert -1.
#include "internal/text.h"

Das Beispiel demonstriert, wie die aktuelle Tabellenzelle auf einfache Weise neu gestaltet werden kann. Zusätzlich werden einige Infos über Tabelle und Zelle(n) ins Logfile geschrieben.

#include "internal/text.h"
#include "internal/types.h"
int main () { Table T = table::alloc (); int l, t, r, b; int anchor1, anchorLen; int text1, textLen; int cell1, cellLen; int res;
res = textmodel::get_table (0, kSelection, T,   // Optional   &l, &t, &r, &b,   &anchor1, &anchorLen,   &text1, &textLen,   &cell1, &cellLen); if (res == 0) { wlog ("", "Zellbereich : [%d, %d] - [%d, %d]\n", l, t, r-1, b-1); wlog ("", "\tAnker : [%d, %d]\n", anchor1, anchor1+anchorLen); wlog ("", "\tTabellentext : [%d, %d]\n", text1, text1+textLen); wlog ("", "\tZelltext : [%d, %d]\n", cell1, cell1+cellLen);
table::colorize_rows (T, t, b-t, 255, 0, 0, 50.0, "Rot"); table::colorize_cols (T, l, r-l, 0, 0, 255, 50.0, "Blau"); table::colorize (T, l, t, r, b, 0, 255, 0, 50.0, "Grün"); } else wlog ("", "Keine Tabelle\n");
return 0; }

Version 2.0 R 634, 20. März 2008

priint:comet InDesign® Plug-Ins, comet_pdf
table::get_anchorpos

static int textmodel::overset(ItemRef fm, int fullChain = -1)

Sind Textteile eines Textmodelles oder Rahmens unsichtbar? Hat der Text diesen sogenannten Overset, wird rechts unten am ausgewählten Rahmen ein kleines rotes Plus zur Markierung gezeigt. Die Funktion kann den Overset nur von Textrahmen oder Texten bestimmen.

Name Typ Default Beschreibung
Return int   0 : Kein Übersatz oder Fehler
Return int   sonst : Textübersatz Die Angabe ist nicht die Anzahl der unsichtbaren Zeichen!
fm ItemRef 0 Ist kein Rahmen angegeben, wird das aktuelle Textmodell zum Test verwendet. Ist ein Rahmen angegeben, wird versucht, dessen Text zu testen.
fullChain int kFullChain Soll die gesamte verbundene Textrahmenkette befragt werden?
kFullChain : Letzten Rahmen der Textkette prüfen
0 : Rahmen selbst prüfen
#include "internal/text.h"
int 	k = textmodel::overset (fm );

Version 1.1.4
kFullChain seit Version 1.4 R310, 9. Feb. 2007

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

static int textmodel::insert(
  char* str,
  int position = 0,
  int autoLoad = 1,
  int flags = 0)

Einfügen von Text. Als Eingabe darf auch TaggedText verwendet werden.

Wird Text in einen Text-Platzhalter eingefügt, wird der Platzhalter auch über den neu eingefügten Text gelegt. Mit w2-Tags angelegte Unterplatzhalter eines Textplatzhalters gehen dabei verloren! Im Absatz Unterplatzhalter laden finden Sie einen Workaround, mit dem Unterplatzhalter vor dem Entfernen geladen werden können.

Was wäre, wenn Platzhalter, die durch Textplatzhalter eingesetzt wurden, nicht entfernt würden? Die dadurch ausgelöste Kernspaltung würde die Anzahl der Platzhalter bei jedem Aktualisieren vervielfachen.

Hier ein Skript, das mit Hilfe des w2-Tags einen weiteren Platzhalter in sich selbst anlegt:

int main ()
{
    char	tt[2000];
    int		readable;
    sprintf (tt, "%%!TTAB<w2:10, %d, 0, 0,''>ab</w2>YZ", gRecordID);
    readable = prefs::set_tags_readable (0);     textmodel::replace (tt);     prefs::set_tags_readable (readable);
    return 0; }

In der Abbildung sehen Sie, wie dieses Skript ohne weiteres Zutun der Plugins wirken würde. Ganz oben ist das Original zu sehen, dann folgen die Texte nach ein bis vier Aktualisierungen. Die Anzahl der Platzhalter verdoppelt sich bei jeder Aktualisierung (2n+1 - 1).

Das Laden von Unterplatzhaltern wird nur unterstützt, wenn Platzhalter nicht direkt aus dem TaggedText angelegt werden. Werden Platzhalter direkt aus dem TaggedText angelegt, können die Unterplatzhalter nicht geladen werden. Mit diesen Einstellungen können Unterplatzhalter geladen werden:

Das obige Beispiel deaktiviert das direkte Anlegen der Unterplatzhalter mit Hilfe des Skriptbefeheles prefs::set_tags_readable (0). Hier ein Screenshot eines geladenen Platzhalters:

Beachten Sie aber bitte folgende Einschränkungen:

Im obigen Beispiel ist es natürlich einfach, den Unterplatzhalter zu vermeiden: Der äußere Platzhalter muß entfernt werden und in der Textmitte der Unterplatzhalter direkt ins Dokument eingefügt werden.

Im allgemeinen werden Unterplatzhalter in Aufzählungen verwendet, bei denen einzelne Platzhalter auch leer sein können. Der äussere Platzhalter hat dabei die Aufgabe, die Trenner zwischen den einzelnen Punkten zu bilden oder zu entfernen. Die Lösung hier besteht ebenfalls darin, den äußeren Platzhalter durch die Unterplatzhalter zu ersetzen. Die Trenner zwischen den Platzhalter können mit den Prä- und Postfix-Texten der einzelnen Platzhalter realisiert werden.

Nur verfügbar wenn das Menü Plug-ins -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) aktiviert ist oder vorher der Aufruf

    prefs::set_tags_readable (1);

ausgeführt wurde! Mehr Informationen zum sog. nativen Import von Platzhaltern finden Sie hier.

Absatztrenner im TaggedText werden mit dem Tag <ParaStyle:Stilname> festgelegt. Fehlende Stilnamen werden, wenn nichts anderes angegeben ist (siehe unten), automatisch durch den Absatzstil an der Einfügestelle ersetzt.

Zusätzlich erwartet InDesign® auch am Beginn von Tabellenzellen jeweils die Definition eines Absatzstiles. Fehlende oder leere Absatzstile in Tabellenzellen werden nicht automatisch durch den Absatzstil ersetzt, den Tabellen- und Zellstile festlegen. Das kann zu erheblichen Problemen im InDesign®-Dokument führen:

  1. In den Zellen werden falsche Schriften und Schriftfarben etc. verwendet.
  2. Häufig sind die verwendeten Schriften auch noch größer als die eigentlich gewünschte Schrift und die Zellen bekommen dadurch einen Übersatz, der nur durch eine größere Zeilenhöhe behoben werden kann.
  3. Die Zellstile bekommen einen local override und werden in der Palette der Zellenformate mit einem + gekennzeichnet.
  4. Beim Editieren leerer Zellen in der eingefügten Tabelle wird ebenfalls die falsche Schrift verwendet.
  5. Die Absatzstile nachfolgender Absätze in der Zelle sind undefiniert.

Die einfachste Möglichkeit, das alles zu umgehen, wäre natürlich, die Absatzstile mitzugeben. Aber meist kennen Sie die in den Zellstilen verwendeten Absatzstile beim Erstellen des TaggedText gar nicht!

Die priint:priint:comet InDesign® Plug-Ins bieten deshalb die Möglichkeit, den aktuellen Absatzstil in Tabellenzellen selbstständig aus dem verwendeten Zell- und Tabellenstil zu ermitteln (ab v4.0.5 R18210) und fehlende Folgeabsätze in den Tabellenzellen durch die jeweiligen Nachfolgerstile zu ersetzen (ab v4.0.5 R19061).

In leeren Tabellenzellen werden die fehlenden Absatz-Definitionen automatisch eingefügt. Zum Aktivieren der automatischen Korrektur in nicht-leeren Tabellenzellen und im gesamten Text setzen Sie den Parameter flags der Funktionen zum Import von TaggedText (textmodel::insert, textmodel::replace, ...) auf einen der folgenden Werte :

Werte können addiert werden.

Alternativ zum Setzen des Parameters flags können Sie auch die Einleitung des TaggedTextes (i.A. %!TT) ändern. Eine Beschreibung der gültigen Kennungen finden Sie hier. Bei einer vom Standard %! abweichenden Kennung (z.B. %? oder %%) wird die Angabe von flags ignoriert.

Nur wichtig für flags 1 und 2

Die Verfahren funktionieren nur bei nicht-geschachtelten Tabellen.

In Tabellenzellen mit mehreren Absätzen sind die ParaStyles-Tags (auch der einleitende hinter CellStart) zwingend erforderlich. Fehlende ParaStyles in Tabellenzellen mit mehreren Absätzen können zu fehlenden Absatztrennern im InDesign®-Dokument führen. Um Konflikte mit dem Auflösen fehlender Absatzstile außerhalb von Tabellen zu vermeiden, müssen Absatzstile in Zellen, deren Definition automatisch ermittelt werden sollen, mit dem Kennwort W2AUTODETECT (in genau dieser Schreibweise) versehen werden. Zur besseren Lesbarkeit sollten Sie das an jeder Stelle machen, an der Sie in Tabellenzellen einen Absatzstil ohne Namen verwenden, also

    statt <ParaStyle:> immer  <ParaStyle:W2AUTODETECT>

schreiben.

Nur verfügbar wenn das Menü Zusatzmodule -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) aktiviert ist oder vorher der Aufruf

    prefs::set_tags_readable (1);

ausgeführt wurde! Mehr Informationen zum sog. nativen Import von Platzhaltern finden Sie hier.

Das Einfügen der fehlenden Absatzstile in leere Tabellenzellen hat leider einen weiteren Fehler von InDesign® aufgedeckt: Manchmal, aber eben leider auch nur manchmal, fügt InDesign® in Tabellenzellen einen leeren Absatz ein, obwohl der Zellinhalt lediglich aus einem einzelnen <ParaStyle:...> ohne weiteren Text besteht. Wir konnten dafür aber keine Regel erkennen außer dass das Problem in gemergten (also unsichtbaren) Zellen offenbar nicht auftritt.

Um das Problem zu lösen, markieren wir daher vor dem Import alle leeren Zellen. Sollte eine solche Zelle nach dem Import Text enthalten, wird dieser Text automatisch aus der Zelle entfernt.

... womit wir sofort beim nächsten Problem gelandet sind: überraschenderweise fügt InDesign® den Inhalt unsichtbarer Zellen beim Import aus TaggedText als neuen Absatz an den Inhalt der Ankerzelle an. Offenbar werden die Merges erst nach dem eigentlichen Import gemacht.

Das Problem ist, dass wir dann nicht mehr entscheiden können, ob ein leerer Absatz am Anfang der Ankerzelle aus einer versteckten Zelle kam oder ein Fehler von InDesign® war. Ist die Ankerzelle leer, werden deshalb die Inhalte ihrer Unterzellen auch nicht importiert.

Allgemein gilt : Versteckte Zellen sollten keine Inhalte enthalten!

Fehler im TaggedText insbesondere von Tabellen kann Dokumente zerstören und/oder zum Absturz von InDesign® führen. Die priint:priint:comet InDesign® Plug-Ins können deshalb einen Integritätstest der Tabellendefinitionen im TaggedText durchführen. Im TaggedText dürfen dabei beliebig viele beliebig geschachtelte Tabellen enthalten sein.

Zum Aktivieren der Integritätstests addieren Sie zum Parameter flags der Funktionen zum Import von TaggedText (textmodel::insert, textmodel::replace, ...) den Wert 8.

Fehler im TaggedText von Tabellen werden nicht automatisch repariert! Bei Fehlern im TaggedText von Tabellen wird der gesamte einzufügende Text durch einen Fehlertext ersetzt, der rot gefärbt ins Dokument eingefügt wird.

Hier soll eine Zelle einen Zellbereich verbinden, der größer ist als der Bereich, der unter und neben der Zelle noch zur Verfügung steht. Oder, mit anderen Worten : Die Zelle soll einen größeren Bereich mergen als sie zur Verfügung hat.

ERROR IN TAGGED TEXT : Maximum allowed span for body cell [r5 x c1] is 5:3 but got <CellStart:1,8

Folgende Prüfungen werden vom Integritätstest durchgeführt:

Die Autokorrektur-Flags können auch direkt im TaggedText definiert werden, weitere Informationen dazu finden Sie hier.

Nur verfügbar wenn das Menü Plug-ins -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) aktiviert ist oder vorher der Aufruf

    prefs::set_tags_readable (1);

ausgeführt wurde! Mehr Informationen zum sog. nativen Import von Platzhaltern finden Sie hier.

In-Tags können vor dem Einsetzen des TaggedText automatisch in w2inline konvertiert werden.

Zum Aktivieren dieser Option addieren Sie zum Parameter flags der Funktionen zum Import von TaggedText (textmodel::insert, textmodel::replace, ...) den Wert 16.

Ab v4.1.6 R25777 wird die w2inline-Ersetzung immer und automatisch gemacht. Da w2inline ein Zeichenattribut ist und nur ausgewertet werden kann, wenn ein Absatzstil definiert ist, werden dabei auch in allen nicht-leeren Tabellenzellen die Absätze korrigiert. Änderungen an Ihrem TaggedText sind dafür nicht erforderlich.

[Ab v4.1.6 R25777] Inlines, die nicht über Templates definiert sind und kein Bild enthalten (also leer sind), erhalten als Inhalt den Text zwischen zwischen öffnendem und schließenden in-Tag.

TaggedText kann Hyperlinks enthalten.

Hier ein Stück TaggedText, mit dem ein Seitenverweis angelegt werden kann. Zur besseren Lesbarkeit sind Zeilentrenner eingefügt (die im TaggedText an dieser Stelle nicht natürlich erlaubt sind)

<Hyperlink:=
 	<HyperlinkName:My link>
 	<HyperlinkDest:.1401>
 	<HyperlinkDestKey:1401>
 	<CharStyleRef:>
 	<HyperlinkLength:15>
 	<HyperlinkStartOffset:0>
 	<Hidden:0>
 	<BrdrVisible:0>
 	<BrdrWidth:Thin>
 	<BrdrHilight:None>
 	<BrdrStyle:Solid>
 	<BrdrColor:0\,0\,0>
>
<! --Text of my link -->
<HyperlinkDestDefn:=
 	<HyperlinkDestName:.1401>
 	<HyperlinkDestKey:1401>
 	<HyperlinkDestPage:17>
 	<HyperlinkDestPageZoomType:Fixed>
 	<HyperlinkDestPageZoomFactor:1.03>
 	<Hidden:1>
>

InDesign® stellt einige Forderungen an den Text:

  1. HyperlinkLength muss die exakte Länge des Links im Dokument enthalten. Sonderzeichen der Form <0x00FC>, Inlines, Tabellen, etc. müssen also bei der Längebestimmung beachtet werden.
  2. <HyperlinkDestKey> muss eine dokumentweite eindeutige Ganzzahl sein.
  3. <HyperlinkDest> und <HyperlinkDestName> müssen dokumentweit eindeutig sein.
  4. <HyperlinkDestDefn>s müssen an das Ende des TaggedTextes angefügt werden (und sollten nicht im laufenden Text gemacht werden.)

Besonders der zweite und dritte Punkt sind schwer zu realisieren (oder gar nicht, wenn man das Dokument nicht kennt), aber InDesign® stürzt sofort ab, wenn der Import nicht-eindeutige Keys oder Namen enthält.

Wird der Text in cScript zusammengestellt (oder die Erstellung hat Zugriff auf cScript und das Zieldokument) können Sie mit Hilfe der Funktion hyperlink::get_next_unique_key den nächsten freien Schlüssel erfragen. Für <HyperlinkDest> und <HyperlinkDestName> verwenden Sie einfach ebenfalls den Schlüssel und setzen davor noch einen Punkt (.).

Wird der Text extern zusammengestellt, können Sie eine feste und genügend große Zahl als Basis verwenden und darauf hoffen, dass dieser Schlüssel noch nicht vergeben ist. Dann dürfen Sie den Text aber auch nur einmal ins Dokument einfügen - danach ist der Schlüssel ja bereits vergeben.

[Experimentell] Die bessere Methode ist, Schlüssel und Namen erst zur Laufzeit, direkt vor dem Import zu berechnen. Zum Aktivieren dieser Option addieren Sie zum Parameter flags der Funktionen zum Import von TaggedText (textmodel::insert, textmodel::replace, ...) den Wert 32, dann versucht der Import selbst, Schlüssel und Namen richtig zu vergeben.

Die automatische Vergabe richtiger Schlüssel entbindet Sie nicht von der Aufgabe, textweit eindeutige Schlüssel für die Hyperlinks zu vergeben! Der Import kann sonst nämlich nicht mehr zuordnen, welcher Hyperlink welche Definition verwenden soll. Auf die Vergabe von Namen können Sie dagegen verzichten - die Namen werden vom Import automatisch mit korrigiert und bei Bedarf eingefügt.

Bitte beachten Sie: Um Fehler bei der Reperatur von Hyperlinks kümmern wir uns gerne, als sog. good will feature fällt diese Funktionalität aber nicht unter den Support von WERK II!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
str String oder char* - einzufügender Text (kann auch TaggedText sein)
position int 0 scannerrelative Einfügeposition
>= 0 Einfügeposition
kEnd Anfügen
kSelection Beginn der aktuellen Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
autoLoad int 1 Sollen Platzhalter im TaggedText geladen werden? Wenn sie den Text aktuell zusammengestellt haben, können sie das Laden der Platzhalter auch abschalten.
0 Platzhalterinhalte nicht laden
1 Platzhalterinhalte laden
flags int 0 Hinweise zur Vorbereitung von TaggedText.

0 : Aus, verwende die Autokorrektur-Angabe aus dem Text-Prefix, z.B. %7TT
1 : Fehlende Absatzstile in leeren Tabellenzellen hinzufügen
2 : Fehlende Absatzstile in allen Tabellenzellen, in denen es fehlt, hinzufügen
4 : Leere Absatzstile (<ParaStyle:>) im gesamten Text vervollständigen
8 : Tabellendefinitionen prüfen
16 : Ersetze <in> Tags durch <w2inline> Tags (seit v4.1 R21213)
32 : Hyperlinks reparieren (seit v4.1 R22201)

Bitte beachten Sie:
  • Alle Werte ungleich 0 'überstimmen' die Autokorrektur-Angabe aus dem Text-Prefix
  • Für normalen Text ohne Prefix hat der Parameter keine Wirkung.
  • Ist die Option Zusatzmodule -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) nicht aktiviert, haben die Flags 2, 4 und 16 keine Bedeutung und werden ignoriert.
  • In comet_pdf haben die Flags 2 und 4 keine Bedeutung. Fehlende oder leere Absatzstile werden hier immer berechnet und verwendet.
  • Ab v4.1.6 R25777 wird die w2inline-Ersetzung immer und automatisch gemacht. Da w2inline ein Zeichenattribut ist und nur ausgewertet werden kann, wenn ein Absatzstil definiert ist, werden dabei auch in allen nicht-leeren Tabellenzellen die Absätze korrigiert. Änderungen an Ihrem TaggedText sind dafür nicht erforderlich.
  • Beginnt der eingefügte Text nicht mit %!, wird die Angaben von flags ignoriert!
#include "internal/text.h"
textmodel::insert (text)	// Einfügen am Anfang
textmodel::insert (text, 2)	// Einfügen an Position 2
textmodel::insert (text, kEnd)	// Anfügen
int main ()
{
    char		tt[256];
strcpy (tt, "%!TT"); strcat (tt, ""); strcat (tt, "laskjdh lajkdh kahljh äüö"); strcat (tt, "");
textmodel::insert (tt, kEnd); return 1; }

Parameter flags seit v4.0.5 R10000, 07. Feb 2016
Tabellenprüfung seit v4.0.5 R21000

priint:comet InDesign® Plug-Ins, comet_pdf
frame::insert
prefs::set_logstate

static int textmodel::append(
  char* str,
  int autoLoad = 1,
  int flags = 0)

Anfügen von Text. Als Eingabe darf TaggedText verwendet werden. In Textplatzhaltern sollte dieser Text aber keine w2-Tags enthalten. Mehr Informationen zu Platzhalter in Platzhaltern finden Sie hier.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
str String or char* - einzufügender Text (kann auch TaggedText sein)
autoLoad int 1 Sollen Platzhalter im TaggedText geladen werden? Wenn sie den Text aktuell zusammengestellt haben, können sie das Laden der Platzhalter auch abschalten.
0 Platzhalterinhalte nicht laden
1 Platzhalterinhalt laden
flags int 0 Hinweise zur Vorbereitung von TaggedText.

0 : Aus, verwende die Autokorrektur-Angabe aus dem Text-Prefix, z.B. %7TT
1 : Fehlende Absatzstile in leeren Tabellenzellen hinzufügen
2 : Fehlende Absatzstile in allen Tabellenzellen, in denen es fehlt, hinzufügen
4 : Leere Absatzstile (<ParaStyle:>) im gesamten Text vervollständigen
8 : Tabellendefinitionen prüfen
16 : Ersetze <in> Tags durch <w2inline> Tags (seit v4.1 R21213)
32 : Hyperlinks reparieren (seit v4.1 R22201)

Bitte beachten Sie:
  • Alle Werte ungleich 0 'überstimmen' die Autokorrektur-Angabe aus dem Text-Prefix
  • Für normalen Text ohne Prefix hat der Parameter keine Wirkung.
  • Ist die Option Zusatzmodule -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) nicht aktiviert, haben die Flags 2, 4 und 16 keine Bedeutung und werden ignoriert.
  • In comet_pdf haben die Flags 2 und 4 keine Bedeutung. Fehlende oder leere Absatzstile werden hier immer berechnet und verwendet.
  • Ab v4.1.6 R25777 wird die w2inline-Ersetzung immer und automatisch gemacht. Da w2inline ein Zeichenattribut ist und nur ausgewertet werden kann, wenn ein Absatzstil definiert ist, werden dabei auch in allen nicht-leeren Tabellenzellen die Absätze korrigiert. Änderungen an Ihrem TaggedText sind dafür nicht erforderlich.
  • Beginnt der eingefügte Text nicht mit %!, wird die Angaben von flags ignoriert!
#include "internal/text.h"
textmodel::append (text, 0) // Platzhalter nicht laden
int main ()
{
    char		tt[256];
strcpy (tt, "%!TT"); strcat (tt, ""); strcat (tt, "laskjdh lajkdh kahljh äüö"); strcat (tt, "");
textmodel::insert (tt, kEnd); return 1; }

Parameter flags seit v4.0.5 R10000, 07. Feb 2016
Table check since v4.0.5 R21000

priint:comet InDesign® Plug-Ins, comet_pdf
frame::append
prefs::set_logstate
comet.CTextModel.append

static int textmodel::replace(
  char* str,
  int position= 0,
  int delete_len= -1,
  int autoLoad = 1,
  int flags = 0)

Ersetzen von Text. Als Eingabe darf auch TaggedText verwendet werden. In Textplatzhaltern sollte dieser Text aber keine w2-Tags enthalten. Mehr Informationen zu Platzhalter in Platzhaltern finden Sie hier..

In Platzhalterskripten ist die Positionsangabe relativ zum Platzhalter, die Länge wird auf den Platzhalter beschränkt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
str String oder char* - einzufügender Text (kann auch TaggedText sein)
position int 0 scannerrelative Einfügeposition
>= 0 Einfügeposition
kEnd Anfügen
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
delete_len int kEnd Anzahl der zu löschenden Zeichen
kEnd Löschen bis zum Textende

Bei position = kSelection wird der Wert des Parameters ignoriert.
autoLoad int 1 Sollen Platzhalter im TaggedText geladen werden? Wenn sie den Text aktuell zusammengestellt haben, können sie das Laden der Platzhalter auch abschalten.
0 Platzhalterinhalte nicht laden
1 Platzhalterinhalt laden
flags int 0 Hinweise zur Vorbereitung von TaggedText.

0 : Aus, verwende die Autokorrektur-Angabe aus dem Text-Prefix, z.B. %7TT
1 : Fehlende Absatzstile in leeren Tabellenzellen hinzufügen
2 : Fehlende Absatzstile in allen Tabellenzellen, in denen es fehlt, hinzufügen
4 : Leere Absatzstile (<ParaStyle:>) im gesamten Text vervollständigen
8 : Tabellendefinitionen prüfen
16 : Ersetze <in> Tags durch <w2inline> Tags (seit v4.1 R21213)
32 : Hyperlinks reparieren (seit v4.1 R22201)

Bitte beachten Sie:
  • Alle Werte ungleich 0 'überstimmen' die Autokorrektur-Angabe aus dem Text-Prefix
  • Für normalen Text ohne Prefix hat der Parameter keine Wirkung.
  • Ist die Option Zusatzmodule -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) nicht aktiviert, haben die Flags 2, 4 und 16 keine Bedeutung und werden ignoriert.
  • In comet_pdf haben die Flags 2 und 4 keine Bedeutung. Fehlende oder leere Absatzstile werden hier immer berechnet und verwendet.
  • Ab v4.1.6 R25777 wird die w2inline-Ersetzung immer und automatisch gemacht. Da w2inline ein Zeichenattribut ist und nur ausgewertet werden kann, wenn ein Absatzstil definiert ist, werden dabei auch in allen nicht-leeren Tabellenzellen die Absätze korrigiert. Änderungen an Ihrem TaggedText sind dafür nicht erforderlich.
  • Beginnt der eingefügte Text nicht mit %!, wird die Angaben von flags ignoriert!
#include "internal/text.h"
textmodel::replace (text)				// Alles ersetzen
textmodel::replace (text, 2, kEnd)		// Ersetzen ab Position 2
textmodel::replace (text, 2, 3)			// Ersetzen von Position 2-5
textmodel::replace (text, kEnd)			// Anfügen
textmodel::replace (text, 2, 0)			// Einfügen an Position 2
textmodel::replace (text, kSelection)	// Aktuelle Textauswahl ersetzen

Parameter flags seit v4.0.5 R10000, 07. Feb 2016
Tabellenprüfung seit v4.0.5 R21000

priint:comet InDesign® Plug-Ins, comet_pdf
frame::replace
prefs::set_logstate
comet.CTextModel.replace

static int textmodel::replace_all(
  char* str,
  int position= 0,
  int delete_len= -1,
  int autoLoad = 1,
  int flags = 0)

Ersetzen von Text. Im Gegensatz zu textmodel::replace beziehen sich Textposition und -länge aber auch in Platzhalterskripten auf den gesamten Text. Beim Ersetzen von Text in Tabellenzellen wird die Textlänge automatisch auf die Textzelle beschränkt, in der sich position befindet.Die Position ist text-relativ, die Längenangabe bezieht sich auf den gesamten Text. Auch in Platzhalternskripten Durch die Funktion könnenTextplatzhalter, Tabellen und InlineRahmen verloren gehen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
str String oder char* - einzufügender Text (kann auch TaggedText sein)
position int 0 Einfügeposition
>= 0 Einfügeposition
kEnd Anfügen
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
delete_len int kEnd Anzahl der zu löschenden Zeichen
kEnd Löschen bis zum Textende
autoLoad int 1 Sollen Platzhalter im TaggedText geladen werden? Wenn sie den Text aktuell zusammengestellt haben, können sie das Laden der Platzhalter auch abschalten.
0 Platzhalterinhalte nicht laden
1 Platzhalterinhalt laden
flags int 0 Hinweise zur Vorbereitung von TaggedText.

0 : Aus, verwende die Autokorrektur-Angabe aus dem Text-Prefix, z.B. %7TT
1 : Fehlende Absatzstile in leeren Tabellenzellen hinzufügen
2 : Fehlende Absatzstile in allen Tabellenzellen, in denen es fehlt, hinzufügen
4 : Leere Absatzstile (<ParaStyle:>) im gesamten Text vervollständigen
8 : Tabellendefinitionen prüfen
16 : Ersetze <in> Tags durch <w2inline> Tags (seit v4.1 R21213)
32 : Hyperlinks reparieren (seit v4.1 R22201)

Bitte beachten Sie:
  • Alle Werte ungleich 0 'überstimmen' die Autokorrektur-Angabe aus dem Text-Prefix
  • Für normalen Text ohne Prefix hat der Parameter keine Wirkung.
  • Ist die Option Zusatzmodule -> Comet -> Integriertes Anlegen von Platzhaltern aus TaggedText (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) nicht aktiviert, haben die Flags 2, 4 und 16 keine Bedeutung und werden ignoriert.
  • In comet_pdf haben die Flags 2 und 4 keine Bedeutung. Fehlende oder leere Absatzstile werden hier immer berechnet und verwendet.
  • Ab v4.1.6 R25777 wird die w2inline-Ersetzung immer und automatisch gemacht. Da w2inline ein Zeichenattribut ist und nur ausgewertet werden kann, wenn ein Absatzstil definiert ist, werden dabei auch in allen nicht-leeren Tabellenzellen die Absätze korrigiert. Änderungen an Ihrem TaggedText sind dafür nicht erforderlich.
  • Beginnt der eingefügte Text nicht mit %!, wird die Angaben von flags ignoriert!
#include "internal/text.h"

Parameter flags seit v4.0.5 R10000, 07. Feb 2016
Tabellenprüfung seit v4.0.5 R21000

priint:comet InDesign® Plug-Ins, comet_pdf
frame::replace_all
prefs::set_logstate

static int textmodel::image(
  char* image_path,
  int align = 5,
  float boundingBox = 0.0,
  int pathindex = -2,
  char* pathname = 0,
  int flags = 0,
  int cliptoFrame = 0,
  float tolerance = 0.0,
  float minPathSize = 0.0,
  float inset = 0.0,
  int alphaIndex = -2,
  char* alphaChannel = 0 )

Platziere eine Datei als Hintergrundbild in einen Textrahmen. Synonym kann auch der Funktionsname textmodel::place_file verwendet werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
image_path String oder char* - Vollständiger Pfad auf die Datei, die in das Dokument eingefügt werden soll
align int kMiddle siehe Bildpositionen
boundingBox float 0.0 >0.0 : Bild wird bei Bedarf auf die angegebene Größe (in Punkten) verkleinert
0.0 : Bild in Oroginalgröße einsetzen
<0.0 : Bild auf die angegebene Größe skalieren (auch vergrößern!)
⇨ Photoshop-Bilder mit Freistellpfaden
pathindex int kIgnoreClipping 0-basierter Index des Freistellpfades
kIgnoreClipping : Freistellpfad unverändert lassen.
kClipPathByName : Verwende den Namen des Freistellpfades.
kResetClipping : Freistellpfad beim Einfügen des Bildes zurücksetzen.
>=0 : 0-basierter Pfadindex
pathname String der char* "" Name des Freistellpfades. Ist ein Index >=0 angegeben, wird der Name ignoriert.
flags int kAllowHolesFlag Parameter für die Art der Bildfreistellung. Die Werte können als Bitfeld addiert werden.

kInvertFlagInvert the resulting path by combining with a path equal to the bounds of the image.
kUseHighResFlagForce 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).
kAllowHolesFlagFor edge detection, do we remove the holes or leave them in.
kRestrictToFrameFlagFor 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
alphaIndex int kIgnoreClipping Alphakanal für den Import

kIgnoreClipping : Alphakanal unverändert lassen.
kClipPathByName : Der Alphakanal wird über seinen Namen identifiziert.
kResetClipping : Alphakanal beim Einsetzen des Bildes zurücksetzen
Wenn ein Bild mehrere Ebenen hat, hat der erste Alphakanal den Index 1; wenn es nur eine Hintergrundebene hat, den Index 0. Das liegt wohl daran, dass bei Bildern mit mehreren Ebenen deren Transparenz als Alphakanal. ausgewählt werden kann, und dann hat das den Index 0.
alphaChannel String oder char* 0 Alphakanal für den Import. Ist alphaIndex = -2 wird die Angabe ignoriert.
#include "internal/types.h"
#include "internal/text.h"
err_code = textmodel::image (path [, alignment[, size]]);

pathindex, pathname, flags, cliptoFrame, tolerance, minPathSize, inset seit Version 16. März 2006 (P/R38)

alphaIndex, alphaChannel seit Version 3.1 R1840, 30. April 2010

priint:comet InDesign® Plug-Ins

static int textmodel::excel_import(
  char* path,
  int pos,
  int delLength = 0)

Füge eine Excel-Tabelle in den Text ein.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
path String oder char* - Vollständiger Pfad auf eine Excel-Datei. Im übrigen dürfen an dieser Stelle auch Word-Dateien oder Bilder stehen.
pos int - Einfügeposition für die Tabelle

>= 0 : Textposition
> Textlänge : Anfügen
kEnd : Anfügen
kSelection : Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
delLength int 0 Anzahl der zu löschenden Zeichen
kEnd Löschen bis zum Textende
#include "internal/text.h"
err_code = textmodel::excel_import (path, pos, delLength);


priint:comet InDesign® Plug-Ins
frame::excel_import

static int textmodel::excel_update(
  char* path,
  int tindex,
  int min_row = 0,
  int max_row = -1,
  int min_col = 0,
  int max_col = -1,
  int pos = -1,
  int delLength = 0)

Aktualisieren einer Tabelle des Textes. Als Basis für die Aktualisierung wird die angegebene Excel-Datei verwendet. Ist die neue Tabelle größer, werden entsprechend Zeilen und Spalten angefügt. Als Formatierung für neu angelegte Zeilen und Spalten werden die Vorgängerzeilen und -spalten verwendet. Für neue Zeilen und Spalten kann die Formatierung der Originaltabelle momentan noch übernommen werden.
Die Zieltabelle wird über ihren 0-basierten Index angegeben. Existiert keine Originaltabelle, wird die Tabelle komplett neu eingefügt. In diesem Fall können alle Formatierungen der Originaltabelle übernommen werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
path String oder char* - Vollständiger Pfad auf eine Excel-Datei.
tindex int - 0-basierter Tabellenindex
min_row int 0 Erst ab dieser Zeile aktualisieren
max_row int kEnd Nur bis zu dieser Zeile aktualisieren
kEnd Bis zur letzten Zeile aktualisieren
min_col int 0 Erst ab dieser Spalte aktualisieren
max_col int kEnd Nur bis zu dieser Spalte aktualisieren
kEnd Bis zur letzten Spalte aktualisieren
pos int kEnd Existiert die Tabelle index noch nicht, wird an dieser Textposition eine neue Tabelle angelegt.
>= 0 Textposition
> Textlänge Anfügen kEnd Anfügen
kSelection Aktuelle Text- oder Zellenauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
delLength int 0 Anzahl der zu löschenden Zeichen
kEnd Löschen bis zum Textende
#include "internal/text.h"
err_code = textmodel::excel_update (path, index, pos, delLength);


priint:comet InDesign® Plug-Ins
frame::excel_update

static char* textmodel::get(
  char* result,
  int position = 0,
  int len = -1)

Obsolet Verwenden Sie bitte statt dessen die Funktion textmodel::gettext.

#include "internal/text.h"

Version 1.1.5

priint:comet InDesign® Plug-Ins

static char* textmodel::gettext(
  String str,
  int pos = 0,
  int len = -1,
  int fmt = 0,
  int showProgress = 0,
  int tmRelative = 0)

Hole den Text aus dem Dokument. Die Angaben von Position und Länge sind scannerrelativ. Wenn der Dokumenttext Unicode-Zeichen enthält, ist die Länge der Ergebnisses möglicherweise größer als die Textlänge im Dokument.

Der Export kann als reiner Text (kExportPlain) oder als Text mit Formatierungen erfolgen. Formatierungen werden als InDesign® TaggedText geschrieben. Das Format des TaggedText ist unabhängig von den Einstellungen des Exportdialoges und wird immer mit den folgenden Einstellungen gemacht :

Die Funktion benötigt die folgenden Includes

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

Der Text eines leeren Textplatzhalters ist nicht leer sondern ein unsichtbares Leerzeichen (<0x200B>). (Ein Platzhalter kann keinen leeren Text enthalten, dann wäre auch der Platzhalter weg.) Das showmessage im folgenden Skripttext wird also nie erreicht :

    textmodel::get (docText);
    if (strcmp (string::get (docText), "") == 0)
    {
        showmessage ("Leer");
    }


Der Dokumenttext muss in dieser Situation gegen das unsichtbare Leerzeichen (UTF8 = E2 80 8B, Unicode = 200B) geprüft werden :

    textmodel::get (docText);
    if (strcmp (strcmp (string::get (docText), "\xE2\x80\x8B") == 0)
    {
        showmessage ("Leer");
    }


Verwenden Sie für das Abholen des Dokumenttextes ein TaggedText-Format, wird das unsichtbare Leerzeichen Unicode-codiert :

    textmodel::get (docText, ..., kExportTT);
    if (strcmp (strcmp (string::get (docText), "<0x200B>") == 0)
    {
        showmessage ("Leer");
    }


Zum einfachen Vergleich der "Netto"-Strings können Sie auch strcmp mit netWeight = 1 verwenden.

Ist der Text mit schwebenden Rahmen verknüpft, die ebenfalls exportiert werden sollen, kann der Befehl textmodel::store_macro verwendet werden.

Textvariablen werden bei Exportformaten, die reinen Text exportieren (kExportPlain, ...) nicht ersetzt. Der exportierte Text enthält an den Stellen, an denen sich Variablen befinden, den von InDesign® verwendeten internen Zeichencode. Von den ab v3.3 R2883 eingeführten ~Plus~-Formaten werden die Variablen-Platzhalter durch den aktuell im Dokument angezeigten Text ersetzt.

Name Typ Default Beschreibung
Return char*   Inhalt. Der zurückgegebene Zeiger kann in Funktionen verwendet werden, die einen char*-String als Parameter erwarten.

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.

str String - Allokiertes String-Objekt
position int 0 Startposition
>= 0 Textposition
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
len int kEnd Anzahl der Zeichen, die geholt werden sollen
fmt int kExportPlain Exportformat

Achtung: [Ab v3.3 R2580 (20.07.2011)] Comet-Platzhalter sind ab diesem Release Bestandteil des normalen TaggedText-Import/Exports. Hier finden Sie weitere Informationen dazu.

Formatangaben mit dem Bezeichner Plus im Namen ersetzen zusätzlich alle automatischen Seitennummern, Absatznamen und Fußnoten-Vereise durch ihre aktuellen Werte.

comet_pdf unterstützt nur die Formate
  kExportPlain,
  kExportTT und
  kExportW2.
In allen anderen Fällen wird kExportW2 ausgegeben.

kExportPlain,
kExportPlusPlain,
kExportPlainWithTables

Exportiere den reinen unformatierten Text des Dokumentes. Zeichen mit einem Ascii-Code größer 127, die nicht gleichzeitig im erweiterten Ascii-Satz von Windows und Mac vorkommen, werden im Format <00AD> kodiert. Der Export entspricht dem Tag <text>. Mit der Angabe kExportPlainWithTables werden auch die Tabellen des Textes mit exportiert.

kExportHTML,
kExportPlusHTML,
kExportHTMLWithTables

Exportiere den reinen unformatierten Text des Dokumentes. Achtung: Das 'HTML' bezieht sich lediglich auf die Art der Zeichenkodierung, es wird kein HTML-Export gemacht. Verwenden Sie dazu die Formatangabe kExportHTMLWithStyles. Zeichen mit einem Ascii-Code größer 127, die nicht gleichzeitig im erweiterten Ascii-Satz von Windows und Mac vorkommen, werden im Format &#128; kodiert. Mit der Angabe kExportHTMLWithTables werden auch die Tabellen des Textes mit exportiert. Einfache Anführungszeichen im Text werden in diesen Formaten verdoppelt!

kExportPlainNoTypografics,
kExportPlusPlainNoTypografics,
kExportPlainWithTablesNoTypografics

Exportiere den reinen unformatierten Text des Dokumentes. Alle typografischen Anführungzeichen werden durch normale Anführungszeichen ersetzt. Der Export entspricht dem Tag <text_notypografics>. Mit der Angabe kExportPlainWithTablesNoTypografics werden auch die Tabellen des Textes mit exportiert.

kExportUnitext,
kExportPlusUnitext,
kExportUnitextWithTables

Exportiere den reinen unformatierten Text des Dokumentes. Alle Asciis größer 127 werden ersetzt durch eine Hexcodierung im Format \00fc (a-f klein geschrieben!). Der Export entspricht dem Tag <unitext>. Mit der Angabe kExportUnitextWithTables werden auch die Tabellen des Textes mit exportiert. Einfache Anführungszeichen im Text werden in diesen Formaten verdoppelt!

kExportXUnitext,
kExportPlusXUnitext,
kExportXUnitext
kExportXMLUnitext,
kExportPlusXMLUnitext,
kExportXMLUnitextWithTables

Exportiere den reinen unformatierten Text des Dokumentes. Alle Asciis größer 127 werden ersetzt durch eine Hexcodierung im Format <0x00FC> (A-F groß geschrieben!). Die XML-Versionen der Konstanten schreiben diese Werte in der Form &#x00FC;. Der Export entspricht dem Tag <xunitext> bzw. <xmlunitext>. Mit der Angabe kExportXUnitextWithTables werden auch die Tabellen des Textes mit exportiert. Einfache Anführungszeichen im Text werden in diesen Formaten verdoppelt!

kExportTagged

Der Text wird mit allen Formatierungen als InDesign® TaggedText exportiert. Der Export entspricht dem Tag <taggedtext>.

kExportTT

Der Text wird mit allen Formatierungen als InDesign® TaggedText exportiert. Die Definitionen der Absatz- und Zeichenstile werden nicht mit exportiert. Der Export entspricht dem Tag <tttext>.

kExportW2

Der Text wird mit allen Formatierungen als InDesign® TaggedText exportiert. Die Definitionen der Absatz- und Zeichenstile werden nicht mit exportiert. Zusätzlich zum Export über kExportTT werden auch alle Textplatzhalter exportiert. Diese Einstellung darf nicht verwendet werden, um den Text eines Textplatzhalter zu exportieren. Der Export entspricht dem Tag <w2text>.

[Seit v4.3 R36400] Aus den Exporten kExportTagged, kExportTT und kExportW2 werden automatisch alle <BookmarkDefn:...>'s entfernt. Hintergrund ist, dass InDesign beim Import von TaggedText alle enthaltenen Lesezeichen, eben diese <BookmarkDefn:...>'s, erneut (und ohne Zielanker) anlegt. Wenn Sie also z.B. vier Lesezeichen im Dokument haben und nur acht mal irgendeinen Text dieses Dokumentes als TaggedText exportieren und wieder importieren, dann haben Sie schon 1.024 Lesezeichen (von denen 1.020 auch noch ins Nirwana zeigen) im Dokument.

kExportHTMLWithStyles

[Ab v4.0.5 R8400] Der Text wird als HTML im Charset utf-8 exportiert. Sonderzeichen in Stilnamen werden in der Form 0x00FF kodiert. Das Ergebnis enthält nur den <body>-Inhalt des Exportes, CSS-Stildefinitionen und umgebende Tags werden nicht in das Ergebis geschrieben.
Der Export entspricht dem Tag <xhmlt>.
Das Format wird von comet_pdf nicht unterstützt!

kExportHTMLWithStylesAndCSS

[Ab v4.0.5 R8400] Wie kExportHTMLWithStyles, aber der Export enthält ein vollständiges HTML inklusive aller nötigen CSS-Stile.

Für weitere Optionen beim HTML-Export verwenden Sie bitte die Funktion html::export_frame.

kExportRTF

RTF-formatierte Ausgabe der Textes
Das Format wird von comet_pdf nicht unterstützt!

showProgress int false Soll für den Export ein Progressbalken gezeigt werden?
tmRelative int 0 Sind die Angaben von Position und Länge relativ zum Platzhalter oder zum Textmodel?

0 : Platzhalter
1 : Textmodell
#include "internal/types.h"
#include "internal/text.h"

Hole den gesamten Text des aktuellen Textmodelles und zeige ihn in einer Nachricht.Da showmessage auf Texte der maximalen Länge 3000 beschränkt ist, darf der aktuelle Dokumenttext auch nicht länger als 3000 Zeichen sein

String	str = string::alloc ();
textmodel::gettext (str, 0, -1); showmessage (string::get (str));
string::release (str);

Zeige die aktuelle Textauswahl in einem Dialog.

int main ()
{
    String			str	= string::alloc ();
    int 			start, len;
textmodel::selection (&start, &len); if (len > 0) textmodel::gettext (str, start, len);
showmessage ("%s", string::get (str));
return 0; }

Da gettext einen char*-Pointer auf den erhaltenen Text liefert, geht das obige Beispiel auch etwas kürzer.

String	str = string::alloc ();
showmessage (textmodel::gettext (str));
string::release (str);

Mit Hilfe des Schlüsselwortes kExportPlainNoTypografics können typografische Anführungszeiuchen sofort ersetzt werden.

#include "internal/types.h"
#include "internal/text.h"
int main () { String cstr = string::alloc (); char str[500];
strcpy (str, textmodel::gettext (cstr,   0, kEnd,   kExportPlainNoTypografics));
showmessage ("1 : %s", str);
return 0; }

Ersetzen der doppelten typografischen Anführungszeichen im Ergebnisstring von gettext.

#include "internal/types.h"
int main () { String cstr = string::alloc (); char str[500];
strcpy (str, textmodel::gettext (cstr)); if (system::os () == kMacOS) { //text::replace_all (str, "\xe2", "'"); //text::replace_all (str, "\xd4", "'"); text::replace_all (str, "\xe3", "\""); text::replace_all (str, "\xd2", "\""); } showmessage (str); return 0; }

Version 1.1.5
Textfortmatierungen (ftm, flags, showProgress) ab Version 1.2 (29. Juni 2005)
Parameter tmRelative since version 2.1 R668, 16. April 2008
~Plus~-Formate seit v3.3 R2883, 20.04.2012

priint:comet InDesign® Plug-Ins, comet_pdf nur Textformat kExportPlain)

text::replace_typografics
comet.CTextModel.getText

static int textmodel::fulllength(int includeTables = 0)

Ermittle die Gesamtlänge des aktuellen Textes (Zeichenzahl) oder des Textes des aktuellen Rahmens.

Name Typ Default Beschreibung
Return int   0 oder Textlänge (Zeichenzahl) ohne abschließendes 0-Byte.
includeTables int 0 0 : nur (Haupt)Text
1 : Text inkl. aller Tabelleninhalte
#include "internal/text.h"

Version 1.1.4

priint:comet InDesign® Plug-Ins
length
available
frame::textlength
comet.CTextModel.getLength

static int textmodel::store(
  int start,
  int len,
  DBC dbc,
  char* attr,
  char* table,
  long ID,
  long egositic = 0,
  char* pageItemName = 0)

Schreibe den Inhalt des aktuellen Textmodelles in die Datenbank. Alle Formatierungen, Platzhalter, Tabellen und schwebenden Rahmen des Textes werden in die Datenbank übertragen. Der Befehl ist ich füßr den Export in Datenbanken implementiert. Für eine universelle Anwendung kann der Befehl textmodel::store_macro verwendet werden. Für den einfachen Export formatierten Textes ohne schwebende Rahmen kann der Befehl textmodel::gettext mit dem Parameter kExportTagged oder kExportTT verwendet werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
start int - Startposition, ab der der Text gesichert werden soll
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
>= 0 Textposition. Werte größer als die Textlänge werden auf das Textende gesetzt
sonst : Textanfang
len int - Länge des Textes, der gesichert werden soll
kEnd Kopieren bis zum Textende <=0 : Sichern eines leeren Textes
Ist start == kSelection hat die Längenangabe keine Bedeutung.
dbc DBC - Zieldatenbank, siehe sql::dbconnection
attr String oder char* - Attribut der Zieltabelle, in die das Ergebniss geschrieben werden soll. Das Attribut muss vom Typ BLOB sein und darf nicht TEXT heißen.
table String oder char* - Name der Zieltabelle. Ist der Tabellenname leer (0 oder ""), wird als Zieltabelle die Datenbanktabelle pageitems verwendet und die Daten in pageitems.data abgelegt. In pageitems.preview wird ein Screenshot des Macros abgelegt.
ID int - ID in der Zieltabelle
egoistic int 1 [Ab Version 1.34 R 343] Seit dieser Version können auch Textteile aus verlinkten Rahmen im Template abgelegt werden

1 : Nur Textinhalte des eigenen Rahmens
0 : Verlinkte Rahmen berücksichtigen
pageItemName String oder char* 0 Name des Eintrages. Der Name wird nur benutzt, wenn table leer oder gleich pageitems ist.
#include "internal/types.h"
#include "internal/text.h"

Sichere den aktuellen Text ohne seine beiden ersten und beiden letzten Zeichen in eine Datenbanktabelle. Der Datensatz wird bei Bedarf neu angelegt.

/*
create table w2test2
(
 	ID		number;
 	TXT		BLOB
);
*/
int main () { DBC dbc = sql::connection (); int result = 0;
if (!dbc || !textmodel::available ()) { showmessage ("Einloggen und Textauswahl setzen"); return 1; }
result = textmodel::store (   2,   textmodel::fulllength ()-4,   dbc,   "TXT", "w2test2",   3,   1); if (result == 0) showmessage ("Text gesichert"); else showmessage ("Fehler %d", result); return 0; }

Version 1.1.4
egoistic und pageItemName seit Version 1.4 R343, 31. Mai 2007

priint:comet InDesign® Plug-Ins
textmodel::restore
frame::store_text
frame::restore_text

static int textmodel::restore(
  int start,
  int len,
  DBC dbc,
  char* attr,
  char* table,
  int ID,
  int autoLoad = 0,
  int* inserted = 0)

Ersetze den Text des aktuellen Textmodelles durch einen datenbankgesicherten Inhalt. Alle Formatierungen und Platzhalter des Textes werden aus der Datenbank übernommen. Verwendete Referenzen (Formate, Farben, ...) werden, wenn sie noch nicht definiert sind, automatisch in das Zieldokument eingetragen. Sind Formate oder Farben bereits definiert, werden die Vorgaben des Zieldokumentes verwendet.

Als Template für den eingefügten Text können auch die in der Palette 'Templates' gesicherten Einträge verwendet werden. Einzige Voraussetzung ist, dass die entsprechenden Templates genau einen Textrahmen enthalten.

[Ab v3.3 R3228, 26.10.2012] ACHTUNG: Mit diesem Release ist das Verhalten der Funktion etwas geändert worden. Die Positionsangaben der Funktion sind ja textmodel-relativ und nicht wie sonst immer, platzhalter-relativ. Das ist natürlich weiter so. ABER : Wenn innerhalb des aktiven Platzhalters eingefügt wird, wird die Längenangabe platzhalter-relativ ausgewertet. kEnd ist in diesem Fall also das Ende des Platzhalters und nicht mehr, wie bisher, das Textende.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
start int - Startposition, ab der bestehender Text überschrieben werden soll. Die Positionsangabe ist global zum gesamten Text und nicht relativ zum Platzhalter.
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
>= 0 Textposition. Werte größer als die Textlänge werden auf das Textende gesetzt
sonst : Textanfang
len int - Länge des Textes, der überschrieben werden soll
kEnd überschreiben bis zum Textende <=0 : Einfügen bei start
Ist start == kSelection hat die Längenangabe keine Bedeutung.
dbc DBC - Datenbank, siehe sql::dbconnection
attr String oder char* - Attribut der Zieltabelle, in die das Ergebniss geschrieben werden soll. Das Attribut muss vom Typ BLOB sein und darf nicht TEXT heißen.
table String oder char* - Name der Zieltabelle
ID int - ID in der Zieltabelle.
frameRef ItemRef 0 0 - Ersetze den Text, in dem die aktuelle Textauswahl liegt oder den Text des ersten ausgewählten Rahmens.\br sonst - Text des gegebenen Rahmens ersetzen
autoLoad int 0 Sollen Platzhalter, die sich im eingefügten Text befinden, neu geladen werden?
0 : Platzhalter nicht laden
sonst :Platzhalter laden
inserted int* 0 Wieviele Zeichen wurden in den Text eingefügt? Die Variable hat nur dann einen sinnvollen Wert, wenn die Funktion fehlerfrei beendet wurde.
#include "internal/types.h"
#include "internal/text.h"

Ersetze die aktuelle Textauswahl durch den unter store gesicherten Text.

int main ()
{
    int       result	= 0;
    result = frame::restore_text (
     	gFrame,
     	-2,
     	3,
     	sql::dbconnection (),
     	"TXT", "w2test2",
     	3);
    if (result != 0) showmessage ("Fehler %d", result);
    return 0;
}

Das Beispiel zeigt ein Palettenskript, mit dem die aktuelle Auswahl des Dokumentes durch den Text ersetzt wird, der im Template mit der ID 20 gespeichert ist. Das Palettenskript wird an die Palette 'Templates' angefügt.

rem
rem Panel action for Templates
rem
begin delete from Actions where id = 802; insert into Actions (   id,   name,   classid,   typeid,   statement,   sequenceNr,   domainid ) values (   802,   'Template als Text anfügen',   8, -- classID, 8 for 'Pageitems' panel   0, -- typeID, unused for panelactions   '#include "internal/text.h"
  int main ()   {   DBC dbc = sql::dbconnection ();   int result = 0;
  if (!dbc || !textmodel::available ())   {   showmessage ("Einloggen und Textauswahl setzen");   return 1;   }
  result = textmodel::restore (   kSelection,   0,   dbc,   "data",   "pageitems",   20,   1);   if (result != 0) showmessage ("%s", serror (result));
  return 0;   }',   1, -- sequenceNr   0 -- domainID ); end; /

Version 1.1.4
Die Parameter autoLoad und inserted sind seit Version 1.1.7, Januar 2005, implementiert.

priint:comet InDesign® Plug-Ins
textmodel::store
frame::store_text
frame::restore_text
frame::insert_macro
textmodel::store_macro
frame::store_macro
v3.3 R3228
26. 10. 2012 Der Parameter len wird platzhalter-relativ (und nicht textmodel-relativ) verwendet
wenn \span[src]{insertion} im aktuellen Skriptplazthalter liegt

static int textmodel::store_macro(
  int start,
  int len,
  int ID,
  int* macroID = 0,
  DBC dbc = 0,
  char* table = 0,
  char* data_attr = 0,
  char* prv_attr = 0)

Schreibe den Inhalt des aktuellen Textmodelles in die Datenbank. Alle Formatierungen, Platzhalter, Tabellen und schwebenden Rahmen des Textes werden gesichert. Für den einfachen Export formatierten Textes ohne schwebende Rahmen kann der Befehl textmodel::gettext mit dem Parameter kExportTagged oder kExportTT verwendet werden.

Um einen mit dieser Funktion gesicherten Text ins Dokument einzufügen, verwenden sie die Funktionen frame::insert_macro oder textmodel::insert_macro.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
start int - Startposition, ab der der Text gesichert werden soll
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
>= 0 Textposition. Werte größer als die Textlänge werden auf das Textende gesetzt
sonst : Textanfang
len int - Länge des Textes, der gesichert werden soll
kEnd Kopieren bis zum Textende <=0 : Sichern eines leeren Textes
Ist start == kSelection hat die Längenangabe keine Bedeutung.
ID int - ID in der Zieltabelle. Der Datensatz wird bei Bedarf angelegt.
<= 0 : Ermittle selbssständig die nächste freie ID
macroID int* 0 ID des angelegten oder geänderten Macros. Im Fehlerfall (return != 0) enthält die Variable den Wert 0.
dbc DBC 0 Zieldatenbank. Ist die Angabe leer, wird die aktuelle Datenverbindung verwendet.
table String oder char* 0 Name der Zieltabelle. Der Name ist nur bei Exporten in Datenbanken relevant. Bei Exporten in XML-Dateien und auf SOAP-Server werden die Einträge in die Datei pageitems.xml eingetragen und die Daten und das Preview in Unterordnern des Datenordners pageitems abgelegt.
Ist der Tabellenname leer (0 oder ""), wird als Zieltabelle die Datenbanktabelle pageitems verwendet und die Daten in pageitems.data abgelegt. In pageitems.preview wird ein Screenshot des Macros abgelegt.
data_attr String oder char* 0 Das Attribut ist nur beim Export in Datenbanken (nicht für XML oder SOAP) und einem Tabellennamen ungleich 0, "" oder "pageitems" relevant und gibt das Attribut der Zieltabelle an, in das das Ergebniss geschrieben werden soll. Das Attribut muss vom Typ BLOB sein und darf nicht TEXT heißen..
prv_attr String oder char* 0 Das Attribut ist nur beim Export in Datenbanken (nicht für XML oder SOAP) und einem Tabellennamen ungleich 0, "" oder "pageitems" relevant und gibt das Attribut der Zieltabelle an, in das der Screenshot des Ergebniss geschrieben werden soll. Das Attribut muss vom Typ BLOB sein und darf nicht TEXT heißen..
useOldStyle int 1 [Ab Version 1.34 R 343] Seit dieser Version werden auch Textteile aus verlinkten Rahmen im Template abgelegt.
1 : Nur Textinhalte des eigenen Rahmens 0 : Verlinkte Rahmen berücksichtigen
macroName String oder char* 0 Name des Eintrages. Der Name wird nur benutzt, wenn table leer oder gleich pageitems ist.
#include "internal/types.h"
#include "internal/text.h"

Sichere die aktuelle Textauswahl in einem neuen Template.

int main ()
{
    int		res;
    int		macroID;
res = textmodel::store_macro (   -2, 0, // Aktuelle Textauswahl   -1, // Neues Template anlegen   ¯oID); // ID des angelegten Macros
if (res == 0 && macroID != 0)   showmessage ("Template %d angelegt", macroID); else   showmessage ("Fehler %d", res);
return 0; }

Version 1.2.1 (11. August 2005)
useOldStyle und macroName seit Version 1.4 R343, 31. Mai 2007

priint:comet InDesign® Plug-Ins
textmodel::insert_macro
textmodel::restore
frame::store_macro
frame::insert_macro

static int textmodel::insert_macro(
  int start,
  int len,
  int ID,
  int autoLoad = 0,
  int* inserted_len = 0,
  DBC dbc = 0,
  char* table = 0,
  char* data_attr = 0)

Füge ein mit frame::store_macro oder textmodel::store_macro Textstück in den aktuellen Dokumenttext ein. Der Text wird mit allen Formatierungen eingefügt. Fehlende Absatz- und Zeichenstile werden angelegt. Schwebende Rahmen werden automatisch importiert und verknüpft. Optional können die Platzhalter des eingefügten Textes neu geladen werden. Es werden alle Platzhalter des eingefügten Textes und alle Text- und Rahmenplatzhalter der verknüpften Rahmen geladen.

[Ab v3.3 R3228, 26.10.2012] ACHTUNG: Mit diesem Release ist das Verhalten der Funktion etwas geändert worden. Die Positionsangaben der Funktion sind ja textmodel-relativ und nicht wie sonst immer, platzhalter-relativ. Das ist natürlich weiter so. ABER : Wenn innerhalb des aktiven Platzhalters eingefügt wird, wird die Längenangabe platzhalter-relativ ausgewertet. kEnd ist in diesem Fall also das Ende des Platzhalters und nicht mehr, wie bisher, das Textende.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
start int - Startposition, ab an der Text eingefügt werden soll
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
>= 0 Textposition. Werte größer als die Textlänge werden auf das Textende gesetzt
sonst : Textanfang
len int - Länge des Textes, der vor dem Einfügen entfernt werden soll. Beim Löschen des Textes werden alle schwebenden Rahmen, die mit Teile des gelöschten Textes verknüpft sind ebenfalls gelöscht.
kEnd Löschen bis zum Textende <=0 : Nichts eines leeren Textes
Ist start == kSelection hat die Längenangabe keine Bedeutung.
ID int - ID des Texttemplates. Bei XML-Daten und unter SOAP muss sich der gesuchte Eintrag in der Datei pageitems.xml befinden. Die nötigen Importdaten werden aus der Datei pageitems/data/ID.indd des XMLDatenordners geholt (XML) oder befinden sich unter der ID pageitems/data/ID.indd auf dem SOAP-Server.
Bei Datenbanken sind Tabelle und Spalte frei wählbar. Ist nichts anderes angegeben, wird automatisch pageitems.data verwendet.
URL[autoLoad]{TaggedText.html#Auto_Load} int 0 Sollen nach dem Einfügen des Textes die Platzhalter im Text neu geladen werden?
0 : nicht laden
sonst : Laden
inserted_len int* 0 Wieviele Zeichen wurden in den Text eingefügt? Die Variable hat nur dann einen sinnvollen Wert, wenn die Funktion fehlerfrei beendet wurde.
dbc DBC 0 Zieldatenbank. Ist die Angabe leer, wird die aktuelle Datenverbindung verwendet.
table String oder char* 0 Name der Zieltabelle. Der Name ist nur bei Exporten in Datenbanken relevant. Bei Exporten in XML-Dateien und auf SOAP-Server werden die Einträge in die Datei pageitems.xml eingetragen und die Daten und das Preview in Unterordnern des Datenordners pageitems abgelegt.
Ist der Tabellenname leer (0 oder ""), wird als Zieltabelle die Datenbanktabelle pageitems verwendet und die Daten in pageitems.data abgelegt. In pageitems.preview wird ein Screenshot des Macros abgelegt.
data_attr String oder char* 0 Das Attribut ist nur beim Import aus Datenbanken (nicht für XML oder SOAP) und einem Tabellennamen ungleich 0, "" oder "pageitems" relevant und gibt das Attribut der Zieltabelle an, aus der der Text geholt werden soll. Das Attribut muss vom Typ BLOB sein und darf nicht TEXT heißen..
#include "internal/types.h"
#include "internal/text.h"

Füge ein Textmacro ein.

int main ()
{
    int		result;
    int		inserted;
result = textmodel::insert_macro (   -2, 0, // Aktuelle Textauswahl   23, // Texttemplate-ID   1, // Platzhalter laden   &inserted); // Anzahl neuer Zeichen
if (result == 0)   showmessage ("%d Zeichen eingefügt", inserted); else   showmessage ("Fehler : %s.", serror (result));
return 0; }

Version 1.2.1 (11. August 2005)
v3.3 R3228, 26. 10. 2012 Der Parameter len wird platzhalter-relativ (und nicht textmodel-relativ) verwendet, wenn insertion im aktuellen Skriptplazthalter liegt

priint:comet InDesign® Plug-Ins
frame::insert_macro
textmodel::store_macro
frame::store_macro

static int (
  ItemRef frame,
  int pos,
  int align,
  float alignOffset,
  int linePos,
  float lineOffset,
  int flag = 1)

DEPRECATED! Verwenden Sie dafür die Funktionen frame::inline_, frame::inline_above, frame::anchor und frame::get_anchor.

Name Typ Default Beschreibung
Return int   -1199
#include "internal/text.h"

Verwenden Sie dafür die Funktionen frame::inline_, frame::inline_above, frame::anchor und frame::get_anchor.

static int (int pos)

DEPRECATED! Verwenden Sie dafür die Funktionen frame::isinline und frame::get_anchor.

Name Typ Default Beschreibung
Return int   0
#include "internal/text.h"

Verwenden Sie dafür die Funktionen frame::isinline und frame::get_anchor.

static int textmodel::selection(
  int* selStart,
  int* selLen = 0,
  ItemRef textFrame = 0,
  ItemList frames = 0,
  Table table = 0,
  int* leftCol = 0,
  int* topRow = 0,
  int* rightCol = 0,
  int* bottomRow = 0)

Die Funktion liefert eine Beschreibung der Auswahl des aktuellen Dokumentes. Die Auswahl mehrerer Tabellenzellen wird zur Zeit noch nicht unterstützt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
selStart int* - Anfang der Textauswahl. Ist die Textauswahl nicht zu ermitteln, ist der Rückgabewert kEnd.
selLen int* 0 Länge der Textauswahl. Ist die Textauswahl nicht zu ermitteln, ist der Rückgabewert 0.
textFrame Item 0 Rahmen der Textauswahl. Ist keine Textauswahl gesetzt, ist der Inhalt der Variable undefiniert (item::defined). Die Variable darf 0 sein, aber wenn sie einen Wert enthält, muss sie auch allokiert sein (item::alloc).
frames ItemList 0 Liste der ausgewählten Rahmen. Ist eine Textauswahl gesetzt, ist das erste (und einzige) Element dieser Liste gleich textFrame. Die Variable darf 0 sein, aber wenn sie einen Wert enthält, muss sie auch allokiert sein (itemlist::alloc).
table Table 0 Tabelle, in der die Textauswahl steht. Ist kein Tabellentext ausgewählt, ist der Wert der Variable undefiniert (table::defined). Die Variable darf 0 sein, aber wenn sie einen Wert enthält, muss sie auch allokiert sein (table::alloc).
leftCol int 0 Spaltennummer (0-basiert) einer Tabellentextauswahl. Ist kein Tabellentext ausgewählt, ist der Wert gleich -1.
topRow int 0 Zeilennummer (0-basiert) einer Tabellentextauswahl. Ist kein Tabellentext ausgewählt, ist der Wert gleich -1.
rightCol int 0 Erste nicht ausgewählte Spalte einer Tabelle (oder -1, wenn keine Tabellenzellen/kein Tabellentext ausgewählt ist)
bottomRow int 0 Erste nicht ausgewählte Zeile einer Tabelle (oder -1, wenn keine Tabellenzellen/kein Tabellentext ausgewählt ist)
#include "internal/types.h"
#include "internal/text.h"

Zeige die aktuelle Textauswahl in einem Dialog.

int main ()
{
    String		str	= string::alloc ();
    int 		start, len;
textmodel::selection (&start, &len); if (len > 0) textmodel::gettext (str, start, len);
showmessage ("%s", string::get (str));
return 0; }

Beschreibung der aktuellen Dokumentauswahl.

int main ()
{
    int			start, len;
    ItemRef		textFrame	= item::alloc ();
    ItemList	frames		= itemlist::alloc ();
    Table		tb			= table::alloc ();
    int			l, t, r, b;
if (textmodel::selection (   &start,   &len,   textFrame,   frames,   tb,   &l, &t, &r, &b) == 0) { char m[1000];
if (item::defined (textFrame)) { if (table::defined (tb))   showmessage ("Text: %d-%d, Zelle %d, %d",   start, start+len, l, t); else   showmessage ("Textauswahl : %d-%d",   start, start+len); } else { showmessage ("%d Rahmen ausgewählt",   itemlist::length (frames)); } } else { showmessage ("Keine Auswahl im Dokument"); }
item::release (textFrame); itemlist::release (frames); table::release (tb);
return 0; }

Das Beispiel ermittelt den aktuell im Text ausgewählten Textplatzhalter. (von Martin Lucke)

#include "internal/types.h" 
#include "internal/text.h"
int main () { ItemRef txtframe = item::alloc (); LinkList lli = linklist::alloc (1); Link lk; int start, len, re;
textmodel::selection (&start, &len);
if(start >= 0) { re = textmodel::get_frame(start, txtframe); if (re >= 0) { linklist::text_collect(lli, txtframe, start, 1); if (linklist::length(lli)) { lk = linklist::first(lli); showmessage("Platzhalter gefunden!\n"); } else showerror("Sie haben keinen Platzhalter ausgewählt!"); } else showerror( serror (re)); } else showerror("Sie haben keinen Text ausgewählt!"); linklist::release(lli); item::release(txtframe);
return 0; }

Die Parameter ab textFrame sind neu seit Version 1.2 (21. Juli 2005)

priint:comet InDesign® Plug-Ins
comet.host.getSelection

static int textmodel::clear_placeholders(
  int startPos,
  int len = -1,
  ItemRef frameRef = 0)

Die Anweisung entfernt aus einem angegebenen Textteil alle Platzhalter.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
startPos int - Startposition
kSelection : Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
len int kEnd Länge des Textes, in dem die Platzhalter entfernt werden sollen

kEnd Textende
kTotalEnd Textende inkl. aller Tabellenspalten
frameRef ItemRef 0 Textrahmen des Textes

0 : aktueller Skriptrahmen
#include "internal/text.h"

Entferne aller Platzhalter aus einer Tabellenzeile (hier die 5. Zeile einer 4-spaltigen Tabelle).

#include "internal/table.h"
#include "internal/text.h"
int main () { Table T = table::alloc (); int err; int t1, tmp, t2;
if (!T) return 0; if (table::get (T, 0, 0) != 0) { showmessage ("Keine Tabelle im Text"); table::release (T); return 0; }
table::get_textpos (T, 0, 4, &t1, &tmp); table::get_textpos (T, 3, 4, &tmp, &t2); t2 = tmp+t2; textmodel::clear_placeholders (t1, t2-t1);
return 0; }

Version 1.3.3 (P/R 56)
frameRef seit v3.3 R3084, 17.07.2012

priint:comet InDesign® Plug-Ins

static int textmodel::get_linenr(
  ItemRef frameRef,
  int textPos,
  int* lineStart = 0,
  int* lineLen = 0,
  int* endsWithHyphen = 0,
  int* lineStart_prev = 0,
  int* lineLen_prev = 0,
  int* endsWithHyphen_prev = 0)

Zeilennummer einer Textposition. Die Funktion ermittelt aus einer gegebenen Textposition die (1-basierte) Zeilennummer dieser Textstelle im Textmodell. Optional können Zeilenanfang und Zeilenlänge ermittelt werden.

Textpositionen beziehen sich immer auf den Originaltext des Dokumentes. Die durch den Umbruch eingefügten Zeilentrenner werden bei diesen Angaben natürlich ignoriert. Das heißt aber leider auch, dass die Textposition am Zeilenumbruch zweimal vergeben ist und nicht geklärt werden kann, ob die alte oder die neue Zeile gemeint ist. Die Funktion get_linenr verwendet in diesem Fall immer die neue Zeile. Die Werte der Vorgängerzeile können in den optionalen Parmentern ~_prev erfragt werden. Die ~_prev-Werte werden nur an den doppelt verwendeten Textpositionen gesetzt.

Name Typ Default Beschreibung
Return int   1-basierte Zeilennummer oder 0 im Fehlerfall
frameRef ItemRef - gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
textPos int - Textposition, dessen Zeile ermittelt werden soll. Textpositionen innerhalb einer Tabellenzeile berechnen die Zeilennummer innerhalb der Tabellenzelle. Enthält der Text die Textposition nicht, gibt die Funktion 0 zurück.
kSelection : Anfang der aktuellen Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
lineStart int* 0 Zeilenanfang.
lineLen int* 0 Zeilenlänge.
endsWithHyphen int* 0 Endet die Zeile mit einem Trennzeichen (-)?
0 : nein
1 : ja, die Zeile endet mit einem Trennzeichen
lineStart_prev int* 0 >= 0 : Zeilenanfang der vorangegangenen und automatisch umgebrochenen Zeile.

0 : kein automatischer Zeilenumbruch an der Stelle textPos
lineLen_prev int* 0 > 0 : Zeilenlänge der vorangegangenen und automatisch umgebrochenen Zeile.

-1 : kein automatischer Zeilenumbruch an der Stelle textPos
endsWithHyphen_prev int* 0 Endet die vorangegangene Zeile mit einem Trennzeichen (-)?
0 : nein
1 : ja, die Zeile endet mit einem Trennzeichen
#include "internal/text.h"

In welcher Zeile befindet sich der Textcursor?

#include "internal/text.h"
int main () { int a, b, h, b1; int lnr = textmodel::get_linenr (0, kSelection, &a, &b, &h, 0, &b1, 0);
if (b1 >= 0) { "small">showmessage ("Zeile %d : %d - %d\nUmbruch : Ja\nTrenner : %d", lnr, a, a+b, h); } else { "small">showmessage ("Zeile %d : %d - %d\nUmbruch : Nein\nTrenner : %d", lnr, a, a+b, h); }
return 0; }

In einer Schleife werden alle Zeilen eines Textes erfragt. Achten Sie darauf, die Anweisung x = func in der while-Schleife in Klammern zu setzen. Sonst wird die Zuweisung als boolscher Ausdruck gewertet, der immer wahr ist und damit auch > 0, also eine Endlosschleife produziert.

int main ()
{
    int		lineNr, lineLen, hyphend;
    int		lineStart = 0;
while ((lineNr = textmodel::get_linenr (0,   lineStart, &lineStart, &lineLen, &hyphend)) > 0) { showmessage ("Zeile %d : %d - %d",   lineNr, lineStart, lineStart+lineLen); lineStart += lineLen; }
return 0; }

Zähle die automatischen Zeilenumrüche eines Textes.

int main ()
{
    int 	l;
    int 	a1 		= 0, b1, b2;
    int 	aum		= 0;
while (textmodel::get_linenr (0, a1, &a1, &b1, 0, 0, &b2, 0)) { if (b2 >= 0) aum = aum+1; a1 = a1+b1; }
showmessage ("Automatische Zeilenumbrüche : %d", aum);
return 0; }

Alle Zeilenumbrüche, die auf "* " enden, sollen durch ein Softreturn ersetzt werden. Endet ein Absatz (normal oder mit Softreturn) auf "* ", soll nur das "* " entfernt werden.

int main ()
{
    int     	lineNr, lineLen, hyphend;
    int     	lineStart 	= 0;
    int     	chkPos;
    String  	str     = string::alloc ();
    char	*	tmp;
while ((lineNr = textmodel::get_linenr (   0, lineStart,   &lineStart, &lineLen, &hyphend)) > 0) { if (lineLen > 2 && !hyphend) { chkPos = lineStart+lineLen-3;
textmodel::gettext (str, chkPos, 3); tmp = string::get (str);
if (tmp[1] == '*' && tmp [2] == ' ') { // Zeilenumbruch textmodel::replace_all ("\n", chkPos+1, 2, 0); lineLen = lineLen - 1; } else if (strcmp (tmp, "* \r") == 0 // Absatzende   || strcmp (tmp, "* \n") == 0)// Softreturn { textmodel::replace_all ("", chkPos, 2, 0); lineLen = lineLen - 2; } }
// next line lineStart += lineLen; } return 0; }

Version 1.3.4 (P/R 94)

priint:comet InDesign® Plug-Ins
coordinates

static int textmodel::coordinates(
  ItemRef frameRef,
  int textPos,
  float* x = 0,
  float* y = 0,
  float* lineHeight = 0)

Ermittle die Koordinaten eines Textzeichens. Als Textkoordinaten werden die linke Seite des Zeichenrahmens und die Position der Grundlinie des Zeichens zurückgegeben. Die Angaben erfolgen in Punkten relativ zur linken oberen Ecke des Textrahmens. Die Zeichen 'a' und 'q' haben also, wenn sie auf auf der gleichen Zeile stehen, auch die gleiche y-Position. Befindet sich Textposition nicht im sichtbaren Rahmenbereich, kann die Zeichenposition nicht berechnet werden. Die Funktion gibt dann als Zeichenposition (0.0, 0.0) an.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
textPos int - Gewünschte Textposition

kEnd Textende
kSelection Beginn der aktuellen Textauswahl.

Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
x float* 0 Rückgabe der linken Seite des Zeichenrahmens in Punkten relativ zum Textrahmen.
y float* 0 Rückgabe der Zeilengrundlinie des Zeichens relativ zum Textrahmen.
lineHeight float* 0 Rückgaber der Zeilenhöhe der aktuellen Zeile in Punkten.
#include "internal/text.h"

Ermittle die Zeilenhöhe an der Textposition 1585 des aktuellen Textrahmens.

int main ()
{
    float		x, y, lh;
textmodel::coordinates (0, 1585, &x, &y, &lh); showmessage ("%f X %f, LineHeight = %f", x, y, lh);
return 0; }

Version 1.3.4 (P/R 122)

priint:comet InDesign® Plug-Ins
get_linenr

static int textmodel::initialchar(
  ItemRef frameRef,
  int textPos,
  int capLines = 0,
  int capChars = 0)

Initialen für einen Absatz definieren.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
textPos int - Startposition. Die Position muss nicht unbedingt auf den Absatzanfang zeigen, aber natürlich werden die Initialen immer am Absatzanfang angelegt.
kSelection : Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
capLines int 0 über wieviel Zeilen sollen sich die Initialen des Absatzes erstrecken?
capChars int 0 Anzahl der Initialen
#include "internal/text.h"

Keine Initialen am Textanfang

int main ()
{
    textmodel::initialchar (gFrame, 0, 1, 1);
return 0; }

Version 1.3.4 (P/R 94)

priint:comet InDesign® Plug-Ins
get_initials
get_initiallines
comet.CTextModel.setInitials

static int textmodel::get_initials(ItemRef frameRef, int textPos = 0)

Anzahl der Initialen eines Textabsatzes

Name Typ Default Beschreibung
Return int   Wieviel Initialen hat der Textabsatz, in dem die genannte Textposition liegt?
frameRef ItemRef 0 gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
textPos int 0 Textposition. Die Position muss nicht unbedingt auf den Absatzanfang zeigen, aber natürlich stehen die Initialen immer am Absatzanfang.
kSelection : Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
#include "internal/text.h"

Am Textanfang soll ein Zeichen mehr als Initial gezeigt werden. Die Initialen sollen sich über eine Zeile mehr als bisher erstrecken.

int main ()
{
    int		l = textmodel::get_initiallines (gFrame, 0);
    int		c = textmodel::get_initials (gFrame, 0);
textmodel::initialchar (gFrame, 0, l+1, c+1);
return 0; }

Version 1.3.4 (P/R 94)

priint:comet InDesign® Plug-Ins
initialchar
get_initiallines

static float textmodel::get_fontsize(
  ItemRef frameRef,
  int textPos = 0,
  int* attrLen = 0)

Schriftgröße an einer Textstelle. Die Funktion ermittelt die Größe des Textes an einer Textposition.

Name Typ Default Beschreibung
Return float   Textgröße in Punkten
-1.0 : Fehler
frameRef ItemRef - Textrahmenreferenz
0 : Textmodell des Skriptes verwenden
textPos int 0 Textposition (0 ist der Textanfang)
attrLen int* 0 Bei erfolgreicher Ausführung die Länge des Textes in dieser Schriftgröße

comet_pdf ermittelt die Länge bis maximal zum Absatzende
#include "internal/text.h"

Version 1.4.2 R581, 23. Jan. 2008

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator
get_font
comet.CTextModel.getFontSize

static int textmodel::set_fontsize(
  ItemRef frameRef,
  int start,
  int len,
  float fontSize)

Setzen der Schriftgröße.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmen

0 : aktueller Textrahmen
start, len int, int -, - Textindex und -länge

Die Angaben sind wie üblich platzhalter-relativ. Für textmodel-relative Angaben siehe use_global_index.
fontSize float - Schriftgröße in Punkten
#include "internal/text.h"

v3.3.1 R3228, 18.10.2012

priint:comet InDesign® Plug-Ins, Illustrator
get_fontsize
get_font
set_font
use_global_index
comet.CTextModel.setFontSize

static int textmodel::get_font(
  ItemRef frameRef,
  int textPos = 0,
  char* fontFamily = 0,
  char* fontStyle = 0,
  int* attrLen = 0)

Font und Stil an einer Textstelle.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmenreferenz
0 : Textmodell des Skriptes verwenden
textPos int 0 Textposition (0 ist der Textanfang)
fontFamily String oder char* 0 Fontname
fontStyle String oder char* 0 Fontstil (Bold, Italic, ...)
attrLen int* 0 Bei erfolgreicher Ausführung die Länge des Textes mit gleichem Font und Stil.

comet_pdf ermittelt die Länge bis maximal zum Absatzende
#include "internal/text.h"

Schreibe alle verwendeten Schriften eines Textes ins Logfile.

int main ()
{
    int 		i 		= 0;
    char		fn 		[512];
    char		style 	[512];
    int			len;
while (textmodel::get_font (0, i, fn, style, &len) == 0) { wlog ("", "[%d, %d] : %s-%s\n", i, i+len, fn, style); i = i + len; }
return 0; }

Version 3.1 R2140, 29.09.2010

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator
get_fontsize
comet.CTextModel.getFont

static int textmodel::set_font(
  ItemRef frameRef,
  int start,
  int len,
  char* fontname,
  char* fontface = 0)

Setzen der Schriftgröße.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmen

0 : aktueller Textrahmen
start, len int, int -, - Textindex und -länge

Die Angaben sind wie üblich platzhalter-relativ. Für textmodel-relative Angaben siehe use_global_index.
fontname String oder char* - Name einer existierenden Schrift, z.B. "Courier"
fontface String oder char* 0 Schriftschnitt des Fonts, z.B. "Oblique"
#include "internal/text.h"

v3.3.1 R3228, 18.10.2012

priint:comet InDesign® Plug-Ins, Illustrator
get_font
get_fontsize
set_fontsize
use_global_index
comet.CTextModel.setFont

static int textmodel::get_initiallines(ItemRef frameRef, int textPos)

über wieviele Textzeilen erstrecken sich die Initialen eines Textabsatzes?

Name Typ Default Beschreibung
Return int   Anzahl der Textzeilen, über die sich die Initialen des Absatzes erstrecken, in dem die genannte Textposition liegt?
frameRef ItemRef 0 gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
textPos int 0 Textposition. Die Position muss nicht unbedingt auf den Absatzanfang zeigen, aber natürlich stehen die Initialen immer am Absatzanfang.
kSelection : Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
#include "internal/text.h"

Version 1.3.4 (P/R 94)

priint:comet InDesign® Plug-Ins
initialchar
get_initials
comet.CTextModel.getInitials

static int textmodel::set_attr(
  ItemRef frameRef,
  int start,
  int len,
  int attribute,
  ...)

Setzen von Texteigenschaften. Mit Hilfe der Funktion können nahezu alle Zeichen- und Absatzattribute, die von InDesign® unterstützt werden, gesetzt werden. Eine vollständige Doku zu Funktion finden Sie hier. Die Funktion benötigt den Include

#include "internal/textattributes.h" // Text attribute bosses

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

0 : Textmodell des Skriptes verwenden
start int - Textposition

kSelection : Aktuelle Textauswahl.
len int - Anzahl der Zeichen dessen Textattribut geändert werden soll. Bei start = kSelection wird die Angabe ignoriert.

kEnd : Textende
attribute int - Welches Textattribut soll geändert werden, siehe hier
... abhängig von attribute - Angaben zum Wert des Attributes, siehe hier. Falsche Datentypen der Parameter können zum Absturz von InDesign® führen.
#include "internal/text.h"
#include "internal/textattributes.h"

v4.0.5 R13700, 16. Sep 2010

priint:comet InDesign® Plug-Ins
get_attr
Attributbeschreibung
comet.CTextModel.setAttribute

static int textmodel::get_attr(
  ItemRef frameRef,
  int start,
  int* len,
  int attribute,
  ...)

Abfragen von Texteigenschaften. Mit Hilfe der Funktion können nahezu alle Zeichen- und Absatzattribute, die von InDesign® unterstützt werden, erfragt werden. Eine vollständige Doku zu Funktion finden Sie hier. Die Funktion benötigt den Include

#include "internal/textattributes.h" // Text attribute bosses

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

0 : Textmodell des Skriptes verwenden
start int - Textposition

kSelection : Aktuelle Textauswahl.
len int* - Anzahl der Zeichen, bei denen das Attribut den gleichen Wert hat

0 : ignorieren
attribute int - Welches Textattribut soll erfragt werden? siehe hier
... abhängig von attribute - Variable(n) für den Wert des Attributes, siehe hier. Falsche Datentypen der Parameter können zum Absturz von InDesign® führen.
#include "internal/text.h"
#include "internal/textattributes.h"

v4.0.5 R13700, 16. Sep 2010

priint:comet InDesign® Plug-Ins
set_attr
Attributbeschreibung
comet.CTextModel.getAttribute

static int textmodel::get_para_listtype(ItemRef frameRef, int textPos)

Ermittle den Listentyp eines Absatzes.

Name Typ Default Beschreibung
Return int   Listentyp des Absatzes in dem die Textposition liegt oder -1 im Fehlerfall.

0 : Ohne
1 : Unnummerierte Liste
2 : Nummerierte Liste
frameRef ItemRef 0 gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
textPos int 0 Textposition. Die Position muss nicht unbedingt auf den Absatzanfang zeigen
kSelection : Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
#include "internal/text.h"

Version 3.2 R2220, 5. Dez. 2010

priint:comet InDesign® Plug-Ins
comet.CTextModel.getListType

static int textmodel::get_color(
  ItemRef frameRef,
  int whatColor,
  int pos,
  int* length,
  char* colName = 0,
  int* colSpace = 0,
  float* c1 = 0,
  float* c2 = 0,
  float* c3 = 0,
  float* c4 = 0,
  float* tint = 0,
  int* isProcessColor = 0)

Hole die Farbe eines Textes an einer Textstelle.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Gültige Rahmenreferenz
0 : aktuellen Text verwenden
whatColor int - Welche Farbe soll ermittelt werden?

0 : Schrift
1 : Schriftrand
2 : Unterstreichung
3 : Lücken der Unterstreichung
4 : Durchstreichung
5 : Lücken der Durchstreichung
6 : Schattierung der Absatzgrenzen
pos int - 0-basierte Textposition
length int* 0 (Rückgabe) Bis zu welcher Textposition bleibt die Farbe gleich?
colName String oder char* 0 (Rückgabe) Name der Farbe in der Farbpalette oder leer
0 : Farbnamen nicht ermitteln
sonst : Reservierter Speicher für den Farbnamen
colSpace int* 0 (Rückgabe) Farbraum
0 : Farbraum nicht ermitteln
sonst :
  kRGB   kCMYK   kLab
c1, c2, c3, c4 float* 0 (Rückgabe) Farbwerte
0 : Farbwerte nicht ermitteln
sonst :
  r, g, b bei kRGB (0.0 - 255.0)
  c, m, y, k bei kCMYK (0.0 - 1.0)
  l, a, b bei kLab (0.0 - 100.0 und -128.0-127.0)
tint float* 0 (Rückgabe) Intensität der Farbe
0 : nicht ermitteln
sonst : 0.0 - 100.0
isProcessColor int* 0 (Rückgabe)

1 : Prozessfarbe
0 : Spot
#include "internal/text.h"
#include "internal/types.h"

In einer Schleife werden alle Farben eines Textes geholt.

#include "internal/types.h"
#include "internal/text.h"
int main () { char colName [256]; int colorClass, colSpace; float c1, c2, c3, c4, tint; int start = 0; int isProcess; int len;
for (colorClass = 0; colorClass < 6; colorClass++) { if (colorClass == 0) wlog ("", "Font color\n"); else if (colorClass == 1) wlog ("", "Stroke color\n"); else if (colorClass == 2) wlog ("", "Underline color\n"); else if (colorClass == 3) wlog ("", "Underline gap color\n"); else if (colorClass == 4) wlog ("", "Strike through color\n"); else if (colorClass == 5) wlog ("", "Strike through gap color\n");
start = 0; while (textmodel::get_color (0, colorClass, start,   &len,   colName,   &colSpace, &c1, &c2, &c3, &c4,   &tint,   &isProcess) == 0) { wlog ("", "\t[%d - %d]\t: ", start, start+len); if (colSpace == -1) wlog ("", "Property not used"); else { if (isProcess) wlog ("", "Process-"); else wlog ("", "Spot-"); }
if (colSpace == kRGB) { wlog ("", "RGB = (%d %d %d)", toint (c1), toint (c2), toint (c3)); } else if (colSpace == kCMYK) { wlog ("", "CMYK = (%.2f %.2f %.2f %.2f)", c1, c2, c3, c4); } else if (colSpace == kLab) { wlog ("", "Lab = (%.2f %d %d)" , c1, toint (c2), toint (c3)); } else if (colSpace >= 0) { wlog ("", "COLSPACE %d = (%.2f %.2f %.2f %.2f)" , colSpace, c1, c2, c3, c4); }
if (*colName) wlog ("", " Swatch '%s', Tint %.2f%%", colName, tint); wlog ("", "\n");
start = start + len; } }
return 0; }

Version 2.1 R1120, 15. January 2009

priint:comet InDesign® Plug-Ins
frame::get_color
comet.CTextModel.getColor

static int textmodel::insert_products(
  ItemRef frameRef = 0,
  int position = 0,
  int delete_len = -1,
  char* statement = "watched",
  int preScript = kNoRule,
  int flags = 0,
  int defaultPageitem = 0,
  char* errmess = 0,
  int purgeSequence = 0,
  char* sequName = "",
  char* prefix = "",
  char* postfix = "")

Einfügen von Einträgen der Produktrecherche in einen Text. Der Befehl ist das Textgegenstück zu document::build_products. Während bei build_products die Produkte im Dokument aufgebaut werden, werden die Produkte hier in den Textfluss eingefügt. Von den Produkttemplates werden dabei entweder ein Inline-Rahmen erzeugt oder der Textinhalt der einzelnen Template-Rahmen eingefügt. (Diese Einstellung wird in der Palette 'Aufbauregeln' an den Rahmen gemacht, bevor diese in einem Template gesichert werden.)

Die Funktion ist eine Variante des Produktaufbaus und kann nicht innerhalb eines anderen Produktaufbaus (z.B. produktlist::establish) ausgeführt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 gültige Textrahmenreferenz oder 0
0 : Textmodell des Skriptes verwenden
position int 0 frameRef =0 : scannerrelative Einfügeposition
frameRef != 0 : globale Textposition

>= 0 Einfügeposition
kEnd Anfügen
kSelection Aktuelle Textauswahl. Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
delete_len int kEnd Anzahl der zu löschenden Zeichen kEnd Löschen bis zum Ende des Platzhalters bzw. bis zum Textende.

Bei position = kSelection hat der Parameter keine Bedeutung.
statement String oder char* "watched" Auswahl der Objekte (und Unterobjekte), die aufgebaut werden sollen, siehe hier.
preScript int kNoRule ID des Vorbereitungsskriptes. Das Skript wird ausgeführt, nachdem die Liste der zu importierenden Produkte ermittelt worden ist und kann dazu verwendet werden, die Produktliste zu bearbeiten. Siehe dazu auch product::set, product::clone und productlist.

kNoRule - Kein Skript ausführen
Sonst ID des Skriptes, Skriptaufbau siehe hier.
flags int 0 Steuerung des Importes. Der Wert wird als Summe (Bitfeld) der folgenden Konstanten angegeben, also zum Beispiel kCheckIfNotExists + kPreferDefaultPageItem

kCheckIfNotExists : Prüfe vor dem Einfügen, ob das Produkt bereits im Dokument verplant ist, wenn ja, wird es nicht mehr eingefügt.

kPreferDefaultPageItem : Verwende das Template defaultPageitem für alle Produkte und ignoriere das in den Produkten gegebenen Template.

kSuppressAutoExtent : [Ab Version 1.4 R320] Wird beim Einfügen in den Text ein Overset erzeugt, wird ab R320 automatisch eine neue Seite mit einem Textrahmen angelegt, in den der Text weiterfliessen kann. Ist das Flag kSuppressAutoExtent gesetzt, wird dieses Verhalten unterdrückt - es werden dann also keine weiteren Seiten mit Textrahmen erzeugt.

kInsertTextBeforeExeptFirst : [Ab Version 1.4 R1180] Unterdrücke den Text prefix beim ersten Produkt des Importes.

kInsertTextAfterExeptLast : [Ab Version 1.4 R1180] Unterdrücke den Text postfix beim letzten Produkt des Importes.

kExpandGroups : [Ab Version 1.4 R1180] Besteht das Template aus einer Gruppe, werden die gruppierten Rahmen zum Import verwendet, nicht der Gruppenrahmen.

kAutoDetectType : [Ab Version 1.4 R1180] Der Aufbau findet selbst heraus, ob ein Rahmen ein Textrahmen ist oder nicht. Von Textrahmen wird der Text eingefügt, alle anderen Rahmen weden als Inlines importiert. Rahmen, die im Template mit dem Status 'ignorieren' versehen sind, werden nicht importiert.

kShowErrors : Auftretende Fehler werden automatisch in einem Fehlerdialog gezeigt.
defaultPageitem int 0 Hat ein Produkt kein definiertes Templates, wird dieses Template verwendet. Ist zusätzlich das Flag kPreferDefaultPageItem gesetzt, wird dieses Template für alle Produkte verwendet.
errmess String oder char* 0 Zeigt die Variable auf einen allokierten String (z.B. vom Typ String oder char[256]), kann hier eine Fehlermeldung erhalten werden.
purgeSequence int 0 Produkte jeweils in eigener Sequenz bearbeiten

0 - Gesamter Aufbau in einer Sequenz. Der Aufbau kann mit einem Undo rückgängig gemacht werden. Größere Importen werden mglw. durch einen Dialog unterbrochen, der nutzlos mitteilt, dass die Sequenz zu groß ist, und deshalb nicht rückgängig gemacht werden kann.
1 - Jedes Produkt wird in einer eigenen "gepurgten" Sequenz (siehe purge_sequence) bearbeitet. Beim Undo wird jedes Produkt einzeln wieder aus dem Dokument entfernt. Bei "clean" hat der Parameter keine Bedeutung.
sequName String oder char* "Aufbau %d. Produkt" Name einer einzelnen Importsequenz, wird nur bei purgeSequence != 0 verwendet. Die Angabe muss genau ein %d enthalten, das durch den aktuellen Importzähler ersetzt wird, also etwa "Import %d. Produkt". Ist die Angabe leer, wird der Defaultstring verwendet.
prefix String oder char* "" Füge diesen Text vor jedem nichtleeren Produkt ein. Der Text darf unformatiert, InDesign®-TaggedText oder %!TT-Text sein. Zum Einfügen eines einfachen Absatzes können Sie die Angabe <para> als Abkürzung für %!TT<ParaStyle:><nl:> angeben.

<para> : Neuer Absatz
postfix String oder char* "" Füge diesen Text nach jedem nichtleeren Produkt ein. Der Text darf unformatiert, InDesign®-TaggedText oder %!TT-Text sein. Zum Einfügen eines einfachen Absatzes können Sie die Angabe <para> als Abkürzung für %!TT<ParaStyle:><nl:> angeben.

<para> : Absatzende
#include "internal/text.h"
#include "internal/types.h"
#include "internal/products.h"

Version 1.4 (R 228), 23. Oktober 2006
prefix, postfix seit v1.4.1 R405, 4. Juli 2007

priint:comet InDesign® Plug-Ins
document::build_products
comet.CTextModel.insertProducts

static int textmodel::insert_list(
  ItemRef frameRef,
  int position,
  int delete_len,
  ProductList pl,
  int preScript = kNoRule,
  int flags = 0,
  int defaultPageitem = 0,
  char* errmess = 0,
  int purgeSequence = 0,
  char* sequName = "",
  char* prefix = "",
  char* postfix = "")

Wie insert_products, aber mit einer Produktliste anstelle des Selector statement.

Die Funktion ist eine Variante des Produktaufbaus und kann nicht innerhalb eines anderen Produktaufbaus (z.B. produktlist::establish) ausgeführt werden.

Name Typ Default Beschreibung
pl ProductList - Gefüllte Liste der Produkte, die eingefügt werden sollen
... ... - siehe insert_products
#include "internal/text.h"
#include "internal/types.h"
#include "internal/products.h"

Füge einige Produkte an der aktuellen Textauswahl im Dokument ein.

#include "internal/products.h"
int append_product (ProductList li, int id1, int id2, int id3, int pi) { Product p;
if (!li) return 1;
p = product::alloc (); product::set (p, kID, id1); product::set (p, kID2, id2); product::set (p, kID3, id3); product::set (p, kPageitemid, pi);
productlist::append (li, p, 1);
return 0; }
int main () { ProductList li = productlist::alloc ();
append_product (li, 100, 10, 0, 2); append_product (li, 300, 10, 0, 2); append_product (li, 400, 10, 0, 12); append_product (li, 500, 10, 0, 2);
textmodel::insert_list (0, -2, 0, li);
return 0; }

Version 1.4.2, R527, 13. Dez. 2007

priint:comet InDesign® Plug-Ins
comet.CTextModel.insertProducts

static int textmodel::vertical_justification(
  ItemRef frameRef,
  int pos,
  int justy,
  float maxParaSpace = 0.0)

Vertikale Ausrichtung und max. Absatzabstand eines Textrahmens setzen

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültiger Textrahmen
0 : Rahmen des aktuellen Textes. In diesem Fall wird der zweite Parameter verwendet, um in Verkettungen den richtigen Rahmen zu finden.
pos int - Textposition, dessen Rahmen verwendet wird, wird nur ausgewertet, wenn der erste Parameter 0 ist.

Unter comet_pdf wird der Parameter ignoriert und der erste Rahmen der Kette verwendet.
justy int - Vertikale Ausrichtung
0 : oben
1 : zentriert
2 : unten
3 : vertikaler Keil nicht unterstützt von comet_pdf
maxParaSpace float 0.0 Max. Absatzabstand in Punkten bei vertikalem Keil. Fehlt die Angabe, bleibt die bisherige Einstellung erhalten. Der Wert versteht sich als Abstand zwischen den Absätzen plus verwendetem Zeilenabstand.

Von comet_pdf wird diese Angabe ignoriert.
#include "internal/text.h"
#include "internal/types.h"
#include "internal/products.h"

Version 1.4 (R 336), 19. April 2007

priint:comet InDesign® Plug-Ins, comet_pdf
comet.CFrame.setJustification

static int textmodel::get_insets(
  ItemRef frameRef,
  int pos,
  float* l,
  float* t,
  float* r,
  float* b)

Textabstände zum Rand eines Textrahmens ermittlen

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültiger Textrahmen
0 : Rahmen des aktuellen Textes. In diesem Fall wird der zweite Parameter verwendet, um in Verkettungen den richtigen Rahmen zu finden.
pos int - Textposition, dessen Rahmen verwendet wird, wird nur ausgewertet, wenn der erste Parameter 0 ist.

Unter comet_pdf wird hier immer der erste Rahmen der Textkette verwendet.
l, t, r, b float* 0 Nach erfolgreihher Ausführung die seitlichen Abstände (Insets)in Punkten (links, oben, rechts, unten)

0 : Diese Angabe ignorieren
#include "internal/text.h"

Version 4.1.6 R25445, 9. Juli 2019

priint:comet InDesign® Plug-Ins, comet_pdf
set_insets

static int textmodel::set_insets(
  ItemRef frameRef,
  int pos,
  float l,
  float t,
  float r,
  float b,
  float textIndest = 0.0)

Textabstände zum Rand eines Textrahmens setzen

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültiger Textrahmen
0 : Rahmen des aktuellen Textes. In diesem Fall wird der zweite Parameter verwendet, um in Verkettungen den richtigen Rahmen zu finden.
pos int - Textposition, dessen Rahmen verwendet wird, wird nur ausgewertet, wenn der erste Parameter 0 ist.

Unter comet_pdf wird hier immer der erste Rahmen der Textkette verwendet.
l, t, r, b float - Seitliche Abstände in Punkten (links, oben, rechts, unten)
textInset float 0.0 Texteinrückung

Der Parameter hat keine Bedeutung mehr.
#include "internal/text.h"

Version 1.4 (R 336), 19. April 2007

priint:comet InDesign® Plug-Ins, comet_pdf
get_insets

static int textmodel::justify(
  ItemRef frameRef,
  int pos,
  int len,
  int page = -1,
  char* layerName = "",
  int keepLast = 1,
  char* style1 = "",
  ...)

Vertikaler Keil. Der vertikale Keil vergrößert in einer Liste gegebener Absatzstile den "Abstand vor" so, dass der Text den Rahmen vollständig ausfüllt. Die Absatzstile können zu unterschiedlichen Anteilen am vertikalen Keil beteiligt sein.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültiger Textrahmen
0 : aktueller Text
pos int - Wende die Funktion erst ab dem Rahmen der Rahmenkette an, der diese Textposition enthält. über den Index wird lediglich festgelegt, bei welchem Rahmen einer Textkette die Bearbeitung beginnen soll. Einzelne Textstücke können nicht ausgewählt werden. Bei Angabe eines Rahmens (frameRef != 0) werden alle Werte ungleich kBegin und kSelection ignoriert.

kBegin : vom Textbeginn kSelection : Nur die Rahmen, die von der aktuellen Textauswahl betroffen sind. Ist frameRef ungleich 0 und in den Rahmen der Kette kein Text ausgewählt, liefert die Funktion den Fehler -313 (noTextSelection).
len int - Wende den vertikalen Keil auf dieser Länge an. Die Prüfung wird nur rahmenweise gemacht. Mit der Angabe len können also nur Rahmen, aber keine Textstücke von der Bearbeitung ausgeschlossen werden.

kEnd : bis zum Textende

kFrameEnd : Ist frameRef gesetzt, schränken Sie mit dieser Angabe die Bearbeitung auf genau diesen Rahmen ein. Die Angaben von Seitennummer und Ebene (page, layerName) werden dann ignoriert. Die Eigenschaft letzter Rahmen (keepLast) wird, wenn eingestellt, trotzdem geprüft.
page int -1 Bei verketteten Textrahmen können Rahmen auch auf mehrere Seiten und Ebenen verteilt sein. Mit der Angabe können Sie die Bearbeitung auf eine bestimmte Seite einschränken.

-1 : Seiteneinschränkung ignorieren
sonst : 1-basierte Seitennummer
layerName String oder char* "" Bei verketteten Textrahmen können Rahmen auch auf mehrere Seiten und Ebenen verteilt sein. Mit der Angabe können Sie die Bearbeitung auf eine bestimmte Ebene einschränken.

"" : alle Ebenen
"--visible--" : nur sichtbare Ebenen
"--active--" : nur die aktive Ebene
sonst : Gültiger Ebenenname
keepLast int 1 1 : Der letzte Rahmen einer Textverkettung wird unverändert gelassen

0 : Letzten Rahmen auch bearbeiten
style1, percent1, ... String oder char*, float, ... "", 0.0 Beliebig lange Liste von jeweils einem Absatzstil-Namen und einer Prozentangabe (als float). Die Prozentangabe legt fest, zu welchem Anteil ein Absatzstil am vertikalen Keil beiteiligt sein soll. Mit Angabe 0.0 werden die Abstände gleichmäßig verteilt. Die Summe der Prozente darf nicht größer als 100.0 sein.

Werden keine Angaben gemacht, werden die Abstaände gleichmäßig auf alle Absätze verteilt.

0 oder "" : Beliebiger Absatzstil
#include "internal/text.h"

Hier eine Testdatei

 
Vom aktuellen Rahmen bis zum vorletzten Rahmen (gleichmäßig verteilt auf alle Absatzstile)
textmodel::justify (gFrame, 0, kEnd);
Nur den aktuellen Rahmen (gleichmäßig verteilt auf alle Absatzstile)
textmodel::justify (gFrame, 0, kFrameEnd);

Im Beispiel soll für den aktuellen Rahmen ein vertikaler Keil angewendet werden. Ist der Rahmen der letzte der verketteten Liste, soll der Keil nicht angewendet werden. Aber in diesem Fall sollen trotzdem alle Abstände vor den Absätzen zurückgesetzt werden.

#include "internal/text.h"
#include "internal/types.h"
int main() { ItemRef succ = item::alloc (); int succRes = frame::get_link (gFrame, succ); int tpos = frame::get_textpos (gFrame);
if (succRes == 0 && !frame::is_valid (succ)) { textmodel::justify_reset (gFrame, tpos); }
textmodel::justify (gFrame, 0, kFrameEnd);
return 0; }

Version 1.4 (R 339), 2. Mai 2007

priint:comet InDesign® Plug-Ins
justify_reset
document::justify_text

static int textmodel::justify_reset(
  ItemRef frameRef,
  int pos,
  int len = 0,
  int page = 0,
  char* layerName = 0,
  int keepLast = 0,
  char* style1 = 0,
  ...)

Vertikalen Keil zurücksetzen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - gültiger Textrahmen
0 : aktueller Text
pos int - Wende die Funktion ab dieser Texposition an. über den Index wird lediglich festgelegt, bei welchem Rahmen einer Textkette die Bearbeitung beginnen soll. Einzelne Textstücke können nicht ausgewählt werden.
len int - Unbenutzt ab R1401 Wende die Funktion auf dieser Länge an. Die Prüfung wird nur rahmenweise gemacht. Mit der Angabe len können also nur Rahmen, aber keine Textstücke von der Bearbeitung ausgeschlossen werden.

kEnd : bis zum Textende
page int - Unbenutzt ab R1401 Bei verketteten Textrahmen können Rahmen auch auf mehrere Seiten und Ebenen verteilt sein. Mit der Angabe können Sie die Bearbeitung auf eine bestimmte Seite einschränken.

-1 : Seiteneinschränkung ignorieren
sonst : 1-basierte Seitennummer
layerName char* - Unbenutzt ab R1401 Bei verketteten Textrahmen können Rahmen auch auf mehrere Seiten und Ebenen verteilt sein. Mit der Angabe können Sie die Bearbeitung auf eine bestimmte Ebene einschränken.

"" : alle Ebenen
"--visible--" : nur sichtbare Ebenen
"--active--" : nur die aktive Ebene
sonst : Gültiger Ebenenname
keepLast int - Unbenutzt ab R1401

1 : Der letzte Rahmen einer Textverkettung wird unverändert gelassen

0 : Letzten Rahmen auch bearbeiten
style1, ... char*, ... - Unbenutzt ab R1401 Liste von Paragraphenstilen, deren "Abstand vor" wieder auf den Wert zurückgesetzt werden soll, den die Stildefinition enthält
#include "internal/text.h"

Hier eine Testdatei

 

Version 1.4 (R 339), 2. Mai 2007
Die Parameter len, page, layerName, keepLast, style1, ... werden ab R1401 nicht mehr verwendet.

priint:comet InDesign® Plug-Ins
justify
document::justify_text_reset
frame::get_textpos
frame::get_link

static int textmodel::remove_redundant_tags(int startPos = 0, int len = -1)

Textplatzhalter aufräumen. Werden in einem Textplatzhalter Textattribute (Font, Farbe, Größe, ...) geändert, werden die Platzhalter intern in verschiedende sogenannte Runs getrennt. Die Comet-Plugins stellen sicher, dass alle zusammengehörigen Runs richtig erkannt werden. Für Templates und Musterdokumente ist es aus Performancegründen aber sinnvoll, diese redundanten Runs wieder zu verbinden.

Über das Menü Plug-ins -> Platzhalter -> Platzhalter vor dem Sichern aufräumen (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) können die redundanten Platzhalter im gesamten Dokument auch automatisch entfernt werden.

Die Funktion beseitigt alle redundanten Textplatzhalter im aktuellen Platzhalter des Skriptes. Die Textpositionen sind platzhalter-relativ. Für textrelative Positionsangaben verwenden Sie die Funktion gremove_redundant_tags.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
startPos int 0 Startposition im Platzhalter. 0 ist der Beginn des Platzhalters.
len int kEnd Länge des Textes, der bearbeitet werden soll oder kEnd, kEnd ist das Ende des Platzhalters
#include "internal/text.h"

Version 1.4.1 R417, 24. Jul 2007

priint:comet InDesign® Plug-Ins
textmodel::gremove_redundant_tags
document::remove_redundant_tags
frame::remove_redundant_tags

static int textmodel::gremove_redundant_tags(int startPos = 0, int len = -1)

Textplatzhalter aufräumen. Werden in einem Textplatzhalter Textattribute (Font, Farbe, Größe, ...) geändert, werden die Platzhalter intern in verschiedende sogenannte Runs getrennt. Die Comet-Plugins stellen sicher, dass alle zusammengehörigen Runs richtig erkannt werden. Für Templates und Musterdokumente ist es aus Performancegründen aber sinnvoll, diese redundanten Runs wieder zu verbinden.

Über das Menü Plug-ins -> Platzhalter -> Platzhalter vor dem Sichern aufräumen (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) können die redundanten Platzhalter im gesamten Dokument auch automatisch entfernt werden.

Die Funktion beseitigt alle redundanten Textplatzhalter im angegebenen Bereich des aktuellen Textes. Die Textpositionen sind text-relativ. Für platzhalter-relative Positionsangaben verwenden Sie die Funktion remove_redundant_tags.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
startPos int 0 Startposition im Text
len int kEnd Länge des Textes, der bearbeitet werden soll oder kEnd, kEnd ist das Textende
#include "internal/text.h"

Version 1.4.1 R417, 24. Jul 2007

priint:comet InDesign® Plug-Ins
textmodel::remove_redundant_tags
document::remove_redundant_tags
frame::remove_redundant_tags

static Scrap textmodel::cut(
  ItemRef frameRef = 0,
  int start = 0,
  int len = -1)

Entferne einen Text aus dem Dokument und kopiere ihn in eine interne Zwischenablage. Der Text wird mit allen Formatierungen, Tabellen, Inlines, ... kopiert. Die Textpositionen beziehen sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes. Die erzeugte Zwischenablage kann mit textmodel::paste wieder eingesetzt werden. Eine Zwischenablage kann nur einmal eingesetzt werden. Nach dem Einsetzen ist sie ungültig. Ein erneutes Einsetzen des Templates führt zum Absturz von InDesign®.

Name Typ Default Beschreibung
Return Scrap   Erzeugte Zwischenablage oder 0 im Fehlerfall
frameRef ItemRef 0 Gültige Referenz auf einen Textrahmen

0 : aktueller Textrahmen
start int 0 Ab welcher Textposition soll der Text ausgeschnitten und kopiert werden? Die Textposition bezieht sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes.
len int kEnd Länge des Textes, der ausgeschnitten werden soll. Die Länge bezieht sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes.
#include "internal/text.h"

Version 2.0 R646, 27. März 2008

priint:comet InDesign® Plug-Ins
textmodel::copy
textmodel::paste
comet.CTextModel.cut

static Scrap textmodel::copy(
  ItemRef frameRef = 0,
  int start = 0,
  int len = -1)

Kopiere einen Text in eine interne Zwischenablage. Der Text wird mit allen Formatierungen, Tabellen, Inlines, ... kopiert. Die Textpositionen beziehen sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes. Die erzeugte Zwischenablage kann mit textmodel::paste wieder eingesetzt werden. Eine Zwischenablage kann nur einmal eingesetzt werden. Nach dem Einsetzen ist sie ungültig. Ein erneutes Einsetzen des Templates führt zum Absturz von InDesign®.

Name Typ Default Beschreibung
Return Scrap   Erzeugte Zwischenablage oder 0 im Fehlerfall
frameRef ItemRef 0 Gültige Referenz auf einen Textrahmen

0 : aktueller Textrahmen
start int 0 Ab welcher Textposition soll der Text kopiert werden? Die Textposition bezieht sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes.
len int kEnd Länge des Textes, der kopiert werden soll. Die Länge bezieht sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes.
#include "internal/text.h"

Version 2.0 R646, 27. März 2008

priint:comet InDesign® Plug-Ins
textmodel::cut
textmodel::paste
comet.CTextModel.copy

static Scrap textmodel::paste(
  ItemRef frameRef,
  Scrap data,
  int start = 0)

Füge eine Zwischenablage in einen Text ein. Die Zwischenablage muss dabei nicht im selben Textrahmen und nicht im selben Dokument erzeugt worden sein. Die Textposition bezieht sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes. Eine Zwischenablage kann nur einmal eingesetzt werden. Nach dem Einsetzen ist sie ungültig. Ein erneutes Einsetzen des Templates führt zum Absturz von InDesign®. Wollen Sie Texte mehrfach einsetzen, müssen Sie entsprechend viele Scraps erzeugen. Zwischenablagen können sehr viel Arbeitsspeicher benötigen. Gehen Sie sparsam mit ihnen um!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Gültige Referenz auf einen Textrahmen

0 : aktueller Textrahmen
scrap Scrap - Zwischenablage aus der eingefügt werden soll.
start int 0 An welcher Textposition soll der Text eingefügt werden? Die Textposition bezieht sich auf den gesamten Rahmentext, nicht auf den Platzhalter des Skriptes.
#include "internal/text.h"

Kopiere die aktuelle Textauswahl und füge sie am Ende des Textes noch einmal an.

#include "internal/types.h"
#include "internal/text.h"
int main () { Scrap scrap = textmodel::copy (0, kSelection);
textmodel::paste (0, scrap, kEnd);
return 0; }

Version 2.0 R646, 27. März 2008

priint:comet InDesign® Plug-Ins
textmodel::cut
textmodel::copy
comet.CTextModel.paste

static int textmodel::insert_crossref(
  int index,
  int len,
  char* name,
  int classid = 0,
  int id = 0,
  int id2 = 0,
  int id3 = 0,
  char* sid = "",
  int borderVisble = 0,
  int borderWidth = 1,
  int borderHilite = 3,
  int borderStyle = 1,
  float borderCol1 = -1.0,
  float borderCol2 = -1.0,
  float borderCol3 = -1.0,
  float borderCol4 = -1.0,
  int* delBefore = 0)

Einfügen einer Querverweis-Definition in einen Text. Querverweise dürfen nur innerhalb eines Comet-Platzhalters oder komplett außerhalb von Comet-Platzhaltern liegen. Es ist dringend geraten, als Länge der Referenzen 0 zu wählen! Eine eingefügte Referenz fügt ein Zeichen ins Dokument ein. Die Positionsangabe bezieht sich auf den Skriptplatzhalter. Zum Einfügen einer Querverweis-Definition an eine beliebige Textstelle verwenden Sie die Funktion frame::insert_crossref.

Eine ausführliche Beschreibung zu Comet-Querverweisen finden sie hier.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
index int - platzhalter-relative Position der neuen Referenz
len int - Länge der Referenz. Es ist dringend geraten, als Länge der Referenzen 0 zu wählen!. Als Länge der Referenz wird der Anzahl der Dokumentzeichen bezeichnet, um die die Referenz ihren Rahmen legt. Die eigentliche Länge ist um eins größer, da die Referenz selbst auch ein Textzeichen belegt. Die Angabe 0 erzeugt also eine Referenz der Länge 1, die kein weiteres Zeichen umfasst.
name String oder char* - Name der Referenz.

"" : Querverweis wird als Name verwendet
classid int 0 Klassennummer des Objektes

Aus der Klassennummer, den Objekt-IDs und der StringID wird der Zielname der Referenz gebildet :

classid, id, id2, id2, 'sid'.

-2 : Verwende nur sid als Namen des Verweisezieles [seit v5.0 R36369]

Verweisziele müssen natürlich dokumentweit eindeutig sein. Existiert ein Verweisziel bereits wird InDesign® automatisch eine Zählnummer an den Namen anhängen. Also etwa

3, 1, 0, 0, ''
3, 1, 0, 0, '' 1
3, 1, 0, 0, '' 2

id, id2, id3 int 0 Objekt-IDs
sid String oder char* "" String-ID des Objektes.
borderVisble int 0 Soll der Verweis sichtbar sein?

0 : Nein
1 : Ja. Verweise der Länge 0 bekommen dann einen kleinen senkrechten Strich im Text.
borderWidth int 1 Stärke des Rahmens. InDesign® unterstützt hier nur drei Größen:

1 : Dünn
2 : Mittel
3 : Stark
borderHilite int 3 Wie soll der Rahmen gezeichnet werden?
1 : Invers zeichen (Nicht unterstützt in InDesign®, aber sichtbar im PDF-Export der Datei)
2 : Innenrahmen
3 : Außenrahmen
borderStyle int 1 Art der Rahmenlinie. InDesign® unterstützt nur die folgenden zwei Werte:
0 : Durchgängig
1 : Gestrichelt
borderCol1, borderCol2, borderCol3, borderCol4 float -1.0 Farbe des Rahmens. Angaben im Bereich 0.0 - 100.0 (oder -1.0) Sind die ersten drei Werte >= 0.0 wird eine RGB-Farbe verwendet. Ist auch der letzte Wert >= 0.0 wird CMYK verwendet (aber das scheint irgendwie noch nicht zu funktionieren). Sind die Farbwerte nicht vollständig definiert, wird Orange als Rahmenfarbe verwendet.
delBefore int* 1 Achtung : Das ist eine Adresse. Soll überprüft werden, ob genau vor der Einfügestelle bereits ein gleicher Verweis steht (*delBefore = 1) oder nicht (*delBefore = 0). Als Rückgabe enthält die Variable eine Angabe, ob tatsächlich eine Referenz vor dem Einfügepunkt lag. Wenn Sie einer Schleife durch den Platzhaltertext laufen, kann das den nächsten Index beeinflussen.
#include "internal/text.h"

Anlegen eines Querverweises. Sie wählen ein Produkt der Produktrcherche und ein Stück (!) Text. Das Skript legt einen Querverweis an.

int main ()
{
    ItemRef 	frame		= item::alloc();
    String		str			= string::alloc ();
    Table		t			= table::alloc ();
    List 		prod 		= list::alloc (3,2,1); 	// Produktrecherche, selected entries, id1
    List 		prod2 		= list::alloc (3,2,2); 	// Produktrecherche, selected entries, id2
    List 		prod3 		= list::alloc (3,2,3); 	// Produktrecherche, selected entries, id3
    StringList	prodsid 	= stringlist::alloc (3, 2);
    int 		start, len, col, row;
    int			res;
    int			delBefore	= 1;
if (list::length (prod) == 0) { showmessage ("Kein Produkt ausgewählt"); return 0; }
textmodel::selection (&start, &len, frame, 0, t, &col, &row); if (len > 0) textmodel::gettext (str, start, len);
res = textmodel::insert_crossref (   start, len,   string::get (str), // Name   3, // ClassID   list::get (prod, 0),   list::get (prod2, 0),   list::get (prod3, 0),   stringlist::get (prodsid, 0),   1,   3, // 1-3 Rahmenstärke   3, // 1 Invert, 2 Inset, 3 Outline   1, // 0 Solid, 2 Dashed   100.0, 0.0, 0.0, -1.0,   &delBefore);
return 0; }

Version 2.1 R668, 14. April 2008

priint:comet InDesign® Plug-Ins
document::update_crossrefs
hyperlink::find
hyperlink::find1
link
w2cross-Tag
comet.CTextModel.insertCrossRef

static int textmodel::scale_font(
  ItemRef frameRef,
  int pos,
  int len,
  float xscale,
  int chunkWise = 1,
  int doLeading = 1,
  int checkOverset = 0,
  int intSizesOnly = 0,
  float minSize = 0.0,
  float maxSize = 0.0,
  int useSizesAsLimits = 0,
  float paraScaleX = 0.0,
  float paraScaleY = 0.0,
  ...)

Skalieren der Schriftgröße(n) eines Textes.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmenreferenz

0 : aktueller Text
pos int - Startposition für die Textskalierung (0-basiert)

kSelection : aktuelle Textauswahl, len wird dann ignoriert
len int - Anzahl der Zeichen, die skaliert werden sollen

kEnd : Textende
xscale float - Faktor für die neue Schriftgröße (1.0 entspricht 100 Prozent, 0.5 halbe Größe)
chunkWise int 1 0 : Der gesamte Text bekommt die (skalierte) Schriftgröße an der Stelle pos

1 : Schriftgrößen einzeln anpassen
doLeading int 1 Zeilenabstände anpassen?

1 : Ja
0 : Nein
checkOverset int 0 Wie soll mit Textoverset und -underset umgegangen werden?

0 : Ignorieren (Die Skalierung wird ein einziges Mal auf den Text angewendet.)

1 : Ensteht durch die Skalierung ein Textoverset, wird die Schrift solange verkleinert, bis der Overset aufgehoben ist.

2 : Passe die Textgröße(n) so an, dass der Text den Rahmen möglichst genau ausfüllt Die Angabe xscale wird in diesem Fall ignoriert.
intSizesOnly int 0 0 : beliebige Schriftgrößen erlaubt
1 : Nur ganzzahlige Schriftgrößen erlaubt

minSize float 0.0 Untergrenze für die Schriftgröße

Würde eine neue Schriftgröße kleiner als der angegebene Wert, wird die Bearbeitung abgebrochen. Werte kleiner 2.0 werden automatisch auf 2.0 gesetzt.
maxSize float 0.0 Obergrenze für die Schriftgrößen

0.0 : beliebig
sonst : Würde eine neue Schriftgröße größer als der angegebene Wert, wird die Bearbeitung abgebrochen
useSizesAsLimits int 0 Die Werte minSize und maxSize werden als Grenzen für die Schriftgrößen betrachtet. D.h., alle Textstellen, die Größer resp. kleiner als diese Grenzen werden würden, bekommen die angegebene Minimal- bzw. Maximalgröße.
paraScaleX, paraScaleY float, float 0.0, 0.0 Sind beide Angaben größer 0.0, werden die Definitionen der beteiligten Absätze (Abstände/Linien vor und nach dem Absatz, Abstand links, Tabulatoren, etc. mit diesen Werten skaliert.
... String oder char*, int, float, float Leer Jeweils vier Werte bestehend aus Name der Eigenschaft, einem Flag, und einem Minimal- und Maximalwert für die Eigenschaft. Die aktivierten Eigenschaften werden jeweils in allen Absätzen angepasst, die den angegebenen Bereich [pos, pos+len] berühren. Ist die Liste leer, werden alle unten genannten Eigenschaften angepasst.

Folgende Eigenschaften werden unterstützt:

"All_Off" : Alle Eigenschaften deaktivieren. Die Einstellung ist dann sinnvoll, wenn Sie nur einige Absatzeingeschaften skalieren wollen. In diesem Fall beginnen Sie die Liste mit "All_Off", 0, 0.0, 0.0. Dadurch werden alle Eigenschaften abgeschaltet und Sie können dann die Liste mit den Eigenschaften fortführen, die Sie ändern wollen.

"LeftIndent"
"RightIndent"
"FirstLineIndent"
"SpaceBefore"
"SpaceAfter"
"RuleAbove_Stroke"
"RuleAbove_LeftIndent"
"RuleAbove_RightIndent"
"RuleAbove_Offset"
"RuleBelow_Stroke"
"RuleBelow_LeftIndent"
"RuleBelow_RightIndent"
"RuleBelow_Offset"
"WordSpace_Min"
"WordSpace_Desired"
"WordSpace_Max"
"LetterSpace_Min"
"LetterSpace_Desired"
"LetterSpace_Max"
"HyphenZone"
"Tabs" Es können nur entweder alle oder keine Tabulatorposition angepasst werden.

Flag ist ein Bitfeld mit folgenden Werten:

0 : Eigenschaft nicht ändern
1 : Eigenschaft ändern
2 : den Wertebereich, der durch Wert 3 und 4 definiert ist, beachten
4 : nur ganzzahlige Werte zulassen

Mit der Angabe 7 bewirken Sie also, dass die entsprechende Eigenschaft im angegebenen Bereich geändert werden kann, lassen aber nur ganzzahlige Werte zu. Mit 5 lassen Sie beliebige ganzahlige Werte zu, usw..

Die Werte 3 und 4 sind jeweils Minimal- und Maximalwert (float) und werden ignoriert, wenn im Flag das Bit 2 nicht gesetzt ist.
#include "internal/text.h"

Die Anweisung skaliert die Schriftgröße so, dass der Text genau in den Rahmen passt.

#include "internal/text.h"
#include "internal/types.h"
int main () { textmodel::scale_font ( 0, // current textmodel 0, kEnd, 1.1, // factor 1, // chunkwise 1, // leading 2); // check for overset return 0; }

Die Anweisung skaliert die Schriftgröße so, dass der Text genau in den Rahmen passt und passt gleichzeitgig einige Absatzeigenschaften an.

#include "internal/text.h"
#include "internal/types.h"
int main () { textmodel::scale_font ( 0, // current textmodel 0, kEnd, 1.1, // factor 1, // chunkwise 1, // leading 2, // check for overset 0, 0.0, 0.0, 0, "All_Off", 0, 0.0, 0.0, "RuleAbove_Stroke", 1, 0.0, 0.0, "RuleAbove_Offset", 1, 0.0, 0.0, "Tabs", 7, 10.0, 200.0); return 0; }

Version 2.1 R713, 14. Mai 2008
useSizesAsLimits seit Version 2.1 R835, 28. Juli 2008
paraScaleX und folgende seit Version 3.1 R1928, 10. Juni 2010

priint:comet InDesign® Plug-Ins
scale_text

static int textmodel::scale_text(
  ItemRef frameRef = 0,
  int pos = 0,
  int len = -1,
  float xscale = 0.0,
  int checkOverset = 1,
  int scaleInsets = 0)

Skalieren eines Textes oder Textbereiches. Bei der Skalierung werden alle Texteigenschaften (Absatz- und Zeichenstil) mit skaliert. Im Gegensatz zu scale_font können keine Grenzwerte für die Skalierungen angegeben werden. Die Funktion ist aber viel schneller und bearbeitet neben den Absatz- auch die Zeichen-Eigenschaften.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

Enthält der Text Tabellen, so können diese in der Regel nicht beliebig verkleinert werden. Die Funktion gibt dann nach einigen Versuchen mit dem Fehler tableInOversetErr (1259) auf.
frameRef ItemRef 0 Textrahmenreferenz

0 : aktueller Text
pos int 0 Startposition für die Textskalierung (0-basiert)

kSelection : aktuelle Textauswahl, len wird dann ignoriert
len int kEnd Anzahl der Zeichen, die skaliert werden sollen

kEnd : Textende
xscale float 0.0 Faktor für die Skalierung (1.0 entspricht 100 Prozent, 0.5 halbe Größe)

0.0 : Text so skalieren, dass der Rahmen ohne Übersatz gefüllt wird.
checkOverset int 1 Textübersatz nach der Skalierung prüfen?

0 : Nein, nicht prüfen
1 : Wenn nach der Skalierung ein Übersatz besteht, wird der Text solange verkleinert, bis der Übersatz behoben ist.

Bei xscale = 0.0 wird die Angabe ignoriert.
scaleInsets int 0 Abstände zum Rahmen (Insets) ebenfalls skalieren?

0 : Nein
1 : Ja
#include "internal/text.h"

Parameter scaleInsets seit v4.1.6 R25445, 9. Jul 2019
Version 2.1 R1926, 10. Juni 2010

priint:comet InDesign® Plug-Ins, Illustrator
scale_font

static int textmodel::link_to_file(
  ItemRef frameRef,
  char* path,
  int importStyleTable = 1,
  int importSwatchList = 1,
  int importXMPData = 1,
  int importXMLTagList = 1)

Verbinde den Rahmen des Textes mit einer InCopy-Datei (icnd) und lade den Inhalt der Datei in den Rahmen. Bestehender Text wird dabei ersetzt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmenreferenz

0 : aktueller Text
path String oder char* - Pfad auf die Datei, mit der der Rahmen verknüpft werden soll. Die Datei muss muss eine InCopy-Datei (incd) sein. Fehlt die Dateiendung, wird sie automatisch angefügt.
importStyleTable int 1 Absatz-, Zeichen-, Tabellen-, Zellen-, ... -stile importieren?
importSwatchList int 1 Farbdefinitionen importieren?
importXMPData int 1 XMP-Header importieren?
importXMLTagList int 1 XML-Tags importieren?
#include "internal/text.h"

Version 2.1 R1120, 14. Januar 2009

priint:comet InDesign® Plug-Ins

static int textmodel::export_and_create_link(
  ItemRef frameRef,
  char* path,
  int encoding = 0,
  int suppressStyleTable = 1,
  int suppressSwatchList = 1,
  int suppressXMPData = 1,
  int suppressXMLTagList = 1)

Exportiere den Text in eine InCopy-Datei (icnd) und verknüpfe den Rahmen mit dieser Datei.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmenreferenz

0 : aktueller Text
path String oder char* - Pfad auf die Datei, in die der Text exportiert werden soll. (incd) sein. Fehlt die Dateiendung, wird sie automatisch angefügt.
enc int 0 Zeichenkodierung

0 : UTF-8
1 : UTF-16
3 : Shift-JIS
suppressStyleTable int 0 Export der Absatz-, Zeichen-, Tabellen-, Zellen-, ... -stile unterdrücken? (auf Grund eines Fehlers in CS3 erst ab CS4 richtig unterstützt)
suppressSwatchList int 0 Export der Farbdefinitionen unterdrücken? (auf Grund eines Fehlers in CS3 erst ab CS4 richtig unterstützt)
suppressXMPData int 0 Export des XMP-Headers unterdrücken? (auf Grund eines Fehlers in CS3 erst ab CS4 richtig unterstützt)
suppressXMLTagList int 0 Export der XML-Tags unterdrücken? (auf Grund eines Fehlers in CS3 erst ab CS4 richtig unterstützt)
#include "internal/text.h"

Version 2.1 R1120, 14. Januar 2009

priint:comet InDesign® Plug-Ins

static int textmodel::export_html(
  char* outputFolder,
  char* outputName,
  int startPos = 0,
  int length = -1,
  int copyImages = 0,
  char* resultString = 0,
  char* title = 0,
  char* css = 0,
  int flags = 0)

Exportiert das Textmodell als HTML Datei.
Stilinformationen werden in einen seperaten Unterordner im Zielordner als .css Datei abgelegt.
Weitere Informationen finden Sie hier.

Name Typ Default Beschreibung
Return int   0 or ErrorCode
outputFolder String oder char* - Zielordner
outputName String oder char* - Name der Ausgabedatei (ohne Endung)
startPos int 0 Anfangsindex im Textmodell
length int -1 Länge im Textmodell (-1 = bis Ende)
copyImages int 0 Bilder verlinken oder kopieren? (0 = verlinken, 1 = kopieren)
resultString String oder char* 0 Ergebnis in diesen String schreiben. Wenn dieser Parameter übergeben wird, wird das Schreiben in eine Datei verhindert.
title String oder char* 0 Titel für das HTML Dokument (sonst wird der Dateiname verwendet)
css String oder char* 0 Pfad zu alternativem CSS oder String der CSS Stile enthält
flags int 0 Zusätzliche Exportoptionen
Kombination folgender Flags:
kExportUnsupported (Nicht HTML-Unterstützte Bildformate werden als .png exportiert)
kExportNonExisting (Nicht exisitierende Bilder werden aus den Previews als .png exportiert)
#include "internal/types.h"
#include "internal/text.h"

4.0.5 R8568

priint:comet InDesign® Plug-Ins
frame::export_html

static int textmodel::is_linked(ItemRef frameRef)

Ist der Textrahmen mit einer InCopy-Datei verbunden?

Name Typ Default Beschreibung
Return int   0 : Nein (oder Fehler)
1 : Ja
frameRef ItemRef - Textrahmenreferenz

#include "internal/text.h"

Version 2.1 R1120, 14. Januar 2009

priint:comet InDesign® Plug-Ins
get_linkpath

static char* textmodel::get_linkpath(ItemRef frameRef)

Vollständiger Pfad der InCopy-Datei, mit dem ein Textrahmen verbunden ist (oder leer).

Name Typ Default Beschreibung
Return char*   Vollständiger Pfad auf die verknüpfte InCopy-Datei. Ist der Rahmen nicht verlinkt, ist der Pfad leer.

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.

frameRef ItemRef - Textrahmenreferenz

#include "internal/text.h"

Version 2.1 R1120, 14. Januar 2009

priint:comet InDesign® Plug-Ins
is_linked

static int textmodel::inline_(
  int pos,
  ItemRef frameRef = 0,
  int flag = 1,
  float yoff = 0.0,
  int lock = 0)

Setze einen Rahmen als Inline-Rahmen in einen Text. Die Funktion kann auch dafür verwendet werden, die Eigenschaften eines bereits gesetzten Inlines oder Ankers an der gegebenen Stelle zu verändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
pos int - Textposition für den Inline-Rahmen (Eingebunden)
frameRef ItemRef 0 Rahmen, der zum Inline gemacht werden soll. Die Angabe darf leer sein, wenn flag = 2 ist. Wurde der Rahmen erforlgreich in ein Inline umgewandelt, enthält die Variable nach Ausführung der Funktion den neuen Rahmen, frameRef wird bei erfolgreicher Ausführung verändert!
flag int 1 Was soll gemacht werden, wenn an der Stelle schon ein Inline oder veranktertes Objekt liegt?

0 - trozdem anlegen
1 - löschen und neu anlegen
2 - nicht anlegen, aber Eigenschaften ändern
yoff float 0.0 y-Offset in Punkten
lock int 0 Manuelle Positionierung verhindern

0 : nein
1 : ja
#include "internal/text.h"

Für Beispiele siehe frame::anchor und frame::inline_.


Version 2.1 R1145, 28. Januar 2009

priint:comet InDesign® Plug-Ins, comet_pdf
inline_above
anchor
get_anchor
frame::inline_

static int textmodel::inline_above(
  int pos,
  ItemRef frameRef = 0,
  int flag = 1,
  int halign = 3,
  float spaceBefore = 0.0,
  float spaceAfter = 0.0,
  int lock = 0)

Setze einen Rahmen als Inline "über der Zeile"-Rahmen in einen Text. Die Funktion kann auch dafür verwendet werden, die Eigenschaften eines bereits gesetzten Inlines oder Ankers an der gegebenen Stelle zu verändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
pos int - Textposition für den Inline-Rahmen (über Zeile)
frameRef ItemRef 0 Rahmen, der zum Inline gemacht werden soll. Die Angabe darf leer sein, wenn flag = 2 ist. Wurde der Rahmen erforlgreich in ein Inline umgewandelt, enthält die Variable nach Ausführung der Funktion den neuen Rahmen, frameRef wird bei erfolgreicher Ausführung verändert!
flag int 1 Was soll gemacht werden, wenn an der Stelle schon ein Inline oder veranktertes Objekt liegt?

0 - trozdem anlegen
1 - löschen und neu anlegen
2 - nicht anlegen, aber Eigenschaften ändern
halign int 3 Ausrichtung des Inlines

0 : Rechts
1 : Zentriert
2 : Links
3 : (Textausrichtung)
4 : zum Buchrücken hin
5 : vom Buchrücken weg
spaceBefore float 0.0 "Abstand vor" in Punkten
spaceAfter float 0.0 "Abstand nach" in Punkten
lock int 0 Manuelle Positionierung verhindern

0 : nein
1 : ja
#include "internal/text.h"

Für Beispiele siehe frame::anchor und frame::inline_.


Version 2.1 R1145, 28. Januar 2009

priint:comet InDesign® Plug-Ins, comet_pdf
inline_
anchor
get_anchor
frame::inline_above

static int textmodel::anchor(
  int pos,
  ItemRef frameRef = 0,
  int flag = 1,
  int spine = 0,
  int ref_obj = 0,
  int ref_pt = 3,
  int xrel = 4,
  float xoff = 0.0,
  int yrel = 4,
  float yoff = 0.0,
  int keepWithin = 1,
  int lock = 0)

Setze einen Rahmen als verankerten Rahmen in einen Text. Die Funktion kann auch dafür verwendet werden, die Eigenschaften eines bereits gesetzten Inlines oder Ankers an der gegebenen Stelle zu verändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
pos int - Textposition für den verankerten Rahmens
frameRef ItemRef 0 Rahmen, der verankert werden soll. Die Angabe darf leer sein, wenn flag = 2 ist. Wurde der Rahmen erforlgreich in ein Inline umgewandelt, enthält die Variable nach Ausführung der Funktion den neuen Rahmen, frameRef wird bei erfolgreicher Ausführung verändert!
flag int 1 Was soll gemacht werden, wenn an der Stelle schon ein Inline oder veranktertes Objekt liegt?

0 - trozdem anlegen
1 - löschen und neu anlegen
2 - nicht anlegen, aber Eigenschaften ändern
spine int 0 Relativ zum Rücken

0 : Nein
1 : Ja
ref_obj int kRefPointTopLeft Ursprung verankertes Objekt

kRefPointTopLeft
kRefPointTopCenter
kRefPointTopRight
kRefPointLeftCenter
kRefPointCenter
kRefPointRightCenter
kRefPointBottomLeft
kRefPointBottomCenter
kRefPointBottomRight
ref_pt int kRefPointLeftCenter Ursprung verankertes Position. Achtung : Nicht alle Referenzpunkte werden von allen Einstellungen der anderen Parameter uterstützt.

kRefPointTopLeft
kRefPointTopCenter
kRefPointTopRight
kRefPointLeftCenter
kRefPointCenter
kRefPointRightCenter
kRefPointBottomLeft
kRefPointBottomCenter
kRefPointBottomRight
xrel int 4 x relativ zu

0 : Spaltenrand
1 : Textrahmen
2 : Seitenrand
3 : Seitenkante
4 : Ankermarke
xoff float 0.0 "x-Offset" in Punkten
yrel int 4 y relativ zu

0 : Spaltenrand
1 : Textrahmen
2 : Seitenrand
3 : Seitenkante
4 : Zeile (Grundlinie)
5 : Zeile (X-Höhe)
6 : Zeile (Großbuchstabenhöhe)
7 : Zeile (unterer Zeilenabstand)
8 : Zeile (oberer Zeilenabstand)
9 : Em-Box oben
10 : Em-Box mitte
11 : Em-Box unten
yoff float 0.0 "y-Offset" in Punkten
keepWithin int 1 Nicht aus Spaltengrenzen hinausbewegen

0 : nein
1 : ja
lock int 0 Manuelle Positionierung verhindern

0 : nein
1 : ja
#include "internal/types.h"
#include "internal/text.h"

Version 2.1 R1145, 28. Januar 2009

priint:comet InDesign® Plug-Ins, comet_pdf
inline_
inline_above
get_anchor
frame::anchor

static int textmodel::get_anchor(
  int pos,
  int len,
  int* out_pos,
  int* out_type = 0,
  ItemRef out_frameRef = 0,
  int* rel_to_spine = 0,
  int* refpoint_obj = 0,
  int* refpoint_pt = 0,
  int* xrel = 0,
  float* xoff = 0,
  int* yrel = 0,
  float* yoff = 0,
  int* keepWithin = 0,
  int* locked = 0,
  int* halign = 0,
  float* spaceBefore = 0,
  float* spaceAfter = 0,
  float* yoff_inline = 0 )

Ermittle die Eigenschaften eines Inline- oder verankerten Rahmens an einer Textstelle oder in einem Textbereich. Wurde ein Objekt gefunden, werden die Ergebnisvariablen gefüllt. Dabei werden nur die Variablen mit sinnvollen Werten gefüllt, die zum Objekttyp passen (siehe unten). Die Funktion hat sehr viele Parameter, die meisten können Sie wahrscheinlich auf 0 setzen, weil deren Werte nicht benötigt werden. Sie müssen aber immer die führenden Parameter angeben . Wollen Sie etwa die Eigenschaft locked wissen, müssen Sie nach out_frameRef 8 mal eine 0 (oder einen entsprechende Zeiger) angeben. Den Rest dahinter dürfen Sie dann aber weglassen. Ist ja auch was. Und was glauben Sie denn, mir hat das auch Arbeit gemacht!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode Der Fehlercode 0 (kein Fehler) bedeutet nicht, dass kein Inline oder verankerter Rahmen gefunden wurde. Ob ein solches Objekt gefunden wurde, gibt die Variable out_pos == -1 an.
pos int - Textposition, ab/an der ein verankertes Objekt gesucht werden soll. Die Angabe ist rahmenrelativ, nicht platzhalterrelativ.
len int - Länge des Textes, in dem gesucht werden soll (Minimum 1)

kEnd : Bis zum Textende
out_pos int* 0 Textposition, an der im durchsuchten Bereich ein verankertes Objekt gefunden wurde.
-1 : Kein Objekt gefunden
out_type int* 0 Typ des Objektes

0 : Inline
1 : Verankerter Rahmen
2 : über Linie
out_frameRef ItemRef 0 gefundener Rahmen. Wenn Sie eine Antwort ohne Absturz wollen, müssen Sie die Variable zuvor allokieren!
rel_to_spine int* 0 nur bei Ankern, out_type == 1 Relativ zum Rücken?
refpoint_obj int* 0 nur bei Ankern, out_type == 1 Ursprung verankertes Objekt
refpoint_pt int* 0 nur bei Ankern, out_type == 1 Ursprung verankertes Position
xrel int* 0 nur bei Ankern, out_type == 1 x relativ zu
xoff float* 0 nur bei Ankern, out_type == 1 x-Offset in Punkten
yrel int* 0 nur bei Ankern, out_type == 1 y relativ zu
yoff float* 0 nur bei Ankern, out_type == 1 y-Offset in Punkten
keepWithin int* 0 nur bei Ankern, out_type == 1 Nicht aus Spaltengrenzen hinausbewegen?
locked int* 0 out_type == 0 | 1 | 2 Manuelle Positionierung verhindern?
halign int* 0 nur bei Inlines über der Zeile, out_type == 2 Ausrichtung des Inlines
spaceBefore float* 0 nur bei Inlines über der Zeile, out_type == 2 "Abstand vor" in Punkten
spaceAfter float* 0 nur bei Inlines über der Zeile, out_type == 2 "Abstand nach" in Punkten
yoff_inline float* 0 nur bei Inlines, out_type == 0 y-Offset in Punkten
#include "internal/types.h"
#include "internal/text.h"

Für Beispiele siehe frame::anchor und frame::inline_above.


Version 2.1 R1145, 28. Januar 2009

priint:comet InDesign® Plug-Ins, comet_pdf
inline_
inline_above
anchor
frame::get_anchor

static int textmodel::set_parastyle(
  ItemRef frameRef,
  int startPos,
  int len,
  char* stylePath,
  int overrideLocals = 1,
  char* exceptThese = "")

Setze für alle Absätze im angegebenen Bereich einen Absatzstil. Ab CS4 können Stilvorlagen in Ordnerstrukturen verwaltet werden. In den Ordner-Pfaden wird ':' als Pfadtrenner verwendet. Ordner und Stile dürfen deshalb keine Doppelpunkte im Namen enthalten. In Textplatzhaltern ist die Funktion auf den für den Platzhalter verfügbaren Textbereich beschränkt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

0 : aktueller Text
startPos int - Startposition
>= 0 Textposition
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
len int - Anzahl der Zeichen

kEnd Textende
>=0 : Zeichenzahl
Ist start == kSelection hat die Längenangabe keine Bedeutung.
stylePath String oder char* - Stilname oder Pfad mit ':' als Delimiter
overrideLocals int 1 Lokale Einstellungen überschreiben? Hier die Beschreibung des Parameters im InDesign-Plugin-SDK von Adobe : IN whether to clear the overrides.

1 : Ja
0 : Nein
exceptThese String oder char* "" Diese Absatzstile nicht ändern. Die Angabe wird nur von comet_pdf ausgewertet!

Der String kann mehrere, auch nicht existierende Absatzstile enthalten. Einzelne Stilnamen werden durch Leerzeichen getrennt. Enthält ein Stilname Leerzeichen, muß der Name in Anführungszeichen gesetzt werden. Eine gültige Angabe wäre z.B.:

"aaa \"bbb\" ccc
#include "internal/types.h"
#include "internal/text.h"

Version 2.1, R 1580, 1. Okt. 2009
Parameter rmvOverrides seit v4.1.8 R29556

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator
frame::set_objectstyle
textmodel::set_charstyle
get_parastyle
comet.CTextModel.setParaStyle

static int textmodel::set_charstyle(
  ItemRef frameRef,
  int startPos,
  int len,
  char* stylePath,
  int overrideLocals)

Setze im angegebenen Bereich einen Zeichenstil. Ab CS4 können Stilvorlagen in Ordnerstrukturen verwaltet werden. In den Ordner-Pfaden wird ':' als Pfadtrenner verwendet. Ordner und Stile dürfen deshalb keine Doppelpunkte im Namen enthalten. In Textplatzhaltern ist die Funktion auf den für den Platzhalter verfügbaren Textbereich beschränkt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

0 : aktueller Text
startPos int - Startposition
>= 0 Textposition
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
len int - Anzahl der Zeichen

kEnd Textende
<=0 : Zeichenzahl
Ist start == kSelection hat die Längenangabe keine Bedeutung.
stylePath String oder char* - Stilname oder Pfad mit ':' als Delimiter
overrideLocals int 1 Lokale Eistellungen überschreiben? Hier die Beschreibung des Parameters im InDesign-Plugin-SDK von Adobe : IN whether to clear the overrides.

1 : Ja
0 : Nein
#include "internal/text.h"

Version 2.1, R 1580, 1. Okt. 2009
comet_pdf seit v4.2 R33590, 14. Oct 2023

priint:comet InDesign® Plug-Ins, Illustrator, comet_pdf
frame::set_objectstyle
textmodel::set_parastyle
get_charstyle
comet.CTextModel.setCharStyle

static char* textmodel::get_parastyle(
  ItemRef frameRef,
  int pos,
  int* runStart = 0,
  int* runLength = 0,
  int fullPath = 0)

Ermittle den Absatzstil einer Textstelle. In Textplatzhaltern ist die Funktion auf den für den Platzhalter verfügbaren Textbereich beschränkt.

Name Typ Default Beschreibung
Return char*   Absatzstil an der gegebenen Textstelle oder leer.

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.

frameRef ItemRef - Rahmen, der den Text enthält

0 : aktueller Text
pos int - Startposition

>= 0 Textposition
kSelection Aktuelle Textauswahl (nur InDesign)
runStart int* 0 Nach erfolgreicher Ausführung : 0-basierte Textposition, an der der Stil beginnt, darf 0 sein.
runLength int* 0 Nach erfolgreicher Ausführung : Länge des Stiles, darf 0 sein.
fullPath int 0 Soll nur der Name des Stils oder gegebenenfalls der gesamte Pfad des Stiles ermittelt werden?

0 : nur den Namen
1 : den gesamten Pfad
#include "internal/text.h"

Schreibe Absatz- und Zeichenstil der aktuellen Auswahl ins Log. Das Skript funktioniert nur unter InDesign!

int main ()
{
    int			start, len;
    char		str [8000];
strcpy (str, textmodel::get_parastyle (0, -2, &start, &len)); wlog ("", "# [%d, %d] : Parastyle '%s'\n", start, len, str);
strcpy (str, textmodel::get_charstyle (0, -2, &start, &len)); wlog ("", "# [%d, %d] : Charstyle '%s'\n", start, len, str);
return 0; }

Schreibe alle Absatzstile eines Textes in Logfile.

#include "internal/text.h"
int main () { int pos = 0, len; char * style;
while (1) { style = textmodel::get_parastyle (gFrame, pos, &pos, &len, 0); if (!style) break;
wlog ("", "[%d, %d] : '%s'\n", pos, pos+len, style);
pos = pos + len + 1; if (pos >= frame::textlength (gFrame)) break; }
return 0; }

Version 3.1 R1849, 4. Mai 2010

nameOnly seit Version 3.1 R1881, 26. Mai 2010

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator
set_parastyle
get_charstyle
comet.CTextModel.getParaStyle

static char* textmodel::get_charstyle(
  ItemRef frameRef,
  int pos,
  int* runStart = 0,
  int* runLength = 0,
  int nameOnly = 1)

Ermittle den Zeichenstil einer Textstelle. In Textplatzhaltern ist die Funktion auf den für den Platzhalter verfügbaren Textbereich beschränkt.

Name Typ Default Beschreibung
Return char*   Zeichenstil an der gegebenen Textstelle oder leer.

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.

frameRef ItemRef - Rahmen, der den Text enthält

0 : aktueller Text
pos int - Startposition
>= 0 Textposition
kSelection Aktuelle Textauswahl
runStart int* 0 Textposition, an der der Stil beginnt, 0-basiert, darf 0 sein.
runLength int* 0 Länge des Stiles, darf 0 sein.
nameOnly int 0 Soll nur der Name des Stils oder gegebenenfalls der gesamte Pfad des Stiles ermittelt werden?

0 : nur den Namen
1 : den gesamten Pfad (wenn es einen gibt)
#include "internal/text.h"
int main ()
{
    int			start, len;
    char		str [8000];
strcpy (str, textmodel::get_parastyle (0, -2, &start, &len)); wlog ("", "# [%d, %d] : Parastyle '%s'\n", start, len, str);
strcpy (str, textmodel::get_charstyle (0, -2, &start, &len)); wlog ("", "# [%d, %d] : Charstyle '%s'\n", start, len, str);
return 0; }

Version 3.1 R1849, 4. Mai 2010
nameOnly seit Version 3.1 R1881, 26. Mai 2010

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator
set_charstyle
get_parastyle
comet.CTextModel.getCharStyle

static int textmodel::find_surrounding_word(ItemRef frame, int* len = 0)

Ermittle den Beginn eines Wortes im Text. Optional kann die Wortlänge ermittelt werden.

Name Typ Default Beschreibung
Return int   Textposition des Wortanfanges oder -1 im Fehlerfall
frameRef ItemRef - Rahmen, der den Text enthält

0 : aktueller Text
startPos int - Startposition
>= 0 Textposition. In Platzhalterskripten wird die Position platzhalter-relativ verwendet. Das Funktionsergebnis ist trotzdem textrelativ.
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
len int* 0 Länge des Wortes in Zeichen
#include "internal/text.h"
int main ()
{	
    int		start 	= 0;
    int		p		= 0;
    int 	len;
    String	str		= string::alloc ();
while (1) { start = textmodel::find_surrounding_word (gFrame, start, &len); if (start < 0) break;
if (len) { p++; frame::gettext (gFrame, str, start, len); wlog ("", "Word %d : %d '%s'\n", p, start, string::get (str)); start += len; } else ++start;
}
return 0; }

Version 2.1, R 1590, 8. Okt. 2009

priint:comet InDesign® Plug-Ins, comet_pdf
find_surrounding_paragraph

static int textmodel::find_surrounding_paragraph(
  ItemRef frame,
  int startPos,
  int* len = 0,
  int placeholderRelative = 1)

Ermittle den Beginn eines Absatzes im Text. Optional kann die Absatzlänge ermittelt werden.

Name Typ Default Beschreibung
Return int   Textposition des Absatzanfanges oder -1 im Fehlerfall
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
startPos int - Startposition
>= 0 Textposition. In Platzhalterskripten wird die Position platzhalter-relativ verwendet. Das Funktionsergebnis ist trotzdem textrelativ
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
len int* 0 Länge des Absatzes in Zeichen. Die Länge enthält in jedem Fall das intern verwendete Absatzende-Zeichen.
placeholderRelative int 1 Ist die Startangabe relativ zum Textplatzplatzhalter oder zum gesamten Text?

1 . Ja, die Angabe ist relativ zum Platzhalter
0 : Nein, die Angabe bezieht sich auf den gesamten Text
#include "internal/text.h"

Lösche Absätze am Textende, bis der Text keinen Overset mehr erzeugt.

#include "internal/types.h"
#include "internal/text.h"
int main () { int pstart; int plen; int flen = frame::textlength (gFrame);
while (flen > 0 && frame::overset (gFrame, kFullChain)) { pstart = textmodel::find_surrounding_paragraph (gFrame, flen-1, &plen); if (pstart >= 0) { frame::replace_all (gFrame, "", pstart, kEnd, 0); flen = frame::textlength (gFrame); } else flen = 0;
} return 0; }

Schreibe alle Absätze getrennt ins Logfile. Achtung: Das Skript ist wegen wlog nicht geeignet für Dokumente mit Absätzen länger als 3000 Zeichen.

int main ()
{	
    int		start 	= 0;
    int		p		= 0;
    int 	len;
    String	str		= string::alloc ();
while (1) { start = textmodel::find_surrounding_paragraph (gFrame, start, &len); if (start < 0) break;
p++; frame::gettext (gFrame, str, start, len); wlog ("", "Para %d : %d '%s'\n", p, start, string::get (str));
if (len )start += len; else ++start; }
return 0; }

Version 2.1, R 1590, 8. Okt. 2009
Parameter placeholderRelative seit v3.3.1, R3212, 11. Okt. 2012

priint:comet InDesign® Plug-Ins
find_surrounding_word

static int textmodel::get_hyphenation(
  ItemRef frame,
  int textPos,
  int* method = 0,
  int* shortestWord = 0,
  int* minCharsBefore = 0,
  int* minCharsAfter = 0,
  int* ladderLimit = 0,
  float* zone = 0,
  int* capitalized = 0,
  int* weight = 0,
  int* lastWord = 0,
  int* acrossColumns = 0)

Ermittle die Eigenschaften der Silbentrennung, die in einem Absatz verwendet wird.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

0 : aktueller Text
textPos int - Textposition. Die Textposition darf beliebig innerhalb des Absatzes sein.
>= 0 Textposition
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im Übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
method int* 0 Methode für die Silbentrennung

0 : Aus
1 : Manuell
2 : Wörterbuch
3 : An
shortestWord int* 0 Kürzestes Wort, das getrennt werden darf
minCharsBefore int* 0 Soviel Zeichen müssen mind. auf der alten Zeile stehen bleiben
minCharsAfter int* 0 Soviel Zeichen müssen mind. auf die neue Zeile
ladderLimit int* 0 Höchstens soviel Zeilen dürfen hintereinander mit einem Trennzeichen enden
zone float* 0 Trennbereich in Punkten (0.0 - 8640.0)
capitalized int* 0 Worte aus Großbuchstaben trennen?
weight int* 0 Gewichtung, Zahl von 0-10

0 : Wortabstände optimieren
:
10 : Weniger Trennstriche
lastWord int* 0 Darf das letzte Wort getrennt werden?
acrossColumns int* 0 Darf zwischen Spalten (und verketteten Rahmen) getrennt werden?
#include "internal/text.h"

Version 2.1, R 1645, 6. Nov. 2009

priint:comet InDesign® Plug-Ins
set_hyphenation

static int textmodel::set_hyphenation(
  ItemRef frame,
  int textPos,
  int method = -1,
  int shortestWord = -1,
  int minCharsBefore = -1,
  int minCharsAfter = -1,
  int ladderLimit = -1,
  float zone = -1.0,
  int capitalized = -1,
  int weight = -1,
  int lastWord = -1,
  int acrossColumns = -1)

Ändern der Trennungsregeln eines Absatzes.

Name Typ Default Beschreibung
Return int   Textposition des Absatzanfanges oder -1 im Fehlerfall
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
textPos int - Textposition. Die Textposition darf beliebig innerhalb des Absatzes sein.
>= 0 Textposition
kSelection Aktuelle Textauswahl Befindet sich die Textauswahl im übersatz, kann sie nicht mehr eindeutig bestimmt werden. Mehr dazu siehe hier.
method int -1 Methode für die Silbentrennung. Wenn der neue Wert der Methode ungleich 3 ist, werden die anderen Einstellungen zur Silbentrennung ignoriert.

-1 : Unverändert lassen
0 : Aus
1 : Manuell
2 : Wörterbuch
3 : An
shortestWord int -1 Kürzestes Wort, das getrennt werden darf

-1 : Unverändert lassen
minCharsBefore int -1 Soviel Zeichen müssen mind. auf der alten Zeile stehen bleiben

-1 : Unverändert lassen
minCharsAfter int -1 Soviel Zeichen müssen mind. auf die neue Zeile

-1 : Unverändert lassen
ladderLimit int -1 Höchstens soviel Zeilen dürfen hintereinander mit einem Trennzeichen enden

-1 : Unverändert lassen
zone float -1.0 Trennbereich in Punkten (0.0 - 8640.0)

-1.0 : Unverändert lassen
capitalized int -1 Worte aus Großbuchstaben trennen?

-1 : Unverändert lassen
weight int -1 Gewichtung, Zahl von 0-10



-1 : Unverändert lassen 0 : Wortabstände optimieren
:
10 : Weniger Trennstriche
lastWord int -1 Darf das letzte Wort getrennt werden?

-1 : Unverändert lassen
acrossColumns int -1 Darf zwischen Spalten (und verketteten Rahmen) getrennt werden?

-1 : Unverändert lassen
#include "internal/text.h"

Alles ganz einfach, nur Schreibarbeit. Beachten Sie aber beim Abholen der Werte, dass die Variablen ein & vorangestellt bekommen.

#include "internal/types.h"
#include "internal/text.h"
int main () { int method, shortestWord, minCharsBefore; int minCharsAfter, ladderLimit; float zone; int capitalized, weight, lastWord, acrossColumns;
textmodel::set_hyphenation (0, kSelection,   -1, // method   10, // shortest word   9, // minCharsBefore   8, // minCharsAfter   7, // ladderLimit   6.0, // zone   5, // weight (moderat)   );
textmodel::get_hyphenation (0, kSelection,   &method,   &shortestWord,   &minCharsBefore,   &minCharsAfter,   &ladderLimit,   &zone,   &capitalized,   &weight,   &lastWord,   &acrossColumns);
wlog ("", "Hyphenation :\n"); wlog ("", " Method %d\n", method); wlog ("", " ShortestWord %d\n", shortestWord); wlog ("", " MinCharsBefore %d\n", minCharsBefore); wlog ("", " MinCharsAfter %d\n", minCharsAfter); wlog ("", " LadderLimit %d\n", ladderLimit); wlog ("", " Zone %f\n", zone); wlog ("", " Capitalized %d\n", capitalized); wlog ("", " Weight %d\n", weight); wlog ("", " LastWord %d\n", lastWord); wlog ("", " AcrossColumns %d\n", acrossColumns);
return 0; }

Version 2.1, R 1645, 6. Nov. 2009

priint:comet InDesign® Plug-Ins
get_hyphenation

static int textmodel::select(
  ItemRef frame,
  int start,
  int len,
  int scrollIntoView = 1)

Textauswahl im Dokument setzen

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
start int - Neue Startposition für die Textauswahl
len int - Länge der Textauswahl
scrollIntoView int 1 Auswahl in den sichtbaren Fensterbereich scrollen?

1 : Ja
0 : Nein
#include "internal/text.h"

Version 3.2 R1920, 06.06.2010
Parameter scrollIntoView seit v4.1.6 R26333, 18. Nov. 2019

priint:comet InDesign® Plug-Ins

static int textmodel::create_cometgroup(
  ItemRef frame,
  int start,
  int len,
  int colorID = 0)

Verbinde den angegebenen Textbereich zu einer Comet-Textgruppe.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
start int - Beginn der Textgruppe
len int - Länge der Textgruppe
colorID int automatisch Farabe für die Textgruppe. Sie geben den Index einer Farbe des aktuellen Datenpools an. Fehlt die Angabe, wird automatisch eine Farbe ausgewählt.
#include "internal/text.h"

Anlegen einer Comet-Textgruppe für die aktuelle Textauswahl.

#include "internal/text.h"
#include "internal/types.h"
int main () { textmodel::create_cometgroup (0, kSelection, 0, 3); return 0; }

Version 3.2 R1920, 06.06.2010

priint:comet InDesign® Plug-Ins

static int textmodel::resolve_cometgroup(
  ItemRef frame,
  int pos,
  int len)

Auflösen einer Comet-Textgruppe.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
pos int - Beliebige Textposition der bestehenden Gruppe
len int 0 Länge des Bereiches, aus dem die Comet-Textgruppen entfernt werden sollen. Es werden alle Gruppen gelöscht, die ganz oder teilweise in dem angegebenen Bereich liegen.
#include "internal/text.h"

Auflösen der Comet-Textgruppe am Beginn der aktuellen Textauswahl.

#include "internal/text.h"
#include "internal/types.h"
int main () { textmodel::resolve_cometgroup (0, kSelection, 0); return 0; }

Version 3.2 R1920, 06.06.2010

priint:comet InDesign® Plug-Ins

static int textmodel::get_cometgroup(
  ItemRef frame,
  int pos,
  int* start = 0,
  int* endpos = 0,
  IDType ids = 0,
  ...)

Informationen zur Identifizierung einer Comet-Textgruppe holen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
pos int - Beliebige Textposition der bestehenden Gruppe
start int* 0 Anfang der Gruppe (0-basiert). Darf 0 sein.
endpos int* 0 Ende der Gruppe (0-basiert). Darf 0 sein.
ids IDType 0 Angaben zur Identifizierung der Gruppe.

Darf 0 sein.
... String oder char*, int* oder (String oder char*) 0 Beliebig lange Liste aus Paaren von Wertename und Variable für den Wert. Als Name/Wert dürfen alle auch bei "normalen" Platzhaltern definierten Angaben verwendet werden (siehe hier).
#include "internal/text.h"
#include "internal/text.h"
#include "internal/types.h"
int main () { IDType tid = idtype::alloc (); int start, endPos; int colid;
textmodel::get_cometgroup (0, kSelection, &start, &endPos, tid, "Color", &colid); wlog ("", "#Comet-Textgroup [%d, %d] : %d-%d, %d (%s), Color %d\n",   start, endPos,   idtype::id (tid),   idtype::id2 (tid),   idtype::id3 (tid),   idtype::stringid (tid),   colid);
textmodel::change_cometgroup (0, 12, "Color", 3); textmodel::select_cometgroup (0, 12); return 0; }

Version 3.2 R1920, 06.06.2010

priint:comet InDesign® Plug-Ins

static int textmodel::change_cometgroup(
  ItemRef frame,
  int pos,
  char* slot,
  int value)

Ändern der Werte einer Text-Cometgruppe.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
pos int - Beliebige Textposition der bestehenden Gruppe
slot String oder char* - Welcher Wert soll geändert werden? Sie können außer "Format" alle Werte verwenden, die auch für Platzhalter verwendet werden können (siehe Platzhalter ändern), aber bisher wertet der Comet-Textplatzhalter nur die Farbe ("Color") aus.
value int/String oder char* - Neuer Wert des Slots. Über den Datentyp siehe hier.
#include "internal/text.h"
#include "internal/text.h"
#include "internal/types.h"
int main () { IDType tid = idtype::alloc (); int start, endPos;
textmodel::get_cometgroup (0, kSelection, &start, &endPos, tid); wlog ("", "#Comet-Textgroup [%d, %d] : %d-%d (%s), color %d\n",   start, endPos,   idtype::id (tid),   idtype::id2 (tid),   idtype::stringid (tid),   idtype::id3 (tid));
textmodel::change_cometgroup (0, 12, "Color", 3); textmodel::select_cometgroup (0, 12); return 0; }

Version 3.2 R1920, 06.06.2010

priint:comet InDesign® Plug-Ins

static int textmodel::select_cometgroup(ItemRef frame, int pos)

Auswahl einer Text-Cometgruppe.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Rahmen, der den Text enthält

aktueller Text
pos int - Beliebige Textposition der bestehenden Gruppe
#include "internal/text.h"
#include "internal/text.h"
#include "internal/types.h"
int main () { textmodel::select_cometgroup (0, kSelection); return 0; }

Version 3.2 R1920, 06.06.2010

priint:comet InDesign® Plug-Ins

static int textmodel::use_global_index(int state = 1)

In den meisten textmodel-Funktionen werden Positions- und Längenangaben platzhalterrelativ verwendet. So kann man mit den Funktionen textmodel::get_parastyle und textmodel::set_parastyle Absatzstile zwar ermitteln und ändern - aber eben innerhalb des Platzhalters.

Wird use_global_index Funktion ohne Parameter oder mit 1 als erstem Parameter ausgeführt, interptretiert der nächste Aufruf einer platzhalterbezogenen Textfunktion seine Positionsangaben relativ zum gesamten Text. (0 ist dann also der Textanfang und nicht mehr der Platzhalteranfang). Die Einstellung gilt jeweils für einen Aufruf und wird danach wieder zurückgesetzt.

Achtung : Das gilt wie gesagt für alle Textfunktionen mit platzhalterbezogenen Textindexen. Also z.B. auch für textmodel::insert. textmodel::insert ("aa", 0) fügt dann den Text "aa" nicht am Platzhalteranfang sondern am Textanfang ein.

Name Typ Default Beschreibung
Return int   Der Rückgabewert kann ignoriert werden.
state int 1 1 : Der nächste Aufruf einer platzhalterbezogenen Textfunktion interptretiert seine seine Positionsangaben relativ zum gesamten Text. Danach wird die Einstellung zurückgesetzt.

0 : Einstellung zurücksetzen
#include "internal/text.h"
int main ()
{
    textmodel::use_global_index ();
    textmodel::set_parastyle (gFrame, 0, 1, "Mein Stil");
    textmodel::use_global_index ();
    textmodel::insert ("aaa", 3);
return 0; }

Version 3.3 R2511, 17.06.2010

priint:comet InDesign® Plug-Ins

static int textmodel::set_color(
  ItemRef frameRef,
  int start,
  int len,
  char* colName,
  float tint = 100.0)

Setzen der Textfarbe. Die Farbe muss als Farbfeld definiert sein und wird über diesen Namen angesprochen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmen

0 : aktueller Textrahmen
start, len int, int -, - Textindex (textmodel-basiert)
colName String oder char* - Name der Farbe aus den Farbfeldern oder Standardfarbe
tint float 100.0 Farbstärke(0.0 - 100.0)
#include "internal/text.h"

v3.3 R2580, 1. Aug. 2011

priint:comet InDesign® Plug-Ins
set_color_rgb
set_color_cmyk
comet.CTextModel.setColor

static int textmodel::set_color_rgb(
  ItemRef frameRef,
  int start,
  int len,
  int r,
  int g,
  int b)

Setzen der Textfarbe. Die Farbe wird über ihre RGB-Anteile definiert.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmen

0 : aktueller Textrahmen
start, len int, int -, - Textindex (textmodel-basiert)
r, g, b int, int, int -, -, - RGB-Anteile der Farbe (0-255)
#include "internal/text.h"

v3.3 R2580, 1. Aug. 2011

priint:comet InDesign® Plug-Ins
set_color_rgb
set_color_cmyk

static int textmodel::set_color_cmyk(
  ItemRef frameRef,
  int start,
  int len,
  float c,
  float m,
  float y,
  float k)

Setzen der Textfarbe. Die Farbe wird über ihre CMYK-Anteile definiert.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmen

0 : aktueller Textrahmen
start, len int, int -, - Textindex (textmodel-basiert)
c. m, y, k 4 floats -, -, -, - CMYK-Anteile der Farbe (0.0 - 1.0)
#include "internal/text.h"

v3.2.3 R2600, 14.08.2011

priint:comet InDesign® Plug-Ins
set_color_rgb
set_color_cmyk

static int textmodel::solve_overset(ItemRef frameRef, int method = 2)

Beseitigen von Textübersatz durch Einfügen neuer Seiten mit zuätzlichen Textrahmen. Drei Methoden zum Anlegen der Textrahmen werden unterstützt:

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Textrahmen

0 : aktueller Textrahmen
method int 2 Methode zum Auflösen des übersatzes

0 : Kopiere den letzten Rahmen der Textkette seitenfüllend auf eine neue Seite und verlinke den neuen Rahmen mit der Textkette.

1 : Kopiere den letzten Rahmen der Textkette mit gleicher Größe und Position auf eine neue Seite und verlinke den neuen Rahmen mit der Textkette.

2 : Lege neue Textrahmen gemäß dem definierten Seitentemplate an. Enthält das Seitentemplate keine Textelemente, bricht die Funktion mit Fehler pageTemplateEmptyErr (= 1271) ab. Ist kein Seitentemplate definiert, wird der Text mit Kopien des letzten Rahmens der Textkette forgesetzt.
#include "internal/text.h"

v3.3 R2892, 07.05.2012

priint:comet InDesign® Plug-Ins, comet_pdf

static int textmodel::get_boundary_length(
  ItemRef frameRef,
  int pos,
  int* minPos = 0)

Bestimme die Länge eines Textstückes in Zeichen. Zeichen sind in diesem Falle die Zeichen im InDesign®-Dokument, nicht Bytes eines Strings. Zeigt die Position in eine Tabellenzelle, bekommen Sie Anzahl der Zeichen, die in dieser Zelle enthalten sind. Sonst bekommen Sie die Länge des Textes OHNE Zelleninhalte. Verwenden Se diese Funktion, um zu ermitteln, wieviel Zeichen ein insert, append, ... ins Dokument eingefügt hat.

Name Typ Default Beschreibung
Return int   Anzahl der Zeichen im Textbereich. Zeichen sind in diesem Falle die Zeichen im InDesign®-Dokument, nicht Bytes eines Strings. Zeigt die Position in eine Tabellenzelle, bekommen Sie Anzahl der Zeichen, die in dieser Zelle enthalten sind. Sonst bekommen Sie die Länge des Textes OHNE Zelleninhalte.
frameRef ItemRef - Textrahmen

0 : aktueller Skriptrahmen
pos int - Textindex. Der Index ist textmodel-relativ, nicht platzhalter-relativ.
minPos int* 0 An dieser Stelle beginnt das Textstück
#include "internal/text.h"

Aufbau eines Textes vor einem Textplatzhalter. Der eingefügte Text soll nicht zum Platzhalter gehören.

int myInsertBefore (int * pos, char * txt)
{
    int			oldLen		= textmodel::get_boundary_length (gFrame, *pos);
    int			inserted	= 0;
textmodel::use_global_index (); textmodel::insert (txt, *pos);
inserted = textmodel::get_boundary_length (gFrame, *pos) - oldLen; pos = *pos + inserted; if (inserted <= 0) return 0;
textmodel::use_global_index (); textmodel::clear_placeholders (*pos-inserted, inserted, gFrame);
return 0; }
int main () { int pos = gStart;
myInsertBefore (&pos, "QWERTZU123456789"); myInsertBefore (&pos, "abcdefgäö"); myInsertBefore (&pos, "---");
return 0; }

v3.3 R3243, 30.10.2012

priint:comet InDesign® Plug-Ins

static int textmodel::create_outlines(
  ItemRef frameRef,
  int deleteOriginal = 1,
  int pos = 0,
  int len = -1)

Umwandeln von Text in Pfade. Der Befehl entspricht dem Menübefehl Schrift -> In Pfade umwandeln.

Wenn Sie die Umwandlung von Text in Pfade zur Vorbereitung eines PDF-Export machen, sollten Sie voher lesen, wie Sie mit dem Standard-PDF-Export von Indesign Text in Pfade umwandeln können.wie Sie ein PDF-Preset erstellen können, das

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
deleteOriginal int 1 Soll der alte Textrahmen gelöscht werden, wenn der gesamte Text umbewandelt wird?

0 : Nein, alten Rahmen behalten
1 : Ja, alten Rahmen löschen
pos int 0 Globaler Textindex, ab dem die Buchstaben in Pfade umgewandelt werden sollen.
len int -1 Anzahl der Buchstaben

kEnd (-1) : Bis zum Textende

v4.3 R35770, 3 Dez. 2024

priint:comet InDesign® Plug-Ins
document::pdf_export
app.comet.documentGeneratePDF

static int textmodel::dump(
  ItemRef frameRef = 0,
  int textpos = 0,
  int doPrint = 0,
  char* headline = 0,
  char* w2_info1 = 0,
  char* w2_info2 = 0,
  char* w2_info3 = 0,
  char* w2_info4 = 0)

Schreibe den Inhalt des gegebenen Textmodelles ins Logfile.

Der Aufruf hat nur für comet_pdf eine Bedeutung. In InDesign® wird lediglich eine Notiz, dass der Aufruf erreicht wurde, ins Log geschrieben.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
headline String oder char* "textmodel::dump" überschrift der Ausgabe
textPos int 0 Index des gewünschten Textes

0 : Haupttext des Rahmens sonst : Interner Textindex einer Tabellenzelle, siehe table::cell::get_textpos
doPrint int 0 Ausgabe auch in Termninal schreiben? 0 : Nein, nur ins Logfile schreiben
1 : Ausgabe (auch) in Terminal schreiben
w2_info1, ... w2_info4 String oder char* - Enthält der Text Platzhalter (w2), können Sie hier angeben, welche Werte des Platzhalters ausgegeben werden sollen. Sie können bis zu vier Namen für Platzhalterwerte festlegen.
#include "internal/text.h"

v4.0.5 R11011, 2. Mai 2016
Parameter doPrint seit v4.1.8 R30317

priint:comet InDesign® Plug-Ins, comet_pdf

Die folgenden Funktionen dienen der Unterstützung chinesischer, japanischer und koreanischer (CJK) Schriftsysteme. Diese Schriftsysteme werden von allen InDesign®-Versionen unterstützt. Aber zum Setzen der Eigenschaften benötigen Sie ein InDesign® in spezieller Lokalisierung. Damit Basiseigenschaften der CJK-Schriftsysteme auch mit anderen InDesigns® gesetzt werden, haben wir für die wichtigsten Textattribute Skriptbefehle erstellt. Die Implementierung erhebt keinen Anspruch auf Vollständigkeit!

Mit Hilfe des Menüs Schrift -> Textorientierung -> Vertikal können Sie die Textrichtung in einem Rahmen manuell ändern.

static int textmodel::set_orientation(ItemRef frameRef = 0, int orientation = 0)

Textorientierung setzen. Texte können horizontal oder vertikal orientiert sein.

Textorientierungen gelten immer für die gesamte Rahmenkette. Die Funktion ändert daher immer alle Rahmen einer Textkette!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
orientation int 0 Textorientierung

0 : horizontal
1 : vertikal
#include "internal/text.h"

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.setOrientation

static int textmodel::get_orientation(ItemRef frameRef = 0)

Textorientierung eines Textes ermitteln.

Name Typ Default Beschreibung
Return int   -1 : Fehler
0 : horizontal
1 : vertikal
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
#include "internal/text.h"

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.getOrientation

static int textmodel::set_composer(
  ItemRef frameRef = 0,
  int pos = 0,
  int len = -1,
  int composer = 1)

Definiere den Absatzsetzer für einen Text.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition. Der neue Absatzsetzer gilt vom Beginn des Absatzes, in dem die Startposition liegt.
len int kEnd Anzahl der Zeichen, für die der Absatzsetzer festgelegt werden soll. Der neue Absatzsetzer gilt mindestens bis zum Absatzende.

kEnd : Bis zum Textende
composer int 1 Text-Setzer

1 : Adobe Absatzsetzer
2 : Adobe Ein-Zeilen-Setzer
3 : Adobe Japanese Paragraph Composer
4 : Adobe Japanese Single-line Composer
5 : Globaler Adobe Absatzsetzer (für Arabisch, ...)
6 : Globaler Adobe Ein-Zeilen-Setzer (für Arabisch, ...)
7 : Adobe Linnaeus Absatzsetzer
#include "internal/text.h"

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.setComposer

static int textmodel::get_composer(
  ItemRef frameRef = 0,
  int pos = 0,
  int* len = 0)

Mit welchem Verfahren wurde der Textabsatz gesetzt?

Name Typ Default Beschreibung
Return int   -1 : Fehler

1 : Adobe Absatzsetzer
2 : Adobe Ein-Zeilen-Setzer
3 : Adobe Japanese Paragraph Composer
4 : Adobe Japanese Single-line Composer
5 : Globaler Adobe Absatzsetzer (für Arabisch, ...)
6 : Globaler Adobe Ein-Zeilen-Setzer (für Arabisch, ...)
7 : Adobe Linnaeus Absatzsetzer
sonst : Unbekannt
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int* 0 Anzahl der Zeichen von pos gezählt, für die das Attribut noch gilt

0 : ignorieren
#include "internal/text.h"

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.getComposer

static int textmodel::set_tatechuyoko(
  ItemRef frameRef = 0,
  int pos = 0,
  int len = 1,
  int state = 0,
  float xoffset = -1000000.0,
  float yoffset = -1000000.0)

Tate-chu-yoko anwenden. Tate-chu-yoko ist die horizontale Darstellung eines (kurzen) Textteiles in vertikalen Texten. Hier zwei Abbildungen des Effektes:

   ⇒ 

Tate-chu-yoko kann nur in vertikalen Texten mit dem Textsetzer Adobe Japanese Paragraph Composer oder Adobe Japanese Single-line Composer gesetzt und erfragt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int 1 Anzahl der Zeichen, auf die das Attribut angewendet werden soll
state int 0 Tate-chu-yoko setzen?

0 : Nein
1 : Ja
x, y float, float -10000000.0, -1000000.0 Offset in Punkten

<= -1000000.0 : ignorieren
#include "internal/text.h"
		
#include "internal/text.h"
int main ()
{
    int			len;
    float		x, y;
    int			tatechuyoko;
tatechuyoko = textmodel::get_tatechuyoko (gFrame, kSelection, &len, &x, &y); wlog ("", "tatechuyoko %d (%f %f) , %d more letters", tatechuyoko, x, y, len);
textmodel::set_tatechuyoko (gFrame, kSelection, -1, 1, 2.0, 3.0);
tatechuyoko = textmodel::get_tatechuyoko (gFrame, kSelection, &len, &x, &y); wlog ("", "tatechuyoko %d (%f %f) , %d more letters", tatechuyoko, x, y, len);
return 0; }

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.setTatechuyoko

static int textmodel::get_tatechuyoko(
  ItemRef frameRef = 0,
  int pos = 0,
  int* len = 0,
  float* xoffset = 0,
  float* yoffset = 0)

Tate-chu-yoko Enstellungen erfragen, siehe set_tatechuyoko.

Tate-chu-yoko kann nur in vertikalen Texten mit dem Textsetzer Adobe Japanese Paragraph Composer oder Adobe Japanese Single-line Composer gesetzt und erfragt werden.

Name Typ Default Beschreibung
Return int   -1 : Fehler
0 : Nein
1 : Ja, horizontaler Text in vertikalem japanischen Text
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int* 0 Anzahl der Zeichen von pos gezählt, für die das Attribut noch gilt und die gleichen Offsets hat.

0 : ignorieren
x, y float*, float* 0, 0 Offset in Punkten

0 : ignorieren
#include "internal/text.h"
		
#include "internal/text.h"
int main ()
{
    int			len;
    float		x, y;
    int			tatechuyoko;
tatechuyoko = textmodel::get_tatechuyoko (gFrame, kSelection, &len, &x, &y); wlog ("", "tatechuyoko %d (%f %f) , %d more letters", tatechuyoko, x, y, len);
textmodel::set_tatechuyoko (gFrame, kSelection, -1, 1, 2.0, 3.0);
tatechuyoko = textmodel::get_tatechuyoko (gFrame, kSelection, &len, &x, &y); wlog ("", "tatechuyoko %d (%f %f) , %d more letters", tatechuyoko, x, y, len);
return 0; }

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
set_tatechuyoko
comet.CTextModel.getTatechuyoko

static int textmodel::set_shatai(
  ItemRef frameRef = 0,
  int pos = 0,
  int len = -1,
  float magnification = 0.0,
  float angle = 45.0,
  int tsume = 0,
  int adjustRotation = 0)

Shatai anwenden. Hier die Erklärung von Adobe:

In traditional typesetting technology, characters were slanted by using a lens to distort the glyphs when being set on film. This oblique style is known as shatai. Shatai is distinct from a simple slant of the glyphs, because it also scales the glyphs. You can adjust the magnification or angle of text you want to slant from the center point, without changing the height of the glyph, using the shatai feature in InDesign®.

Um die Shatai-Optionen zu setzen, sind folgende Angaben nötig :

Hier ein Screenshot verschiedener Shatai-Einstellungen:

A. Ohne Skalierungen, B. Magnification 30%, 45 shatai, C. Mit tsume, D. Mit adjustRotation

Shatai kann nur in vertikalen Texten mit dem Textsetzer Adobe Japanese Paragraph Composer oder Adobe Japanese Single-line Composer gesetzt und erfragt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int kEnd Anzahl der Zeichen, auf die der Shatai angewendet werden soll
magnification int 0.0 siehe oben
angle int 45.0 siehe oben
tsume int 0 siehe oben

0 : nein
1 : ja
adjustRotation int 0 siehe oben

0 : nein
1 : ja
#include "internal/text.h"
		
#include "internal/text.h"
int main ()
{
    int			len;
    int			adjustRota, tsume;
    float		angle, magni;
textmodel::get_shatai (gFrame, kSelection, &len, &magni, &angle, &tsume, &adjustRota); wlog ("", "%d ::: %f, %f %d %d", len, magni, angle, tsume, adjustRota);
textmodel::set_shatai (gFrame, kSelection, -1, 30.0, 45.0, 0, 0);
textmodel::get_shatai (gFrame, kSelection, &len, &magni, &angle, &tsume, &adjustRota); wlog ("", "%d ::: %f, %f %d %d", len, magni, angle, tsume, adjustRota);
return 0; }

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.setShatai

static int textmodel::get_shatai(
  ItemRef frameRef = 0,
  int pos = 0,
  int* len = 0,
  float* magnification = 0,
  float* angle = 0,
  int* tsume = 0,
  int* adjustRotation = 0)

Shatai-Einstellungen erfragen, siehe set_shatai.

Shatai kann nur in vertikalen Texten mit dem Textsetzer Adobe Japanese Paragraph Composer oder Adobe Japanese Single-line Composer gesetzt und erfragt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int* 0 Anzahl der Zeichen, gezählt von pos aus, auf die der Shatai mit gleichen Einstellungen angewendet wird

0 : ignorieren
magnification int* 0 siehe set_shatai

0 : ignorieren
angle int* 0 siehe set_shatai

0 : ignorieren
tsume int* 0 siehe set_shatai

0 : ignorieren
adjustRotation int* 0 siehe set_shatai

0 : ignorieren
#include "internal/text.h"
		
#include "internal/text.h"
int main ()
{
    int			len;
    int			adjustRota, tsume;
    float		angle, magni;
textmodel::get_shatai (gFrame, kSelection, &len, &magni, &angle, &tsume, &adjustRota); wlog ("", "%d ::: %f, %f %d %d", len, magni, angle, tsume, adjustRota);
textmodel::set_shatai (gFrame, kSelection, -1, 30.0, 45.0, 0, 0);
textmodel::get_shatai (gFrame, kSelection, &len, &magni, &angle, &tsume, &adjustRota); wlog ("", "%d ::: %f, %f %d %d", len, magni, angle, tsume, adjustRota);
return 0; }

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
set_shatai
comet.CTextModel.getShatai

static int textmodel::set_warichu(
  ItemRef frameRef = 0,
  int pos = 0,
  int len = -1,
  int state = 0,
  int numLines = 2,
  float relativeSize = 0.5,
  float lineSpacing = 0.0,
  int alignment = 0,
  int minCharsBeforeBreak = 2,
  int minCharsAfterBreak = 2,
  int resizeParent = 0)

Warichu anwenden. Warichu setzt Textteile innerhalb eines Texts kleiner und mehrzeilig. Hier ein Screenshot eines Warichu, das mit den Einstellungen des Beispieles erzeugt wurde:

Warichu kann nur in vertikalen Texten mit dem Textsetzer Adobe Japanese Paragraph Composer oder Adobe Japanese Single-line Composer gesetzt und erfragt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int kEnd Anzahl der Zeichen, auf die das Warichu angewendet werden soll
state int 0 Einschalten?
numLines int 2 Anzahl der Zeilen
relativeSize float 0.5 Relative Größe der Zeichen in Prozent, 1.0 für 100%
lineSpacing float 0.0 Zeilenabstand in Punkten
alignment int 0 Ausrichtung im Warichcu:

kLeft
kCenter
kRight
kJustify
kJustifyLeft
kJustifyCenter
kJustifyRight
kJustifyAuto
kJustifyToBinding
kJustifyAwayBinding
minCharsBeforeBreak int 2 Minimale Zeichenzahl vor Zeilenumbrüchen im Warichu
minCharsAfterBreak int 2 Minimale Zeichenzahl nach Zeilenumbrüchen im Warichu
resizeParent int 0 -
#include "internal/text.h"
#include "internal/text.h"
int main () { int len; int state, lines, align, charsBefore, charsAfter, resizeParent; float sz, spacing;
textmodel::set_warichu (gFrame, kSelection, -1,   1,   3,   0.3,   3.0,   1,   3, 3,   0);
textmodel::get_warichu (gFrame, kSelection, &len,   &state,   &lines,   &sz,   &spacing,   &align,   &charsBefore, &charsAfter,   &resizeParent); wlog ("", "warichu ... %d : %d, %d, %f, %f, %d, %d, %d, %d\n", len,   state,   lines,   sz,   spacing,   align,   charsBefore, charsAfter,   resizeParent);
return 0; }

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
get_warichu
comet.CTextModel.setWarichu

static int textmodel::get_warichu(
  ItemRef frameRef = 0,
  int pos = 0,
  int* len = 0,
  int* state = 0,
  int* numLines = 0,
  float* relativeSize = 0,
  float* lineSpacing = 0,
  int* alignment = 0,
  int* minCharsBeforeBreak = 0,
  int* minCharsAfterBreak = 0,
  int* resizeParent = 0)

Warichu-Einstellungen erfragen, siehe set_warichu.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef 0 Textrahmen

0 : aktueller Textrahmen
pos int 0 Textposition
len int 0 Anzahl der Zeichen, gezählt von pos aus, auf die der Warichu mit gleichen Einstellungen angewendet wird
state int* 0 siehe set_warichu

0 : ignorieren
numLines int* 0 siehe set_warichu

0 : ignorieren
relativeSize float* 0 siehe set_warichu

0 : ignorieren
lineSpacing float* 0 siehe set_warichu

0 : ignorieren
alignment int* 0 siehe set_warichu

0 : ignorieren
minCharsBeforeBreak int* 0 siehe set_warichu

0 : ignorieren
minCharsAfterBreak int* 0 siehe set_warichu

0 : ignorieren
resizeParent int* 0 siehe set_warichu

0 : ignorieren
#include "internal/text.h"
#include "internal/text.h"
int main () { int len; int state, lines, align, charsBefore, charsAfter, resizeParent; float sz, spacing;
textmodel::set_warichu (gFrame, kSelection, -1,   1,   3,   0.3,   3.0,   1,   3, 3,   0);
textmodel::get_warichu (gFrame, kSelection, &len,   &state,   &lines,   &sz,   &spacing,   &align,   &charsBefore, &charsAfter,   &resizeParent); wlog ("", "warichu ... %d : %d, %d, %f, %f, %d, %d, %d, %d\n", len,   state,   lines,   sz,   spacing,   align,   charsBefore, charsAfter,   resizeParent);
return 0; }

v4.0.5 R12350, 1. Aug 2016

priint:comet InDesign® Plug-Ins
comet.CTextModel.getWarichu

Obwohl nur entsprechend lokalisierte InDesign®-Versionen die Möglichkeiten zum Einstellen linksläufiger Dokumente und Texte wie Arabisch oder Hebräisch bieten, kann jede InDesign®-Version trotzdem mit Text, der von rechts nach links läuft, umgehen.

Hier drei Möglichkeiten, wie Sie auch in einem 'normalen' die Seitenbindung ändern können:

  1. Parameter bindingDirection der Funktion document::create
  2. [seit v4.3 R34060] Menü Schrift -> Seitenbindung
  3. Javascript
    app.documents[0].documentPreferences.pageBinding = PageBindingOptions.RIGHT_TO_LEFT; // LEFT_TO_RIGHT

    Wenn Sie diese Zeile in eine Datei mit der Endung jsx kopieren und diese Datei im Ordner cscripts ihres Desktops ablegen, können Sie diesen Befehl auch über die FrontRow-Palette ausführen.

Bitte beachten Sie: Die priint:comet-Plugins sind für die "normalen" InDesign-Versionen entwickelt worden,. Wir können wir nicht garntieren, dass alle priint:comet-Funktionalitäten auch mit den davon verschiedenen ME-Versionen funktionieren. Bitte haben Sie Verständnis dafür, dass Fehler, die aufgrund einer geänderten Seitenbindung auftreten, von unserem Support nicht als Bugs, sondern als (möglicherweise kostenpflichtige) Feature Requests behandelt werden.

Hier vier Möglichkeiten, wie Sie auch in einem 'normalen' InDesign Text erzeugen, der von rechts nach links läuft:

  1. Wird der Menübefehl Schrift -> Mit Platzhaltertext füllen mit gehaltener CMD-Taste aufgerufen, werden Sie zuerst nach dem Schriftsystem (Arabisch, Hebräisch, Koreanisch, ...) gefragt. Nach der entsprechenden Auswahl erhalten Sie dann wie gewünscht einen arabischen oder hebräischen Lore ipsum Text.
  2. Mit dem priint:comet Menü Schrift -> Textorientierung -> Rechts - Links können Sie den Absatz der aktuellen Textauswahl linksläufig machen.
  3. Importieren Sie einen TaggedText mit den folgenden Angaben (aber natürlich ohne die Zeilentrenner, die hier nur der besseren übersichtlichkeit dienen):
    <pTextComposer:HL Composer Optyca>
    <pTextAlignment:Right>
    <cLanguage:Arabic>
    <cKentenFont:Adobe Arabic>
    <cBoutenFontVariant:Regular>
    

    Die Buchstabenreihenfolge der Textinhalte im TaggedText ist wie gewohnt von links nach rechts und wird erst vom Absatz-Setzer umgekehrt!

  4. Mit den folgenden Zeilen können Sie das auch ganz einfach in cScript selbst erledigen:
    textmodel::set_attr (gFrame, 0, -1, kTextAttrComposerBoss, 0x2000 + 120);
    textmodel::set_attr (gFrame, 0, -1, kTextAttrAlignmentBoss, 2);
    textmodel::set_attr (gFrame, 0, -1, kTextAttrLanguageBoss, "Arabic");
    textmodel::set_attr (gFrame, 0, -1, kTAKentenFontFamilyBoss, "Adobe Aabric");
    textmodel::set_attr (gFrame, 0, -1, kTAKentenFontStyleBoss, "Regular");
    

Beachten Sie bitte, dass die Laufrichtung von rechts nach links aber immer nur auf Buchstaben angewendet wird, die auch zu einer linksläufigen Sprache gehören. Alle anderen Buchstaben behalten ihre ursprüngliche Laufrichtung. Wenn Sie also einen Text umkehren, der ausschließlich lateinische Schriftzeichen enthält, dann sehen Sie von der geänderten Laufrichtung erst einmal gar nichts. Erst nach der Eingabe arabischer oder hebräischer Zeichen sehen Sie eine Veränderung.

#include "internal/text.h"

Plugin Version 1.0.10
30.07.2025, 07:35 Uhr
Paul Seidel

Alphabetic index HTML hierarchy of classes or Java