Bearbeiten des Dokumenttextes.
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 |
if (!textmodel::available ()) return;
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. |
int startPos = textmodel::start ();
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. |
int endPos = -1; if (textmodel::available ()) endPos = textmodel::start () + textmodel::length ();
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 |
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 |
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; }
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;
}
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. |
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;
}
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 |
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. |
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; }
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 |
int k = textmodel::overset (fm );
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:
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 :
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:
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:
|
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;
}
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:
|
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;
}
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:
|
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
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:
|
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. |
err_code = textmodel::image (path [, alignment[, size]]);
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 |
err_code = textmodel::excel_import (path, pos, delLength);
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 |
err_code = textmodel::excel_update (path, index, pos, delLength);
static char* (
char* result,
int position = 0,
int len = -1)
DEPRECATED! Verwenden Sie statt dessen bitte die Funktion textmodel::gettext.
| Name | Typ | Default | Beschreibung |
| Return | char* | ... |
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 :
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, [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 |
| 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 |
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; }
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 |
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. |
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; }
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. |
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; /
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. |
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;
}
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.. |
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;
}
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 |
static int (int pos)
DEPRECATED! Verwenden Sie dafür die Funktionen frame::isinline und frame::get_anchor.
| Name | Typ | Default | Beschreibung |
| Return | int | 0 |
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) |
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; }
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 |
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; }
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 |
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;
}
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. |
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;
}
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 |
Keine Initialen am Textanfang
int main ()
{
textmodel::initialchar (gFrame, 0, 1, 1);
return 0;
}
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. |
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;
}
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 |
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 |
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 |
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;
}
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" |
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. |
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. |
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. |
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. |
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 |
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; }
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 |
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 |
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; }
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. |
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 |
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. |
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 |
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; }
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 |
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 |
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 |
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. |
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. |
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. |
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; }
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 |
| 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. |
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;
}
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. |
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; }
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 |
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? |
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) |
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) |
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 |
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 |
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 |
Für Beispiele siehe frame::anchor und 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 |
Für Beispiele siehe frame::anchor und frame::inline_.
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 |
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 |
Für Beispiele siehe frame::anchor und frame::inline_above.
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 |
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 |
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 |
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; }
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) |
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;
}
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 |
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;
}
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 |
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;
}
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? |
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 |
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; }
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 |
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. |
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; }
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. |
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; }
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/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; }
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/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; }
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/types.h"
int main () { textmodel::select_cometgroup (0, kSelection); return 0; }
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 |
int main ()
{
textmodel::use_global_index ();
textmodel::set_parastyle (gFrame, 0, 1, "Mein Stil");
textmodel::use_global_index ();
textmodel::insert ("aaa", 3);
return 0;
}
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) |
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) |
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) |
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. |
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 |
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;
}
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 |
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. |
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 |
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 |
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 |
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 |
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" 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; }
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" 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; }
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" 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; }
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" 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; }
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"
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; }
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"
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; }
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:
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:
<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!
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.
Alphabetic index HTML hierarchy of classes or Java