[GastForen Programmierung/Entwicklung AppleScript QXP 7.5: ascent/descent ermitteln

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

QXP 7.5: ascent/descent ermitteln

Goar
Beiträge gesamt: 395

24. Jun 2009, 07:36
Beitrag # 1 von 8
Bewertung:
(3424 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter,

in einem Dokument sollen ausgesuchte Texte zeilenweise mit Flächen hinterlegt werden.
Um die Höhe dieser Flächen festlegen zu können, habe ich zeilenweise den ascent und den descent abgefragt, wie in diesem Testscript:
---
Zitat tell document 1 of application "QuarkXPress Passport"
     tell current box
          tell line 1
               set vAscent to ascent as millimeter units as real
          end tell
     end tell
end tell

---
Dabei stellte ich fest, dass in einem Textrahmen immer der gleiche Wert ausgelesen wird, ganz gleich, wie groß die Schrift in der angesprochenen Zeile ist. Nach einiger Probiererei in einem einzelnen Textrahmen komme ich zu der Vermutung, dass die größte im Textrahmen vorkommende Schrift ausgelesen wird, es also keine Rolle spielt, welche Zeile ich anspreche.
In einer längeren Textkette, die nur zwei Schriftgrößen enthält (Titel 12 pt, Text 9,5 pt) werden nur die Werte der kleineren Schriftgröße ausgelesen.

(height scheint immer korrekt ausgelesen zu werden.)

Kennt jemand eine Möglichkeit, zuverlässig die korrekten ascent-/descent-Werte zu ermitteln?

Mit freundlichen Grüßen
Goar Engeländer

> Dual 2 GHz PowerPC G5, MacOS 10.4.11, QXP Passport 7.5 <
X

QXP 7.5: ascent/descent ermitteln

Hans Haesler
  
Beiträge gesamt: 5826

1. Jul 2009, 08:37
Beitrag # 2 von 8
Beitrag ID: #423083
Bewertung:
(3422 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

[ ich war im Urlaub, deshalb die verspätete Antwort. ]

Deine Beobachtungen kann ich bestätigen. Und ein kurzer Versuch mit QuarkXPress 6.52 zeigt, dass mit jener Version der richtige Wert zurückgegeben würde ...

Ich habe allerlei versucht, doch ohne eine direkte Lösung zu finden.

Ein Umweg: Die Zeile in eine temporäre Textbox kopieren:
---
tell document 1 of application "QuarkXPress Passport"
   tell current box
      set {y1, x1, y2, x2} to bounds as list
   end tell
   make text box at beginning with properties {bounds:{y1, x1, y2, x2}, name:"tmp"}
   copy line 1 of current box to text box "tmp"
   tell text box "tmp"
      tell line 1
         set vAscent to ascent as millimeter units as real
      end tell
   end tell
   delete text box "tmp"
end tell
vAscent
---

Und so erhält man die Werte aller Zeilen:
---
set ascentList to {}
tell document 1 of application "QuarkXPress Passport"
   tell current box
      set {y1, x1, y2, x2} to bounds as list
   end tell
   make text box at beginning with properties {bounds:{y1, x1, y2, x2}, name:"tmp"}
   repeat with i from 1 to count of lines of current box
      copy line i of current box to text box "tmp"
      tell text box "tmp"
         tell line 1
            set end of ascentList to ascent as millimeter units as real
         end tell
         delete story 1
      end tell
   end repeat
   delete text box "tmp"
end tell
ascentList
---

Nach dem Kopieren in die temporäre Box sollte die ganze Zeile sichtbar sein. Deshalb ist es am einfachsten, die Bounds der aktiven Box zu übernehmen.

Gruss, Hans


als Antwort auf: [#423082]

QXP 7.5: ascent/descent ermitteln

Goar
Beiträge gesamt: 395

1. Jul 2009, 10:46
Beitrag # 3 von 8
Beitrag ID: #423084
Bewertung:
(3422 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

diese Umgehung habe ich befürchtet. Vielen Dank für den Code.

Für den aktuellen Auftrag habe ich mir eine faule Lösung ausgedacht.
Die Schriftgröße (size) wird korrekt ausgelesen. Da in dem Dokument nur zwei Schriftgrößen vorkommen, und nur zwei Schriftschnitte, die aus der gleichen Schriftfamilie stammen, arbeite ich also mit der Schriftgröße.

In einem separaten Hilfsskript habe ich die ascent-Werte der beiden Schriftgrößen ermittelt und dann ausgerechnet, in welchem Verhältnis sie zur Schriftgröße stehen. Diese Verhältniswerte habe ich auf 5 Stellen hinter dem Komma gerundet (so stimmen sie für beide Schriften und Größen überein) und den gerundeten Wert am Anfang des Hauptskripts in eine Variable gespeichert.

Ist nicht die feine Art, scheint mir aber für diesen Fall angemessen.

In andere Skripts, die nicht mit einheitlichen Schriften und Schriftgrößen zu tun haben, werde ich die Lösung mit dem separaten Textrahmen einarbeiten.

Gruß, Goar


als Antwort auf: [#423082]

QXP 7.5: ascent/descent ermitteln

Goar
Beiträge gesamt: 395

27. Okt 2010, 14:53
Beitrag # 4 von 8
Beitrag ID: #455367
Bewertung:
(3373 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
QXP 8.1.6.2: Seit dem denkwürdigen Tag, an dem ich EAText.xnt und SpecialLineBreak.xnt wieder aktiviert habe, funktioniert die Abfrage von ascent/descent tadellos.

Jeder einzelne Buchstabe kann abgefragt werden.
Ist der Abfragebereich größer – line, paragraph o. Ä. –, wird der größte darin enthaltene Wert ausgelesen.


als Antwort auf: [#423084]

QXP 7.5: ascent/descent ermitteln

Hans Haesler
  
Beiträge gesamt: 5826

27. Okt 2010, 15:15
Beitrag # 5 von 8
Beitrag ID: #455371
Bewertung:
(3362 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

danke für die Mitteilung.

Gut zu wissen, dass man mit QXP 8 weder einen komplizierten Umweg noch eine faule Lösung benötigt. ;-)

Gruss, Hans


als Antwort auf: [#455367]

QXP 7.5: ascent/descent ermitteln

TMA
Beiträge gesamt: 399

28. Okt 2010, 07:51
Beitrag # 6 von 8
Beitrag ID: #455419
Bewertung:
(3322 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Goar ] QXP 8.1.6.2: Seit dem denkwürdigen Tag, an dem ich EAText.xnt und SpecialLineBreak.xnt wieder aktiviert habe, funktioniert die Abfrage von ascent/descent tadellos.

Jeder einzelne Buchstabe kann abgefragt werden.
Ist der Abfragebereich größer – line, paragraph o. Ä. –, wird der größte darin enthaltene Wert ausgelesen.


Hallo Goar,
mich würde mal interessieren warum du die "EAText.xnt und SpecialLineBreak.xnt" deaktiviert hast? Was machen die .xnt genau?

Gruß
TMA


als Antwort auf: [#455367]

QXP 7.5: ascent/descent ermitteln

Goar
Beiträge gesamt: 395

28. Okt 2010, 08:36
Beitrag # 7 von 8
Beitrag ID: #455420
Bewertung:
(3308 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA,

EAText.xnt ist neu in QXP8. Im QuarkXPress-8.1-Benutzerhandbuch heißt es auf Seite 426 (suche nach "EA Text" nicht nach "EAText"):

Zitat EA Text: Ermöglicht es QuarkXPress, Projekte zu öffnen, die ostasiatische Typografiefunktionen wie Rubi Text, gruppierte Zeichen, ostasiatische Zeichenausrichtungen, Betonungszeichen und ostasiatische Wortzählungen verwenden.


Da ich keine diesbezüglichen Arbeiten mache, hatte ich diese XT aussortiert.
Ebenso die SpecialLineBreak.xnt:

Zitat Special Line Break: Aktiviert die Funktion Abstand zwischen CJK & R in ostasiatischen Projekten (siehe "Vorgaben - Layout - Zeichen").


Wenn QXP 8.1.6.2 beim Start die EAText.xnt findet, nicht aber die SpecialLineBreak.xnt, macht es darauf aufmerksam, dass EAText.xnt die andere braucht. Also wenn, dann beide aktivieren.

Zur derzeitigen "Bedeutung" dieser Xtensions für AppleScript-Zugriffe auf Text siehe auch:

http://www.hilfdirselbst.ch/...ark_set;post=455311;


als Antwort auf: [#455419]
(Dieser Beitrag wurde von Goar am 28. Okt 2010, 09:12 geändert)

QXP 7.5: ascent/descent ermitteln

TMA
Beiträge gesamt: 399

28. Okt 2010, 08:41
Beitrag # 8 von 8
Beitrag ID: #455421
Bewertung:
(3307 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,
besten Dank für die ausführliche Erläuterung.

Gruß
TMA


als Antwort auf: [#455420]
X