Forenindex » Programmierung/Entwicklung » AppleScript » XPress-Dokument: Version testen, ohne es zu öffnen (Teil 1)

XPress-Dokument: Version testen, ohne es zu öffnen (Teil 1)

Hans Haesler
  
Beiträge gesamt: 5826

11. Sep 2003, 22:56
Bewertung:

gelesen: 1428

Beitrag als Lesezeichen
Wer hat dies nicht schon erlebt? Beim einzig(!!!) richtigen(!!!) Öffnen mit Befehl-O zeigt die Status-Zeile unter der Öffnung des Dialoges die Warnung: "Dokument Version: Unbekannt!" Der Klick auf "Öffnen" bestätigt mit der Meldung: "Öffnen des Dokuments mit dieser QuarkXPress Passport Version nicht möglich. [17]", dass das ausgewählte Dokument mit einer höheren Versionsnummer gesichert worden war.

Wenn die gleiche Aktion per Script durchgeführt werden soll, dann muss ein Test eingebaut werden, welcher entscheidet, ob das Dokument geöffnet wird oder nicht. Mit dem 'choose file'-Befehl wird ein XPress-Dokument ausgewählt. Der Handler 'getVers(filePath)' stellt fest, mit welcher Version das Dokument gesichert worden ist, ohne das Dokument zu öffnen.

Wie ist dies möglich? Ganz einfach: mit dem 'read'-Befehl der "Standard Additions" werden die 12 ersten Zeichen der Datei in eine Variable gelesen. Weil vier davon unsichtbar sind, bleiben noch acht übrig, um den Test 'if versionClue = ' zu durchlaufen.

Wenn die acht Zeichen "MMXPR3??" lauten, dann handelt es sich um ein XPress-3.x-Dokument (das "x" steht für alle veröffentlichten Versionen der betreffenden Reihe). Mit "MMXPR3AA" haben wir es mit einem Dokument der Version 4.x zu tun. "MMXPR3BB" bedeutet Version 5.x usw. Windows-Dokumente beginnen ebenfalls mit zwei unsichtbaren Zeichen, dann folgen zwei Versal-I. Den Abschluss macht ein unsichtbares Zeichen. Dies ist der Grund, weshalb im Test das elfte Zeichen geprüft wird.

Das folgende Script verkündet mit einem Dialog, in welcher Version ein Dokument geöffnet werden kann. Weil ich nicht glaube, dass die unsichtbaren Zeichen den Transport überstehen, habe ich den unsprünglichen Code etwas geändert.

Der Filter 'of type {"XDOC", "XPRT"}' stellt sicher, dass nur XPress-Dokumente (und XPress-6-Projekte :-( im "Öffnen"-Dialog sichtbar werden.
---
set filePath to (choose file with prompt "Ein QuarkXPress-Dokument wählen." of type {"XDOC", "XPRT"}) as string

set docVers to getVers(filePath)

on getVers(filePath)
  set versionClue to read file filePath for 12
  if versionClue contains "MM" then
    if versionClue ends with "?" then
      display dialog "Version QuarkXPress 3.x (Mac)"
    else if versionClue ends with "A" then
      display dialog "Version QuarkXPress 4.x (Mac)"
    else if versionClue ends with "B" then
      display dialog "Version QuarkXPress 5.x (Mac)"
    else if versionClue ends with "C" then
      display dialog "Version QuarkXPress 6.x (Mac)"
    else
      display dialog "Unbekannte QuarkXPress-Version (Mac)"
    end if
  else if versionClue contains "II" then
    set testChar to character 11 of versionClue
 if character 11 of versionClue = "?" then
      display dialog "Version QuarkXPress 3.x (Windows)"
    else if character 11 of versionClue = "A" then
      display dialog "Version QuarkXPress 4.x (Windows)"
    else if character 11 of versionClue = "B" then
      display dialog "Version QuarkXPress 5.x (Windows)"
    else if character 11 of versionClue = "C" then
      display dialog "Version QuarkXPress 6.x (Windows)"
    else
      display dialog "Unbekannte QuarkXPress-Version (Windows)"
    end if
  end if
end getVers
---
Ich habe nur ein einziges Windows-XPress-Dokument zur Hand; konnte also die Windows-Tests nicht alle durchführen.

Wo die "feineren" Werte – die Nachkommastellen der Version (z.B. '.11' oder '.01') – gespeichert werden, habe ich noch nicht herausgefunden.

Hans Haesler <hsa@ringier.ch>

XPress-Dokument: Version testen, ohne es zu öffnen (Teil 1)

Anonym
Beiträge gesamt: 22827

5. Okt 2003, 11:29
Bewertung:

gelesen: 1427

Beitrag als Lesezeichen
Hallo Hans,

wie kann man dieses Script als Droplet sichern?
hab schon versucht es als Applet zu speichern, aber dann müsste doch das Script-Icon einen blauen Pfeil zeigen.

Gruss willem

XPress-Dokument: Version testen, ohne es zu öffnen (Teil 1)

Hans Haesler
  
Beiträge gesamt: 5826

5. Okt 2003, 20:27
Bewertung:

gelesen: 1427

Beitrag als Lesezeichen
Hallo Willem,

damit der Pfeil im Script-Icon erscheint, muss das Script einen 'open handler' aufweisen und als Applikation gesichert sein.

Das Herausfiltern von Nicht-XPress-Dokumenten und Ordnern ist aber mit einem Droplet nicht so einfach wie im oben gezeigten Script, welches mit 'choose file' im Dialog nur Dokumente zeigt und mit 'of type' die Auswahl weiter einschränkt.

Beim Droplet wird der Pfad der darauf gezogenen Objekte in eine Liste geschrieben. Die Standard-Methode benutzt eine Wiederhol-Schleife, welche diese Liste abarbeitet. Bei jedem Umgang wird ein Element der Liste in die Variable gegeben. Der Pfad, welcher ein Alias ist, wird in einen String verwandelt und untersucht. Wenn er mit einem Doppelpunkt endet, dann ist es ein Ordner und der Rest der Wiederholschleife wird nicht ausgeführt. Wenn es eine Datei ist, dann werden die Datei-Informationen (Name, Erzeugungs- und Modifikationsdatum, Dateityp, Dateigrösse usw.) in eine Variable geschrieben. Dann wird der Dateityp mit den möglichen für eine XPress-Dokument verglichen. Wenn es sich um ein XPress-Dokument handelt, dann wird der Handler aufgerufen, um die Versions-Nummer auszuziehen. Diese wird in einem Dialog angezeigt.
---
on open fileList
  repeat with aDoc in fileList
    set filePath to aDoc as string
    if filePath ends with ":" then
    else
      set fileInfo to (info for file filePath)
      if file type of fileInfo is in {"XDOC", "XPRT"} then
        set docName to name of fileInfo
        set docVers to getVers(filePath)
        display dialog "Die Version des Dokuments
" & docName & ":

" & docVers & "." buttons "OK" default button 1 with icon 1
      end if
    end if
  end repeat
end open

on getVers(filePath)
  set versionClue to read file filePath for 12
  if versionClue contains "MM" then
    if versionClue ends with "?" then
      return "QuarkXPress 3.x (Mac)"
    else if versionClue ends with "A" then
      return "QuarkXPress 4.x (Mac)"
    else if versionClue ends with "B" then
      return "QuarkXPress 5.x (Mac)"
    else if versionClue ends with "C" then
      return "QuarkXPress 6.x (Mac)"
    else
      return "unbekannt (Mac)"
    end if
  else if versionClue contains "II" then
    set testChar to character 11 of versionClue
    if character 11 of versionClue = "?" then
      return "QuarkXPress 3.x (Windows)"
    else if character 11 of versionClue = "A" then
      return "QuarkXPress 4.x (Windows)"
    else if character 11 of versionClue = "B" then
      return "QuarkXPress 5.x (Windows)"
    else if character 11 of versionClue = "C" then
      return "QuarkXPress 6.x (Windows)"
    else
      return "unbekannt (Windows)"
    end if
  end if
end getVers
---
Je nachdem, welche Aufgabe das Droplet erfüllen soll, kann man das Anzeigen des Dialoges durch das Schreiben in ein Logfile ersetzen. Oder man kann einen Test einbauen und das aktuelle Dokument öffnen lassen &#150; oder nicht. Wie in der Fortsetzung des Themas: http://www.page-online.de/page/forum/viewthread/1972

Hans Haesler <hsa@ringier.ch>