Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

27. Jun 2006, 16:23
Bewertung:

gelesen: 7988

Beitrag als Lesezeichen
Hallo,

ich suche nach einer Problemlösung. Ich habe einen Text in dem bestimmte Wörter fett bzw. kursiv seinen sollen. Diese zeichnen sich aber nur dadurch aus, dass Sie am Anfang und Ende ein Zeichen haben, das den Textbereich umschließt.

Zum Beispiel mit einer Raute als Trennzeichen: "Ich bin normaler Text und #ich bin kursiver Text# und ich bin wieder normaler Text."

Jetzt möchte ich die Rauten per Script entfernen und dem Text dazwischen eine Zeichenvorlage zuweisen.

Hat vielleicht schon mal jemand ein solches Script gebastelt?

Ich dachte daran, dass man sich ja vielleicht die beiden Inseration Points der Rauten raussuchen kann und dann eine Referenz zu dem Text, der da zwischen liegt, bekommen kann. (Ich habe keine richtige Idee wie ich daran kommen kann.) Die Rauten löscht und dem Text die Zeichenvorlage zuweißt.

Danke und Gruß
Jan

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

27. Jun 2006, 16:38
Bewertung:

gelesen: 7976

Beitrag als Lesezeichen
Hallo Jan,

zwar kein AppleSkript, aber vielleicht hilft Dir auch das JavaScript Style2TextBetweenTags.js weiter: http://www.hilfdirselbst.ch/..._P205161.html#205161

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

28. Jun 2006, 09:37
Bewertung:

gelesen: 7952

Beitrag als Lesezeichen
Danke für den Link, scheint auch ganz gut zu funktionieren nur hab ich kleines weiteres Problem. Der "getagte" Text ist nicht nur normaler Fießtext sondern auch in Fußnoten und da will das Javascript nicht mehr.

Gibts dafür auch eine Lösung?

Ich fang erstmal an das in Applescript umzusetzen.

Gruß
Jan

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 09:52
Bewertung:

gelesen: 7944

Beitrag als Lesezeichen
> Der "getagte" Text ist nicht nur normaler Fießtext sondern auch in Fußnoten
> und da will das Javascript nicht mehr.

Das ist ein Bug in JavaScript, daß damit kein Zugriff auf das selection-Objekt (und andere) in Fußnoten möglich ist (siehe http://www.hilfdirselbst.ch/..._P236298.html#236298).

AppleScript ist (hier) die Lösung.
Kannst Du uns Dein AS nach Fertigstellung öffentlich zur Verfügung stellen?

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

28. Jun 2006, 12:01
Bewertung:

gelesen: 7926

Beitrag als Lesezeichen
Okay ich hab es schon relativ weit nachgebastelt.
Allerdings steh ich jetzt vor dem Problem, dass ich die Suchergebnisse habe, die ja in etwa so aussehen
Code
text from character 2046 to character 2052 of story id 170 of document "Unbenannt-1" 

und ich nicht weiß wie ich nun die Textrange vom ersten Characters des Startmarkers bis zum letzten Characters des Endmarkers erstelle.

Ich bekomme aus dem Ergebnis einfach nicht die Textstellen der einzelnen Characters raus und kann diese dann auch nicht zusammenbasteln.

Hat jemand eine Idee?

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 12:40
Bewertung:

gelesen: 7919

Beitrag als Lesezeichen
Hallo Jan,

in JS gibt es den Befehl "[Objekt].itemByRange()".
Dazu müßte es in AppleScript ein Äquivalent geben.

Wenn ich es richtig verstehe, dann ist es nicht möglich, diesem Objekt (text from character 2046 to character 2052 ...) ein Absatzformat zuzuweisen. Im schlimmsten Fall müßtest Du Dir dazu eine Schleife bauen, das von character 2046 bis character 2052 das Zeichenformat zuweist. ;-)
(Letzteres sollte als Scherz verstanden werden).

Ich habe gerade eine neue Version des ScriptDebuggers zum Test und bin von den Einblickmöglichkeiten beim Debuggen begeistert. Vielleicht komme ich der Sache damit auf die Spur.

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 12:41
Bewertung:

gelesen: 7917

Beitrag als Lesezeichen
> Ich bekomme aus dem Ergebnis einfach nicht die Textstellen der einzelnen Characters raus
> und kann diese dann auch nicht zusammenbasteln.

Frage: Was willst Du eigentlch zusammenbasteln?
Ich dachte, Du möchtest dem Objekt ein Zeichenformat zuweisen - oder nicht?

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

28. Jun 2006, 13:10
Bewertung:

gelesen: 7907

Beitrag als Lesezeichen
ich will die Angabe der Textstelle, welcher ich das Zeichenformat zuweisen will, zusammenbasteln aus den Suchergebnissen der Start und Endmarker. Ich habe ja ein Ergebniss für das den Startmarker, das so aussieht
Code
text from character 1902 to character 1907 of story id 170 of document "Unbenannt-1" 

und für den Endmarker so
Code
text from character 2046 to character 2052 of story id 170 of document "Unbenannt-1" 


Jetzt will ich ja aber dem Text zwischen diesen Markern ein Zeichenformat zuweisen, also bräuchte ich
Code
text from character 1902 to character 2052 of story id 170 of document "Unbenannt-1" 

als Referenz dazu und da weiß ich nicht wie ich das "zusammenbasteln" soll.

Im JavaScript ist das so gelöst
Code
st.characters.itemByRange(start[myCounter].index, stop[myCounter].index).appliedCharacterStyle=app.activeDocument.characterStyles.item(myCharacterStyle.name); 


Ich hoffe man versteht es jetzt

Gruß
Jan

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 13:47
Bewertung:

gelesen: 7894

Beitrag als Lesezeichen
Hallo Jan,

ja, ich glaube, ich habe Dein Problem verstanden.
Aber ich finde im Moment das Äquivalent in AS zu itemByRange von JS nicht.

Über "index of character 1 of item i of [Ergebnis]" kommst Du an die Position vom ersten Zeichen der Fundstelle (ggf. mit der story [parent story of item 1 of Ergebnsi] ergänzen).

Damit wäre ein text range aufgelöst in einen Einfügepunkt.
Aber wie läßt sich aus zwei verschiedenen Einfügepunkten in einer story ein range-Objekt herstellen, dem man ein Zeichenformat zuweisen kann?

"text from character x of myStory to character y of myStory" geht nicht, da dieser Befehl interpretiert wird und den Inhalt des range-Objektes liefert. Es müßte irgendwas mit "character x thru character y" sein.

Komm da aber grad auch nicht mehr weiter.

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

28. Jun 2006, 15:07
Bewertung:

gelesen: 7887

Beitrag als Lesezeichen
So ich hab mein Script erstmal so weit fertig gebastelt, allerdings ist es wegen der repeat Schleife ein bisschen lahm und es funktioniert leider noch nicht mit Fussnoten, was ich übrigens unbedingt benötige. Vielleicht hast du da ja noch ne Idee?!

Ich hab übrigens ein array myWorkList in der man mehrere Tags und dazugehöriges Zeichenformat definieren kann, die dann abgearbeitet werden.

Gruß
Jan

Code
property myWorkList : {{myStartMarker:"<fett>", myEndMarker:"</fett>", myCharacterStyle:"starke-betonung"}, ¬ 
{myStartMarker:"<kursiv>", myEndMarker:"</kursiv>", myCharacterStyle:"betonung"}}
property myOldFindAttributes : ""
property myOldChangeAttributes : ""
property myStart : ""
property myEnd : ""

on setmydocument()
try
tell application "Adobe InDesign CS2"
set myDocument to active document
end tell
on error
display dialog "Es ist kein Indesign Dokument geöffnet. Script wird beendet." buttons ("OK")
set myDocument to false
end try
return myDocument
end setmydocument

on showdialog(myText)
display dialog myText
end showdialog

on switchUserInteractMode(myStatus)
tell application "Adobe InDesign CS2"
if myStatus is "never" then
-- Turn off user interaction to avoid dialogs
set user interaction level of script preferences to never interact
else if myStatus is "all" then
-- Revert user interaction
set user interaction level of script preferences to interact with all
end if
end tell
end switchUserInteractMode

on setfindpref(myVar)
tell application "Adobe InDesign CS2"
if myVar is false then
--store find/change preferences
set myOldFindAttributes to properties of find preferences
set myOldChangeAttributes to properties of change preferences
end if
if myVar is true then
--restore find/change preferences
set properties of find preferences to myOldFindAttributes
set properties of change preferences to myOldChangeAttributes
end if
end tell
end setfindpref

on clrfindpref()
tell application "Adobe InDesign CS2"
set find preferences to nothing
set change preferences to nothing
end tell
end clrfindpref

on getCharacterstyleRef(myDocument, myStylename)
tell application "Adobe InDesign CS2"
tell myDocument
set myStyles to every character style
repeat with myStyle in myStyles
if name of myStyle is myStylename then return myStyle
end repeat
end tell
end tell
return false
end getCharacterstyleRef

on findTextQuantity(myDocument, myFindtext)
tell application "Adobe InDesign CS2"
tell myDocument
set mySearch to search with find attributes {find text:myFindtext}
return mySearch
end tell
end tell
end findTextQuantity

on setRangeCharcter(myDocument, myStart, myEnd, myCharacterStyleRef)
tell application "Adobe InDesign CS2"
tell myDocument
set myStory to parent of myStart
set myStartPos to index of first character of myStart
set myEndPos to index of last character of myEnd
repeat with i from myStartPos to myEndPos by 1
set applied character style of character i of myStory to myCharacterStyleRef
end repeat
end tell
end tell
end setRangeCharcter

on findandreplace(myDocument, myFindtext, myChangeText)
tell application "Adobe InDesign CS2"
tell myDocument
search for myFindtext replacing with myChangeText
my clrfindpref()
end tell
end tell
end findandreplace

--Main
--Init-Process
switchUserInteractMode("never")
setfindpref(false)
clrfindpref()

set myDocument to setmydocument()

repeat with myWorklistItem in myWorkList

-- Namen der Marker
set myStartMarker to myStartMarker of myWorklistItem
set myEndMarker to myEndMarker of myWorklistItem

set myCharacterStyle to myCharacterStyle of myWorklistItem -- Name des Zeichenformats

set myCharacterStyleRef to getCharacterstyleRef(myDocument, myCharacterStyle)
if myCharacterStyleRef is not false then
-- do script
set myStart to findTextQuantity(myDocument, myStartMarker)
set myEnd to findTextQuantity(myDocument, myEndMarker)
if (count of myStart) is greater than 0 and (count of myStart) is (count of myEnd) then
-- do change
repeat with i from 1 to count of myStart by 1
setRangeCharcter(myDocument, item i of myStart, item i of myEnd, myCharacterStyleRef)
end repeat
findandreplace(myDocument, myStartMarker, "")
findandreplace(myDocument, myEndMarker, "")
else
if (count of myStart) is 0 and (count of myEnd) is 0 then
set myInfotext to "Der Text ist nicht dem Tag \"" & myStartMarker & "\" versehen."
showdialog(myInfotext)
else
showdialog("Es gibt eine ungleiche Anzahl von Start- und Endtags, bitte überprüfen Sie ihre Daten")
end if
end if
else
set myInfotext to "Das Zeichenformat \"" & myCharacterStyle & "\" existiert nicht"
showdialog(myInfotext)
end if

end repeat

showdialog("Done")

--Restore-Process
setfindpref(true)
switchUserInteractMode("all")

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 22:42
Bewertung:

gelesen: 7854

Beitrag als Lesezeichen
Hallo Jan,

da hast Du Dir ne Menge Mühe gegeben und dann bremst Dich die Sache mit den Fußnoten doch noch aus. Nach den Irritierungen der letzten Tage ist es mir fast eine Erleichterung, daß AppleScript offensichtlich auch Probleme mit dem Zugriff auf diverse Objekte in den Fußnoten hat, wenn auch deutlich weniger als JavaScript.

Hatte ich Dich nicht darauf hingewiesen, daß die Schleife über die Zeichen zur Zuweisung als Scherz aufzufassen sei? ;-)
Du kannst die Ausführungsgeschwindigkeit etwas steigern, wenn Du auf diese Schleife verzichtest. Tausche dafür folgende Zeilen
Code
repeat with i from myStartPos to myEndPos by 1 
set applied character style of character i of myStory to myCharacterStyleRef
end repeat

durch diese Zeile aus:
Code
set applied character style of characters myStartPos thru myEndPos of myStory to myCharacterStyleRef 


Das Fußnotenproblem konnte ich innerhalb Deines AppleScripts nicht lösen.
Ich habe - mit Ausnahme der Überprüfung des Absatzformats - keine Möglichkeit gefunden, festzustellen, ob die gefundenen Zeichen sich in einer Fußnote befinden.
Ferner habe ich keine Möglichkeit gefunden, den Text der Fußnote, in der die Tags gefunden worden sind, in einen temporären Textrahmen zu verschieben, um sie dort bearbeiten zu lassen, weil ich aus der Fußnote selbst das Fußnotenobjekt nicht zu fassen bekomme.

Allerdings habe ich mit dem Skript [b]notes2text.jsx von [b]Peter Kahrel einen Weg gefunden, das Problem mit etwas Mut zu umschiffen:
Das Skript wandelt im aktiven Dokument sämtliche Fußnoten in Text um (hängt sie ans Ende der Textflüsse).
Danach kannst Du "fußnotenempfindliche" Skripte, wie Dein obiges AS ablaufen lassen.
Anschließend lassen sich mit demselben Skript die Fußnoten in Textform wieder in richtige Fußnoten umwandeln.
Über einen Dialog kannst Du wählen, ob Du die Fußnoten in Text oder umgekehrt konvertieren willst.

Code
// notes2text.jsx 
//DESCRIPTION: Converts footnotes of every story to text or back text to footnotes

// An InDesign CS2 script from Peter Kahrel
// with some adjustments and additions (Dialog to select the operation,
// considering every story but only the selected one) by Martin Fischer

//some global constants
notecueStyle = 'Fußnotenzeichen' //cues, char. style
notenumStyle = 'Fußnotenzeichen' //note number (in foot- and in endnotes), char. style
noteStyle = 'FN' //for notes, paragraph style
notePar1Style = 'FN' //for first paragraph in note, par. style
sepText = '\u2002' //separator text in notes
noteStart = '\u2704' //codes for notes when
noteEnd = '\u2705' //placed at end of story
u = undefined
//---------------------------------------------------------------------

var myResult = myDialog();
var myStories = app.documents[0].stories;
for (oneStory = 0; oneStory < myStories.length; oneStory++)
{
if (myResult == "notes2Text")
notes2text( myStories[oneStory] )
else text2Footnotes(myStories[oneStory])
}

function notes2text( theStory )
{
app.findPreferences = app.changePreferences = null
var notes = theStory.search( '^F' )
if( notes.length > 0 )
{
app.activeDocument.footnoteOptions.separatorText = ''
app.activeDocument.footnoteOptions.markerPositioning =
FootnoteMarkerPositioning.normalMarker
for( var j = 0; j < theStory.footnotes.length; j++ )
{
theStory.insertionPoints[-1].contents = '\r' + noteStart
theStory.footnotes[j].texts[0].move(
LocationOptions.after, theStory.insertionPoints[-1] )
theStory.insertionPoints[-1].contents = noteEnd
}
//must refresh 'notes'
var notes = theStory.search( '^F' )
for( var j = theStory.footnotes.length-1; j > -1; j-- )
notes[j].insertionPoints[0].contents = '</cue>'
theStory.search( '^F', false, false, '' )
}
}

//-----------------------------------------------------------------------

function text2Footnotes(theStory)
{
app.findPreferences = app.changePreferences = null
var cues = theStory.search( '</cue>' )
if( cues.length > 0 )
{
doNoteStyles()
var nStart = theStory.search( noteStart, false, true )
//var story = cues[0].parentStory
theStory.paragraphs.itemByRange(
nStart[0].paragraphs[0],
theStory.paragraphs[-1] ).applyStyle
( pStyles.item( noteStyle ), false )
//apply notePar1Style to first paragraph of each note
for( var j = nStart.length-1; j > -1; j-- )
nStart[j].paragraphs[0].applyStyle
( pStyles.item( notePar1Style ), false )

with( app.activeDocument.footnoteOptions )
{
footnoteTextStyle = pStyles.item( notePar1Style )
separatorText = sepText
footnoteMarkerStyle = chStyles.item( notecueStyle )
markerPositioning = FootnoteMarkerPositioning.normalMarker
}
for( var j = cues.length-1; j > -1; j-- )
var fn = cues[j].insertionPoints[0].footnotes.add()
var nStart = theStory.search( noteStart, false, true )
var nEnd = theStory.search( noteEnd, false, true )
for( var j = cues.length-1; j > -1; j-- )
theStory.characters.itemByRange( nStart[j], nEnd[j] ).move
( LocationOptions.after, theStory.footnotes[j].insertionPoints[-1] )
theStory.search( '</cue>', false, true, '' )
//delete placeholdres
theStory.search( noteStart, u, u, '' )
theStory.search( noteEnd, u, u, '' )
//mop up stray hard returns
while( theStory.characters[-1].contents == '\r' )
theStory.characters[-1].remove()
}
}

//--------------------------------------------------------------------------

//create some styles for notes
function doNoteStyles()
{
chStyles = app.activeDocument.characterStyles
if( chStyles.item( notecueStyle ) == null )
chStyles.add( { name : notecueStyle, position : Position.superscript } )
if( chStyles.item( notenumStyle ) == null )
chStyles.add( { name : notenumStyle } )
pStyles = app.activeDocument.paragraphStyles
if( pStyles.item( noteStyle ) == null )
pStyles.add( {
name : noteStyle,
basedOn : pStyles.item('[Basic Paragraph]') } )
if( pStyles.item( notePar1Style ) == null )
{
var temp = pStyles.add( {
name : notePar1Style,
basedOn : pStyles.item( noteStyle ) } )
with( temp.nestedStyles.add() )
{
appliedCharacterStyle = chStyles.item( notenumStyle )
delimiter = NestedStyleDelimiters.anyWord
inclusive = true
}
}
}

//-----------------------------------------------------------------------

function myDialog(myDefaultPara01,myDefaultPara02)
{
var myDialog = app.dialogs.add({name:"Operation"});
var theChoice = ["notes2Text", "text2Footnotes"];
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Choice:"});
}
with(dialogColumns.add()){
var myChoiceDropdown = dropdowns.add({stringList:theChoice, selectedIndex:0});
}
}
}
var theResult = myDialog.show();
if(theResult == true){
var theOpera = theChoice[myChoiceDropdown.selectedIndex]
myDialog.destroy();
}
else{
myDialog.destroy();
exit();
}
return theOpera;
}

Wäre das jetzt nicht eine neue Herausforderung für Dich, auch dieses Skript nach AppleScript zu übersetzen? ;-)

Viel Spaß
Martin

(Dieser Beitrag wurde von Martin Fischer am 10. Mai 2007, 11:45 geändert)

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 08:06
Bewertung:

gelesen: 7834

Beitrag als Lesezeichen
Hallo Jan,

noch schneller als mit meiner oben favorisierten Zeile geht die Zuweisung mit folgender Zeile:
Code
set applied character style of text from character myStartPos to character myEndPos of myStory to myCharacterStyleRef 


Bei dieser Zeile wird das Zeichenformat auf einen Schlag dem Text von Zeichen myStartPos bis myEndPos zugewiesen. Bei der zuvor genannten Zeile hat sich nur der Programmierer Zeit und Codezeilen gespart: die Zuweisung des Zeichenformats erfolgte wie in Deiner Schleife Zeichen für Zeichen ...

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

29. Jun 2006, 12:52
Bewertung:

gelesen: 7817

Beitrag als Lesezeichen
Zitat Ich habe - mit Ausnahme der Überprüfung des Absatzformats - keine Möglichkeit gefunden, festzustellen, ob die gefundenen Zeichen sich in einer Fußnote befinden.


Kannst du mir sagen, wie du das Absatzformat des Characters ausgelesen hast?

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 13:04
Bewertung:

gelesen: 7816

Beitrag als Lesezeichen
Hallo Jan,

habe ich noch nicht, aber es müßte so ähnlich wie bei einer Auswahl funktionieren:
Code
set myStyle to applied paragraph style of character 1 of selection 


Tut es das nicht?

Alternativ müßte man den Text kurfristig in einen temporären Textrahmen verschieben, dort auslesen und hinterher wieder an die alte Stelle reinschieben. ;-)

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

29. Jun 2006, 14:17
Bewertung:

gelesen: 7809

Beitrag als Lesezeichen
Ich verfolge jetzt nocheinmal einen bisschen anderen Weg. Ich erstelle die Fussnoten ja sowieso automatisch aus XML Daten im gleich Zug änder ich nun die "getagten" Texte. Problem was ich ist, dass folgendes nicht funktioniert:
Code
set contents of last insertion point of myNewfootnote to contents of myDummyframe 


Wie kopiert man am elegantesten formatierten Text von einem Frame in eine Fussnote?

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 14:26
Bewertung:

gelesen: 5104

Beitrag als Lesezeichen
Kopieren geht nur über die Zwischenablage.
Verschieben geht über den move-Befehl.

Wenn der gesamte Inhalt des Textrahmens kopiert werden soll, dann kannst Du auch den Textrahmen duplizieren, vom Duplikat den Text verschieben und anschließend den duplizierten Textrahmen wieder löschen.

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

29. Jun 2006, 14:44
Bewertung:

gelesen: 5103

Beitrag als Lesezeichen
Irgendwie bin ich zu blöd dafür

Code
on makeFootnote(myDocument, myInsertion, myText, myparagrahStyleRef) 
with timeout of 600 seconds
tell application "Adobe InDesign CS2"
tell myDocument
tell text frame "Maintextframe"
tell myInsertion
set myDummyframe to make text frame with properties {label:"dummy", contents:myText, paragraph style:myparagrahStyleRef}
end tell
my PlaintextTags2Style(myDocument, myDummyframe)
set myNewfootnote to make new footnote with properties {label:"autofussnote"} at myInsertion
move (contents of myDummyframe) to (contents of last insertion point of myNewfootnote)
end tell
end tell
end tell
end timeout
end makeFootnote


Was ist falsch? Ich bekomme eine Fehlermeldung:
Zitat Adobe InDesign CS2 got an error: Ungültiger Wert für Parameter "to" von Ereignis "move". list of 2 numbers or strings, spread, page or layer erwartet, aber "" erhalten.


Gehts vielleicht über die Zwischenablage? Wenn ja wie?

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 15:11
Bewertung:

gelesen: 5096

Beitrag als Lesezeichen
> move (contents of myDummyframe) to (contents of last insertion point of myNewfootnote)

Laß mal "contents" weg, denn contents ist kein Ziel für move.
Der "Insertionpoint" müßte in Ordnung sein.
Möglicherweise reagiert eine Fußnote aber auch allergisch auf den move-Befehl.

> Gehts vielleicht über die Zwischenablage? Wenn ja wie?
In AppleScript?
Lange her, daß ich den Befehl in AS gebraucht habe.

In JS:
1. myObject.select();
2. app.copy();
3. myTarget.select() // wobei myTarget so etwas wie myStory.insertionPoints[-1] sein kann.
4. app.paste();
5. ggf. wieder myObject.select(), um den Cursor wieder an der Ausgangsposition zu platzieren.

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

29. Jun 2006, 15:47
Bewertung:

gelesen: 5091

Beitrag als Lesezeichen
Ok ich hab es fast... nur noch ein Problemchen, Indesign markiert nicht den Text innerhalb des Textframes sonder immer den ganzen Textframe und kopiert diesen auch ganz und setzt diesen dann auch als Textframe in die Fusszeile ein.

Code
on makeFootnote(myDocument, myInsertion, myText, myparagrahStyleRef) 
with timeout of 600 seconds
tell application "Adobe InDesign CS2"
tell myDocument
set myDummyframe to make text frame with properties {label:"dummy", contents:myText, paragraph style:myparagrahStyleRef}
my PlaintextTags2Style(myDocument, myDummyframe)

set myNewfootnote to make new footnote with properties {label:"autofussnote"} at myInsertion

select contents of myDummyframe
tell application "Adobe InDesign CS2"
copy
end tell
select last insertion point of myNewfootnote
tell application "Adobe InDesign CS2"
paste
end tell
end tell
end tell
end timeout
end makeFootnote

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 16:19
Bewertung:

gelesen: 5084

Beitrag als Lesezeichen
>select contents of myDummyframe

Versuchs mal mit "select text of myDummyframe".

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

30. Jun 2006, 09:17
Bewertung:

gelesen: 5071

Beitrag als Lesezeichen
Geht leider nicht ich bekomm dann beim "copy"-Befehl eine Fehlermeldung, dass das Objekt nur kopiert werden kann. Noch eine Idee?

Wie müsste das denn korrekt mit dem "move"-Befehl gehen?

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

30. Jun 2006, 09:35
Bewertung:

gelesen: 5065

Beitrag als Lesezeichen
> Geht leider nicht ich bekomm dann beim "copy"-Befehl eine Fehlermeldung,
> dass das Objekt nur kopiert werden kann.

Das verstehe ich nicht.
Was hast Du erwartet, was man mit dem copy-Befehl macht oder zusätzlich machen kann?
"Copy" kopiert das ausgewählte Objekt in die Zwischenablage. Nicht mehr und nicht weniger.
Vielleicht solltest Du prüfen, ob tatsächlich das richtige Objekt ausgewählt ist und nicht viel mehr ein "undefined".

Bin heute etwas geizig mit der Zeit und versuche ... - wann?, ja wann? - die nächsten Tage Dein Skript etwas genauer unter die Lupe zu nehmen. Vielleicht kannst Du mir dazu die aktuelle Fassung (darf auch gerne die Fassung von morgen früh sein) an meine email-Adresse zustellen, damit ich mit diesem letzten Stand weiter experimentieren kann.

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

crashtron
Beiträge gesamt: 29

30. Jun 2006, 10:39
Bewertung:

gelesen: 5061

Beitrag als Lesezeichen
Juhu!!!

Ich danke dir für deine Hilfe!
Es funktioniert jetzt alles.

select text of myDummyframe funktioniert doch, wie du sagtest, allerdings nur dann wenn der Inhalt des Frames auch sichtbar ist auf der Seite in Indesign. In meinem Falle war der DummyTextframe einfach zu klein. Ich hab jetzt die Größe geändert und es funktioniert wie es soll.

Code
on makeFootnote(myDocument, myInsertion, myText, myparagrahStyleRef) 
with timeout of 600 seconds
tell application "Adobe InDesign CS2"
tell myDocument
set myDummyframe to make text frame with properties {label:"dummy", contents:myText, geometric bounds:{0, 0, 200, 200}}
set applied paragraph style of text of myDummyframe to myparagrahStyleRef
my PlaintextTags2Style(myDocument, myDummyframe)
set myNewfootnote to make new footnote with properties {label:"autofussnote"} at myInsertion
select text of myDummyframe
tell application "Adobe InDesign CS2"
copy
end tell
select last insertion point of myNewfootnote
tell application "Adobe InDesign CS2"
paste
end tell
delete myDummyframe
end tell
end tell
end timeout
end makeFootnote

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

smartclip
Beiträge gesamt: 24

10. Mai 2007, 10:06
Bewertung:

gelesen: 4904

Beitrag als Lesezeichen
hallo martin,

bin gerade über dein notes2text script gestolpert, da es perfekt mein problem lösen würde ... allerdings bekomme ich es nicht zum laufen. vermute es hängt damit zusammen das ich die constanten am anfang nicht richtig gesetzt habe ... könnte ich dazu noch etwas mehr infos bekommen?

Code
//some global constants   
notecueStyle = 'Fußnotenzeichen' //cues, char. style
notenumStyle = 'Fußnotenzeichen' //note number (in foot- and in endnotes), char. style
noteStyle = 'FN' //for notes, paragraph style
notePar1Style = 'FN' //for first paragraph in note, par. style
sepText = '\u2002' //separator text in notes
noteStart = '\u2704' //codes for notes when
noteEnd = '\u2705' //placed at end of story


danke julia

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

10. Mai 2007, 10:13
Bewertung:

gelesen: 4902

Beitrag als Lesezeichen
Hallo Julia,

hm, die notwendigen Infos sind in dem von Dir zitierten Block eigentlich angegeben.
Namen für Zeichen- und Absatzformate (Fußnotenziffer, Fußnotentext).

Könnte ich von Dir etwas mehr Info zum Problem bekommen?
Etwa die Fehlermeldung?

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

smartclip
Beiträge gesamt: 24

10. Mai 2007, 11:30
Bewertung:

gelesen: 4895

Beitrag als Lesezeichen
hi martin,

naja es gibt keine fehlermeldung ... es passiert einfach nichts :)

Code
//cues, char. style = im Text, Fußnotenverweis-Nummer Zeichenformat?  
notecueStyle = 'Bold'

//note number (in foot- and in endnotes), char. style = in Fußnote, Verweis-Nummer Zeichenformat? was sind endnotes?
notenumStyle = 'Bold'

//for notes, paragraph style = in Fußnote, ganzer Text Absatzformat?
noteStyle = 'theorie_fussnote'

//for first paragraph in note, par. style = ?
notePar1Style = 'theorie_lesetext'

//separator text in notes = ?
sepText = '\u2002'
//codes for notes when = ?
noteStart = '\u2704'
//placed at end of story = ?
noteEnd = '\u2705'

// = ?
u = undefined


mir ist einfach nicht klar welche formate ich genau wo zuweisen muss damit die logic des script greift. siehe meine kommentare

danke

Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

Martin Fischer
  
Beiträge gesamt: 12814

10. Mai 2007, 11:56
Bewertung:

gelesen: 4886

Beitrag als Lesezeichen
Hallo Julia,

es tut mir leid, aber in dem Skript oben war ein Fehler (ist jetzt korrigiert). :-(

Ersetze die Zeile
Code
for (oneStory =1; oneStory < myStories.length; oneStory++) 


durch
Code
for (oneStory = 0; oneStory < myStories.length; oneStory++) 


Das Skript hat in der fehlerhaften Fassung den ersten Textabschnitt bei der Bearbeitung ausgelassen und erst mit dem zweiten (wenn vorhanden) angefangen (JavaScript fängt bei 0 an zu zählen).

Deine Definitionen müßten in Ordnung sein.
Ich kann dort keine Fehler finden.

Viele Grüße
Martin


Appleskript zur Suche und Änderung von Wörtern anhand von Haltemarken

smartclip
Beiträge gesamt: 24

10. Mai 2007, 11:57
Bewertung:

gelesen: 4883

Beitrag als Lesezeichen
super + danke :)

hab mich noch gewundert, warum da eine 1 steht.
script geht jetzt.

j

Fußnoten zu Endnoten und umgekehrt

zenocosini
Beiträge gesamt: 15

5. Dez 2007, 14:50
Bewertung:

gelesen: 4786

Beitrag als Lesezeichen
Hallo Herr Fischer,

folgendes Skript funktionierte prima unter InDesign CS2, unter CS3 bricht es jedoch sofort mit der Fehlermeldung 55 ab, dass das Objekt die Eigenschaft oder Methode "app.findPreferences = app.changePreferences" nicht unterstützt. Gibt es eine Möglichkeit, das Skript entsprechend zu ändern? Oder gibt es vielleicht schon eine Fassung, die unter CS3 läuft? Unter http://www.hilfdirselbst.org/indesign.php bin ich leider nicht fündig geworden.


// footnotes2endnotes.js
for (oneStory = 0; oneStory <app.documents[0].stories.length; oneStory++){
notes2text(app.documents[0].stories[oneStory] )
}

function notes2text( story )
{
app.findPreferences = app.changePreferences = null
var notes = story.search( '^F' )
if( notes.length > 0 )
{
for( var k = 0; k < story.footnotes.length; k++ )
{
story.insertionPoints[-1].contents = '\\r'
story.footnotes[k].characters[0].contents = (k+1)+"";
story.footnotes[k].texts[0].move(
LocationOptions.after, story.insertionPoints[-1] )
}
var notes = story.search( '^F' )
for( var k = notes.length-1; k>=0; k--)
notes[k].contents = (k+1) + "";
}
}

Vielen Dank und herzliche Grüße
Rudi Schmitt

Fußnoten zu Endnoten und umgekehrt

Martin Fischer
  
Beiträge gesamt: 12814

5. Dez 2007, 16:20
Bewertung:

gelesen: 4753

Beitrag als Lesezeichen
Hallo Rudi,

in CS3 hat sich die Searchengine geändert.

Damit sollte es gehen:
Code
// footnotes2endnotesCS3.js 

app.findTextPreferences = app.changeTextPreferences = null;
app.findChangeTextOptions.includeFootnotes = false;
app.findTextPreferences.findWhat = '^F';

for (oneStory = 0; oneStory <app.documents[0].stories.length; oneStory++){
notes2text(app.documents[0].stories[oneStory] )
}

function notes2text( story )
{

var notes = story.findText( )
if( notes.length > 0 )
{
for ( var k = 0; k < story.footnotes.length; k++ )
{
story.insertionPoints[-1].contents = '\r'
story.footnotes[k].characters[0].contents = (k+1)+"";
story.footnotes[k].texts[0].move( LocationOptions.after, story.insertionPoints[-1] )
}
var notes = story.findText( );
for ( var k = notes.length-1; k>=0; k--)
notes[k].contents = (k+1) + "";
}
}


Viele Grüße
Martin


Fußnoten zu Endnoten und umgekehrt

zenocosini
Beiträge gesamt: 15

5. Dez 2007, 17:17
Bewertung:

gelesen: 933

Beitrag als Lesezeichen
Hallo Martin,

ganz herzlichen Dank!

Grüße
Rudi