Stringbearbeitung
Stringbearbeitung
static int text::replace_all(
char* str,
char* search,
char* replace)
Ersetze alle Vorkommen eines Strings durch einen anderen String. Die Funktion funktioniert auch dann wenn der Ersetzenstring ein Teil oder ein Vielfaches des gesuchten Strings ist. Der Suchenstring darf nicht leer sein.
Name | Typ | Default | Beschreibung |
str | char* | - | In diesem String wird ersetzt |
search | char* | - | Suche nach diesem Teilstring. Der Suchstring darf nicht leer sein. |
replace | char* | - | Ersetze durch diesen String. Dieser String darf leer sein. |
static int text::ireplace_all(
char* str,
char* key,
int value)
Ersetze alle Vorkommen eines Strings durch eine Zahl. Der Befehl wird häufig dafür eingesetzt, um in TaggedText von der Datenbank die Platzhalterdefinitionen zu aktualisieren und dort die Textplatzhalter <ID>, <ID2>, ... durch ihre aktuellen Werte zu ersetzen. Der Suchenstring darf nicht leer sein.
Name | Typ | Default | Beschreibung |
str | char* | - | In diesem String wird ersetzt |
key | char* | - | Suche nach diesem Teilstring. Der Suchstring darf nicht leer sein. |
value | int | - | Ersetze durch diesen Zahl. |
static int text::unix_to_win(char* str)
Ersetze alle Unix-Zeilentrenner in Windows-Zeilentrenner. Windows-Zeilentrenner bestehen aus zwei Zeichen, Unix-Zeilentrenner nur aus einem (was ja auch genügt). Der String wird also länger durch die Ersetzung. Das sollten sie bedenken und dem String genügend Speicher reservieren.
Name | Typ | Default | Beschreibung |
str | char* | - | Zu bearbeitender String. |
static int text::xpress_to_tagged(char* tt)
Konvertiere XPress-Markentext in TaggedText. Der TaggedText ist nicht komplett InDesign®-kompatibel. Er enthält weitere Tags zur Definition von Platzhaltern in Texten und an Rahmen.
Name | Typ | Default | Beschreibung |
str | char* | - | Zu bearbeitender String. |
static char* text::replace_typografics(char* str)
Typografische Anführungszeichen ersetzen.Beim Einsetzen von Text in InDesign®-Dokumente können Anführungszeichen automatisch durch typografische Anführungszeichen ersetzt werden. Holt man solche Texte (z.B. mit textmodel::gettext oder table::get_text) wieder ab, unterschieden sie sich natürlich von ihrem Original. Die Funktion replace_typografics ersetzt diese Zeichen durch gerade Anführungszeichen.
Folgende Zeichen werden ersetzt :
Suchen | Ersetzen |
„ | " |
” | " |
‚ | ' |
’ | ' |
Name | Typ | Default | Beschreibung |
Return | char* | Zeiger auf den gegebenen Eingabestring | |
str | char* | - | gültiger String. |
#include "internal/types.h"
int main () { String cstr = string::alloc (); char str [500];
strcpy (str, textmodel::gettext (cstr));
showmessage ("1 : %s", str); text::replace_typografics (str); showmessage ("2 : %s", str);
return 0; }
Mit Hilfe des Schlüsselwortes kExportPlainNoTypografics können typografische Anführungszeiuchen auch 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; }
Das gleiche wie im ersten Beispiel kann man ohne die Verwendung von replace_typografics auch erreichen. Hier ein Beispiel für Mac OS X.
#include "internal/types.h"
int main () { String cstr = string::alloc (); char str[500];
strcpy (str, textmodel::gettext (cstr));
showmessage ("1 : %s", str); 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 ("2 : %s", str);
return 0; }
static char* text::fortune(
char* result,
char* dbname,
int seed = -1)
Gib ein Glückscookie aus.
Name | Typ | Default | Beschreibung |
Return | char* | result | |
result | char* | - | Allokierter Ergebnis-String |
dbname | char* | - | Name der Datenbank-Datei oder Ordner mit Datenbank-Dateien (jeweils relativ zum Comet PlugIn-Verzeichnis oder XML Ordner). |
seed | int | -1 | Initialisierungswert für die random Funktion. |
static char* text::find_styled_font(
char* fontfamily,
char* fontface,
int italic,
int weight,
int stretch,
int* found = 0)
Suche einen Schriftschnitt gegebener Eigenschaften in einer Schriftfamlie. Zu einer gegebenen Schrift wird ein geeigneter Schriftschnitt mit einer festgelegten Schriftstärke, Laufweite und Schriftneigung gesucht. Informationen über Schriftfamilien, Schriftschnitte und die fontDB finden Sie hier.
Name | Typ | Default | Beschreibung |
Return | char* | Schriftschnitt mit den gewünschten Eigenschaften
Nicht jeder Font hat Schriftschnitte für jede Kombination aus Schriftstärke, Laufweite und Stil. Der gefundene Schriftschnitt muß daher nicht zwangsläufig alle Parameter erfüllen. Er ist aber eine bestmögliche Näherung. Siehe hier für weitere Informationen. 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. |
|
fontfamily | char* oder String | - | Name der Schriftfamilie |
fontface | char* oder String | - | Name des Schriftschnittes. Der Parameter wird nur benötigt, wenn weight > 900 oder stretch > 4 sind. |
italic | int | - | Schriftstil 0 : Normal 1 : Italic |
weight | int | - | Schriftstärke 100, 200, ..., 900 : Suche nach dieser Schriftstärke, siehe auch hier > 900 : Ich kenne den Stilnamen und suche nach der zugehörigen Italic/Normalschrift. In diesem Fall darf fontface nicht leer sein. |
stretch | int | - | Laufweite -4, -3, ..., 4 : Suche nach dieser Laufweite, siehe auch hier > 4 : Ich kenne den Stilnamen und suche nach der zugehörigen Italic/Normalschrift. In diesem Fall darf fontface nicht leer sein. |
found | int* | 0 | Rückgabewert, ob ein Font im gewünschten Schnitt gefunden wurde 0 : Ignorieren |
static char* text::translate(
char* text,
char* license_key,
char* dest_lang,
char* source_lang = 0)
Übersetzen eines Textes. Im Unterschied zur Funktion translate (ohne text::) übersetzt diese Funktion freie Texte in eine gewünschte, von der InDesign-Sprache unabhängige Zielsprache.
Für die Übersetztung wird der KI-basierte Übersetzungsdient deepl verwendet. Eine Liste der unterstützten Sprachen finden Sie hier. Der Dienst kostet, wie unser Öko-Strom zu Hause, nicht die Welt, trotzdem benötigen Sie einen gültigen und kostenpflichtigen Lizenzschlüssel, den Sie hier erwerben können.
Die Lizenzkosten für den deepl-Service sind nicht in den Kosten für die priint:comet Plugins enthalten.
Bitte beachten Sie, dass TaggedText-formatierter Text für Übersetzungen ungeeignet ist. Inbesondere die Kodierung der Unicode-Zeichen in Tags der Form <0x00FC> führen hier zu Fehlern. Sie sollten hier also nach Möglichkeit unformatierten Text wie er z.B von frame::gettext(gFrame, text, 0, kEnd, kExportPlain); erzeugt wird, verwenden. Allerdings, und das wird Sie hoffentlich nicht überraschen, können wir den übersetzten Text nicht automatisch wieder mit gleichwertigen Formatierungen versehen. Dazu müßten wir (z.B.) nicht nur wissen, dass 'Polizei' auf ungarisch 'Rendőrség' heißt (nun, das immerhin hätten wir gewußt), wir müßten zusätzlich auch wissen, wie das Wort vorher formatiert war und wo im Text es sich jetzt befindet usw. .
Die deepl-Integration basiert auf einer REST-API, die von deepl zur Verfügung gestellt wird und kann nicht beliebig durch einen anderen Übersetzungsdienst ersetzt werden.
Name | Typ | Default | Beschreibung |
Return | char* | Übersetzter Text
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. |
|
text | char* oder String | - | Unformatierter Eingabetext |
license_key | char* oder String | - | Gültiger deepl Lizenzschlüssel. Diese Schlüssel haben etwa folgendes Format : xxxxxxxxc-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
dest_lang | char* oder String | - | Zielsprache, siehe hier |
source_lang | char* oder String | 0 | Ausgangssprache, siehe hier deepl ist in den meisten Fällen in der Lage, die Ausgangssprache selbst zu erkennen. Und da bei einer falsche Ausgangssprache die Übersetzung natürlich nicht funktionieren wird, ist es allgemin besser, die Ausgangssprache nicht anzugeben. Bei einzelnen Worten wie z.B. 'was' kann aber auch deepl nicht entscheiden, welche Sprache gemeint ist. Englisch oder Deutsch? Dann sollten Sie die Ausgangssprache angeben. |
#include "internal/text.h" #include "internal/types.h"
int main() { String txt = string::alloc();
frame::gettext(gFrame, txt, 0, kEnd, kExportPlain); frame::replace(gFrame, text::translate (txt, "xxxxxxxxc-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "SV", ""), 0, -1, 0);
string::release(txt);
return 0; }
Alphabetic index HTML hierarchy of classes or Java