Suchen und Ersetzen per Applescript in Pages

uhlhorn

uhlhorn

Aktives Mitglied
Thread Starter
Dabei seit
24.05.2005
Beiträge
2.474
Reaktionspunkte
129
Hi,

da ich mir oft Bücher ins ePUB-Format überführe, und auch gelegentlich Bücher setze, benötige ich ein Script, welches wörtliche Reden findet und in italic auszeichnet.

Ich will daher ein Script machen was das deutsche Anführungszeichen findet und den Text bis zum Abführungszeichen markiert.

Wie finde ich heraus wie der Syntax zum Suchen eines Zeichens in Pages und das Markieren eines Textes lauten?

Danke für jedwede Hilfe.
 
Im Applescript-Editor unter Ablage gibt es einen Menüpunkt: Funktionsverzeichnis öffnen. Dort dann nach Pages suchen und schon bekommst du alles zu Pages angezeigt um es mit Applescript anzusprechen.
 
Ja, danke.
Nur weiß ich nicht wie ich das lesen soll. Und ein „find“ oder „search“ kann ich dort außerdem nicht finden.
 
Ja sowas gibt es in Applescript nicht. Das muss man mit text item delimiters lösen. Zuerst sollte der Text in eine Variable geschrieben werden um mit dieser dann weiter arbeiten zu können. Der Wert der Variable wird dann mit hilfe einer delimiter Funktion durchsucht und maskiert wörtliche Reden. Die Rede wird dann in einer neuen Variablen gespeichert und formatiert. Da ich kein Pages habe, kann ich dazu nichts sagen. Nach der Formatierung folgt ein weiteres mal eine delimiter Funktion mit der nach der aktuellen Rede gesucht wird und diese durch den formatierten Text ersetzt. Das sollte es im groben sein.

Aber wie gesagt, ich nutze kein Pages. Hoffen wir es meldet sich jemand, der Pages nutzt.
 
Ja, danke. Ich habe immerhin schon mal herausgefunden wie ich ein Zeichen finde:
Code:
tell application "Pages"
	activate
	tell application "System Events"
		keystroke "f" using command down
		keystroke "„"
		keystroke return
	end tell
	get properties of selection
end tell
Und als Ergebnis erhalte ich:

{text indent:0.0, collapsed:false, underline color:missing value, strikethrough color:missing value, paragraph style:paragraph style "Text" of document id 2665486 of application "Pages", color:{0, 0, 0}, number label tiered:false, class:insertion point, prevent widows and orphans:true, subscript:false, character style:missing value, list style:list style "Ohne" of document id 2665486 of application "Pages", superscript:false, label type:none, space before:0.0, remove hyphenation:false, line spacing:1.100000023842, baseline shift:0.0, shadow:false, label indent:0.0, contents:"", label baseline shift:0.0, scale with text:true, italic:false, first line indent:0.0, shadow offset:missing value, shadow color:missing value, following paragraph style:missing value, font size:12.0, capitalization type:normal capitalization, space after:9.0, label size:1.0, left indent:0.0, length:0, character background color:missing value, indent level:1, label image data:missing value, right indent:0.0, shadow angle:missing value, number label style:number paren zero, paragraph background color:missing value, text label string:missing value, keep with next paragraph:false, underline type:none, bold:false, alignment:justify, shadow opacity:missing value, character offset:347213, shadow blur:missing value, start new page:false, line spacing type:relative, ligatures:default ligatures, outline:false, hidden:false, keep lines together:false, font name:"Baskerville-Bold", strikethrough type:none, containing page:page 107 of document id 2665486 of application "Pages", tracking:0.0}

Character offset ist dabei wohl die Position des Zeichens, oder? Die Frage ist nur, wie kann ich das in eine Variable bekommen?
 
Hmm, ich habe jetzt mit
set Startposition to (get selection of document 1)
die Position des markierten Zeichens ermittelt, bekomme aber einen längeren Variableninhalt:

character 279578 of body text of document id 2665486 of application "Pages"​

Die Zeichenposition „279578“ hätte ich gerne als Zahl isoliert in einer Variable stehen. Dann könnte ich mit einem Befehl wie diesem meinen Bereich markieren:

select text from character Startposition to character Endposition of body text of document id 2665486 of application "Pages"
 
Zuletzt bearbeitet:
Nanu? Weiß keiner wie man die Zahl aus der Variable ausliest?!? :-/
 
Zuletzt bearbeitet:
Ah, danke, ich werde das mal studieren. :)

Nachtrag: Es ist nicht ganz das was ich suche. Eigentlich muss ich nur noch die Nummer aus der Variablen extrahieren (siehe oben). Den Rest habe ich dann.
 
Zuletzt bearbeitet:
...

Hallo uhlhorn,

in den Standard Additions gibt es den Befehl offset

Code:
tell application "Pages"
	activate
	try
		set derText to contents of document 1
		set Startposition to (offset of "„" in derText)
		set Endposition to (offset of "“" in derText)
		select text from character Starposition to character Endposition of body text of document 1 of application "Pages"
	end try
end tell

Gruß Andi
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: uhlhorn
Andi, ich danke Dir. :)
Aber es wählt immer das erste Zeichen im Text und nicht das erste Zeichen ab Coursor-Position.
Außerdem wird irgend ein Text markiert, aber nicht der Text von „ nach “. Da gibt es wohl ein Problem mit dem Offset. Das liegt wahrscheinlich am automatischen Inhaltsverzeichnis oder am Layoutumbruch. Das wird mal mitgezählt, mal nicht – oder so.

Aber der Ansatz ist schon gut. Ich werde damit mal weiter experimentieren.

Das Script wählt einen Bereich aus von 273 Zeichen. Mein erster Block mit einer wörtlichen Rede ist aber 560 Zeichen lang. Außerdem wird ein Text mit 225 zu früh markiert. :-/ Bug in Pages?
 
Zuletzt bearbeitet:
Hallo uhlhorn,

tut mir leid - ich verwende "englische Variablen" ich hatte es zu spät bemerkt ist quick&dirty ;)
Komplizierte Layouts habe ich jetzt nicht testen können...

Gruß Andi
 
Kein Problem. ;-)

Wenn man try heraus nimmt, bekommt man ja eine brauchbare Fehlermeldung und kann es so korrigieren.

Aber vielleicht kann ich ja mit dem Offset-Befehl den Wert meiner Variable oben auslesen. Dann wäre ich am Ziel. ;-)
Ich muss das heute Abend mal probieren.
 
Zurück
Oben Unten