Forenindex » Programmierung/Entwicklung » AppleScript » Nochmals: ein "mysteriöses" Format

Nochmals: ein "mysteriöses" Format

Hans Haesler
  
Beiträge gesamt: 5826

12. Mai 2003, 21:59
Bewertung:

gelesen: 939

Beitrag als Lesezeichen
Im US-Quark-AppleScript-Forum hat sich kürzlich ein Benutzer über das "mysteriöse" Format von Resultaten gewundert. Er gab keine nähere
Auskunft, welches Mac OS und welche XPress-Version er benutzt. Aber das Beispiel, welches er in seiner Message zeigt, lässt keinen Zweifel
offen: das bekannte Mac-OS-X-Problem bei welchem QuarkXPress unter Classic läuft.

Die 'bounds' (also die Grenzen) einer Seite können mit dem Befehl '(bounds of page 1 of document 1) as list' verlangt werden. Das Resultat
sieht unter Classic so aus: {«data FXVM00240000», «data FXHM02ED0000», «data FXVM04D40083», «data FXHM05DA0000»}. Wie kann man
diese Werte in Bruchzahlen oder lesbarere Textketten verwandeln?

Der FileMaker-Spezialist Armin Egginger hat hier schon eine ähnliche Frage gestellt. Diesmal hatte ich etwas mehr Zeit für Nachforschungen.
Hier die Ergebnisse.

Das mysteriöse Format wird als "raw code" (= roher Code) bezeichnet. Der Kürzel 'FX' steht für 'fixed' und ist ein internes XPress-Format,
welches Werte auf drei Nach-Kommastellen rundet (genau die Ziffern, welche in der Masspalette erscheinen). 'VM' und 'HM' bedeuten 'vertical
measurement' und 'horizontal measurement' (= vertikale und horizontale Masseinheit).

Die Nummern und Buchstaben sind die Werte in Punkten, aber in hexadezimaler Schreibweise. Das erste Element (= «data FXVM00240000»)
enthält '24'. Dies bedeutet (2 x 16) + 4 = 36 Punkt (oder 12.7 mm) = der vertikale Raum oberhalb der Seite.

Im Classic-Modus funktioniert die automatische, interne XPress'sche Umrechnung nicht mehr. Deshalb muss mit dem XPress-Befehl 'coerce to'
nachgeholfen werden:
---
tell document 1 of application "QuarkXPress 5.01"
  set {y1, x1, y2, x2} to bounds of page 1 as list
  set y1 to coerce y1 to real
  set x1 to coerce x1 to real
  set y2 to coerce y2 to real
  set x2 to coerce x2 to real
end tell
{y1, x1, y2, x2}
---
Das Resultat ist nun brauchbarer, aber immer noch "komisch": {12.70002746582, 419.903549194336, 309.700561523438, 629.903930664062}

Denn: je nachdem, was man damit anfangen will, kann das Ergebnis leicht unpräzise ausfallen (z.B. beim Setzen von vertikalen Arbeitsflächen-
Hilfslinien). Abhilfe bringt das Runden auf eine Kommastelle:
---
set y1 to (((coerce y1 to real) + 0.05) div 0.1) / 10
-->12.7

Ein anderes Beispiel. Die vertikale Position einer ausgewählten Box:
---
tell document 1 of application "QuarkXPress 5.01"
  tell current box
    set y1 to coerce (get top of bounds) to real
  end tell
end tell
---

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 28. Okt 2013, 19:49 geändert)