[GastForen Programmierung/Entwicklung AppleScript Script aus Quark 4 in Quark 5

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

Script aus Quark 4 in Quark 5

Anonym
Beiträge gesamt: 22827

16. Dez 2003, 16:22
Beitrag # 1 von 5
Bewertung:
(1162 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
In einem Script für Quark 4.11 (OS 8.6)  tausche ich einen bestimmten Text gegen eine im Text verankerte Bildbox aus mit folgendem Scipt:

duplicate (paragraph 3 of story 1 of text box "box1") to ¬
   (every text of every story where it = "L O G O-Matinee" & return)

Mit Quark 5 (ebenfalls OS 8.6) funktioniert das nicht mehr, dort wird stattdessen der Absatz innerhalb von "box1" dupliziert.

Warum ist das so und wie muss das Script jetzt lauten?

Und wie ist es unter OS X und Quark 6 (die Umstellung steht demnächst an)

Markus Keller
X

Script aus Quark 4 in Quark 5

Hans Haesler
  
Beiträge gesamt: 5826

16. Dez 2003, 23:10
Beitrag # 2 von 5
Beitrag ID: #418510
Bewertung:
(1161 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

das ist ein Bug in QuarkXPress 5. Er wurde anfangs Januar dieses Jahres von Glenn Kowalski mit einer Message an die AppleScript-Users-Mailingliste gemeldet. Sein "Fall" war aber weniger kompliziert und ich habe ihm damals zwei brauchbare Workarounds geliefert.

Hier der erste, angepasst an Deine Aufgabe. Der Absatz 3 der Textbox "box1" wird ausgewählt. Dann mit 'copy' in die Zwischenablage gegeben. Anschliessend wird in der Liste 'objRef' die Objektreferenz aller Passagen mit '"L O G O-Matinee" & return' festgehalten. Schliesslich geht eine Repeatschleife durch die Liste und setzt mit 'paste' den Inhalt der Zwischenablage an die gewünschten Stellen.
---
tell document 1 of application "QuarkXPress 5.01"
  activate
  set selection to paragraph 3 of text box "box1"
  copy
  set objRef to object reference of (every text of every story where it = "L O G O-Matinee" & return)
  repeat with aRef in reverse of objRef
    set selection to aRef
    paste
  end repeat
end tell
---
Weil ich annehme, dass Du ein Logo verankerst, habe ich den zweiten Workaround gar nicht angepasst. Er würde den Absatz 3 im XPress-Tags-Format exportieren. Und dabei geht bekanntlich eine Bildbox verloren. Wichtig: 'in reverse of' geht die Stories von hinten nach vorne durch. Sonst würden die Objekt-Referenzen schon nach dem ersten Ersetzen nicht mehr stimmen, weil die Anzahl Buchstaben ziemlich sicher nicht identisch sind.

Und mit QuarkXPress 6? Das "einfache" Kopieren, welches bei Kollege Kowalski nicht klappte, ist wiederhergestellt. Hingegen geht die 'every'-Konstruktion Deines Scripts nicht mehr. Mit XPress 5 kam Quark davon ab, diese praktische Kurzform in jedem Fall zu unterstützen. Man muss also vermehrt Wiederhol-Schleifen einsetzen.

Ich habe mit Quark 6 einige Varianten Deines Scripts ausprobiert, erlebte aber nur Abstürze. Ausser mit dem oben gezeigten Konstrukt, welcher zuverlässig funktionierte. Sogar die mit der 'do script'-Methode beschleunigte Version:
---
script copyPara
  tell document 1 of application "QuarkXPress 6.0"
    set selection to paragraph 3 of text box "box1"
    copy
    set objRef to object reference of (every text of every story where it = "L O G O-Matinee" & return)
    repeat with aRef in reverse of objRef
      set selection to aRef
      paste
    end repeat
  end tell
end script

tell application "QuarkXPress 6.0"
  activate
  do script {copyPara}
end tell
---

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418509]

Script aus Quark 4 in Quark 5

Anonym
Beiträge gesamt: 22827

17. Dez 2003, 15:20
Beitrag # 3 von 5
Beitrag ID: #418511
Bewertung:
(1161 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die Unterstützung.

Ganz funktioniert es bei mir leider noch nicht.
Ich habe nämlich nicht nur 1 Text durch eine verankerte Bildbox zu ersetzen, sondern insgesamt 5 verschiedene.
Und beim ersten Durchlauf klappt alles, ab dem zweiten werden die Boxen aber nicht mehr an der richtigen Stelle eingesetzt, sondern ein paar Zeichen davor - soweit ich es bisher getestet habe, wird die Position mit jedem Durchlauf falscher, aber nicht immer, sondern nur so oft, wie in der vorigen Durchläufen Elemente waren - da bin ich mir aber nicht sicher.

Woran liegt das nun wieder?

Markus


als Antwort auf: [#418509]

Script aus Quark 4 in Quark 5

Hans Haesler
  
Beiträge gesamt: 5826

17. Dez 2003, 17:45
Beitrag # 4 von 5
Beitrag ID: #418512
Bewertung:
(1161 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

ja was könnte denn die Ursache sein? Also &#133; ich müsste schon Deinen Code sehen. Aber ich versuche mal, die Voraussetzungen nachzustellen.

Geschafft! Ich kann Dein Resultat bestätigen. Wenn die Objektreferenz von "L O G O-Xxxx" abgefragt wird und darüber schon Boxen eingesetzt sind, dann ist das Resultat um zwei Zeichen verschoben. Und dieser Unterschied addiert sich.

Die Objektreferenz kann man nicht modifizieren. Deshalb muss man anders vorgehen. Damit die Sache aber nicht noch komplizierter wird, schlage ich Dir vor, die Platzhalter zu vereinfachen. Statt "L O G O-Matinee" würde ich "L O G O-1" verwenden. Ziffern anstelle der Worte.

Dann kann es losgehen: eine Repeatschleife durch alle Stories. Wenn ein Absatz mit "L O G O" beginnt, wird das zweitletzte Zeichen als Index für den Absatz der Quellbox "box1" in eine Ganzzahl verwandelt (das letzte Zeichen ist der Return). Dann wird der entsprechende Absatz ausgewählt, kopiert, das "L O G O-1" samt Return wird ausgewählt und der Inhalt der Zwischenablage wird eingesetzt.
---
script anchorLogos
  tell document 1 of application "QuarkXPress 5.01"
    repeat with i from 1 to count of stories
      repeat with j from 1 to count of paragraphs of story i
        if paragraph j of story i starts with "L O G O" then
          try
            tell paragraph j of story i
              set paraNum to character -2 as integer
            end tell
            set selection to paragraph paraNum of text box "box1" of document 1
            copy
            set selection to every text of paragraph j of story i
            paste
          end try
        end if
      end repeat
    end repeat
  end tell
end script

tell application "QuarkXPress 5.01"
  activate
  do script {anchorLogos}
end tell
---
Dank der 'do script'-Methode ist die Ausführung recht schnell und wenn Du das Script im QuarkXPress-Scriptmenü versorgst und von dort startest, dann sollte es erträglich sein.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418509]

Script aus Quark 4 in Quark 5

Anonym
Beiträge gesamt: 22827

18. Dez 2003, 09:13
Beitrag # 5 von 5
Beitrag ID: #418513
Bewertung:
(1161 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die Unterstützung - jetzt funktioniert das Script wieder wie unter Quark 4.

Vielen Dank

Markus

P.S: Geschwindigkeit ist in diesem Fall nicht so wichtig, da ich das Script genau alle 5 Wochen einmal brauche - dann spart es mir aber jedes Mal mindestens 1 Strunde Arbeit - von den Fehlerquellen beim manuellen Durchforsten der Daten mal abgesehen.


als Antwort auf: [#418509]
X