Hyperlinkmethoden
Ein allgemeines Beispiel zur Verwendung der Klasse hyperlink finden sie hier.
Hyperlinkmethoden
static int hyperlink::is_valid(ItemRef itemRef)
Zeigt die Referenz auf einen gültigen Link?
Name | Typ | Default | Beschreibung |
Return | int | 1 : Die Referenz zeigt auf einen gültigen und existierenden Link. 0 : Die Referenz ist ungültig und darf nicht als Link verwendet werden. |
|
itemRef | ItemRef | - | Beliebige Referenz oder 0 |
static int hyperlink::count(ItemRef frameRef)
Ermittle die Anzahl der Hyperlinks in einem Textrahmen.
Name | Typ | Default | Beschreibung |
Return | int | ≥ 0 : Anzahl der Hyperlinks im Text des Rahmens -1 : Fehler |
|
frameRef | ItemRef | 0 | Gültige Rahmenreferenz 0 : Aktueller Skriptrahmen |
static int hyperlink::get_nth(
ItemRef frameRef,
int nth,
ItemRef* result = 0,
int* start = 0,
int* len = 0)
Hole den n-ten Hyperlink eines Textrahmens. Die Ergebnisse sind nicht nach Textpositionen sortiert! Für eine nach Textpositionen sortierte Liste der Hyperlinks eines Textes verwenden Sie die Funktion itemlist::hyperlinks.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
frameRef | ItemRef | - | Gültige Rahmenreferenz 0 : Aktueller Skriptrahmen |
nth | int | - | 0-basierter Index des Hyperlinks -1 : Benannter Anker des Rahmens selbst. In diesem Fall darf der Rahmen auch ein Bildrahmen sein. |
result | ItemRef | 0 | Allokierter ItemRef für das Ergebnis oder 0 |
start | int* | 0 | ≠ 0 : Nach erfolgreicher Ausführung enthält die Variable die Startposition des Hyperlinks im Text. 0 : Ignorieren Bei nth = -1 wird die Variable ignoriert. |
len | int* | 0 | ≠ 0 : Nach erfolgreicher Ausführung enthält die Variable die Länge des Hyperlinks im Text. 0 : Ignorieren Bei nth = -1 wird die Variable ignoriert. |
Besuche alle Hyperlinks eines Rahmens.
int by_nth (ItemRef fr) { ItemRef hy = item::alloc (); int count = hyperlink::count (fr); int i, start, len;
for (i = 0; i < count; i++) { hyperlink::get_nth (fr, i, hy, &start, &len); wlog ("", "XXXXX %d : %d %d\n", i+1, start, len);
start = hyperlink::get_pos (hy, &len); wlog ("", "YYYYY %d : %d %d\n", i+1, start, len); }
return 0; }
static int hyperlink::get_pos(
ItemRef hyRef,
int* len = 0,
ItemRef parentFrame = 0)
Ermittle Textposition und Länge eines Hyperlinks in einem Text.
Name | Typ | Default | Beschreibung |
Return | int | ≥ 0 : Textposition des Hyperlinks (0-basiert) -1 : Fehler |
|
hyRef | ItemRef | - | Gültige Referenz auf einen Hyperlink eines Textes. |
len | int* | 0 | ≠ 0 : Nach erfolgreicher Ausführung enthält die Variable die Länge des Hyperlinks im Text. 0 : Ignorieren |
parentFrame | ItemRef | 0 | Elternrahmen. Der Parameter ist nur für comet_pdf benötigt, sonst wird er ignoriert. 0 : Aktueller Skriptrahmen |
Besuche alle Hyperlinks eines Rahmens in der Reihenfolge ihrer Textposition.
int by_list (ItemRef fr) { ItemList hys = itemlist::hyperlinks (fr); ItemRef hy = item::alloc (); int i, start, len;
for (i = 0; i < itemlist::length (hys); i++) { itemlist::get (hys, hy, i);
start = hyperlink::get_pos (hy, &len); printf ("YYYYY %d : %d %d\n", i+1, start, len); }
return 0; }
static ItemRef hyperlink::get_source(
ItemRef frameRef,
ItemRef hyRef = 0,
int* startpos = 0,
int* endpos = 0)
Ermittle den Hyperlink eines Rahmens oder eines Textbereiches.
Name | Typ | Default | Beschreibung |
Return | ItemRef/int | 0 : Der Rahmen hat keinen Hyperlink definiert hyRef : Der Rahmen hat einen definierten Hyperlink UID des Hyperlinks : Der Rahmen hat einen definierten Hyperlink aber hyRef ist 0 |
|
frameRef | ItemRef | 0 | gültiger Rahmenverweis 0 : aktueller Skriptrahmen |
hyRef | ItemRef | 0 | allokierter Speicher für das Ergebnis oder 0 |
startPos | int* | 0 | (in/out) Ist die Variable ungleich 0 und hat einen Inhalt >= 0, wird (wenn vorhanden) im Text des Rahmens an dieser Textstelle nach einem Hyperlink gesucht. Wird dort ein Hyperlink gefunden, bekommt die Variable die 0-basierte Anfangsposition des gefundenen Hyperlinks. |
endPos | int* | 0 | (in/out) Ende des Textbereiches, der durchsucht werden soll. Die Variable wird nur ausgewertet, wenn startPos != 0 ist. Ist sie != 0, enthält sie
am Ende der Ausführung die Endposition des gefundenen Hyperlinks. -1 : Ende des Textbereiches, der bei startPos beginnt. In Tabellenzellen ist das das Ende der Tabellenzelle, sonst des gesamtes Textes. Hyperlinks werden nicht zwangsläfig in der Reihenfolge ihrer Textpositionen gefunden. Enthält der Textbereich mehrere Hyperlinks, ist also nicht festgelegt, welchen der Links Sie erhalten. Wie Sie alle Hyperlinks eines Textbereiches ermitteln, sehen Sie im zweiten Beispiel. |
Für einen Rahmen soll ein neuer URL-Hyperlink anegelgt werden. Zuerst wird dafür ein mglw. bestehender Hyperlink gelöscht. Achten Sie darauf, dass Hyperlinks nicht automatisch sichtbar sind. Auch im Beispiel wird der neue Hyperlink nur dann sichtbar, wenn ebereits ein Link existierte und der sichtbar war. Sie können das Skript leicht so ändern, dass auch ein neuer Link sichtbar wird.
int main () { ItemRef hy = item::alloc (); ItemRef src = item::alloc (); int visible = 0; int width = 0; int style = 0; int hilite = 0; ItemRef colref = item::alloc (); int result;
if (hyperlink::get_source (gFrame, src)) { visible = hyperlink::visible (src); width = hyperlink::borderwidth (src, &style); hilite = hyperlink::hilight (src); hyperlink::color (colref, src);
hyperlink::delete_ (src); } result = hyperlink::frame_create_urldest ( hy, "not shared", gFrame, "http://www.priint-ii.com", 0); if (!result) return 0;
if (visible) hyperlink::appearance (hy, width, hilite, colref, 1, style);
return 0; }
Ermittle alle Hyperlinks eines Textes.
int main () { ItemRef hy = item::alloc (); int start = 0; int end = -1; int p = 0;
while (1) { if (p >= frame::textlength (gFrame, 1)) break; start = p; end = p; if (hyperlink::get_source (gFrame, hy, &start, &end)) { wlog ("", "[%d, %d] : '%s'\n", start, end, hyperlink::name (hy)); p = end; } else p = p +1; }
return 0; }
static int hyperlink::add_nameddest(
ItemRef createdItem = 0,
char* name = 0,
ItemRef frameRef = 0,
int pos = -1,
int len = 1,
float zoomPercent = 0.0,
int destType = 0,
float zoomRLeft = 0.0,
float zoomRTop = 0.0,
float zoomRRight = 0.0,
float zoomRBottom = 0.0)
Erzeuge einen benannten Textanker im Dokument. Textanker können als Sprungziele für Lesezeichen und Inhaltsverzeichnisse z.B. mit book::create_toc verwendet werden. Alternativ können Sie zum Anlegen von Textankern auch die Funktion textmodel::insert_crossref verwenden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
createdItem | ItemRef | 0 | Allokierter Speicher für den erzeugten Anker. 0 : Ergebnis wird nicht benötigt sonst : mit item::alloc reservierter Speicher |
name | char* oder String | 0 | Name des Ankers. Anker müssen eindeutig benannt sein! (0 oder "") und len ≤ 4 : Empfohlen! Ankername automatisch vergeben, siehe auch get_next_unique_key sonst : Auf 32 Buchstaben gekürzter Textinhalt |
frameRef | ItemRef | 0 | Zielrahmen des Ankers 0 : Skriptrahmen |
startpos | int | -1 | Textposition, an dem der Verweis beginnen soll. -1 : Linke obere Ecke des Rahmen als Ziel verwenden. Diese Einstellung ist nur für comet_pdf verfügbar. In InDesign® wird bei Textpositionen kleiner 0 der Textanfang verwendet. ≥ 0 : Textposition des Ankers. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes! |
len | int | 1 | Länge des Ankers. Die Länge wird ausschließlich zur Ermittlung des Namens des Ankers verwendet. Namen werden auf 32 Zeichen beschränkt. |
⇨ Nach dem Sprung zu einem Verweisziel kann die SeitenGröße der Zielseite geändert werden. | |||
zoomPercent | float | 0.0 | Skalierungsfaktor für die Zielseite (1.0 entspricht 100%). Es sind Werte zwischen 0.05 und 40.0 erlaubt. 0.0 : Skalierung beibehalten. |
destType | int | kBookmarkDestInheritZoom | Angaben zur Seitenpositionierung um Fensterrahmen. Die Werte entsprechen der Auswahl " Zoom-Einstellung" des Dialoges
"Hyperlink bearbeiten" der Palette "Hyperlinks". kBookmarkDestInheritZoom : Zoom übernehmen kBookmarkDestFitWindow : In Fenster einpassen kBookmarkDestFitWidth : Breite einpassen kBookmarkDestFitHeight : Höhe einpassen kBookmarkDestFitView : Ansicht einpassen kBookmarkDestFitVisible : Sichtbaren Bereich einpassen Die Einstellung "Fester Wert" erreichen Sie dadurch, dass Sie für zoomPercent den Wert 0.0 angeben. |
⇨ Mit den folgenden Angaben können Sie den Ausschnitt der Zielseite festlegen. In unseren Tests ist es uns allerdings nicht gelungen, Hyperlinks zu erzeugen, die diese Einstellungen auch tatsächlich verwenden. Zudem sind die erlaubten Werte für destType, die den Ausschnitt der Zielseite ebenfalls beeinflußen, in JavaScript und C++-API unterschiedlich. Wir übergeben die Werte der Parameter daher hier ohne weitere Garantie! | |||
zoomRLeft | float | 0.0 | linke Seite des Zielausschnittes |
zoomRTop | float | 0.0 | obere Seite des Zielausschnittes |
zoomRRight | float | 0.0 | rechte Seite des Zielausschnittes |
zoomRBottom | float | 0.0 | untere Seite des Zielausschnittes |
Hier ein vollständige Beispiel zum Anlegen von Lesenzeichen in einem von comet_pdf erzeugten PDF.
Im unteren Teil des Skriptes werden dazu die Zielanker der Lesezeichen als benannte Ziele definiert.
Das Skript setzt die Existenz von Rahmen mit festgelegten UID voraus. Eine passende Testdatei finden Sie hier.
Mit der folgenden Terminal-Anweisung kann das Skript ausgeführt werden:
/.comet_pdf -i \$DESKTOP/bm.w2ml -e \$DESKTOP\bookmarks.cpp -L
Hier ein Screenshot des Ergebnisses:
#include "internal/types.h" #include "internal/text.h"
int main () { ItemRef head = item::alloc (); ItemRef bm = item::alloc (); ItemRef bb = item::alloc (); ItemRef hy = item::alloc (); ItemRef fr = item::alloc (); ItemRef colid = item::alloc (); IDTypeList anchors = idtypelist::alloc (-1); IDType anchor; Table T = table::alloc (); int i, start, len; ItemList hyperlinks;
color::define_rgb ("", 255, 128, 0, 0, colid);
// Create some book marks // bookmark::create (head, 0, 0, 1, "pg. 1"); // jump to pg 1 bookmark::change_fontstyle (head, bold+italic); bookmark::change_color (head, colid);
bookmark::create (bm, 0, 0, 2, "pg. 2", "pg. 1"); // jump to pg 2 bookmark::change_fontstyle (bm, bold); bookmark::create (bm, 0, 0, 3, "pg. 3", "pg. 1"); // jump to pg 3
bookmark::create (bm, 0, 0, 4, "Seite 4", "pg. 1", -1, 0.0, kBookmarkDestXYZ, 0.0, 263.0, 1.0, 300.0); bookmark::create (bm, 0, 0, 2, "Seite 2", "pg. 1"); bookmark::create (bm, 0, 0, 3, "Seite 3", "pg. 1"); bookmark::create (bm, 0, 0, 4, "Seite 4", "pg. 1");
bookmark::create (bm, 0, 0, 4, "pg. 4");
printf ("UID_AAA of 'a4' : %d\n", item::getint (bm)); bookmark::add (bm, 0, 0, 1, "Sivu 1", head); bookmark::change_fontstyle (bm, italic); bookmark::add (bm, 0, 0, 2, "Sivu 2", head); bookmark::add (bm, 0, 0, 3, "Sivu 3", head);
// Check bookmark functions //
// name bookmark::find (bm, 0, "pg. 4"); printf ("UID_BBB of '%s' : %d\n", bookmark::name (bm), item::getint (bm));
// parent bookmark::find (bm, 0, "Seite 2"); bookmark::parent (bb, bm); printf ("Parent of 'b2' is '%s' with UID %d\n", bookmark::name (bb), item::getint (bb)); printf ("'b2' has UID %d\n", item::getint (bm));
// childs bookmark::find (bm, 0, "pg. 1"); printf ("'a2' has %d children\n", bookmark::childs (bm));
// nthchild bookmark::nthchild (bb, bm, 2); printf ("3rd child of 'a2' is '%s\n", bookmark::name (bb));
// child bookmark::find (bm, 0, "pg. 1"); bookmark::child (bb, bm, "Seite 2", 0); printf ("'a1' has direct child 'b2' ? %d\n", item::getint (bb));
bookmark::child (bb, bm, "Seite 2", 1); printf ("'a1' has child 'b2' ? %d\n", item::getint (bb));
// is_valid printf ("%d is a valid book mark ? %d\n", item::getint (bb), bookmark::is_valid (bb)); item::define (bb, 0, 123, 0); printf ("%d is a valid book mark ? %d\n", item::getint (bb), bookmark::is_valid (bb));
// change_pos bookmark::find (bm, 0, "Seite 4"); bookmark::change_pos (bm, 3);
bookmark::find (bm, 0, "Seite 4"); bookmark::change_pos (bm, 0);
// change_name bookmark::find (bm, 0, "Seite 4"); bookmark::change_name (bm, "New name of 'Seite 4'");
// change_parent bookmark::find (bm, 0, "Seite 4"); bookmark::find (bb, 0, "Sivu 1"); bookmark::change_parent (bm, bb, 1);
// remove bookmark::find (bm, 0, "Sivu 1"); //bookmark::remove (bm);
// Create named destinations to some text and add bookmarks // item::define (fr, 0, 330); hyperlink::add_nameddest (hy, 0, fr, 1089, 0); printf ("AA-> hyperlink dest of uid %d created at text position 1089\n", item::getint (hy)); bookmark::create2 (bm, 0, hy, "occusamus", 0, -1);
hyperlink::add_nameddest (hy, 0, fr, 1697, 0); printf ("BB-> hyperlink dest of uid %d created at text position 1690\n", item::getint (hy)); bookmark::create2 (bm, 0, hy, "oditasim", 0, -1);
table::get (T, fr, 0); table::cell::get_textpos (T, 1, 2, &start, &len); hyperlink::add_nameddest (hy, 0, fr, start, 7); inside a table printf ("CC-> hyperlink dest of uid %d created at text position %d\n", item::getint (hy), start); bookmark::create2 (bm, 0, hy, "AAAAA", 0, -1);
// Create named destinations to some frames and add bookmarks // item::define (fr, 0, 327); hyperlink::add_nameddest (hy, 0, fr, -1, 0); frame printf ("hyperlink dest of uid %d created\n", item::getint (hy)); bookmark::create2 (bm, 0, hy, "Blue Frame", 0, -1);
item::define (fr, 0, 369); hyperlink::add_nameddest (hy, 0, fr, -1, 0); frame bookmark::add2 (bb, 0, hy, "Yellow Frame", bm);
// Get anchors of frames // item::define (fr, 0, 327); if (hyperlink::get_nth (fr, -1, hy) == 0) { printf ("Frame %d has an named dest : '%s'\n", item::getint (fr), hyperlink::name (hy)); } else { printf ("Frame %d has no named anchor\n", item::getint (fr)); }
item::define (fr, 0, 330); if (hyperlink::get_nth (fr, -1, hy) == 0) { printf ("Frame %d has an named dest : '%s'\n", item::getint (fr), hyperlink::name (hy)); } else { printf ("Frame %d has no named anchor\n", item::getint (fr)); }
// Get hyperlinks of text // item::define (fr, 0, 330);
printf ("Frame %d has %d hyperlinks\n", item::getint (fr), hyperlink::count (fr));
hyperlinks = itemlist::hyperlinks (fr); printf ("Frame %d has %d hyperlinks\n", item::getint (fr), itemlist::length (hyperlinks)); for (i = 0; i < itemlist::length (hyperlinks); i++) { itemlist::get (hyperlinks, hy, i); start = hyperlink::get_pos (hy, &len, fr); printf (" %d : %d %d (%s) Type = %d\n", i+1, start, len, hyperlink::name (hy), hyperlink::type (hy)); }
return 0; }
static int hyperlink::create_textdest(
ItemRef createdItem,
char* name,
ItemRef frameRef,
int startpos,
int endPos,
ItemRef textAnchorRef)
Anlegen eines Textverweises zu einem benannten Textanker. Der Textanker kann auch in einem beliebigen anderen aber geöffneten Dokument liegen.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
createdItem | ItemRef | - | Allokierter Speicher für den erzeugten Link. 0 : Ergebnis wird nicht benötigt sonst : mit item::alloc reservierter Speicher |
name | String oder char* | - | Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.) |
frameRef | ItemRef | - | Rahmen des Textmodelles, in dem der Verweis erstellt werden soll. 0 : Textmodell des Skriptes |
startpos | int | - | Textposition, an dem der Verweis beginnen soll. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes. |
endPos | int | - | Textposition, an dem der Verweis enden soll. Die Länge des Verweises muss mind. 1 betragen. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes. |
textAnchorRef | ItemRef | - | Sprungziel. Das Ziel muß ein gültiger Textanker eines geöffneten Dokumentes sein. Textanker erhalten Sie z.B. mit der Funktion hyperlink::find. |
Hier ein vollständiges Beispiel, das zu den Textankern der Dokumente eines Buches ein klickbares Inhaltsverzeichnis erstellt.
Das Dokument mit dem Zielrahmen für das Inhaltsverzeichnis muß sich in einem aktuell geöffneten Buch befinden!
Hier finden Sie eine Testumgebung inklusive Beschreibung.
Hinweis: Das Skrpit dient nur zur Demonstration und zur Lösung besonders hartnäckiger Fälle.
Beim Testen werden Sie bemerken, dass das Skript den aktuellen Rahmeninhalt komplett durch das Inhaltsverzeichnis ersetzt.
Das können Sie mit etwas Aufwand korrigieren, einfacher ist es aber, einen
CrossRef-Platzhalter und die Funktion book::create_toc zu verwenden.
#pragma plain
int main() { LinkList lks = linklist::alloc (); Link lk; String str = string::alloc (); String entry = string::alloc (); int olen; int id;
// Remove all old entries // frame::replace (gFrame, "");
// Collect all hyperlinks of all documents of the book // hyperlink::find ( lks, // Result list 0, // Current document "", // Ignore the cross-reference name 3, // Search for 'Product's only 0, 0, 0, "", 1, // Search the entire book 1, 1, 1, 1, // Formatting the page names 1, // We need the xy co-ordinates to sort the results 0); // Sort col wise
for (lk = linklist::first (lks); lk != 0; lk = linklist::next (lks)) { // Get the document text at the destination // frame::gettext ( link::crossref::frame (lk), str, link::crossref::src_textpos (lk)+1, link::crossref::src_textlen (lk)-1);
if (link::crossref::type (lk) == 0 && string::length (str)) { // Remember the current insertion point. // We need this so that we can position // the hyperlink correctly. // olen = frame::textlength (gFrame);
id = placeholder::get_value (link::crossref::frame (lk), "ID", link::crossref::pos (lk)+1);
// Insert the toc entry text // string::set (entry, "%!TT"); if (olen > 0) { string::append (entry, "<ParaStyle:TOC-Entry>"); if (id % 100 == 0) string::append (entry, "<ParaStyle:TOC-Entry>"); }
if (id % 100 == 0) { string::append (entry, "<ParaStyle:TOC-Entry><CharStyle:Bold>%s\t%d<CharStyle:>", str, link::crossref::page (lk, 0)); } else { string::append (entry, "<ParaStyle:TOC-Entry>%s\t%d", str, link::crossref::page (lk, 0)); } frame::append (gFrame, entry);
// Link the toc entry to the destination // if (id % 100 == 0) { int pp = olen;
if (olen > 0) pp += 2; hyperlink::create_pagedest ( 0, 0, gFrame, pp, -1, link::crossref::document (lk, 0), link::crossref::page (lk, 1)); } else { hyperlink::create_textdest ( 0, 0, gFrame, olen + 1, -1, link::crossref::hyperlink_ref (lk)); } } }
string::release (str); string::release (entry); linklist::release (lks);
return 0; }
static int hyperlink::create_pagedest(
ItemRef createdItem,
char* name,
ItemRef frameRef,
int startpos,
int endpos,
char* destDoc,
int pageNum,
float zoomPercent = 0.0,
int destType = 0,
float zoomRLeft = 0.0,
float zoomRTop = 0.0,
float zoomRRight = 0.0,
float zoomRBottom = 0.0)
Anlegen eines Textverweises auf eine Dokumentseite. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
createdItem | ItemRef | - | Allokierter Speicher für den erzeugten Link. 0 : Ergebnis wird nicht benötigt sonst : mit item::alloc reservierter Speicher |
name | String oder char* | - | Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.) |
frameRef | ItemRef | - | Rahmen des Textmodelles, in dem der Verweis erstellt werden soll. 0 : Textmodell des Skriptes |
startpos | int | - | Textposition, an dem der Verweis beginnen soll. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes. |
endpos | int | - | Textposition, an dem der Verweis enden soll. Die Länge des Verweises muss mind. 1 betragen. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes. |
destDoc | String oder char* | - | Zieldokument 0, "" oder Pfad des aktuellen Dokumentes : Verweis auf eine Seite innerhalb des aktuellen Dokumentes sonst : Vollständiger Pfad des Zieldokumentes. Das Dokument muß nicht geöffnet sein. Bitte beachten Sie, dass als Zieldokument das InDesign® -Dokument erwartet wird. |
pageNum | int | - | Zielseite (1-basiert) |
⇨ Nach dem Sprung zu einem Verweisziel kann die Seitengröße der Zielseite geändert werden. | |||
zoomPercent | float | 0.0 | Skalierungsfactor für die Zielseite (1.0 entspricht 100%). Es sind Werte zwischen 0.05 und 40.0 erlaubt. 0.0 : Skalierung beibehalten. |
destType | int | "Fester Wert" | Angaben zur Seitenpositionierung um Fensterrahmen. Die Werte entsprechen der Auswahl " Zoom-Einstellung" des Dialoges
"Hyperlink bearbeiten" der Palette "Hyperlinks". kBookmarkDestInheritZoom : Zoom übernehmen kBookmarkDestFitWindow : In Fenster einpassen kBookmarkDestFitWidth : Breite einpassen kBookmarkDestFitHeight : Höhe einpassen kBookmarkDestFitView : Ansicht einpassen kBookmarkDestFitVisible : Sichtbaren Bereich einpassen Die Einstellung "Fester Wert" erreichen Sie dadurch, dass Sie für zoomPercent den Wert 0.0 angeben. |
⇨ Mit den folgenden Angaben können Sie den Ausschnitt der Zielseite festlegen. In unseren Tests ist es uns allerdings nicht gelungen, Hyperlinks zu erzeugen, die diese Einstellungen auch tatsächlich verwenden. Zudem sind die erlaubten Werte für destType, die den Ausschnitt der Zielseite ebenfalls beeinflußen, in JavaScript und C++-API unterschiedlich. Wir übergeben die Werte der Parameter daher hier ohne weitere Garantie! | |||
zoomRLeft | float | 0.0 | linke Seite des Zielausschnittes |
zoomRTop | float | 0.0 | obere Seite des Zielausschnittes |
zoomRRight | float | 0.0 | rechte Seite des Zielausschnittes |
zoomRBottom | float | 0.0 | untere Seite des Zielausschnittes |
static int hyperlink::create_urldest(
ItemRef createdItem,
char* name,
ItemRef frameRef,
int startpos,
int endpos,
char* url,
int shared = 1)
Anlegen eines Textverweises auf eine URL. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
createdItem | ItemRef | - | Allokierter Speicher für das Ergebnis. 0 : Ergebnis wird nicht benötigt sonst : mit item::alloc reservierter Speicher |
name | String oder char* | - | Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.) |
frameRef | ItemRef | - | Rahmen des Textmodelles, in dem der Verweis erstellt werden soll. 0 : Textmodell des Skriptes |
startpos | int | - | Textposition, an dem der Verweis beginnen soll. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes. |
endpos | int | - | Textposition, an dem der Verweis enden soll. Die Länge des Verweises muss mind. 1 betragen. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes. |
url | String oder char* | - | Sprungziel, vollständige URL. Als URLs sind auch eMails erlaubt. eMail-Links haben die Form mailto:name@...subject=.... Der subject-Teil ist optional. |
shared | int | 1 | [Ab v3.3 R3820, 4. Juni 2013] Soll der Hyperlink auf ein freigegebenes Hyperlink-Ziel zeigen?
Aus Gründen der Rückwärtskompatibilität hat der Parameter den Defaultwert 1. Wir empfehlen, ihn auf den Wert 0 zu setzen. 0 : Nein 1 : Ja |
Erzeuge einen eMail-Hyperlink um die aktuelle Textauswahl.
#include "internal/types.h" #include "internal/text.h"
int main() { int start, len; ItemRef hy = 0; char hname [512]; char hlink [512]; ItemRef colref = 0; int err = 0;
textmodel::selection (&start, &len); if (start == kEnd || len <= 0) { showerror ("No text selection."); return 0; }
strcpy(hname, "Paul"); strcpy(hlink, "mailto:paul@werk.ii.com?subject=cScript question");
hy = item::alloc (); err = hyperlink::create_urldest( hy, hname, 0, start, start + len, hlink, 0); // do not create a shared destination inside the document if (err) { showerror ("Could NOT create hyperlink."); item::release(hy); return 0; }
colref = item::alloc (); color::define_rgb ("", 255, 128, 0, 0, colref); hyperlink::appearance ( hy, 1, // border width is of type int! kOutlineHyperlinkHilight, colref, 1, // visible 1); // dashed
item::release(hy); item::release(colref);
return 0; }
static int hyperlink::frame_create_pagedest(
ItemRef createdItem,
char* name,
ItemRef frameRef,
char* destDoc,
int pageNum,
float zoomPercent = 0.0,
int destType = 0,
float zoomRLeft = 0.0,
float zoomRTop = 0.0,
float zoomRRight = 0.0,
float zoomRBottom = 0.0)
Anlegen eines Rahmenverweises auf eine Dokumentseite. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
createdItem | ItemRef | - | Allokierter Speicher für den erzeugten Link. 0 : Ergebnis wird nicht benötigt sonst : mit item::alloc reservierter Speicher |
name | String or char* | - | Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.) |
frameRef | ItemRef | - | Hyperlink an diesem Rahmen anlegen 0 : Aktueller Skriptrahmen sonst : Gültiger Rahmenverweis |
destDoc | String or char* | - | Zieldokument 0, "" oder Pfad des aktuellen Dokumentes : Verweis auf eine Seite innerhalb des aktuellen Dokumentes sonst :
|
pageNum | int | - | Zielseite (1-basiert) |
⇨ Nach dem Sprung zu einem Verweisziel kann die SeitenGröße der Zielseite geändert werden. | |||
zoomPercent | float | 0.0 | Skalierungsfactor für die Zielseite (1.0 entspricht 100%). Es sind Werte zwischen 0.05 und 40.0 erlaubt. 0.0 : Skalierung beibehalten. |
destType | int | "Fester Wert" | Angaben zur Seitenpositionierung um Fensterrahmen. Die Werte entsprechen der Auswahl " Zoom-Einstellung" des Dialoges
"Hyperlink bearbeiten" der Palette "Hyperlinks". kBookmarkDestInheritZoom : Zoom übernehmen kBookmarkDestFitWindow : In Fenster einpassen kBookmarkDestFitWidth : Breite einpassen kBookmarkDestFitHeight : Höhe einpassen kBookmarkDestFitView : Ansicht einpassen kBookmarkDestFitVisible : Sichtbaren Bereich einpassen Die Einstellung "Fester Wert" erreichen Sie dadurch, dass Sie für zoomPercent den Wert 0.0 angeben. |
⇨ Mit den folgenden Angaben können Sie den Ausschnitt der Zielseite festlegen. In unseren Tests ist es uns allerdings nicht gelungen, Hyperlinks zu erzeugen, die diese Einstellungen auch tatsächlich verwenden. Zudem sind die erlaubten Werte für destType, die den Ausschnitt der Zielseite ebenfalls beeinflußen, in JavaScript und C++-API unterschiedlich. Wir übergeben die Werte der Parameter daher hier ohne weitere Garantie! | |||
zoomRLeft | float | 0.0 | linke Seite des Zielausschnittes |
zoomRTop | float | 0.0 | obere Seite des Zielausschnittes |
zoomRRight | float | 0.0 | rechte Seite des Zielausschnittes |
zoomRBottom | float | 0.0 | untere Seite des Zielausschnittes |
static int hyperlink::frame_create_urldest(
ItemRef createdItem,
char* name,
ItemRef frameRef,
char* url,
int shared = 1)
Anlegen eines Rahmenverweises auf eine URL. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
createdItem | ItemRef | - | Allokierter Speicher für den erzeugten Link. 0 : Ergebnis wird nicht benötigt sonst : mit item::alloc reservierter Speicher |
name | String oder char* | - | Name des Verweises. Ist der Name leer, wird der Standardname "Hyperlink" verwendet. |
frameRef | ItemRef | - | Rahmen, für den der Verweis erstellt werden soll. 0 : aktueller Skriptrahmen |
url | String oder char* | - | Sprungziel, vollständige URL |
shared | int | 1 | Ist das Ziel freigegeben oder nicht? 0 : Nein, nicht freigegeben 1 : Freigegebenes Ziel |
static char* hyperlink::name(ItemRef hy)
Ermittle den Namen eines Verweises. Die Ergebnisvariable wird durch folgende Aufrufe der selben Funktion überschrieben!
Name | Typ | Default | Beschreibung |
Return | char* | Name des Verweises oder ""
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. |
|
hy | ItemRef | - | Gültige Verweisreferenz |
Schreibe den Namen eines Verweises ins Logfile.
wlog ("", "%s\n", hyperlink::name (hy));
Hebe den Namen eines Verweises für eine spätere Verwendung auf.
char hyName[64];
strcpy (hyName, hyperlink::name (hy));
static int hyperlink::type(ItemRef hy)
Ermittle den Typ eines Hyperlinks.
Name | Typ | Default | Beschreibung |
Return | int | Typ des Hyperlinks 0 : Undefiniert 1 : URL 2 : Datei 3 : Mail (nur comet_pdf). InDesign® gibt hier den Wert 1 (URL) zurück. 4 : Seite 5 : Textanker 8 : Benanntes Ziel (nur comet_pdf) |
|
hy | ItemRef | - | Gültige Verweisreferenz |
static ItemRef hyperlink::destination(ItemRef dest, ItemRef hy)
Ermittle die Zielreferenz eines Verweises.
Name | Typ | Default | Beschreibung |
Return | ItemRef | Der Parameter dest wird zurückgegeben. Wurde der Verweis nicht gefunden oder hat er kein Sprungzeil, wird 0 zurückgegeben. | |
hy | ItemRef | - | Gültige Verweisreferenz |
dest | ItemRef | - | Mit item::alloc allokierte Variable für das Ergebnis. |
Erstelle ein Lesezeichen zum Ziel eines Verweises.
int main () { ItemRef hy = item::alloc (); ItemRef dest = item::alloc (); ItemRef bk = item::alloc ();
hyperlink::create_pagedest (hy, 0, gFrame, 20, 30, "", 5); bookmark::create2 ( bk, 0, hyperlink::destination (dest, hy), hyperlink::name (hy), "");
return 0; }
static int hyperlink::visible(ItemRef hy)
Ist der Verweis sichtbar oder nicht?
Name | Typ | Default | Beschreibung |
Return | int | 0 : unsichtbar 1 : sichtbar |
|
hy | ItemRef | - | Gültige Verweisreferenz |
static int hyperlink::hilight(ItemRef hy)
Wie wird der Verweis dargestellt?
Achtung
Die Einstellung wird nicht verwendet, um die Sichtbarkeit des Rahmens in InDesign® zu steuern. Hier ein Auszug aus der entsprechenden Adobe-Doku : This only matters when the file is exported to PDF. Um die Sichtbarkeit des Rahmens zu steuern, verwenden Sie die Funktionen show und hide.
Name | Typ | Default | Beschreibung |
Return | int | kNoHyperlinkHilight kInvertHyperlinkHilight kInsetHyperlinkHilight kOutlineHyperlinkHilight |
|
hy | ItemRef | - | Gültige Verweisreferenz |
static int hyperlink::borderwidth(ItemRef hy)
Rahmenstärke eines Verweises.
Name | Typ | Default | Beschreibung |
Return | int | Rahmenstärke des Verweises 1 : dünn 2 : mittel 3 : stark |
|
hy | ItemRef | - | Gültige Verweisreferenz |
static ItemRef hyperlink::color(ItemRef colRef, ItemRef hy)
Aktuelle Farbe des Verweisrahmens. Es wird ein ItemRef auf die gesuchte Farbe zurückgegeben.
Name | Typ | Default | Beschreibung |
Return | ItemRef | Die Variable colRef wird zurückgegeben. Bei Fehlern wird 0 zurückgegeben. | |
hy | ItemRef | - | Gültige Verweisreferenz |
static ItemRef hyperlink::setname(ItemRef hy, char* newname)
Ändere den Namen eines Verweises.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
newname | String oder char* | - | Neuer Name für den Verweis. Anders als beim Anlegen eines Verweises darf der Name hier nicht leer sein. |
static ItemRef hyperlink::show(ItemRef hy)
Mache den Verweis sichtbar.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
static ItemRef hyperlink::hide(ItemRef hy)
Mache den Verweis unsichtbar.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
static ItemRef hyperlink::appearance(
ItemRef hy,
int borderwidth,
int hstate,
ItemRef colRef = 0,
int visible = -1,
int dashed = -1)
Ändere das Aussehen eines Verweises.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
borderwidth | int | - | Linienstärke -1 : Unverändert 1 : dünn 2 : mittel 3 : stark |
hstate | int | - | Wählen Sie einen der folgenden Werte. Diese Einstellung wird nur in der exportierten PDF-Datei verwendet. -1 : Unverändert kNoHyperlinkHilight kInvertHyperlinkHilight kInsetHyperlinkHilight kOutlineHyperlinkHilight Die Angabe kNoHyperlinkHilight bewirkt nicht, dass der Rahmen unsichtbar wird, dazu wird der Parameter visible verwendet.. |
colRef | ItemRef | 0 | Farbe des Verweisrahmens 0 : Farbe unverändert lassen |
visible | int | -1 | Sichtbar oder nicht? -1 : unverändert 1 : sichtbar 0 : unsichtbar |
dashed | int | -1 | Soll der Rahmen gestrichelt sein? -1 : unverändert 0 : Nein. Der Rahmen ist durchgezogen 1 : Ja, Rahmen stricheln |
Der Verweis soll einen orangen Rahmen bekommen.
int main () { ItemRef hy = item::alloc (); ItemRef colid = item::alloc ();
hyperlink::create_pagedest (hy, 0, gFrame, 20, 30, "", 5);
color::define_rgb ("", 255, 128, 0, 0, colid); hyperlink::appearance ( hy, hyperlink::borderwidth (hy), hyperlink::hilight (hy), colid, 1);
return 0; }
static ItemRef hyperlink::goto_source(ItemRef hy)
Gehe im Dokument zu der Stelle, an der der Verweis definiert ist.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
static ItemRef hyperlink::goto_destination(ItemRef hy)
Gehe im Dokument zu der Seite, auf die der Verweis zeigt.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
static int hyperlink::find(
LinkList resultList,
ItemRef docRef,
char* crossRefName,
long classid,
long id,
long id2 = 0,
long id3 = 0,
char* sid = 0,
int findInBook = 1,
int inclSection = 1,
int intStyle = 1,
int numType = 0,
int abbrev = 1,
int calcTextPos = 0,
int sortType = -1)
Suche alle Querverweis-Definitionen eines bestimmten Namens mit einer gegebenen Comet-ID. Links dieser Art werden durch das Tag <w2cross> oder einen Aufruf der Funktion textmodel::insert_crossref angelegt. Eine ausführliche Beschreibung zu Comet-Querverweisen finden sie hier.
Beim Anlegen der Querverweis-Definitionen werden Name und Zielname (bestehend aus Klassennummer des Objektes, ID, ID2, ID3 und StringID) des Links zwar fest vorgegeben. Existiert ein Objekt gleichen Namens aber schon im Dokument, versieht InDesign® die Namen jeweils mit einer eindeutigen Nummer am Ende - es können also (bis auf diese Endung, die Sie nicht kennen), beliebig viele Links des gesuchten Namens und Zieles im Dokument existieren. Die Funktion findet alle Querverweis-Definitionen, deren Namen und/oder Ziel mit dem gegebenen String beginnen.
Verweise, die im Overset liegen, werden nicht gefunden.
Sie können die Links in allen Dokumenten des Buches suchen, zu denen das gegebene Dokument gehört. Das zugehörige Buch muß dazu geöffnet. Enthalten mehrere geöffnete Bücher das Dokument, wird das erste gefundene Buch verwendet. Nicht geöffnete Dokumente werden automatisch geöffnet (und wieder geschlossen). Beim Öffnen und Schließen dieser Dokumente wird der Comet-Mechanismus der Dokumentbeobachtung zwischenzeitlich abgeschaltet (siehe set_docwatch und get_docwatch).
Die Ergebisse stehen nach erfolgreichem Ende der Funktion in der Liste resultList. Seitennamen, die geöffnete Dokumente erfordern, werden in dieser Liste festgehalten und können nach dem Ende der Funktion erfragt werden, ohne dass die zugehörigen Dokumten noch einmal geöffnet werden müssen. Dazu müssen Sie der Funktion aber einige Informationen mitgeben, wie die Seitennamen aussehen sollen (inclSection, intStyle, numType, numType)
[Ab v3.3 R3116, 13.08.2012] Wird classid 0 übergeben, werden die Namen nicht automatisch mit den Comet-Objekt-IDs verlängert. Im Parameter sid können Sie dann den Namen des Textankers angeben, nach dem Sie suchen. Es werden alle Verweise gefunden, deren Ziel mit dieser Angabe beginnt. Auch hier bedeutet ein Leerstring, dass alle Textanker gefunden werden.
[Ab v3.3 R3116, 13.08.2012] Die Funktion kann auch verwendet werden, um ausschließlich nach den im Dokument definerten Textankern zu suchen. Geben Sie dazu dem Parameter crossRefName den Wert "ANCHORS#" in genau dieser Schreibweise. Die Ergebnisse haben dann keine Informationen über den Hyperlink sondern nur Informationen über den Textanker.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
resultList | LinkList | - | Allokierte Ergebnisliste. Bestehende Einträge der Liste werden bei Funktionsbeginn gelöscht. Mit den linklist-Funktionen können Sie diese Liste durchlaufen und mit den link-Funktionen die Werte der einzelnene Einträge erfragen. |
docRef | ItemRef | - | Dokument, in dem gesucht werden soll 0 : aktuelles Dokument |
crossRefName | String oder char* | - | Name des Links. Finde alle Links, die mit diesem String beginnen. Die Angabe darf leer sein. Anker suchen : "ANCHORS#" : Suche nach Textankern anstelle nach Hyperlinks. Namensanfang : Einschränkungen auf einen festgelegten Namensanfang machen Sie wie folgt : Setzen Sie classid auf 0 und geben Sie im Parameter sid den Namensanfang ein. Name und/oder Zielname enthält : [seit v4.3 R35900] [name: 'regex'] [destname : 'regex']Name und/oder Zielname enthalten den jeweils festgelegten regulären Ausdruck. Ist destname definiert, werden die Angaben in classid, id, ... ignoriert. Suche alle Textanker auf Produkte destname: '^3 [0-9]+ [0-9]+' Suche alle Textanker auf Produkte deren ID mit 1 endet. destname: 'destname: '^3 ([0-9]+1|1) [0-9]+' Definitionen von Verweiszielen : Suche nach den Defintionen von Verweiszielen. Diese Informationen sind bei der Anlage von Hyperlinks wichtig. Der typische Fall ist wie folgt:
Diese fehlenden Defintionen können mit Hilfe von <HyperlinkDestDefn:...>'s an den Eingabetext angefügt werden - was das Problem erst einmal löst. Erst einmal? Ja, leider. Das nächste Problem folgt nämlich sofort - man siehts nur nicht gleich: Man hat sich ja Mühe gegeben und hyperlink::get_next_unique_key auch wirklich eindeutige Keys verwendet. Aber InDesign nimmt das etwas zu ernst und legt jetzt jedesmal eine neue Definition an (url, url 1, url 2, ...). Um das zu vermeiden, muß man also vor dem Anfügen der <HyperlinkDestDefn:...>'s zuerst einmal prüfen, ob es nicht vielleicht bereits ein Ziel mit der gewünschten URL gibt (und dann diesen Key verwenden). Deshalb also die beiden folgenden Präfixe:
|
classid | int | 0 | Klassennummer des Objektes ≤0 : Verwende lediglich die StringID des Objektes |
id, id2, id3 | int, int, int | 0, 0, 0 | Comet-Objekt-ID. Mit classid > 0 und id = 0 wird die Objekt-ID ignoriert. |
sid | String oder char* | 0 | Comet-StringID. Aus den IDs und der StringID wird der Zielname des Links ermittelt und nach allen Links gesucht,
deren Ziele mit dieser Angabe beginnen. classid 0 : Namensanfang der Textanker |
findInBook | int | 0 | Sollen alle Dokumente, die zum gleichen Buch gehören, ebenfalls durchsucht werden? 0 : Nein 1 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time ohne Sichern geschlossen 2 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time gesichert und geschlossen (seit v4.3 R34280) |
inclSection, intStyle, numType, abbrev | int | 1, 1, 0, 1 | Angaben zur Formatierung der Seitenangaben, siehe page::get_str |
calcTextPos | int | 0 | Das Berechnen der XY-Position im Text ist recht aufwendig. Es muss dehalb extra eingeschaltet werden. 0 : Berechnung unnötig 1 : Textkoordinaten (in Punken relativ zum Textrahmen) berechnen. Y gibt dabei die Zeilenposition an. |
sortType | int | -1 | Sortierreihenfolge der Ergebnisliste (ab v4.3 R35900). Der Parameter wird nur ausgewertet wenn findInBook > 0 und calcTextPos > 0 -1 : Nur nach Seite im Buch 0 : Seitenweise und spaltenweise (kleinere x-Koordinate gewinnt) pro Seite 1 : Seitenweise und zeilenweise (kleinere y-Koordinate gewinnt) pro Seite |
Finde alle Hyperlinks eines Dokumentes.
int main () { LinkList lks = linklist::alloc (); int res = hyperlink::find (lks, 0, "", 0, -1, 0, 0, "", 1, 1, 1, 0, 0); Link lk;
wlog ("", "Crossrefs in document\n"); for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wlog ("", "%s --> '%s'\n", link::crossref::name (lk), link::crossref::destination (lk)); wlog ("", "\tSeite %d (%d in '%s')\n", link::crossref::page (lk, 0), link::crossref::page (lk, 1), link::crossref::document (lk, 1)); wlog ("", "\tSeitenname %s (%s)\n", link::crossref::pagename (lk, 0), link::crossref::pagename (lk, 1)); } linklist::release (lks); return 0; }
Hier ein Skript, das alle Hyperlinks eines Dokumentes sammelt und für jeden Hyperlink, der auf einen Textanker zeigt, ein Button unter dem Textrahmen erzeugt. Die (lange) Funktion wcross wird für das Ergebnis nicht benötigt. Sie dient nur der Demonstration und kann weggelassen werden.
#include "internal/text.h" #include "internal/types.h"
int wcross (Link lk) { int hasSource = item::defined (link::crossref::hyperlink_ref (lk)); int hasDest = item::defined (link::crossref::anchor_ref (lk)); int type = link::crossref::type (lk);
// headline if (hasSource && hasDest) { wlog ("", "Hyperlink '%s' --> '%s'\n", link::crossref::name (lk), link::crossref::destination (lk)); } else if (hasDest) { wlog ("", "Destination '%s'\n", link::crossref::destination (lk)); } else { wlog ("", "Wrong cross reference %d --> %d\n", item::getint (link::crossref::hyperlink_ref (lk)), item::getint (link::crossref::anchor_ref (lk))); }
// hyperlink data if (hasSource) { wlog ("", "\t=== Source ===\n"); wlog ("", "\tFrame %d, page %d\n", item::getint (link::crossref::src_frame (lk)), page::get (link::crossref::src_frame (lk))); wlog ("", "\tText %d-%d\n", link::crossref::src_textpos (lk), link::crossref::src_textpos (lk)+link::crossref::src_textlen (lk)); }
// anchor data if (hasDest) { if (type == 0) { wlog ("", "\t=== Text anchor ===\n"); wlog ("", "\tPage %d (%d in '%s')\n", link::crossref::page (lk, 0), link::crossref::page (lk, 1), link::crossref::document (lk, 1)); wlog ("", "\tPage name %s (%s)\n", link::crossref::pagename (lk, 0), link::crossref::pagename (lk, 1)); wlog ("", "\tFrame %d\n", item::getint (link::crossref::frame (lk))); wlog ("", "\tText position %d\n", link::crossref::pos (lk)); wlog ("", "\tCoordinates [%f x %f]\n", link::crossref::x (lk), link::crossref::y (lk)); wlog ("", "\tBbox [%f, %f] - [%f, %f]\n", link::crossref::left (lk), link::crossref::top (lk), link::crossref::right (lk), link::crossref::bottom (lk)); } else if (type == 1) { wlog ("", "\t=== Page ===\n"); wlog ("", "\tPage %d (%d in '%s')\n", link::crossref::page (lk, 0), link::crossref::page (lk, 1), link::crossref::document (lk, 1)); wlog ("", "\tPage name %s (%s)\n", link::crossref::pagename (lk, 0), link::crossref::pagename (lk, 1)); } else { wlog ("", "\t=== URL ===\n"); wlog ("", "\t'%s'\n", link::crossref::info (lk)); }
wlog ("", "\n"); }
return 0; }
int main () { LinkList lks = linklist::alloc (); int res = 0; Link lk; ItemRef fr; ItemRef btn = item::alloc (); ItemRef action = item::alloc (); float l, t, r, b; ItemList buttons = itemlist::alloc (); ItemList states = itemlist::alloc (); float offset; int i; char path [2000];
res = hyperlink::find ( lks, // result list 0, // front document "", // Hyperlink names 0, // classID (ignore Comet IDs) 0, 0, 0, // ID, ID2, ID3 (ignored if classID == 0) "", // StringID or anchor name 0, // find in book 1, 1, 0, 1, // page name formatting 1); // Calculate text pos of anchor if (res) { wlog ("", "# Error %d (%s) while retreiving cross references\n", res, serror (res)); return 0; }
document::path (path); wlog ("", "Crossrefs in document '%s'\n", path);
for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wcross (lk);
if (0 && link::crossref::type (lk) == 0 && item::defined (link::crossref::hyperlink_ref (lk))) { // One text model can contain N hyperlinks offset = 10.0; for (i = 0; i < itemlist::length (buttons); i++) { itemlist::get (buttons, fr, i); if (item::getint (fr) == item::getint (link::crossref::src_frame (lk))) { offset += 52.0; } }
// Create a simple text frame fr = link::crossref::src_frame (lk); frame::bbox (fr, &l, &t, &r, &b); frame::create2 (btn, kRectangle, l, b+offset, l+150.0, b+offset+42.0, page::get (fr)); frame::append (btn, ">> "); frame::append (btn, link::crossref::destination (lk)); itemlist::append (buttons, fr);
// Make *btn* a button itemlist::clear (states); itemlist::append (states, btn); itemlist::create_multistate (btn, states, 1);
// and finally a the action behavior::add_action (btn, 2, 1, action); behavior::change_action_data (btn, action, "", item::getint (link::crossref::anchor_ref (lk)), 2); } }
linklist::release (lks); return 0; }
Schreibe alle HyperlinkDestinationDefs des aktuellen Dokumentes in Logfile.
int main () { LinkList lks = linklist::alloc (); Link lk;
wlog ("", "HyperlinkDestDefns by name:\n"); hyperlink::find (lks, 0, "defn:'*'"); for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wlog ("", "'%s' [%d], type %d--> '%s'\n", link::crossref::name (lk), link::crossref::key (lk), link::crossref::type (lk), link::crossref::destination (lk)); }
wlog ("", "\nHyperlinkDestDefns by info:\n"); linklist::clear (lks); hyperlink::find (lks, 0, "defn_info:'*'"); for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wlog ("", "'%s' [%d], type %d--> '%s'\n", link::crossref::name (lk), link::crossref::key (lk), link::crossref::type (lk), link::crossref::destination (lk)); }
return 0; }
static char* hyperlink::find1(
int* res,
char* property,
int nth,
ItemRef docRef,
char* crossRefName,
long classid,
long id,
long id2 = 0,
long id3 = 0,
char* sid = 0,
int findInBook = 1,
int inclSection = 1,
int intStyle = 1,
int numType = 0,
int abbrev = 1)
Finde eine Information eines Links im Dokument. Im Normalfall benötigen Sie die Funktion find nicht, find1 wird Ihnen völlig ausreichen. Aber auch hier werden Textverweise im Overset nicht gefunden. Hier finden Sie eine Information eines Links - die Ergebnisse sind immer Strings. Abweichend von der Definition von find geben Sie hier an, welche Information und welchen Link Sie erhalten wollen.
Name | Typ | Default | Beschreibung | ||||||||||||||||||||||||||||||||||||
Return | char* | Als Ergebnis wird immer ein String geliefert. Im Fehlerfall ist er 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. |
|||||||||||||||||||||||||||||||||||||
res | int*|float*|String oder char* | - | Der Parameter enthält nach erfolgreicher Ausführung das Ergebnis der Suche. Er darf 0 sein. ist er ungleich 0, müssen Sie darauf achten, abhängig vom Parameter what eine Variable vom richtigen Typ zu verwenden, also etwa für "Document" char*, für "Page" int* und für "TextX" float*. Und, äh, Sie wissen das, oder? Die Adresse einer int-Variable i ist &i, die einer float-Variable f &f. Und die Adresse eines char*-Strings s ist s selbst, nicht &s!! | ||||||||||||||||||||||||||||||||||||
property | String oder char* | - | Welche Information wollen Sie erhalten? Geben Sie den Eigenschaftsnamen jeweils als String an (z.B. "Page"). Beachten Sie bitte, dass Sie als
Ergebnis des Aufrufes immer einen String erhalten.
|
||||||||||||||||||||||||||||||||||||
nth | int | - | Welchen Link wollen Sie verwenden, wenn mehrere gefunden wurden? 0 : Erster -1 : Letzter sonst : Diesen Link (0-basiert). Wurden weniger Links gefunden, gibt die Funktionen einen Leerstring (Fehler) zurück. |
||||||||||||||||||||||||||||||||||||
docRef | ItemRef | - | Dokument, in dem gesucht werden soll 0 : aktuelles Dokument |
||||||||||||||||||||||||||||||||||||
crossRefName | String oder char* | - | Name des Links. Finde alle Links, die mit diesem String beginnen. Die Angabe darf leer sein. | ||||||||||||||||||||||||||||||||||||
classid | int | 0 | Klassennummer des Objektes ≤0 : Verwende lediglich die StringID des Objektes |
||||||||||||||||||||||||||||||||||||
id, id2, id3 | int, int, int | 0, 0, 0 | Comet-Objekt-ID. Mit classid > 0 und id = 0 wird die Objekt-ID ignoriert. | ||||||||||||||||||||||||||||||||||||
sid | String oder char* | 0 | Comet-StringID. Aus den IDs und der StringID wird der Zielname des Links ermittelt und nach allen Links gesucht, deren Ziele mit dieser Angabe beginnen. | ||||||||||||||||||||||||||||||||||||
findInBook | int | 0 | Sollen alle Dokumente, die zum gleichen Buch gehören, ebenfalls durchsucht werden? 0 : Nein 1 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time ohne Sichern geschlossen 2 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time gesichert und geschlossen (seit v4.3 R34280) |
||||||||||||||||||||||||||||||||||||
inclSection, intStyle, numType, abbrev | int | 1, 1, 0, 1 | Angaben zur Formatierung der Seitenangaben, siehe page::get_str |
Das Beispiel zeigt die Verwendung verschiedener Schlüsselworte. Für ein reales Projekt ist es ungeeignet, für jede Information muss das gesamte Buch erneut durchsucht werden. Wollen Sie mehrere Infomationen gleichzeitig ermitteln, verwenden Sie besser die allgemeinere Funktione find.
int main () { int i; float f; char s[256];
wlog ("", "\n"); wlog ("", "Document %s\n", hyperlink::find1 (s, "Document", 0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Docfolder %s\n", hyperlink::find1 (s, "Docfolder", 0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Docpath %s\n", hyperlink::find1 (s, "Docpath", 0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Page %s\n", hyperlink::find1 (&i, "Page", 0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "X %s\n", hyperlink::find1 (&f, "TextPosX", 0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Y %s\n", hyperlink::find1 (&f, "TextPosY", 0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); return 0; }
static int hyperlink::delete_all(
ItemRef docRef = 0,
int direct = 0,
int saveSteps = 0)
Entferne alle Hyperlinks aus einem Dokument. Der Befehl ist dafür gedacht, alte Dokumente, in denen die hyperlink::create~-Funktionen bestehende Hyperlinks zuvor nicht gelöscht haben (vor Comet 2.1 R 704, 8. Mai 2008), auf einen definierten Stand zu bringen. Diese Dokumente haben mitunter eine sehr lange Liste unbenutzter Hyperlinks. Es ist möglich, dass Hyperlinks auch mit InDesign®-Bordmitteln nicht mehr gelöscht werden können ohne einen Absturz von InDesign® zu provozieren. In diesem Fall rufen Sie die Anweisung mit dem Wert 1 für direct auf. Die Hyperlinks werden dann ohne weitere Tests aus der Dokumentstruktur gelöscht. Sonst werden Sie nach dem gleichen Verfahren gelöscht, das Sie auch beim Löschen über die Hyperlink-Palette anwenden . Wenn Sie die Hyperlinks direkt löschen, wird das Dokument zum Schluss gesichert und neu geladen. es geht also nicht bei neuen (in diesem Fall vielleicht eher konvertierten (und damit neuen)) Dokumenten.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
docRef | ItemRef | 0 | Dokument, dessen Hyperlinks gelöscht werden sollen. Es werden alle Hyperlinks aus dem Dokument entfernt. 0 : Aktuelles Dokument |
direct | int | 0 | Siehe oben |
saveSteps | int | 0 | (nur bei direct = 0) : Nach jedem Löschen wird das Dokument neu gesichert. |
static int hyperlink::delete_(ItemRef hl)
Löschen eines Hyperlinks. Die Funktion erkennt selbständig, ob es sich bei der Referenz um einen Anker oder einen Verweis handelt. Anker können nicht gelöscht werden, wenn sie noch an anderer Stelle verwendet werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hl | ItemRef | Gültiger Anker oder Verweis |
int main () { LinkList lks = linklist::alloc (); int res = hyperlink::find (lks, 0, "", 0, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 0, 0); Link lk;
for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { hyperlink::delete_ (link::crossref::hyperlink_ref (lk)); } linklist::release (lks); return 0; }
static int hyperlink::get_next_unique_key(ItemRef docRef = 0)
Ermittle den nächsten verfügbaren Hyperlink-Schlüssel eines Dokumentes. Die Funktion ist hilfreich bei der Erstellung von TaggedText mit Hyperlinks. Mehr Informationen finden Sie hier.
Name | Typ | Default | Beschreibung |
Return | int | Nächster eindeutiger Hyperlink-Schlüssel -1 : Fehler |
|
docRef | ItemRef | 0 | Dokument, in dem gesucht werden soll 0 : aktuelles Dokument |
static char* hyperlink::get_alttext(ItemRef hyRef)
Ermittle den Alternativtext eines Hyperlinks. In InDesign® kann der Alternativtext unter der Rubrik Barrierefreiheit des Dialoges Hyperlink bearbeiten edittiert werden.
Name | Typ | Default | Beschreibung |
Return | char* | Name des Verweises oder ""
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. |
|
hy | ItemRef | - | Gültige Verweisreferenz |
int main() { ItemRef hy = item::alloc ();
showmessage ("%d", hyperlink::count (gFrame));
hyperlink::get_nth(gFrame, 0, hy); hyperlink::set_alttext (hy, "My Alttext (äöüß)"); showmessage ("-%s-", hyperlink::get_alttext (hy));
return 0; }
static int hyperlink::set_alttext(ItemRef hyRef, char* altText = 0)
Setze den Alternativtext eines Hyperlinks. In InDesign® kann der Alternativtext unter der Rubrik Barrierefreiheit des Dialoges Hyperlink bearbeiten edittiert werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
hy | ItemRef | - | Gültige Verweisreferenz |
altText | String oder char* | 0 | Neuer Alternativtext 0 oder "" : Alternativtext entfernen |
int main() { ItemRef hy = item::alloc ();
showmessage ("%d", hyperlink::count (gFrame));
hyperlink::get_nth(gFrame, 0, hy); hyperlink::set_alttext (hy, "My Alttext (äöüß)"); showmessage ("-%s-", hyperlink::get_alttext (hy));
return 0; }
Das Beispiel zeigt der Verwendung einiger hyperlink-Funktionen. Achten Sie insbesondere auf die Verknüpfung eines Hyperlinkziels mit einem Lesenzeichen. Hier wird nicht der Hyperlink selbst übergeben, sondern natürlich das Ziel des Hyperlinks (hyperlink::destination).
int main () { ItemRef hy = item::alloc (); ItemRef dest = item::alloc (); ItemRef colid = item::alloc (); ItemRef bk = item::alloc ();
hyperlink::create_pagedest (hy, 0, gFrame, 20, 30, "", 5); wlog ("", "name : %s\n", hyperlink::name (hy)); wlog ("", "visible : %d\n", hyperlink::visible (hy)); wlog ("", "border : %d\n", hyperlink::borderwidth (hy)); wlog ("", "hstate : %d\n", hyperlink::hilight (hy));
color::define_rgb ("", 255, 128, 0, 0, colid);
hyperlink::appearance (hy, 5, 1, colid); wlog ("", "border : %d\n", hyperlink::borderwidth (hy)); wlog ("", "hstate : %d\n", hyperlink::hilight (hy));
// Bookmark für den Hyperlink bookmark::create2 ( bk, 0, hyperlink::destination (dest, hy), hyperlink::name (hy), "");
return 0; }
Alphabetic index HTML hierarchy of classes or Java