Forenindex » Programmierung/Entwicklung » AppleScript » Boxen benennen und verankern

Boxen benennen und verankern

Hans Haesler
  
Beiträge gesamt: 5826

5. Aug 2003, 17:03
Bewertung:

gelesen: 574

Beitrag als Lesezeichen
Das folgende Script benutze ich, um im Text eines französischen Restaurant-Führers gewisse Informationen einzusetzen. Es handelt sich um Zeichen in einer speziellen Schrift: Anzahl Kochmützen, Anzahl Bestecke, eine neue Adresse bekommt ein "N", wer bei den Punkten zugelegt hat einen Pfeil, Pictos für verschiedene Angebote wie Parkplatz, Terrasse, Konferenzzimmer, rollstuhlgängig.

Diese Zeichen könnten nur mit grösster Mühe in die danebenstehenden Zeilen (Name des Restaurants, Adresse, Telefon, usw.) eingesetzt werden. Dank der verankerten Box wird man nicht mehr gezwungen, artistische Verrenkungen mit dem Grundlinienversatz vorzunehmen.

Der Haupttext wird ab Datenbank im XPress-Tags-Format exportiert. Die oben erwähnten Infos werden in separate, kleine Dateien geschrieben. Die Nummer aus den Namen dieser Dateien (z.B. "001.TXT") werden beim Export in den Haupttext eingesetzt, ergänzt mit einem Dollar-Zeichen und der Anzahl Kochmützen (= "$0013").

Letztere wird benötigt, weil die Mützen an die Oberlängen des Restaurant-Namens aliniert werden müssen. Am einfachsten gelingt dies mit dem Versatz der ersten Grundlinie. Weil dieser Wert bei jedem Zeichen verschieden ist, müssen 5 Boxen vorbereitet werden. Diese Boxen enthalten alle eine verankerte, benannte Box (z.B. "toq3") und stehen allein auf der ersten Seite. So können sie problemlos adressiert werden.

Der Haupttext wird manuell in die verketteten Boxen geladen. Sämtliche Textattribute sind mit Stilvorlagen definiert und die XPress-Tags werden beim Import korrekt umgesetzt.

Das Script geht die Absätze des Textes durch. Wenn ein Absatz mit einem Dollarzeichen beginnt, wird geprüft, ob die vier nächsten Zeichen in eine Ganzzahl verwandelt werden können. Wenn ja, wird mit den Zeichen 1 bis 3 der Name der Info-Datei zusammengesetzt, z.B. "001.TXT". Das vierte Zeichen ist die Anzahl der Kochmützen. Mit dieser Zahl wird der Name der Textbox zusammengesetzt (z.B. "toq3").

Das Script löscht den Code, setzt die Höhe der entsprechenden Quell-Box auf einen Standard-Wert, lädt den Info-Text in diese Box, stellt die Höhe des Textes fest, verkleinert die Höhe demnach, benennt die Box mit der laufenden Nummer (z.B. "001"), verankert die Box zu Beginn des aktuellen Absatzes und setzt den Namen der Muster-Box zurück (z.B. "toq3").

Das Script ist hier aus Platzgründen gekürzt. Es soll nur den Ablauf zeigen. Ich habe ebenfalls sämtliche Befehle für die Erzeugung und Aktualisierung eines Progress-Balkens (per Dialog Director) entfernt.
---
set folPath to (path to startup disk as string) & "Headers_GM:"
tell document 1 of application "QuarkXPress 4.11"
  tell story 1 of text box "text_1"
    repeat with i from 1 to count of paragraphs
      set okay to 1
      try
        tell paragraph i
          if character 1 = "$" then
            set testVal to text from character 2 to character 5
            repeat with j from 1 to count of testVal
              if character j of testVal is not in "0123456789" then
                set okay to 0
                exit repeat
              end if
            end repeat
            if okay = 1 then
              set aCode to text from character 2 to character 4
              set nToque to character 5
              delete (text from character 1 to character 5)
              set textPath to folPath & aCode & ".TXT"
              my loadText(nToque, textPath)
              my renameBox(nToque, aCode)
              my anchorBox(nToque, i)
              my restoreName(aCode, nToque)
            end if
          end if
        end tell
      end try
    end repeat
  end tell
  display dialog "Fertig." buttons "OK" default button 1 with icon 1
end tell

on loadText(nToque, textPath)
  tell document 1 of application "QuarkXPress 4.11"
    tell page 1
      try
        tell text box ("toq" & nToque)
          set height of bounds to 40
          set story 1 to textPath as alias
          tell story 1
            set bLine to (baseline of line -1) as real
          end tell
          set height of bounds to bLine + 0.8
        end tell
      end try
    end tell
  end tell
end loadText

on renameBox(nToque, aCode)
  tell document 1 of application "QuarkXPress 4.11"
    tell page 1
      try
        tell text box ("toq" & nToque)
          set name to aCode
        end tell
      end try
    end tell
  end tell
end renameBox

on anchorBox(nToque, i)
  tell document 1 of application "QuarkXPress 4.11"
    try
      copy text 1 of text box ("toques" & nToque) to before paragraph i of story 1 of text box "text_1"
    end try
  end tell
end anchorBox

on restoreName(aCode, nToque)
  tell document 1 of application "QuarkXPress 4.11"
    tell page 1
      try
        tell text box aCode
          set name to ("toq" & nToque)
        end tell
      end try
    end tell
  end tell
end restoreName
---
In einem weiteren Thema ("Seitenzahlen-Liste für den Index generieren") wird beschrieben, wie dank dieser verankerten Boxen die Seitenzahlen für den Index zusammengetragen werden können.

Hans Haesler, hsa@ringier.ch