[GastForen Programmierung/Entwicklung AppleScript Sprachkürzel in Absatzformatnamen austauschen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Sprachkürzel in Absatzformatnamen austauschen

Martin Fischer
Beiträge gesamt: 12668

11. Apr 2005, 22:22
Beitrag # 1 von 9
Bewertung:
(1899 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Folgendes Script für Indesign habe ich zum Austauschen eines Sprachenkürzels im Formatnamen (DEU für Deutsch, FRA für Französisch) zusammengebastelt. Es funktioniert, doch braucht es seine Zeit.

[code:1]
set myAltSprach to (text returned of (display dialog "alter Sprachteil: " default answer "DEU"))
set myNeuSprach to (text returned of (display dialog "neuer Sprachteil: " default answer "FRA"))

set oldDelimiters to AppleScript's text item delimiters

tell application "InDesign CS"
 set myDoc to active document
 set myStyles to paragraph styles of myDoc whose name is not "[No Paragraph Style]"
 repeat with myCounter from 1 to (count of myStyles)
  set name of item myCounter of myStyles to my convertName(name of item myCounter of myStyles, myAltSprach, myNeuSprach)
 end repeat
end tell
set AppleScript's text item delimiters to oldDelimiters

on convertName(myName, theOldString, theNewString)
 -- alten Namensteil loeschen
 set AppleScript's text item delimiters to {theOldString}
 set tmpList to every text item of myName as list
 -- neuen Namensteil einfügen
 set AppleScript's text item delimiters to {theNewString}
 set myName to tmpList as string
end convertName
[/code:1]

Wie könnte man das Script noch beschleunigen?
Im Moment werden die Parameter für das alte und das neue Sprachkürzel jeweils mit an die Routine übergeben.
X

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5818

12. Apr 2005, 10:09
Beitrag # 2 von 9
Beitrag ID: #419470
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

gleich vorneweg: InDesign ist von Natur aus langsam, weil überladen. Und etwas
Vergleichbares zum XPress-'do script'-Turbo gibt es nicht.

Wieviele Stilvorlagen hat Dein Dokument? Deren Namen werden ja vom Script in eine
Liste gesetzt. Und der Zugriff auf Listenelemente kann mit AppleScript beschleunigt
werden, wenn man beim Aufruf das Wort 'my' vor den Variablennamen setzt:
set name of item myCounter of my myStyles to my convertName(name of item myCounter of my myStyles, myAltSprach, myNeuSprach)

Dabei wird einem bewusst, wie unnötig das generelle 'my'-Präfix ist. Du hast dies auch
bemerkt und es beim Handlernamen schon mal weggelassen. ;-)

Aber mit dem 'my'-Trick dürfte die Ausführungszeit nur geringfügig verringert werden,
weil die Liste zu kurz ist (bei 30 Namen messe ich einen Unterschied von 0.3 Sekunden).

Du hast darauf hingewiesen, dass die Parameter bei jedem Aufruf an den Handler
übergeben werden. Wenn man sie also als 'global' (oder als 'property') definieren würde,
dann wären sie dem Handler bekannt, ohne dass sie über den Aufruf durchgereicht werden
müssen. Diese Vereinfachung sollte doch einen spürbaren Unterschied ergeben. Doch Zeit-
stoppungen zeigen, dass dem nicht so ist.

Was könnte man noch tun? Die besten Werte erhielt ich, wenn die Absatzformat-Palette
eingeklappt und InDesign nicht das aktive Programm ist (und immer mit my myStyles).
– InDesign aktiv, Palette ausgefahren = 12.0 Sekunden
– InDesign nicht aktiv, Palette ausgefahren = 8.3 Sekunden
– InDesign aktiv, Palette eingeklappt = 2.4 Sekunden
– InDesign nicht aktiv, Palette eingeklappt = 1.3 Sekunden
Das sind die Resultate (mit 30 Namen), wenn das Script ab Scripteditor gestartet wird.

Eine weitere Beschleunigung kann erzielt werden, wenn das Script ab InDesign-Script-
palette gestartet wird. Und dabei ist es besser, wenn InDesign im Vordergrund bleibt.
– InDesign aktiv, Palette eingeklappt = 0.342 Sekunden

Das ist doch schon recht flink. Oder nicht? :-)

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Martin Fischer
Beiträge gesamt: 12668

12. Apr 2005, 10:23
Beitrag # 3 von 9
Beitrag ID: #419471
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

herzlichen Dank für Deinen Speedtest.
Tatsächlich handelt es sich bei mir nicht um mehr als 30 Absatzstilvorlagen (ich habe das Script für jemanden in einem anderen Forum - HDF/Indesign - entwickelt und dachte, der könnte vielleicht noch einen Turbo brauchen).

In der Tat habe ich nach so was wie globalen Variablen für myAltSprach und myNeuSprach gesucht, aber nun auch festgestellt, daß es keine deutliche Beschleunigung bringt.

Kann es sein, daß die wiederholte Delimiters-Umwandlung eine Bremse ist?

Dank nochmals für Dein Feedback und deine Geschwindigkeitskontrollen.


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5818

12. Apr 2005, 10:48
Beitrag # 4 von 9
Beitrag ID: #419472
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
Zitat Kann es sein, daß die wiederholte Delimiters-Umwandlung eine Bremse ist?

Dieses unablässige Umwandeln kostet sicher etwas Zeit, ist aber kaum messbar.
Der ganz, ganz, ganz grosse Rest wird von InDesign verbraucht.

Wieviele Namen müssen umbenannt werden? Und wie lange dauert es?
Sind denn Null-Komma-drei Sekunden für 30 Namen immer noch zu lange? ;-)

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Martin Fischer
Beiträge gesamt: 12668

12. Apr 2005, 11:09
Beitrag # 5 von 9
Beitrag ID: #419473
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hans,
das Tempo ist prima so.
Ich wußte zwar, daß die ausgefahrenen Paletten eine Bremse sind, hatte aber nicht damit gerechnet, daß die Bremse so stark ist.

Mir ging's neben dem Tempo auch um eine Kritik des Codes.
Und mit den GLOBALs und PROPERTYs bin ich auch ein Stück weitergekommen.
Die MYs vor "myStyles" und dem Aufruf der Funktion haben mich etwas stutzig gemacht. Was ist der Hintergrund dieses Tricks und warum bringt der eine Geschwindigkeitssteigerung?


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5818

12. Apr 2005, 12:59
Beitrag # 6 von 9
Beitrag ID: #419474
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

es spielt keine Rolle, ob die beiden Variablen als 'global' oder als 'property' definiert sind.
Bei letzteren muss man nur darauf achten, dass sie zuerst leer initialisiert werden ...
---
property oldLang : ""
property newLang : ""

set oldLang to (text returned of (display dialog "alter Sprachteil: " default answer "DEU"))
set newLang to (text returned of (display dialog "neuer Sprachteil: " default answer "FRA"))

---
... sonst erscheint der Dialog schon beim Prüfen der Syntax. Und beim Abspielen des Scripts nicht mehr ...

N.B.: Es ist ratsam, wie hier gezeigt, englisch-verständliche Variable-Namen zu verwenden. Wenn Du
plötzlich im US-InDesign-Forum eine Frage stellen musst, wird Dir sicher eher geholfen.

Das Ein- und Ausfahren der Paletten kann man – soweit ich weiss – nicht direkt per Script
vornehmen (eventuell mit UI-Scripting?). Aber man kann den Applikationsbefehl 'palettes visible',
welcher die Sichtbarkeit der Paletten beeinflusst, einsetzen.
---
tell application "InDesign CS"
   set palettes visible to false
   --
   -- Weitere Befehle
   --
   end repeat
   set palettes visible to true
end tell

---

Der Hintergrund des 'my'-Tricks zum Beschleunigen von Zugriffen auf Listen-Elemente ist obskur.
Nicht richtig dokumentiert, sorgt er aber ab und zu für regen Meinungsaustausch in der AS-user's-
Mailing-Liste. In Kürze: Damit werden (anscheinend unnötige) Kontrollen von AppleScript umgangen.

Etwas Lektüre findest Du hier: "Zugriff auf Listen-Elemente beschleunigen"
http://www.page-online.de/page/forum/viewthread/208

Das ist zwar lange her, aber immer noch gültig. Und kürzlich habe ich ein Beispiel gesehen,
in welchem das 'my' auch beim Erstellen der Liste eingesetzt wird. Und die Ausführung ist
tatsächlich nochmals schneller, doch mit dem Script, bei welchem ich wirklich jede Steigerung
brauchen könnte, ergab dies einen vorzeitigen Abbruch: Überlauf des Speichers.

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Anonym
Beiträge gesamt: 22827

12. Apr 2005, 22:09
Beitrag # 7 von 9
Beitrag ID: #419475
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

da ich mit/zu Hans nicht kompatibel bin, erlaube ich mir einen ganz anderen Diskussionsansatz:

--
set mySearch to (text returned of (display dialog "Suchbegriff: " default answer "DEU"))
set myReplace to (text returned of (display dialog "Ersetzen durch: " default answer "FRA"))
tell application "InDesign CS"
 tell active document
  set pStyles to (every paragraph style)
  repeat with i in pStyles
   set name of i to do shell script ¬
    "echo '" & name of i & "' | sed s/'" & mySearch & "'/'" & myReplace & "'/"
  end repeat
 end tell
end tell
--


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5818

13. Apr 2005, 08:42
Beitrag # 8 von 9
Beitrag ID: #419476
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

der Vorschlag von Karsten besticht durch seine kompakte Konstruktion.
Aber der Aufruf der Shell benötigt etwas mehr Zeit als die 'delimiters'-Lösung.
Der Unterschied ist spürbar, aber fällt er ins Gewicht?

40 Absatzformate, Palette eingeklappt, Script ab Scriptpalette gestartet:
Martin ..... 0.5 Sekunden
Karsten ... 1.3 Sekunden

Egal, für welche Lösung Du Dich entscheidest: Wichtig scheint mir, dass das
Umbenennen in einen 'try'-Wickel gepackt wird. Gestern geschah es ein paar Mal,
dass ein Name verunstaltet wurde. Manchmal stürzte InDesign ab, manchmal nicht.
Heute schickte die Shell eine Fehlermeldung zurück. Aber ob all dieses Ungemach
mit 'try / end try' verhindert werden kann, weiss ich nicht ...

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Anonym
Beiträge gesamt: 22827

13. Apr 2005, 09:05
Beitrag # 9 von 9
Beitrag ID: #419477
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

es war doch NUR eine Diskussionsgrundlage (mit viel Verbesserungspotenzial), da mir Aussagen, wie

Zitat gleich vorneweg: InDesign ist von Natur aus langsam, weil überladen. Und etwas
Vergleichbares zum XPress-'do script'-Turbo gibt es nicht.


einfach abgehen.
Ob nun sed, awk, perl (als Exekutive) etc. ist m. E. hierbei genau so zweitrangig, wie die reine Ausführungszeit.

Historisch gewachsene Sichtweisen/Ansätze sind halt IMHO nicht immer wirklich hilfreich.

Karsten


als Antwort auf: [#419469]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/