[GastForen Programmierung/Entwicklung AppleScript XPress: Absatzlinie oben auslesen

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

XPress: Absatzlinie oben auslesen

Goar
Beiträge gesamt: 395

10. Jun 2003, 17:59
Beitrag # 1 von 2
Bewertung:
(871 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Forum,

bei der automatischen Aufbereitung von Headlines könnte mir ein Skript gute Dienste leisten. Es ist ja eigentlich schon fertig, bloß ist mir da ein Problem aufgefallen.

In meinem Script gibt es folgende Passage:
---
tell paragraph i
  set zab to leading as real
  set abstvor to space before as real
  set linoben1 to position of rule above as real
  set linoben2 to rule above -- als alternative Abfrage
  set param to properties of paragraph i -- sogar das habe ich in verschiedenen Abwandlungen probiert
end tell
---
Um bestimmte Einstellungen in einem (Headline-)Absatz automatisch ändern zu können, frage ich zunächst den Zeilenabstand, den Abstand vor und die Absatzlinie oben ab. Die beiden ersten klapp(t)en immer, die Abfrage zur Absatzlinie gab mal ein richtiges, mal ein falsches Ergebnis, wie ich im Eventprotokoll sah.

Es dauerte eine ganze Weile, bis ich herausbekam, dass die Abfrage zur Absatzlinie immer die Parameter des Absatzes ergab, in dem meine Einfügemarke stand, auch wenn ich die Abfrage außerhalb des tell-Ausdrucks (wie nennt man das eigentlich richtig?) positioniert habe. Auch...
Code
  set linoben2 to rule above of paragraph i 

... half nicht weiter, es brachte überhaupt kein Ergebnis.

Wenn es gelänge, die Einfügemarke in 'paragraph i' zu positionieren, oder in diesem Absatz irgend etwas zu markieren, käme ich vielleicht auf diesem Wege an die gesuchten Parameter; aber das habe ich schon früher vergeblich versucht.
Oder ist es möglich, die Parameter von angelegten Stilvorlagen auszulesen? Denn an den Namen der Stilvorlage des jeweiligen paragraph i komme ich ja.

Wer weiß weiter?
X

XPress: Absatzlinie oben auslesen

Hans Haesler
  
Beiträge gesamt: 5826

10. Jun 2003, 22:16
Beitrag # 2 von 2
Beitrag ID: #418182
Bewertung:
(870 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

sehr gut beobachtet! Respekt! Ja, dies ist eines der grossen (aber nicht unüberwindbaren) Probleme mit QuarkXPress 4.11:
um korrekte Informationen über die Absatzlinien zu erhalten, muss der Absatz ausgewählt sein. Gut, es genügt, das erste
Zeichen auszuwählen oder die Einfügemarke im Absatz zu positionieren.

Das Abfragen von Stilvorlagen ist mit der QXP 4.11 ein noch grösseres Problem: direkt (wie mit QXP 3.32) ist unmöglich.
Man muss die Stilvorlage einem Absatz zuweisen und dann diesen abfragen.

Das folgende Script wählt das erste Zeichen des Absatzes aus. Dies kann nicht in der Repeatschleife selber geschehen.
Es braucht den Aufruf eines Handlers, damit die Selektion richtig formuliert werden kann:
---
tell document 1 of application "QuarkXPress 4.11"
  activate
  tell current box
    tell story 1
      repeat with i from 1 to count paragraphs
        my selPara(i)
        tell paragraph i
          set linoben1 to position of rule above as real
        end tell
      end repeat
    end tell
  end tell
end tell

on selPara(i)
  tell document 1 of application "QuarkXPress 4.11"
    try
      set selection to character 1 of paragraph i of story 1 of current box
    end try
  end tell
end selPara
---
Das Wörtchen 'my' vor 'selPara(i)' ist zwingend notwendig, weil man sich innerhalb einer 'tell application QXP'-Schleife
befindet. Und das 'i' innerhalb der Klammern übergibt den Wert des Zählers an den Handler. Der 'try' wrapper verhindert
eine Fehlermeldung, wenn ein Return am Textende einen leeren Absatz verursacht hat.
Variante (zum Setzen der Einfügemarke):
Code
       set selection to insertion point before first character of paragraph i of story 1 of current box 

Mit diesem Vorgehen erhält man immer die richtige Position der Linie. Aber: man sollte zugleich feststellen, ob die
Absatzlinie aktiviert ist oder nicht. Dies geschieht mit 'if rule on of rule above is true then' und könnte so
eingebaut werden:
---
        tell paragraph i
          set zab to leading as real
          set abstvor to space before as real
          tell rule above
            if rule on is true then
              set linoben1 to position as real
              my modPara(i)
            end if
          end tell
        end tell
---
Der Aufruf 'my modPara(i)' geht an einen noch zu definierenden Handler. Ich nehme an, dass die Werte 'zab', 'abstvor'
und 'linoben1' auch berücksichtigt werden müssen. Aber weil ich den Überblick nicht habe, lasse ich es bei diesen
Andeutungen bewenden.

Hans Haesler, hsa@ringier.ch


als Antwort auf: [#418181]