Quantcast
Channel: Adobe InDesign Skriptwerkstatt - HilfDirSelbst.ch
Viewing all 8700 articles
Browse latest View live

RegExp – Probleme mit match()/exec()

$
0
0
Hallo pixxxelschubser,

danke erst einmal für die Antwort. Der reguläre Ausdruck ist so zerpflückt, weil ich zwischenzeitlich dachte, dass match() Probleme mit zu verschachtelten Ausdrücken bekommt.

Der ursprüngliche Ausdruck sieht so aus:

Code
 "(?:(?:[vV]on(?:" + _space + "der)?|[vV]an(?:" + _space + "de[nr])?|[vV]an" + _apos + "t|ter|[dD]i|[dD]e(?:" + _space + "la)?)" + _space + "+|[dD](?:" + _apos + "|e)|Ma?c|O" + _apos + "|El" + _space + ")"; //Namenspräfixe 


wobei _space wiederum verschiedene Leerräume abdeckt und _apos verschiedene Apostrophen findet.

Du hast ja mit Grep gesucht, bei match()/exec() stehen ja leider keine POSIX-Ausdrücke zur Verfügung, ebenso funktionieren \u und \l für uppercase und lowercase nicht, daher die Unicodepoints (allerdings macht das den Grep-Ausdruck leider absolut unlesbar).

Die Wortgrenzen sind in dem Fall nicht nötig. In einem ersten Schritt suche ich mit Grep im FLießtext nach Referenzen auf Literatur und speichere die Treffer in einem Array. Anschließend werte ich jeden Treffer aus, um zu prüfen, ob nur ein Autor (Autor, Jahreszahl), zwei Autoren (Autor and Autor, Jahreszahl) oder mehrere Autoren (Autor et al., Jahreszahl) gefunden wurden. Da ich hier jeweils einen String auswerten muss, muss ich mit match() oder exec() arbeiten.
... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 09:50 (Ferestes)

Datum in etikettierten Textfeld einfügen

$
0
0
Hallo Sándor,
folgender Vorschlag für die Prüfung:

Code
event.fullName.match(/\.idml$/i); 


Findet alle Dateinamen, die mit ".idml" enden.
Unabhängig von Groß/Klein-Schreibung.
*****
Mit herzlichem Gruß,
Uwe Laubender ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 10:30 (Uwe Laubender)

Steuerung der Prozesse eines Hotfolders über eine Palette

$
0
0
Antwort auf: Eine weiterer Idee: ergänzend zur targetengine, in der die Beobachtungs- und Verarbeitungsprozesse laufen, eine davon unabhängige targetengine für das Dialogfenster (Palette) einzurichten.

Ist dies möglich?


Von Marc Autret findet sich ein Beispiel für die Arbeit mit mehreren #targetengines in https://forums.adobe.com/message/4179231#4179231.

Hier eine Abwandlung des Beispiels:

Code
#targetengine "session"   
var w = new Window("window", 'Test', undefined, {resizeable:false, borderless:false} );
var myPanel = w.add ("panel");
w.add("statictext", undefined, "#targetengines");
var mb1 = w.add("button", undefined, "main");
var mb2 = w.add("button", undefined, "session");
var mb3 = w.add("button", undefined, "default");
mb1.size = mb2.size = mb3.size = [150,20];

mb1.onClick = function()
{
app.doScript("#targetengine 'main'\r" + test(this.text).toSource() + "();",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}
mb2.onClick = function()
{
app.doScript("#targetengine 'session'\r" + test(this.text).toSource() + "();",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}
mb3.onClick = function()
{
app.doScript(test(this.text),
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}

w.show();

function test(str)
{
alert('#targetengine ' + $.engineName + '\nButton "' + str + '" clicked.');
}


Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 11:07 (Martin Fischer)

Datum in etikettierten Textfeld einfügen

$
0
0
Antwort auf [ Uwe ] Das Ding heißt idml und nicht imdl. Da kann der Ausdruck ja nichts finden.

Das ist eine Krücke mit meine Flüchtigkeit Fehler.

Antwort auf [ Werner ] Prüfe dann mal die Klammern.

da lobe ich mein ScriptDebugger (für applescript), der hätte so den script nicht übersetzt.

Danke für Euere Hilfe.
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;
... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 12:01 (jekyll)

RegExp – Probleme mit match()/exec()

$
0
0
Jetzt hast du mich verwirrt!
Oder hast du die Grep bzw. Regex im Screenshot eventuell übersehen?
Und leider geht dein Antwort ein bisschen an meinen Nachfragen „vorbei“.

Ich verwende weder \u noch \l und auch keine POSIX-Ausdrücke.

Ansonsten habe ich lediglich die Buchstaben in einer Klasse gesammelt und nicht wie du die „langatmigen Unicodepoints für jeden einzelnen Buchstaben“. Und die einzelnen Teil-Suchen zusammengefügt. Die zusätzlichen Wortgrenzen sind nicht zwingend nötig, helfen aber einige falsch positive Treffer zu verhindern.

Deshalb sollten beide Regex auch in Verbindung mit exec() funktionieren. Höchstens der Ausdruck für „Gross- und Kleinschreibung ignorieren“ könnte u.U. im Skript nicht funzen. Das habe ich noch nie ausgetestet. Aber dafür gibt es ja für Regex in Javascript den Parameter match(/regex/i)

Oder vielleicht hapert es an dem bereits bei dir enthaltenen Ausdruck „nicht im Suchstring speichern“ (habe ich ebenfalls noch nie in einem Skript verwendet).

Aber vielleicht gehst du ja noch etwas genauer auf die anderen Fragen in meinem vorherigen Posting ein.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 18:21 (pixxxelschubser)

RegExp – Probleme mit match()/exec()

$
0
0
Hallo Forum,

ich habe ein Problem mit match()/exec(). Hintergrund ist, dass ein wirklich sehr komplexer regulärer Ausdruck zusammengesetzt wird und dann ein String damit gematcht werden soll. Allerdings hängt sich InDesign (CS6, CC 2015) dabei auf.
Code
//eventuelle Namenspräfixe 
var _npfx = "(?:[vV]on ?|[vV]on ?der ?|[vV]an ?|[vV]an ?den ?|[vV]an ?der ?)";
//Groß- und Kleinbuchstaben
var _upperCase ="["0041", "0042"]"; // und so weiter
var _lowerCase ="["0061", "0062"]"; // und so weiter
//Namen
var _surnames = "_upperCase + _lowerCase + "+"";
//regulärer Ausdruck wird kompiliert
var _refName2Grep2 = RegExp ("[au]nd +((?:" +_npfx + ")?" + _surnames + ") ,\\d{4}");
//und auf _someSting angewendet.
var _refName2 = _someString.contents.exec(_refName2Grep2);


Der Code ist vereinfacht, aber vielleicht wird das Problem klar. Ist das bekannt? Wie könnte man sonst sehr komplexe reguläre Ausdrücke auf String anwenden?

Vielen Dank!
... Adobe InDesign Skriptwerkstatt 9. Nov 2017, 20:04 (Ferestes)

Datum in etikettierten Textfeld einfügen

$
0
0
so hier mein Bastelei:
Code
app.addEventListener("afterOpen",  meinDoOeffnen);   

function meinDoOeffnen(event)
if (event.userInteractionLevel == "INTERACT_WITH_ALL" && event.fullName == "macHD/wbf/mein.imdl"){
var alle = app.documents[0].allPageItems;
if (alle[i].hasOwnProperty('contents') && alle[i].label == "datum"){
alle[i].contents = myDatum();
}
}
}

function myDatum()
{
var jetzt= new Date();
var monate = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var datum = jetzt.getDate() + ". " + monate[jetzt.getMonth()] + " " + jetzt.getFullYear() + ", " + jetzt.getHours() + ":" + jetzt.getMinutes() + " Uhr";
return datum;
}


Läuft natürlich nicht :(
Eine .imdl heisst nach dem öffnen "Unbenannt" und hat kein Pfad. Ich glaube in dem Fall ist eine FullName Prüfung sinnlos oder?
Habe mein.imdl auch als mein.indd öffnen lassen funzt mein script aber auch nicht.

Sollte ich eine neue Thema hierfür anfangen?
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;
... Adobe InDesign Skriptwerkstatt 9. Nov 2017, 22:03 (jekyll)

RegExp – Probleme mit match()/exec()

$
0
0
Hmmh?

Was genau möchtest du finden?
Was soll mit den Fundstellen passieren?
Warum zerpflückst du den Suchstring in so viele Einzelteile?

Kannst du dein Vorhaben noch etwas genauer beschreiben und ein paar (möglichst mehr als zwei) aussagekräftige Beispiele zeigen? Oder eine IDML auf einen Hoster deiner Wahl hochladen und hier verlinken?

Warum verwendest kaum Platzhalter?
Du bist dir bewusst, dass dein Grep einige falsch positive Treffer landet?

Sieh dir bitte mal den Anhang an.
Möchtest du das finden? Ist im Grunde genommen fast dein Grep, lediglich etwas zusammengesetzt und einmal ohne (magenta) und einmal mit Wortgrenzenbeschränkung (blau, das verhindert schon ein paar falsch positive Treffer)

Der Screenshot zeigt zumindest das, was ich denke, aus deinem Eingangspost herausgelesen zu haben. Ich könnte aber auch total danebenliegen - sind halt zu wenige Informationen.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 00:02 (pixxxelschubser)

Datum in etikettierten Textfeld einfügen

$
0
0
Guten Morgen Sándor,

Zitat Sollte ich eine neue Thema hierfür anfangen?

Wäre sicherlich besser.

Zitat Ich glaube in dem Fall ist eine FullName Prüfung sinnlos oder?

Ja, und das gilt für jede, noch nicht gesicherte InDesign-Datei:
Document.saved == false!
Selbst dann, wenn Dich im Tab des Documentfensters der richtige Name anlächelt :-).


Verwende
Code
app.addEventListener("beforeOpen",  meinDoOeffnen); 


und die Sache sollte klappen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 07:40 (WernerPerplies)

Datum in etikettierten Textfeld einfügen

$
0
0
Hallo Werner,
danke für dein Antwort.

Antwort auf: und die Sache sollte klappen.

Ich hab´s nicht getestet aber denke, dass mein script erst nach dem öffnen die Werte des etikettierten Textfeldes ändern kann oder?
So müsste ich wohl erst mit beforeOpen die Name prüfen und dann mit afterOpen den Feld ändern.

Nach dem ich eine Nacht über die Sache geschlafen habe bin ich drauf gekommen, dass für mich besser wäre über eine Hotfolder zu arbeiten. Den kann ich mit applescript ansteuern, da kenne ich mich ein hauch besser aus :)
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;
... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 09:11 (jekyll)

Datum in etikettierten Textfeld einfügen

$
0
0
Hallo Sándor,
Du hast außerdem einen Tippfehler drin.
Das Ding heißt idml und nicht imdl. Da kann der Ausdruck ja nichts finden.
*****
Mit herzlichem Gruß,
Uwe Laubender ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 09:19 (Uwe Laubender)

Datum in etikettierten Textfeld einfügen

$
0
0
Hallo Sándor,

Zitat Ich hab´s nicht getestet aber denke, dass mein script erst nach dem öffnen die Werte des etikettierten Textfeldes ändern kann oder?


Na ja, wenn das Event wirklich vor dem Öffnen gefeuert wird, kannst Du natürlich nicht auf den Inhalt der Datei zugreifen.

Zitat So müsste ich wohl erst mit beforeOpen die Name prüfen und dann mit afterOpen den Feld ändern.


Ja, das denke ich auch.

Aber das sollte kein Problem sein, solange Du mit der gleichen Target-Engine arbeitest, kannst Du Informationen über ein globales Object/globale Variable weiterreichen.

Zitat Nach dem ich eine Nacht über die Sache geschlafen habe bin ich drauf gekommen, dass für mich besser wäre über eine Hotfolder zu arbeiten.


Ok, mit Apple-Script kenne ich mich nicht aus, aber die Arbeit mit Hotfoldern hat auch seine Tücken, aber ich arbeite selbst sehr gerne damit, weil ich so UI-Aufgaben und Dienstskripte entkoppeln kann.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 09:36 (WernerPerplies)

Datum in etikettierten Textfeld einfügen

$
0
0
Guten Morgen Uwe,

:-)
wer wird denn so kleinlich sein, aber wenn schon, denn schon:

Prüfe dann mal die Klammern.

Ach ja, noch ein Hinweis, für Arbeiten mit Datumsangaben könnte auch dieses Skript interessant sein:

WpsInsertDates – Skript zum Einfügen von berechneten Daten in Adobe InDesign Dateien

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 09:39 (WernerPerplies)

RegExp – Probleme mit match()/exec()

$
0
0
Hallo pixxxelschubser,

danke erst einmal für die Antwort. Der reguläre Ausdruck ist so zerpflückt, weil ich zwischenzeitlich dachte, dass match() Probleme mit zu verschachtelten Ausdrücken bekommt.

Der ursprüngliche Ausdruck sieht so aus:

Code
 "(?:(?:[vV]on(?:" + _space + "der)?|[vV]an(?:" + _space + "de[nr])?|[vV]an" + _apos + "t|ter|[dD]i|[dD]e(?:" + _space + "la)?)" + _space + "+|[dD](?:" + _apos + "|e)|Ma?c|O" + _apos + "|El" + _space + ")"; //Namenspräfixe 


wobei _space wiederum verschiedene Leerräume abdeckt und _apos verschiedene Apostrophen findet.

Du hast ja mit Grep gesucht, bei match()/exec() stehen ja leider keine POSIX-Ausdrücke zur Verfügung, ebenso funktionieren \u und \l für uppercase und lowercase nicht, daher die Unicodepoints (allerdings macht das den Grep-Ausdruck leider absolut unlesbar).

Die Wortgrenzen sind in dem Fall nicht nötig. In einem ersten Schritt suche ich mit Grep im FLießtext nach Referenzen auf Literatur und speichere die Treffer in einem Array. Anschließend werte ich jeden Treffer aus, um zu prüfen, ob nur ein Autor (Autor, Jahreszahl), zwei Autoren (Autor and Autor, Jahreszahl) oder mehrere Autoren (Autor et al., Jahreszahl) gefunden wurden. Da ich hier jeweils einen String auswerten muss, muss ich mit match() oder exec() arbeiten.
... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 09:50 (Ferestes)

Datum in etikettierten Textfeld einfügen

$
0
0
Hallo Sándor,
folgender Vorschlag für die Prüfung:

Code
event.fullName.match(/\.idml$/i); 


Findet alle Dateinamen, die mit ".idml" enden.
Unabhängig von Groß/Klein-Schreibung.
*****
Mit herzlichem Gruß,
Uwe Laubender ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 10:30 (Uwe Laubender)

Steuerung der Prozesse eines Hotfolders über eine Palette

$
0
0
Antwort auf: Eine weiterer Idee: ergänzend zur targetengine, in der die Beobachtungs- und Verarbeitungsprozesse laufen, eine davon unabhängige targetengine für das Dialogfenster (Palette) einzurichten.

Ist dies möglich?


Von Marc Autret findet sich ein Beispiel für die Arbeit mit mehreren #targetengines (main und session) in https://forums.adobe.com/message/4179231#4179231.

Hier eine Abwandlung des Beispiels:

Code
#targetengine "session"    
var w = new Window("window", 'Test', undefined, {resizeable:false, borderless:false} );
var myPanel = w.add ("panel");
w.add("statictext", undefined, "#targetengines");
var mb1 = w.add("button", undefined, "main");
var mb2 = w.add("button", undefined, "session");
var mb3 = w.add("button", undefined, "default");
mb1.size = mb2.size = mb3.size = [150,20];

mb1.onClick = function()
{
app.doScript("#targetengine 'main'\r" + test.toSource() + "('" + this.text + "');",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}
mb2.onClick = function()
{
app.doScript("#targetengine 'session'\r" + test.toSource() + "('" + this.text + "');",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}
mb3.onClick = function()
{
app.doScript("test(this.text)",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}

w.show();

function test(str)
{
alert('#targetengine ' + $.engineName + '\nButton: ' + str + ' clicked');
}


Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 11:07 (Martin Fischer)

Datum in etikettierten Textfeld einfügen

$
0
0
Antwort auf [ Uwe ] Das Ding heißt idml und nicht imdl. Da kann der Ausdruck ja nichts finden.

Das ist eine Krücke mit meine Flüchtigkeit Fehler.

Antwort auf [ Werner ] Prüfe dann mal die Klammern.

da lobe ich mein ScriptDebugger (für applescript), der hätte so den script nicht übersetzt.

Danke für Euere Hilfe.
Gruß Sándor


Hier auf der HDS, kann jeder was dazu lernen, sogar die die glauben alles (besser) zu wissen Wink
Das sollten WIR ALLE unterstützen: http://www.hilfdirselbst.ch/...m.cgi?do=membership;
... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 12:01 (jekyll)

RegExp – Probleme mit match()/exec()

$
0
0
Jetzt hast du mich verwirrt!
Oder hast du die Grep bzw. Regex im Screenshot eventuell übersehen?
Und leider geht dein Antwort ein bisschen an meinen Nachfragen „vorbei“.

Ich verwende weder \u noch \l und auch keine POSIX-Ausdrücke.

Ansonsten habe ich lediglich die Buchstaben in einer Klasse gesammelt und nicht wie du die „langatmigen Unicodepoints für jeden einzelnen Buchstaben“. Und die einzelnen Teil-Suchen zusammengefügt. Die zusätzlichen Wortgrenzen sind nicht zwingend nötig, helfen aber einige falsch positive Treffer zu verhindern.

Deshalb sollten beide Regex auch in Verbindung mit exec() funktionieren. Höchstens der Ausdruck für „Gross- und Kleinschreibung ignorieren“ könnte u.U. im Skript nicht funzen. Das habe ich noch nie ausgetestet. Aber dafür gibt es ja für Regex in Javascript den Parameter match(/regex/i)

Oder vielleicht hapert es an dem bereits bei dir enthaltenen Ausdruck „nicht im Suchstring speichern“ (habe ich ebenfalls noch nie in einem Skript verwendet).

Aber vielleicht gehst du ja noch etwas genauer auf die anderen Fragen in meinem vorherigen Posting ein.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 10. Nov 2017, 18:21 (pixxxelschubser)

RegExp – Probleme mit match()/exec()

$
0
0
Danke, du hast Recht. Das Zusammenfassen zu einer Klasse hat das Problem gelöst. Davor war mein Prozessor wohl überfordert. Merci!
... Adobe InDesign Skriptwerkstatt 13. Nov 2017, 18:30 (Ferestes)

Probleme mit hyperlinkTextSource (Ungültiger Wert der Methode "add")

$
0
0
Hallo,

ich hänge an folgendem Problem. In einem Array wurden eine Reihe von Grep-Treffer gespeichert. Diese möchte ich auswerten und in einer Schleife verarbeiten.

Indesign: "Ovitatu ribusciam antiundit Autor (2007a, 2007b, 2009, 2013) ribusciam antiundi.

Das vereinfachte Skript:

Code
 var _dok = app.activeDocument; 
var _referecesA = [];

app.findGrepPreferences = null;
app.findGrepPreferences.findWhat = "Autor \\((\\d{4}([a-z]?, ?)?)*\\)";
_referecesA = _referecesA.concat(app.activeDocument.findGrep());

for (i = 0; i < _referecesA.length ; i++) {
var _reference = _referecesA[i];
var _refYears = _reference.contents.match(/\d{4}[a-z]?/g)
for (j = 0; j < _refYears.length; j++){
var _thisYear = _refYears[j];
var _source = _dok.hyperlinkTextSources.add(_thisYear);
}
}


Die Fehlermeldung lautet: "Ungültiger Wert der Methode "add". Text erwartet, aber "2007a" erhalten.

Mir ist klar, dass Text und String nicht dasselbe ist. Gibt es eine Möglichkeit, von den Fundstellen der match()-Funktion zum Textobjekt zu gelangen? Wie könnte man sonst das Problem lösen? Kann man nur Teile der Grep-Ergebnisse nutzen, um dort hyperlinkTextSources einzufügen? Könnte man die Grep-Ergebnisse vielleicht auch wiederum mit Grep durchsuchen?

Vielen Dank!
... Adobe InDesign Skriptwerkstatt 13. Nov 2017, 19:03 (Ferestes)
Viewing all 8700 articles
Browse latest View live