Forenindex » Programmierung/Entwicklung » AppleScript » Bug beim Boxenzählen mit QuarkXPress 6.1

Bug beim Boxenzählen mit QuarkXPress 6.1

Hans Haesler
  
Beiträge gesamt: 5826

24. Mär 2004, 17:30
Bewertung:

gelesen: 422

Beitrag als Lesezeichen
Eine Konstruktion, welche häufig gebraucht wird:
---
tell document 1 of application "QuarkXPress 6.1"
  repeat with i from 1 to count of pages
    tell page i
      repeat with j from 1 to count of text boxes
        tell text box j
---
Dies funktioniert immer noch. Aber aufgepasst, wenn auf Doppelseiten Boxen seitenübergreifend gruppiert sind. XPress 6.1 rechnet dann beim Zählen alle Boxen der Gruppe ins Resultat der linken Seite. Und auf der rechten Seite fehlt die entsprechende Anzahl. Dasselbe Problem tritt übrigens auch auf, wenn die Boxen "nur" ausgewählt sind.

Der Befehl 'tell text box j' generiert eine Fehlermeldung, sobald der Wert des Zählers 'j' die tatsächliche Anzahl Boxen der aktuellen Seite übersteigt.

Abhilfe: entweder Gruppierungen – welche über zwei Seiten reichen –, vermeiden, oder anstelle der Seiten, die Arbeitsflächen adressieren:
---
tell document 1 of application "QuarkXPress 6.1"
  repeat with i from 1 to count of spreads
    tell spread i
---

Manchmal muss man aber trotzdem die Boxen seitenweise durchgehen und man hat nicht immer die Kontrolle über das Dokument, bzw. will gelieferte Dokumente nicht vorgängig auf "verbotene" Gruppierungen untersuchen. In diesem Fall bleibt nur die Möglichkeit, eine "ewige" Wiederholschleife zu verwenden, in Verbindung mit einem 'try/on error'-Konstrukt. Bei einem Fehler wird die Schleife verlassen.
---
tell document 1 of application "QuarkXPress 6.1"
  repeat with i from 1 to count of pages
    tell page i
      set ctr to 1
      repeat
        try
          tell text box ctr
            --Hier weitere Befehle
          end tell
        on error
          exit repeat
        end try
        set ctr to ctr + 1
      end repeat
    end tell
  end repeat
end tell
---
Weil eine ewige Repeatschleife keinen automatischen Zähler hat, muss man eine Variable initialisieren (hier 'set ctr to 1') und dann innerhalb der Schleife um 1 erhöhen: 'set ctr to ctr + 1'.

Wenn die angesprochene Box nicht existiert, dann ergibt dies einen Fehler und die Bedingung, welche im 'on error'-Teil definiert ist, wird ausgeführt, nämlich 'exit repeat'. Die Wiederholschleife wird also verlassen und zwar nur die innere. Die äussere, jene welche die Seiten durchgeht, ist von diesem 'exit' nicht betroffen.

Hans Haesler <hsa@ringier.ch>