Fazsiniert von den Möglichkeiten in RagTime 6: Kann ich (per AppleScript) Namen aus einer Textliste im Text suchen und für die Indizierung vorbereiten?
Norbert Lindenthal
Es liegt nah, folgende Strategie anzugehen. Man sucht mittels des "Suchen & Ersetzen"-Dialogs und ruft dann für die Selektion den Befehl "für Index markieren". Der "Suchen & Ersetzen"-Dialog kann aber nicht über AppleScript bedient werden, und ob für eine Textauswahl die Indexmarkierung gesetzt werden kann, bleibt noch zu forschen...
Theoretisch kann man nach einem String in einem Text mittels des "AppleScript's text item delimiter" trennen, also in diesem Fall finden. Findet man was, so ermittelt man die länge des ersten text items und da man weiss, wonach man sucht, weißt man welche Textpositionen (also character x through y of text flow xyz of document 1) für den Index markiert werden soll. ...
Da ich gerade keinen Mac zur Hand habe, kann ich nicht wissen, ob die Markierung über AppleScript geht. Daher ist am wichtigsten heraus zu finden, wie dies geht. Das Suchen der Textstelle, wo es angewendet wird, kann dann wie oben beschrieben erfolgen.
Gruß und gutes Gelingen, Evangelia
Moin, Evangelia, Dein Hinweis war sehr nützlich. So sieht eine AS-Aufnahme aus:
tell application "RagTime 6" activate select text from character 67507 to character 67512 of contents of text flow "Text 1" of document 1 make new index entry at end of document 1 with data selection end tell
Die Indizierung ist also per Skript möglich. Der RagTime-Befehl steht unter den Listenbefehlen. Nun muß ich genauer kapieren, wie das mit den »text item delimiters« läuft.
Mit freundlichen Grüßen, Norbert Lindenthal
Hat man etwas Text in einer Variable (z.B. myText) und sucht man darin nach einem anderen Text (z.B. mySearchStr), so kann man folgendes tun.
set oldDelimiter to Applescript's text item delimiter set Applescript's text item delimiters to mySearchStr get count of text items of myText -- count ist 1 falls myText einmal oder keinmal gefunden wurde. -- count ist > 1, falls es innerhalb des Textes gefunden wurde. -- count ist 2, so ist der String exakt einmal im Text und man muss diese position finden, indem man die Laenge der Zeichen des ersten text items abfragt. -- count > 2, so ist der String mehrfach im Text und hier muss man durch die text items iterieren.
set Applescript's text item delimiter to oldDelimiter
Gruss, Evangelia PS. Hab leider gerade keinen Mac zur Hand, aber vielleicht hilft die Info weiter. Mehr Info zur Applescipt's text item delimiters findet man unter:
> -------- Original-Nachricht -------- > Datum: Mon, 09 Jul 2007 08:29:03 +0200 > Von: alles > An: ragtime@macnews.de > Betreff: Re: Namenliste im Buchtext indizieren > > Moin, Evangelia, > Dein Hinweis war sehr nützlich. So sieht eine AS-Aufnahme aus: > > tell application "RagTime 6" > activate > select text from character 67507 to character 67512 of contents of > text flow "TextGut" of document 1 > make new index entry at end of document 1 with data selection > end tell > > Die Indizierung ist also per Skript möglich. Der RagTime-Befehl steht > unter den Listenbefehlen. > Nun muß ich genauer kapieren, wie das mit den »text item delimiters« > läuft. > > Mit freundlichen Grüßen, > Norbert >
-- Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kanns mit allen: http://www.gmx.net/de/go/multimessenger
Folgender Handler bedient den Menüeintrag »Für Index markieren«
--Skriptbeginn-- -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -- method "menu_click" (recursiv) provided by jacobolus (macosxhints) -- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-- ____BEISPIEL-AUFRUF {app, menubar, menu ... , submenu, ...}____ tell application "RagTime 6" to activate set input to {"RagTime 6", "Extras", "Für Index markieren"} menu_click(input) -- _____________________________________________________ on menu_click(mList) local appName, car, cdr
-- Validate our input if mList's length 1 then set cdr to (items 2 thru end of mList)
-- either actually click the menu item, or recurse again tell application "System Events" if mList's length is 1 then click parentObject's menu item car else my menu_click_recurse(cdr, (parentObject's (menu item car)'s (menu car))) end if end tell end menu_click_recurse ..Skriptende--