Michael Slomski hat im QuarkXPress-Forum den Wunsch geäussert, eine manuelle Tätigkeit zu automatisieren. Thema "Markierten Text löschen und woanders einsetzen", http://www.page-online.de/page/forum/viewthread/2167
Er hat später selbst eine funktionierende Löung gefunden. Doch den aktuellen Absatz kann man direkter herausfinden. Zudem sollten lokale Formatierungen erhalten bleiben. Und man sollte auch eine Fehlermeldung abfangen, welche unweigerlich gezeigt wird, wenn der "nächste Absatz" nicht existiert.
Zuerst wird der Offset der Auswahl festgestellt. Dies ist die Anzahl Zeichen, welche sich vor dem ersten ausgewählten Zeichen befinden – vom Anfang der Textkette an gezählt. Wenn dieser Wert aber Null ist, dann beginnt die Auswahl mit dem ersten Zeichen. Es befinden sich keine anderen davor, deshalb die '0'. Und deshalb muss der Wert auf '1' gesetzt werden, damit durch den Befehl, welcher die Absätze zählt, keine Fehlermeldung generiert wird.
Wenn die Anzahl Absätze feststehen, wird versucht (= 'try'), einen Zwischenraum vor den nächsten Absatz zu setzen. Gelingt dies, dann wird auch der nächste Befehl funktionieren. Gelingt es nicht, dann wird ein Dialog gezeigt, welcher den Anwender informiert.
Durch den Gebrauch von 'move contents' werden auch eventuelle lokale Formatierungen mit verschoben.
---
tell document 1 of application "QuarkXPress 4.11"
activate
set insPoint to offset of selection
if insPoint = 0 then set insPoint to 1
tell current box
tell story 1
set paraNum to count paragraphs of (text from character 1 to character insPoint)
end tell
end tell
try
copy space to before paragraph (paraNum + 1) of story 1 of current box
move contents of selection to before paragraph (paraNum + 1) of story 1 of current box
on error
display dialog "Die Auswahl kann nicht vor den
nächsten Absatz kopiert werden,
weil sie sich im letzten der Textkette
befindet." buttons "OK" default button 1 with icon 0
end try
end tell
---
Man sollte aber noch mehr 'error handling' einbauen: Ist ein Dokument geöffnet? Ist Text ausgewählt?
Hans Haesler <hsa@ringier.ch>