Forenindex » Programmierung/Entwicklung » AppleScript » Seitenzahlen-Liste für Index generieren

Seitenzahlen-Liste für Index generieren

Hans Haesler
  
Beiträge gesamt: 5826

6. Aug 2003, 13:21
Bewertung:

gelesen: 424

Beitrag als Lesezeichen
Dies ist die Fortsetzung des Themas "Boxen benennen und verankern". Dort wird beschrieben, wie Textboxen "fliegend" mit einer laufenden Nummer benannt und verankert werden. Nachdem der Text fertig umbrochen ist, kann mit dem folgenden Script eine Datei erzeugt werden, welche die Zahlen der Seiten enthält, auf welchen sich die Boxen befinden. Diese Datei wird später verwendet, um mit einem weiteren Script einen Index zu ergänzen.
---
property ctr : 1
set indexList to {}
set pageNumbers to (path to startup disk as string) & "pageNumbers.txt"

tell document 1 of application "QuarkXPress 4.11"
  repeat
    set boxName to text -1 thru -3 of ("00" & ctr)
    try
      tell text box boxName
        set pageNumber to name of page 1
      end tell
      set end of indexList to pageNumber
      set ctr to ctr + 1
    on error
      exit repeat
    end try
  end repeat
end tell

set AppleScript's text item delimiters to return
set indexString to (every text item of indexList as string) & return
set AppleScript's text item delimiters to {""}

try
  open for access file pageNumbers with write permission
  write indexString to file pageNumbers starting at eof
  close access file pageNumbers
on error
  try
    close access file pageNumbers
  end try
end try
---
Die Variable 'ctr' wird als 'property' deklariert, damit beim zweiten Abspielen der Wert dieses Zählers erhalten bleibt. Dies ist notwendig, weil der Umbruch bogenweise vorgenommen wird und deshalb mehrere XPress-Dokumente der Reihe nach abgefragt werden müssen. In der endgültigen Version werde ich die Möglichkeit einbauen, den Zähler auf einen bestimmten Wert einzustellen.

Die Variable 'indexList' wird als leere Liste initialisiert. Und in 'pageNumbers' wird der Pfad zur Textdatei definiert, in welcher nach jedem Abspielen die gesammelten Seitenzahlen angehängt werden.

In der Repeat-Schleife wird als erstes der Name der Box zusammengesetzt. Weil der Wert des Zählers einstellig beginnt, müssen die beiden Nullen vorangestellt werden. Mit 'text -1 thru -3 of ("00" & ctr)' wird dies automatisch gemacht. Und wenn der Wert von 'ctr' zweistellig ist, wird durch den gleichen Befehl nur noch eine Null vorangestellt. Wie gelingt dies? Beim Wert '10' werden die beiden Nullen davorgesetzt: "0010". Und 'text -1 thru -3' bedeutet: den Text vom letzten bis zum drittletzten Buchstaben. Die erste Null wird also abgeschnitten und das Ergebnis ist "010".

Dann wird versucht, mit dem Befehl 'set pageNumber to name of page 1' die Zahl der Seite, auf welcher sich die Box befindet, festzustellen. Diese Zahl wird an das Ende von 'indexList' gehängt. Und der Zähler 'ctr' wird um eins erhöht.

Die verwendete Schleife ist vom Typ "endlos", weil keine Ausstiegsbedingung definiert ist. Aber sie enthält einen 'try'-Block. Wenn ein Fehler auftritt, ist der Grund sehr wahrscheinlich, dass sich die angesprochene Box im nächsten Dokument befindet. Mit 'exit repeat' wird darauf die Schleife beendet.

In den folgenden drei Zeilen wird zuerst der Text-Einheiten-Trenner als 'return' definiert. Dann wird die Liste mit den Nummern in einen String verwandelt und ein Return wird angesetzt, damit auch nach der letzten Zahl ein Return steht (sonst würde beim zweiten  Schreiben in die gleiche Datei die erste Zahl gleich an die letzte angehängt). Und die 'text item delimiters' werden auf einen leeren String zurückgesetzt.

Das Umwandeln in einen String ist notwendig, weil das Schreiben einer Liste in eine Datei nicht das erwartete Resultat ergibt. Dieses Problem ist – glaube ich – spätestens unter Mac OS X gelöst, aber hier mit Mac OS 9.2.1 und AS 1.6 noch nicht.

Am Schluss wird die definierte Datei geöffnet (beim ersten Mal wird sie erzeugt) und der String wird an den bestehenden Inhalt angehängt mit 'starting at eof'. Die drei letzten Buchstaben stehen für 'end of file', also: 'beginnend am Ende der Datei'.

Wie diese Datei für das Ergänzen der Index-Seiten benutzt wird, werde ich vielleicht in einer weiteren Folge beschreiben. Möglicher Titel "Index mit Seitenzahlen ergänzen".

Hans Haesler, hsa@ringier.ch