Namenliste im Buchtext indizieren

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

Re: Namenliste im Buchtext indizieren

#6589 On 6 Juli, 2007 17:46 Evangelia Stama... said,

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

Re: Namenliste im Buchtext indizieren

#6599 On 9 Juli, 2007 07:25 werkwelt said,

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

Re: Namenliste im Buchtext indizieren

#6605 On 9 Juli, 2007 14:32 "Evangelia Stamatopoulou" said,

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

Re: Namenliste im Buchtext indizieren

#6596 On 8 Juli, 2007 13:48 werkwelt said,

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--

Mit freundlichen Grüßen,
Norbert Lindenthal