Suchen und Ersetzen in Textkomponente (text flow) per AppleScript

Soviel ich erkennen kann, gibt es keine in RagTime zugänglichen AppleScript-Befehle, eine RagTime-Textkomponente per AS zu manipulieren, wie es in Tex-Edit von Tom Bender sehr gut geht. Hoffentlich übersah ich etwas.

Dann schließt sich die Frage an, wie ich 300 formatierte Absätze exportieren und wiederimportieren und dabei die Absatzformatzuweisung erhalten kann.

Ich werde versuchen als rtf zu exportieren, zu manipulieren, in neue RagTime-Datei zu importieren (wobei Absatzformate erzeugt werden) und dann die Textkomponente in die ursprüngliche RagTime-Datei zu ziehen, wobei ich hoffe, daß dann die schon vorhandenen Absatzformate wiederentdeckt werden.

Hat jemand damit Erfahrung?

Wie kann ich an diesem Forum per E-Mail teilnehmen? Ich war bis zu einer Störung bei MacNews in der dortigen Mailigliste Teilnehmer.

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6522 On 21 Juni, 2007 07:49 werkwelt said,

Mir war gar nicht bewußt, wie spezialisiert Absatzformat und Auszeichnung für Text gerettet werden müssen, wenn ich den Text noch umfangreich nach Zeichenfolgen berichtigen muß. Kurz: ich wünsche mir SpellCatcher X und die »replace«-AppleScript-Funktionen aus Tex-Edit in RagTime eingebaut.

Hier geht es um »Kraut und Rüben«, wie sie aus einer Word-Gestaltung ankommen: Leerzeichenkolonnen vor Verszeilen, Verszeilenabsatzzeichen, Absatzzeichenfolgen und alle nur erdenklichen falschen Anführungs- und Gedankenstrichzeichen. Daß eine Ersetzen-Auswertung erstellt wird, finde ich auch anschaulich.

Nun muß ich also die Absatzformatermittlung und Wiederzuordnung von Detlef Schulz einrichten. Wenn dabei die Absätze eine feste Adressierung bekämen, wärs übersichtlicher.

Das Absatzformat müßte gegenüber der oberflächlichen Textauszeichnung gestärkt werden können.

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6523 On 21 Juni, 2007 09:02 Benedikt Quirmbach said,
Hallo,

ich glaube, bevor ich solche Kopfstände machen würde, würde ich noch mal über zwei Dinge nachdenken:

Zumeist bekommt man ja beim Import von Word-Dateien ein ziemliches Durcheinander von Absatz- und Schrift-Vorlagen. Wenn man verschiedene Word-Dateien in eine RagTime-Datei importiert vergrößert sich das Chaos noch mehr. Ich würde mir dann jedenfalls überlegen, ob ich nicht die Daten als reinen Text importieren und die Auszeichnungen in RT vornehmen sollte.
Wenn das so geht, kann man den Text ja durch jeden erdenklichen Text-Editor laufen lassen und dort unerwünschte Zeichen entfernen. In vielen Fällen ist diese Vorgehensweise einfacher, als wenn man die Auszeichnungen aus Word übernimmt und sich statt dessen mit den Unzulänglichkeiten des Imports herumschlägt.

Wenn das so nicht geht, könnte man auch versuchen, den "Suchen und Ersetzen"-Dialog von RT per GUI-Scripting anzusprechen. GUI-Scripting ist eine AppleScript-Technik, bei der man per Programm Tastatur- und Maus-Eingaben simuliert. Damit kann man fast alles scripten. Wenn Du damit zurecht kommst, sparst Du Dir diesen merkwürdigen Umweg mit dem Auslesen und Zwischenspeichern der Absatzformate. Außerdem blieben dabei auch die Schriftformate erhalten, was ja auch evtl. nicht schlecht wäre...

Ich habe den Weg über GUI-Scripting mal versucht, aber nicht zu ende geführt, weil bei mir der Leidensdruck nicht hoch genug war. Wäre aber natürlich an Lösungen dieser Art sehr interessiert...

Viele Grüße
Benedikt Quirmbach


Am 21.06.2007 um 08:49 schrieb alles:

Mir war gar nicht bewußt, wie spezialisiert Absatzformat und Auszeichnung für Text gerettet werden müssen, wenn ich den Text noch umfangreich nach Zeichenfolgen berichtigen muß. Kurz: ich wünsche mir SpellCatcher X und die »replace«-AppleScript-Funktionen aus Tex-Edit in RagTime eingebaut.

Hier geht es um »Kraut und Rüben«, wie sie aus einer Word-Gestaltung ankommen: Leerzeichenkolonnen vor Verszeilen, Verszeilenabsatzzeichen, Absatzzeichenfolgen und alle nur erdenklichen falschen Anführungs- und Gedankenstrichzeichen. Daß eine Ersetzen-Auswertung erstellt wird, finde ich auch anschaulich.

Nun muß ich also die Absatzformatermittlung und Wiederzuordnung von Detlef Schulz einrichten. Wenn dabei die Absätze eine feste Adressierung bekämen, wärs übersichtlicher.

Das Absatzformat müßte gegenüber der oberflächlichen Textauszeichnung gestärkt werden können.


Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6526 On 21 Juni, 2007 19:41 werkwelt said,

Die aus Word ankommende Auszeichnung ist nur für eine Unterscheidung unentbehrlich, kursiv für 300 sonst nicht einfach zu erkennende Zitate. Die mitgekommenen Absatzformate habe ich nicht verwendet.
Mit GUI-Scripting habe ich nicht einmal die »Nächste-Seite-Hoch-oder-Runter-Pfeile« oben rechts an Layout-Fenstern hinbekommen.
RagTime kann zwar Textabsatz-genau angesteuert werden (select paragraph 208 of text flow "Layout 1" of document 1), aber bei »paragraph offset of selection« streikt es. Ich kann also nicht einmal Absatz für Absatz vorwärtsschalten, oder möglicherweise doch mit einem Bezug zu einer Rechenblattzelle.

tell application "RagTime 6"
     activate
     tell document 1
          tell table "absatzNummer"
               set absatzNummer to ((cell "A1" as text) as number)
          end tell
          tell contents of text flow "RTF-Format-Versuch2+.rtf"
               select paragraph absatzNummer
          end tell
          tell table "absatzNummer"
               set cell "A1" to (absatzNummer + 1)
          end tell
     end tell
end tell
get absatzNummer

[absatzNummer: 200]

Aha, der Absatzweiterschalter geht, die Hürde ist genommen!

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6524 On 21 Juni, 2007 10:02 Detlef Schulz said,
Hallo vielleicht hilft es, das Suchen und Ersetzen ganz in AppleScript auszulagern.

Folgendes Script habe ich nur kurz getestet, es basiert aber auf älteren Bausteinen und funktionierte in einem ersten Lauf auf Anhieb.

Dies mal wieder nur als Anregung :-)
---------------------------------------------------------------------------------------
property badChar : {"  ", "sie", "ihre", "ihnen"}
property goodChar : {" ", "Sie", "Ihre", "Ihnen"}


tell application "RagTime 6"
activate
tell document 1
set meinText to text flow "Text 1" as text
end tell
end tell
set neuerText to suchenUndErsetzen(meinText)


on suchenUndErsetzen(meinText)
repeat with i from 1 to the number of items in badChar
set originalDelimiter to AppleScript's text item delimiters
set AppleScript's text item delimiters to item i of badChar
set tempText to every text item of meinText
set AppleScript's text item delimiters to item i of goodChar
set meinText to tempText as text
set AppleScript's text item delimiters to originalDelimiter
end repeat
return meinText
end suchenUndErsetzen


tell application "RagTime 6"
set x to make new text flow at beginning of document 1
set contents of x to neuerText as text
end tell
---------------------------------------------------------------------------------------

Die beiden Properties badChar und goodChar sind die Suchen und Ersetzen-Texte. Beides sind Listen und müssen exakt die gleiche Anzahl an Elementen besitzen da das entsprechede Element aus badChar mit dem Element an gleicher Stelle aus goodChar ersetzt wird.

Als nächstens wird dann der gesamte Text der Textkomponente Text 1 in die Variable meinText eingelesen. Zum Testen habe ich hier einen hundertseitigen Text verwendet und es gab damit keine Probleme.

Im Handler suchenUndErsetzen() wird dann meinText auf die badChars untersucht und mit einem Trick den ich von Jürgen Schell gelernt habe :-)) über die Text Item Delimiters gesucht und ersetzt.

Zum Schluß wird eine neue Textkomponente angelegt und der neue, gereinigte Text dort abgelegt.

Gruß,

Detlef Schulz



Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6525 On 21 Juni, 2007 18:18 werkwelt said,

Gibt es für die Idee von Detlef Schulz, den Suchen-und-Ersetzen-Vorgang ganz in AppleScript ablaufen zu lassen, die Chance, den Text mit Absatzformaten (paragraph style sheet) in die AS-Variable zu nehmen?

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6517 On 17 Juni, 2007 13:50 Detlef Schulz said,
Hi,


zu Ragtime und AppleScript empfehle ich folgende Lektüre von Jürgen Schell:
Dort insbesondere die Kapitel zum Text und zur Arbeit mit der selection.

Weitere Scriptmöglichkeiten zum Text in RagTime findet man leicht heraus in dem man die Aktionen mit dem Skripteditor von Mac OS X aufzeichnet oder das Funktionsverzeichnis von RagTime im Scripteditor öffnet.

Alle diese Scriptingmöglichkeiten sind auch direkt aus RagTime heraus erreichbar. (Menü: Extras - AppleScript)

Einen Textexport zu scripten und danach den Text gescripted wieder mit denselben Absatzformaten zu importieren ist nicht allzu aufwendig wenn es nur um die Absatzformate geht.

1. Text per AppleScript Absatz für Absatz durchgehen und die Absatzformate in eine Liste auslesen:

tell application "RagTime 6"
activate
set i to 1
set ParList to {}
repeat with i from 1 to number of paragraphs of text flow "Text 1" of document 1
set x to paragraph style sheet of paragraph i of contents of text flow "Text 1" of document 1
set ParList to ParList & name of x
set i to i + 1
end repeat
end tell

In ParList werden hier die Absatzvorlagen in einer Liste abgespeichert {"Standardabsatz", "Überschrift 2", "Standardabsatz", "Überschrift"}. ParList muss man sich dabei irgendwo abspeichern, zum Beispiel in ein Rechenblatt schreiben. Danach kann der Text exportiert werden.

2. Nachdem Import des Textes, und unter der Vorraussetzung das sich die Anzahl und Anordnung der Absätze nicht geändert hat, kann man den Absätzen wieder ihre Absatzvorlage aus ParList zuweisen: Natürlich muss ParList vorher aus dem Rechenblatt wieder ausgelesen werden. Hier ist ParList, die Lsite der Absatzformate, manuell in das Script geschrieben worden.

tell application "RagTime 6"
activate
set ParList to {"Standardabsatz", "Überschrift 2", "Standardabsatz", "Überschrift"}
set i to 1
repeat with i from 1 to number of paragraphs of text flow "Text 1" of document 1
set paragraph style sheet of paragraph i of contents of text flow "Text 1" of document 1 to paragraph style sheet (item i of ParList) of document 1
set i to i + 1
end repeat
end tell


Das nur als Lösungsanregung,

Gruß,

Detlef Schulz


Am 13.06.2007 um 22:09 schrieb alles:

Soviel ich erkennen kann, gibt es keine in RagTime zugänglichen AppleScript-Befehle, eine RagTime-Textkomponente per AS zu manipulieren, wie es in Tex-Edit von Tom Bender sehr gut geht. Hoffentlich übersah ich etwas.

Dann schließt sich die Frage an, wie ich 300 formatierte Absätze exportieren und wiederimportieren und dabei die Absatzformatzuweisung erhalten kann.

Ich werde versuchen als rtf zu exportieren, zu manipulieren, in neue RagTime-Datei zu importieren (wobei Absatzformate erzeugt werden) und dann die Textkomponente in die ursprüngliche RagTime-Datei zu ziehen, wobei ich hoffe, daß dann die schon vorhandenen Absatzformate wiederentdeckt werden.

Hat jemand damit Erfahrung?

Wie kann ich an diesem Forum per E-Mail teilnehmen? Ich war bis zu einer Störung bei MacNews in der dortigen Mailigliste Teilnehmer.

Mit freundlichen Grüßen,
Norbert Lindenthal


the mailing list <ragtime@macnews.de>. To unsubscribe, E-mail to: <ragtime-off@macnews.de> To switch to the DIGEST mode, E-mail to <ragtime-digest@macnews.de> To switch to the INDEX mode, E-mail to <ragtime-index@macnews.de> Send administrative queries to <ragtime-request@macnews.de>

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6654 On 13 Juli, 2007 17:06 werkwelt said,

Moin, Detlef,
Deine Lösungsanregung, importierten Absätzen die zugehörigen Absatzformate zuzuordnen, klappt ausgezeichnet. Deshalb überlege ich, ob ich meinen 1900-Absätze-Text noch einmal herausnehme aus dem Textfluß mit 100 Bildern. Die Bilder stehen jeweils im Absatzformat »Bilder«, haben sonst noch keine weitere Eigenschaft, zum Beispiel fehlt eine gleichlautende Bildunterschrift. Nun meine Frage: Können die Bilder per AS aus dem Absatzfluß herausgenommen und später wieder mit dem Absatzfluß zusamengefügt werden, wie man einen Reißverschluß aufzieht?

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6659 On 16 Juli, 2007 11:26 Detlef Schulz said,
Hallo Norbert,

ja, das können Sie. Ich hab mir das mal angesehen und es ist relativ einfach.
Von folgenden Vorraussetzungen wird ausgegangen:

1. Die Bidler sind bereits alle in dem Inventar enthalten
2. Die Bilder sind im Inventar logisch durchnummeriert.

Ich gehe bei der nachfolgenden Lösung davon aus, dass die Bidler so benannt wurden: "Bild1.png", "Bild42.png", usw. Die Zahl gibt dabei die logische Aufeinanderfolge der Bilder im Text wieder. Das erste Bild muss also "Bild1.png" heißen, das zweite "Bild2.png" usw.. Die Bilder haben also einen festen Namenbeginn "Bilder", dann eine Nummer, auch mehrstellig aber immer ohne führende Null, und eine Namensendung, z.B. ".png"
Die Bilder sind alle konsequent mit einer Absatzvorlage nur für mitfließende Bilder formatiert.

Dann lässt sich ein Bild wieder einfügen mit
copy picture (pictName & pictCount & pictformat) to before paragraph i of newTextKomp

wobei der Name hier aus drei Variablen zusammengebaut wird, aus dem Namensteil pictName "Bild", der laufenden Nummer des Bildes pictCount, z.B.  "3" und der Endung des Bidles pictformat ".png".
Dieses Bild wird aus dem Inventar dann vor den laufenden Absatz in die neue Textkomponente eingefügt.
Nicht von dem copy verwirren lassen, das Bild wird nicht kopiert, ist also danach nicht mehrfach im Inventar vorhanden.

Natürlich muss dann vorher bei jedem Absatz geprüft werden, ob es sich um ein Bildabsatzformat handelt um dann entsprechend das Bild einzufügen.

Das letzte Skript von mir als ganzes sieht dann so aus:

property badChar : {"  ", "sie", "ihre", "ihnen"} --zu suchende Zeichenfolgen
property goodChar : {" ", "Sie", "Ihre", "Ihnen"} --Ersatz für die gefundenen Zeichen
property textKomp : "Text 1" --Name der Textkomponente
set parNames to {} --Hier werden die Absatzformate abgespeichert

--NEU!!! Feste Elemente im Bildnamen hier angeben
set pictName to "Bild" --Textteil im Namen der Bildkomponenten
set pictformat to ".png" --Bildformatendung
set pictPara to "Bildabsatz" --Name des Absatzformates für mitfließende Bilder
set pictCount to 1 --Zähler zum Hochzählen der Bildanzahl


tell application "RagTime 6"
tell document 1
tell text flow textKomp
--Einlesen der Absatzformate
repeat with i from 1 to number of paragraphs
set x to paragraph style sheet of paragraph i of contents
if class of x is paragraph style sheet then
set parNames to parNames & name of x
else
set parNames to parNames & name of item 1 of x
end if
end repeat
end tell
-- Einlesen der Textkomponente
set meinText to text flow textKomp as text
end tell
end tell
set neuerText to suchenUndErsetzen(meinText)

on suchenUndErsetzen(meinText)
repeat with i from 1 to the number of items in badChar
set originalDelimiter to AppleScript's text item delimiters
set AppleScript's text item delimiters to item i of badChar
set tempText to every text item of meinText
set AppleScript's text item delimiters to item i of goodChar
set meinText to tempText as text
set AppleScript's text item delimiters to originalDelimiter
end repeat
return meinText
end suchenUndErsetzen

tell application "RagTime 6"
tell document 1
--Neue Textkomponente erstellen, bitte im Inventar danach sehen!
set newTextKomp to make new text flow at end
set contents of newTextKomp to neuerText as text
--Absatzformate wieder anwenden
repeat with i from 1 to number of paragraphs of newTextKomp
set paragraph style sheet of paragraph i of newTextKomp to paragraph style sheet (item i of parNames)
--NEU!!! Bilder wieder einsetzen
if item i of parNames is pictPara then
display dialog (item i of parNames)
copy picture (pictName & pictCount & pictformat) to before paragraph i of newTextKomp
set pictCount to pictCount + 1
end if
end repeat
end tell
end tell


Neu sind nur die vier zusätzlichen Bildvariablen am Anfang des Skriptes die alle mit "pict..." anfangen, sowie im letzten Teil der Part nach dem Kommentar "--Bidler wieder einsetzen"


Gruß,

Detlef Schulz


Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6660 On 16 Juli, 2007 11:44 Detlef Schulz said,
Sorry,

da war noch ein display dialog vom debuggen drin:
Jetzt aber richtig:

property badChar : {"  ", "sie", "ihre", "ihnen"} --zu suchende Zeichenfolgen
property goodChar : {" ", "Sie", "Ihre", "Ihnen"} --Ersatz für die gefundenen Zeichen
property textKomp : "Text 1" --Name der Textkomponente
set parNames to {} --Hier werden die Absatzformate abgespeichert

--NEU!!! Feste Elemente im Bildnamen hier angeben
set pictName to "Bild" --Textteil im Namen der Bildkomponenten
set pictformat to ".png" --Bildformatendung
set pictPara to "Bildabsatz" --Name des Absatzformates für mitfließende Bilder
set pictCount to 1 --Zähler zum Hochzählen der Bildanzahl


tell application "RagTime 6"
tell document 1
tell text flow textKomp
--Einlesen der Absatzformate
repeat with i from 1 to number of paragraphs
set x to paragraph style sheet of paragraph i of contents
if class of x is paragraph style sheet then
set parNames to parNames & name of x
else
set parNames to parNames & name of item 1 of x
end if
end repeat
end tell
-- Einlesen der Textkomponente
set meinText to text flow textKomp as text
end tell
end tell
set neuerText to suchenUndErsetzen(meinText)

on suchenUndErsetzen(meinText)
repeat with i from 1 to the number of items in badChar
set originalDelimiter to AppleScript's text item delimiters
set AppleScript's text item delimiters to item i of badChar
set tempText to every text item of meinText
set AppleScript's text item delimiters to item i of goodChar
set meinText to tempText as text
set AppleScript's text item delimiters to originalDelimiter
end repeat
return meinText
end suchenUndErsetzen

tell application "RagTime 6"
tell document 1
--Neue Textkomponente erstellen, bitte im Inventar danach sehen!
set newTextKomp to make new text flow at end
set contents of newTextKomp to neuerText as text
--Absatzformate wieder anwenden
repeat with i from 1 to number of paragraphs of newTextKomp
set paragraph style sheet of paragraph i of newTextKomp to paragraph style sheet (item i of parNames)
--NEU!!! Bilder wieder einsetzen
if item i of parNames is pictPara then
copy picture (pictName & pictCount & pictformat) to before paragraph i of newTextKomp
set pictCount to pictCount + 1
end if
end repeat
end tell
end tell


Detlef Schulz


--NEU!!! Bilder wieder einsetzen
if item i of parNames is pictPara then
display dialog (item i of parNames)
copy picture (pictName & pictCount & pictformat) to before paragraph i of newTextKomp
set pictCount to pictCount + 1
end if


Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6685 On 22 Juli, 2007 09:53 werkwelt said,

Moin, Detlef,

an Deiner Bilderlösung, für die ich sehr danke, gefällt mir nicht, daß die Bilder nicht ihre eigenen Namen haben können. Ich müßte 90 Bilder umbenennen, was ja noch ginge. Aber die schon vergebenen Namen haben auch ihren Sinn.

Falls sich RagTime zum AppleScript-steuerbaren Buchsatzprogramm mausern sollte. würde ich noch danach schauen, ob Bilder im Fließtext in der Rahmengröße eingestellt werden könnten. Beim Verkleinern des Satzspiegels war das bei mir notwendig.

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6528 On 22 Juni, 2007 11:06 werkwelt said,

tell application "RagTime 6"
     activate
     set i to 1
     set ParList to {}
     repeat with i from 1 to number of paragraphs of text flow "Text 1" of document 1
          set x to paragraph style sheet of paragraph i of contents of text flow "Text 1" of document 1
          set ParList to ParList & name of x
          set i to i + 1
     end repeat
end tell

Moin, Detlef, bei mir stolpern Deine Zeilen an »name of x«. Mit x (ohne name of) stolpert der Skriptablauf am 7. Absatz. Wo liegt die Lösung? Soll »name of« alles andere außer dem Absatzvorlagennamen in Tütteln wegfiltern? Nehme ich die Zeile weg, läuft das Skript durch, ich könnte also aus dem Event-Protokoll alles Überflüssige weglöschen.

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6530 On 22 Juni, 2007 15:45 werkwelt said,

Nun läuft die Absatzformatauslesevorrichtung. Sie stolperte dort, wo zu den Absatzformaten noch zusätzliche Auszeichnungen vorgenommen sind. (Bei 1900 Absätzen müßte man gezielt danach suchen können.) Danke, Detlef!

Mit freundlichen Grüßen,
Norbert Lindenthal

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6529 On 22 Juni, 2007 12:18 Detlef Schulz said,
Mmmh, interessant....

nach ein bisschen rumprobieren habe ich rausgefunden, das dies immer dann passiert, wenn die Absatzformate nicht rein sind sondern ein + im Namen enthalten, also manuell formatierte Stellen enthalten.

Als Ergebnis erhalten ich bei einem reinen Absatzformat ohne manuelle Formatierungen:
get paragraph style sheet of paragraph 3 of contents of text flow "Text 1" of document 
paragraph style sheet "Überschrift 2" of document id 1

Ansonsten erhalten ich:
get paragraph style sheet of paragraph 4 of contents of text flow "Text 1" of document 1
{paragraph style sheet "Überschrift 3" of document id 1}

Da im zweiten Fall eine Liste zurückgeliefert wird, muss man dann mit
name of item 1 of x
den Namen des Absatzformates herausfischen.

Jetzt müsste man nur noch herausfinden wann eine Liste vorliegt.
Das könnte man so machen:
if class of x is paragraph style sheet then
set parNames to parNames & name of x
else
set parNames to parNames & name of item 1 of x
end if

Dann ist da übrigens noch ein Fehler in dem Skript
set i to i +1
muss raus da sonst doppelt hochgezählt wird.
Und auch
set i to 1
kann entfallen, da die Variable ja schon im repeat initialisiert wird.

Ich hab das Script nochmal überarbeitet. Es liest jetzt eine beliebige Textkomponente aus (am Anfang als Property definiert) merkt sich die Absatzformate, führt dann das Suchen und Ersetzen aus und erzeugt dann eine neue Textkomponente, speichert dort den neuen, ersetzten Text ab, und wendet die Absatzformate wieder drauf an.
Allerdings! Die manuellen Formatierungen die zu den Plus-Zeichen im Namen des Absatzformates führen gehen dabei verloren! Auch dürfen sich beim Suchen und Ersetzen keine neuen Absätze ergeben oder Absätze entfernt werden.

Viel Spaß damit. ;-)
Detlef

property badChar : {"  ", "sie", "ihre", "ihnen"} --zu suchende Zeichenfolgen
property goodChar : {" ", "Sie", "Ihre", "Ihnen"} --Ersatz für die gefundenen Zeichen
property textKomp : "Text 1" --Name der Textkomponente
set parNames to {} --Hier werden die Absatzformate abgespeichert

tell application "RagTime 6"
tell document 1
tell text flow textKomp
--Einlesen der Absatzformate
repeat with i from 1 to number of paragraphs
set x to paragraph style sheet of paragraph i of contents
if class of x is paragraph style sheet then
set parNames to parNames & name of x
else
set parNames to parNames & name of item 1 of x
end if
end repeat
end tell
-- Einlesen der Textkomponente
set meinText to text flow textKomp as text
end tell
end tell
set neuerText to suchenUndErsetzen(meinText)

on suchenUndErsetzen(meinText)
repeat with i from 1 to the number of items in badChar
set originalDelimiter to AppleScript's text item delimiters
set AppleScript's text item delimiters to item i of badChar
set tempText to every text item of meinText
set AppleScript's text item delimiters to item i of goodChar
set meinText to tempText as text
set AppleScript's text item delimiters to originalDelimiter
end repeat
return meinText
end suchenUndErsetzen

tell application "RagTime 6"
tell document 1
--Neue Textkomponente erstellen, bitte im Inventar danach sehen!
set newTextKomp to make new text flow at end
set contents of newTextKomp to neuerText as text
--Absatzformate wieder anwenden
repeat with i from 1 to number of paragraphs of newTextKomp
set paragraph style sheet of paragraph i of newTextKomp to paragraph style sheet (item i of parNames)
end repeat
end tell
end tell

Re: Suchen und Ersetzen in Textkomponente (text flow) per AppleS

#6519 On 17 Juni, 2007 18:56 werkwelt said,

Moin, Detlef,

seit gestern programmiere ich mit Erfolg AppleScript in Tex-Edit von Tom Bender zum Suchen und Ersetzen nach langer mehrzeiliger Ersetzungsliste mit einer Erfolgsquittung, die auch die Häufigkeiten der noch einmal genannten Umsetzungen angibt. Deine Ideen zur Wiederzusammenführung der Absatzvorlagen begrüße ich sehr und werde sie durchackern und mich wieder mit einem gezippten Beispielordner zurückmelden. Danke für die ermutigende Antwort!

Norbert Lindenthal