[GastForen Programmierung/Entwicklung AppleScript stilformate automatisch ändern

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

stilformate automatisch ändern

Gast
Beiträge gesamt:

28. Mai 2003, 11:01
Beitrag # 1 von 5
Bewertung:
(1126 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans und die anderen,

ich habe auch mal wieder eine frage:
ich muss 2000 adressen verschieden formatieren und habe, in einzelnen kleinen scripts das teilweise auch geschafft, aber einiges fehlt mir noch. und bevor ich mich dranmache, das mit der hand zu formatieren, will ich doch mal nachfragen, obs vielleicht doch nicht automatisch geht.
also: in einem quarkxpress-textrahmen sind alle adressen auf die seiten verteilt, ein adress-block ist mit einem return zum nächsten abgetrennt. jetzt will ich eine bestimmt zeile formatieren (mit einer stilformatvorlage belegen). es soll eine zeile ein stilvormat bekommen, wenn die zeile davor NICHT ein anderes bestimmtes format hat:

hier der script-code (ausschnitt):
---
tell story 1 of current box
 tell (every paragraph where style sheet = "kursiv_taetigkeit")
  try
   if style sheet of paragraph before it ≠ "adressen_email" then
    set style sheet of paragraph before it to "kursiv_taetigkeit"
   end if
  on error
   display dialog "fehler"
  end try
 end tell
 beep
 display dialog "fertig"
end tell

----
irgendwie ist da ein denkfehler drin. es wird immer die zeile über der aktuellen zeile mit der stilvorlage "kursiv_taetigkeit" belegt, egal ob die zeile davor mit der stilvorlage "adressen_email"  belegt ist oder nicht. das script verursacht auch manchmal abstürze (oder es dauert ewig und ich habe keine geduld zu warten oder es verliert sich in einer endlosschleife im nirgendwo, keine ahnung. ohne die if-schleife sind die adressen in ca 2 minuten durch). vielleicht ist zweimal "befor it" zuviel?

naja, vielleicht fällt dir/euch was ein.

gruss bruno dorn
X

stilformate automatisch ändern

Hans Haesler
  
Beiträge gesamt: 5804

28. Mai 2003, 13:31
Beitrag # 2 von 5
Beitrag ID: #418171
Bewertung:
(1125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bruno,

mit dem 'it' von 'before it' versteht das Script die 'story 1'. Kann also nicht gut gehen. Und mit dem 'every' ist es so eine Sache.
Diese Formulierung beschleunigt die Ausführung ungemein. Aber wenn man dann noch eine Bedingung daran knüpft, dann wird
es für das Script zu kompliziert. Weil das Ergebnis von 'every' eine Liste ist und die einzelnen Elemente selten noch einzeln
adressiert werden können.

Die Lösung: mit einer Repeat-Schleife die Absätze der Reihe nach abfragen.

Kleine Subtilitäten:
1. Der Zähler 'i' beginnt mit 2, weil es mit 1 ein Problem mit (i-1) geben würde.
2. Statt 'style sheet' wird 'name of style sheet' benutzt.
3. Der Wechsel der Stilvorlage muss mit einem Handler ausserhalb des 'tell paragraph i'-Blocks erfolgen.
4. Die beiden 'try wrapper' beugen einer Fehlermeldung vor, welche durch "Kein Stil" verusacht werden könnte.
---
tell document 1 of application "QuarkXPress 5.01"
  tell current box
    tell story 1
      repeat with i from 2 to count of paragraphs
        tell paragraph i
          try
            if name of style sheet = "kursiv_taetigkeit" then
              my changeSheet(i)
            end if
          end try
        end tell
      end repeat
    end tell
  end tell
  display dialog "fertig" buttons "OK" default button 1 with icon 1
end tell

on changeSheet(i)
  tell document 1 of application "QuarkXPress 5.01"
    tell current box
      tell story 1
        try
          if name of style sheet of paragraph (i - 1) is not "adressen_email" then
            set style sheet of paragraph (i - 1) to "kursiv_taetigkeit"
          end if
        on error
          set style sheet of paragraph (i - 1) to "kursiv_taetigkeit"
        end try
      end tell
    end tell
  end tell
end changeSheet
---
Soweit, was mir eingefallen ist. Hier funktioniert es.

Hans Haesler, [email protected]


als Antwort auf: [#418170]

stilformate automatisch ändern

Anonym
Beiträge gesamt: 22827

30. Mai 2003, 11:50
Beitrag # 3 von 5
Beitrag ID: #418172
Bewertung:
(1125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans,

prima, das du die zeit gefunden hast, dich mit dem problem zu befassen. die vorhergehenden formatierungen habe ich alle mit der repeat-schleife gemacht. dauert aber stunden, bis das script durch die adressen ist. also bei mir läuft dein script auch. vielen dank nochmal.

aber noch eine detailfrage: warum muss der wechsel in einem handler stattfinden. könnte man das nicht einfach gleich danach ausführen lassen?

gruss bruno


als Antwort auf: [#418170]

stilformate automatisch ändern

Hans Haesler
  
Beiträge gesamt: 5804

30. Mai 2003, 12:49
Beitrag # 4 von 5
Beitrag ID: #418173
Bewertung:
(1125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bruno,

das Wechseln der Stilvorlage muss im Handler geschehen, weil das Script im 'tell paragraph i'-Block ist, wenn der
Name festgestellt wird. Würde man nur die Zuweisung ändern, dann könnte dies an diesem Ort geschehen. Weil man aber
noch den Stilvorlagen-Namen des vorhergehenden Absatzes abfragen muss, ist die Verschiebung in den Handler notwendig.
Dort trifft man die gleiche 'tell block'-Struktur an, minus 'tell paragraph i'.

Gut, man könnte den 'tell paragraph i'-Block vermeiden durch 'if name of style sheet of paragraph i ...'. Dann geschieht das
Adressieren der Absätze innerhalb des 'tell story 1'-Blocks und der Handler wird überflüssig.
---
tell document 1 of application "QuarkXPress 5.01"
  tell current box
    tell story 1
      repeat with i from 2 to count of paragraphs
        try
          if name of style sheet of paragraph i = "kursiv_taetigkeit" then
            try
              if name of style sheet of paragraph (i - 1) is not "adressen_email" then
                set style sheet of paragraph (i - 1) to "kursiv_taetigkeit"
              end if
            on error
              set style sheet of paragraph (i - 1) to "kursiv_taetigkeit"
            end try
          end if
        end try
      end repeat
    end tell
  end tell
  display dialog "fertig" buttons "OK" default button 1 with icon 1
end tell
---

Zum Problem mit der Geschwindigkeit: es ist bekannt, dass manche Scripts mit QuarkXPress 5 viel langsamer laufen
als mit der Version 4. Und leider helfen die einfachen QXP-4-Tricks, um die Ausführung zu beschleunigen, nicht mehr
(auf das Objektwerkzeug wechseln, die Masspalette schliessen, die Auswahl aufheben).

Zwei Dinge kann man aber unternehmen:
1. Die Scripts nicht ab Skripteditor ausführen, sondern ab dem neuen QXP-5-Script-Menü.
2. Die "do script"-Methode anwenden.

Der erste Punkt ist leicht zu erfüllen: die Script-Datei in den Ordner "Scripts" im QXP-Programmordner stecken. Der
zweite Punkt ist schwieriger, weil beim kleinsten Irrtum die Meldung erscheint, dass das Script den Befehl nicht versteht.

Hier ist die obige Variante, eingebettet in ein 'do script':
---
script changeStyleSheet
  tell document 1 of application "QuarkXPress 5.01"
    activate
    tell current box
      tell story 1
        repeat with i from 2 to count of paragraphs
          try
            if name of style sheet of paragraph i = "kursiv_taetigkeit" then
              try
                if name of style sheet of paragraph (i - 1) is not "adressen_email" then
                  set style sheet of paragraph (i - 1) to "kursiv_taetigkeit"
                end if
              on error
                set style sheet of paragraph (i - 1) to "kursiv_taetigkeit"
              end try
            end if
          end try
        end repeat
      end tell
    end tell
    display dialog "fertig" buttons "OK" default button 1 with icon 1
  end tell
end script

tell application "QuarkXPress 5.01"
  do script {changeStyleSheet}
end tell
---

Das Scriptobjekt 'changeStyleSheet' muss definiert sein, bevor im Script der Aufruf 'do script' erfolgt. Versuche es mal
mit dieser Methode. Die Beschleunigung dürfte mehr als spürbar sein.

Hans Haesler, [email protected]


als Antwort auf: [#418170]

stilformate automatisch ändern

Anonym
Beiträge gesamt: 22827

30. Mai 2003, 14:04
Beitrag # 5 von 5
Beitrag ID: #418174
Bewertung:
(1125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans,

tja, hast recht. die beschleunigung ist spürbar. extremer unterschied. prima und danke und dann noch ein schönes wochenende.

bis bald. gruss bruno


als Antwort auf: [#418170]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
12.03.2021 - 16.07.2021

Digicomp Academy AG, Zürich oder virtuell
Freitag, 12. März 2021, 13.00 Uhr - Freitag, 16. Juli 2021, 17.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von publishingNETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen.

Preis: CHF 6'300.-
Dauer: 18 Tage (ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PBAS