Forenindex » Programmierung/Entwicklung » AppleScript » Bug beim Exportieren als XPress Tags

Bug beim Exportieren als XPress Tags

Hans Haesler
  
Beiträge gesamt: 5826

29. Jan 2004, 10:18
Bewertung:

gelesen: 1178

Beitrag als Lesezeichen
Das Exportieren eines Textes im XPress-Tags-Format gilt als sicheres Mittel, um die Formatierungen unverändert zu erhalten. Aber aufgepasst, wenn dem Text keine Stilvorlage zugewiesen worden ist. Unter gewissen Umständen können Tags verschwinden und nach dem Wiederimport ist der Text anders formatiert.

---
Der Hintergrund:

Letztes Jahr habe ich für Christian Kopp (dtpro-Forum-Teilnehmer) ein Droplet entwickelt, welches in XPress-Dokumenten nach Artikel-Nummern fahndet und die letzten zwei Stellen durch neue ersetzt.

Die "Stories", welche die Nummern enthalten, werden mit der Scripting Addition "RegEx Commands" aufgespürt. Das Script sichert sie im XPress-Tags-Format in eine temporäre Datei, liest sie anschliessend in eine Variable, damit mit "RegEx Commands" das Suchen und Ersetzen gelingt. Zum Schluss wird die ganze Story wieder in eine Datei auf der Harddisk gesichert und im Dokument anstelle der alten importiert.

Klingt kompliziert, ist aber der einfachste Weg und wird dank der "do-script-Methode" verblüffend schnell durchgeführt. Alles funktionierte wunderbar.

Aber … nun meldete mir Christian, dass in einer neuen Staffel von Dokumenten nach dem Ersetzen an gewissen Stellen der Schriftgrad und die Schriftbreite geändert wurde. Zuerst vermutete ich einen Fehler in QuarkXPress 5.01. Aber weitere Tests ergaben, dass auch die zuverlässige 4.11-Version dasselbe Problem hat.

Damit dieser Bug zubeissen kann, müssen vier Bedingungen erfüllt sein: 1. Dem betreffenden Absatz darf keine Stilvorlage zugewiesen sein. 2. Innerhalb des Absatzes müssen lokale Änderungen angebracht sein. 3. Der Export im XPress-Tags-Format muss per Script erfolgen. 4. Der Export muss mindestens zweimal hintereinander geschehen.

In der Tat: beim ersten Exportieren schreibt XPress die Tags korrekt, z.B.:
Code
... <\i><Kh80z8.5f"TimesTen-Bold"> ... 

Bei der zweiten Story aber "vergisst" XPress die lokalen Formatierungen (h80 = Schriftbreite 80%, z8.5 = Schriftgrad 8.5 pt)
Code
... <\i><Kf"TimesTen-Bold"> ... 

Und der Text wird nach dem Schriftgrad und der Schriftbreite, welche für die vorangehenden Zeichen definiert wurden, formatiert.

Um das Problem zu umgehen, änderte ich das Script so ab, dass nicht mehr die ganze Story, sondern nur noch die Absätze, welche die zu ändernden Nummern enthalten, exportiert werden. Im Gegensatz zu den Titelabsätzen (bei welchen die zugewiesene Stilvorlage nach dem Einpflanzen einer Ziffer samt Einzug-hier-Zeichen automatisch auf "Kein Stil" geändert wurde) ist eine Stilvorlage zugewiesen und die korrekte Umsetzung in XPress Tags gewährleistet.

Hans Haesler <hsa@ringier.ch>

Bug beim Exportieren als XPress Tags

Hans Haesler
  
Beiträge gesamt: 5826

31. Jan 2004, 08:30
Bewertung:

gelesen: 1177

Beitrag als Lesezeichen
Zu früh gefreut &#133; Christian hat noch weitere Problemfälle entdeckt. Es ist aber so, dass sie nicht zuverlässig rekonstruiert werden können.

Dennoch: Damit die Ausfallquote möglichst klein gehalten werden kann, muss ich das Script umkrempeln, sobald ich etwas Zeit dafür finde.

Der Plan: Wie bisher geht das Script die Stories durch und testet, ob das Zeichenmuster darin enthalten ist. Wenn eine Übereinstimmung gefunden ist, dann wird die Textkette nicht mehr exportiert, sondern direkt in eine Variable geladen.

Anstelle von "RegEx Commands" werde ich die "Satimage" OSAX einsetzen, weil damit die Position des Musters in der Zeichenkette gefunden werden kann. Und dann sollte es ein leichtes sein, die zwei letzten Zeichen davon durch die neuen Ziffern zu ersetzen.

Damit ist das Ganze formatierungsunabhängig. Das doppelte Konvertieren der XPress Tags, welches unter gewissen Umständen nicht zuverlässig ist, kann ganz vermieden werden.

Einziges Fragezeichen: wird es auch funktionieren wenn eine Story mehrere Zeichenmuster enthält? Ich hoffe, dass in diesem Fall deren Positionen als Liste zurückgegeben werden. Sonst &#133;

Auch ungewiss: wird die Ausführungsgeschwindigkeit akzeptabel bleiben?

Hans Haesler <hsa@ringier.ch>

Bug beim Exportieren als XPress Tags

Hans Haesler
  
Beiträge gesamt: 5826

5. Feb 2004, 12:04
Bewertung:

gelesen: 1177

Beitrag als Lesezeichen
Die Lösung ist noch nicht fertig, aber ein gewichtiges Hindernis ist aus dem Weg geräumt. :-)

Mein Plan war, eine Story nach der anderen in eine Variable zu geben, mit der "Satimage"-OSAX die Positionen (der Wert des Labels 'matchPos' des Resultat-Records) der Artikelnummern festzustellen und dann anhand dieser Liste in der XPress-Box die zwei letzten Stellen der Nummern durch das neue Kennzeichen zu ändern.

Mit der Mac-OS-X-Version wäre es ein Leichtes, doch die Satimage für OS 9 hat viel weniger Optionen. Mit &#133;
---
set aStr to "Hallo 23 24 hallo 46 47"
set aOff to matchPos of (find text "[0-9]+ [0-9]+" in aStr with regexp)
---
&#133; ist das Resultat '6', die Position des ersten Zahlenpaars (in Wirklichkeit sind die Nummern komplexer).

Was tun? Eine Idee: eine Repeatschleife, in welcher die zwei ersten Stellen durch "xx" ersetzt werden. Beim nächsten Durchgang trifft somit das Muster "[0-9]+ [0-9]+" nicht mehr für das erste Zahlenpaar zu und die Position des zweiten wird zurückgegeben. Und so weiter, bis eine fehlende Übereinstimmung eine Fehlermeldung generiert und mit 'exit repeat' die Schleife verlassen wird.
---
set aStr to "Hallo 23 24 hallo 46 47"
set offList to {}

repeat
  try
    set aOff to matchPos of (find text "[0-9]+ [0-9]+" in aStr with regexp)
    set end of offList to aOff
    set aStr to text 1 thru aOff of aStr & "xx" & text (aOff + 3) thru -1 of aStr
  on error
    exit repeat
  end try
end repeat

offList --> {6, 18}
---
Mit diesen Werten kann die Position der entsprechenden Ziffern in der XPress-Box errechnet werden.

Hans Haesler <hsa@ringier.ch>

Bug beim Exportieren als XPress Tags

Hans Haesler
  
Beiträge gesamt: 5826

18. Feb 2004, 14:37
Bewertung:

gelesen: 1177

Beitrag als Lesezeichen
"Heureka!" ("Ich hab's gefunden!" :-)

Die im Zwischenbericht skizzierte Lösung funktioniert. Nun werden die Textketten, welche die Artikelnummern enthalten, nicht mehr im XPress-Tags-Format in eine temporäre Datei gesichert, sondern das Script stellt "nur" die Position jeder Nummer fest.

Hier noch ein Beispiel einer Artikelnummer: 24 85 18&#150;23
Und so sieht der Befehl zum Finden der Position aus:
Code
set aOff to matchPos of (find text "[0-9][0-9] [0-9][0-9] [0-9][0-9]&#150;[0-9][0-9]" in actPara with regexp)  

Wenn die Liste der Positionen komplett ist, werden die letzten zwei Stellen der Nummern gegen den aktuellen Wert ausgetauscht. Dazu muss jede Zahl um 10 erhöht werden und nochmals um 1 für die letzte Stelle.
---
repeat with n from (count of offList) to 1 by -1
  set aOff to (item n of my offList) + 10
  set zOff to aOff + 1
  tell story i
    tell paragraph j
      set characters aOff thru zOff to versionNumber
    end tell
  end tell
end repeat
---
Der Austausch geschieht direkt in der Textbox. Damit vermeidet man die Konvertierungsprobleme, welche auftreten können. Diese Methode ist nur unwesentlich langsamer. Für ein komplexes Dokument, welches 87 Artikelnummern enthält, ist das Suchen/Ersetzen in 27 Sekunden geschafft. Mit der alten Version brauchte das Script 25 Sekunden.

Jetzt hoffe ich, dass ich mit meiner Lösung rechtzeitig komme und Christian das Suchen und Ersetzen der Nummern für den nächsten Katalog wieder mit dem Droplet vornehmen kann.

Hans Haesler <hsa@ringier.ch>

Bug beim Exportieren als XPress Tags

Anonym
Beiträge gesamt: 22827

25. Feb 2004, 10:13
Bewertung:

gelesen: 1177

Beitrag als Lesezeichen
hallo hans,

dein neues script funktioniert wie zu erwarten einwandfrei! selbst die seiten bei denen ich sehr große probleme hatte laufen wie butter durch das neue script und zeitlich gibt es keine großen unterschiede. vielen dank für deinen einsatz. jetzt kann unsere produktion beruhigt anlaufen!!!

gruß
chris

Bug beim Exportieren als XPress Tags

Hans Haesler
  
Beiträge gesamt: 5826

25. Feb 2004, 10:51
Bewertung:

gelesen: 1177

Beitrag als Lesezeichen
Hallo Chris,

bitteschön! Ich bin froh, dass endlich eine einigermassen zuverlässige Version zustandegekopmmen ist.

Ein einziges Problem: eventuelle unsichtbare Zeichen in den Artikelnummern (z.B. "optionale Trennung").
Diese sind im Suchmuster nicht vorgesehen und die betreffende Nummer wird unverändert belassen.

Hans Haesler <hsa@ringier.ch>

Bug beim Exportieren als XPress Tags

Anonym
Beiträge gesamt: 22827

25. Feb 2004, 10:57
Bewertung:

gelesen: 1177

Beitrag als Lesezeichen
hallo hans,

habe ich schon bemerkt! ich werde den anwendern mal auf die finger schauen damit das nicht vorkommt ;-)

gruß
chris