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

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

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

crashtron
Beiträge gesamt: 29

27. Jun 2006, 16:23
Beitrag # 1 von 31
Bewertung:
(7991 mal gelesen)
URL zum Beitrag
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
X

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

Martin Fischer
  
Beiträge gesamt: 12814

27. Jun 2006, 16:38
Beitrag # 2 von 31
Beitrag ID: #236450
Bewertung:
(7979 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#236448]

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

crashtron
Beiträge gesamt: 29

28. Jun 2006, 09:37
Beitrag # 3 von 31
Beitrag ID: #236528
Bewertung:
(7955 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#236450]

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

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 09:52
Beitrag # 4 von 31
Beitrag ID: #236531
Bewertung:
(7947 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236528]

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

crashtron
Beiträge gesamt: 29

28. Jun 2006, 12:01
Beitrag # 5 von 31
Beitrag ID: #236571
Bewertung:
(7929 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236528]

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

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 12:40
Beitrag # 6 von 31
Beitrag ID: #236592
Bewertung:
(7922 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#236571]

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

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 12:41
Beitrag # 7 von 31
Beitrag ID: #236593
Bewertung:
(7920 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236571]

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

crashtron
Beiträge gesamt: 29

28. Jun 2006, 13:10
Beitrag # 8 von 31
Beitrag ID: #236603
Bewertung:
(7910 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#236593]

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

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 13:47
Beitrag # 9 von 31
Beitrag ID: #236621
Bewertung:
(7897 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#236603]

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

crashtron
Beiträge gesamt: 29

28. Jun 2006, 15:07
Beitrag # 10 von 31
Beitrag ID: #236643
Bewertung:
(7890 mal gelesen)
URL zum Beitrag
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")



als Antwort auf: [#236621]

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

Martin Fischer
  
Beiträge gesamt: 12814

28. Jun 2006, 22:42
Beitrag # 11 von 31
Beitrag ID: #236733
Bewertung:
(7857 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#236643]
(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
Beitrag # 12 von 31
Beitrag ID: #236752
Bewertung:
(7837 mal gelesen)
URL zum Beitrag
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 ...


als Antwort auf: [#236733]

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

crashtron
Beiträge gesamt: 29

29. Jun 2006, 12:52
Beitrag # 13 von 31
Beitrag ID: #236819
Bewertung:
(7820 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236752]

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

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 13:04
Beitrag # 14 von 31
Beitrag ID: #236823
Bewertung:
(7819 mal gelesen)
URL zum Beitrag
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. ;-)


als Antwort auf: [#236819]

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

crashtron
Beiträge gesamt: 29

29. Jun 2006, 14:17
Beitrag # 15 von 31
Beitrag ID: #236847
Bewertung:
(7812 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236823]

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

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 14:26
Beitrag # 16 von 31
Beitrag ID: #236855
Bewertung:
(5105 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#236847]

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

crashtron
Beiträge gesamt: 29

29. Jun 2006, 14:44
Beitrag # 17 von 31
Beitrag ID: #236859
Bewertung:
(5104 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236855]

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

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 15:11
Beitrag # 18 von 31
Beitrag ID: #236867
Bewertung:
(5097 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#236859]

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

crashtron
Beiträge gesamt: 29

29. Jun 2006, 15:47
Beitrag # 19 von 31
Beitrag ID: #236876
Bewertung:
(5092 mal gelesen)
URL zum Beitrag
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



als Antwort auf: [#236867]

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

Martin Fischer
  
Beiträge gesamt: 12814

29. Jun 2006, 16:19
Beitrag # 20 von 31
Beitrag ID: #236890
Bewertung:
(5085 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
>select contents of myDummyframe

Versuchs mal mit "select text of myDummyframe".


als Antwort auf: [#236876]

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

crashtron
Beiträge gesamt: 29

30. Jun 2006, 09:17
Beitrag # 21 von 31
Beitrag ID: #236965
Bewertung:
(5072 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#236890]

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

Martin Fischer
  
Beiträge gesamt: 12814

30. Jun 2006, 09:35
Beitrag # 22 von 31
Beitrag ID: #236972
Bewertung:
(5066 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#236965]

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

crashtron
Beiträge gesamt: 29

30. Jun 2006, 10:39
Beitrag # 23 von 31
Beitrag ID: #236987
Bewertung:
(5062 mal gelesen)
URL zum Beitrag
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



als Antwort auf: [#236972]

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

smartclip
Beiträge gesamt: 24

10. Mai 2007, 10:06
Beitrag # 24 von 31
Beitrag ID: #290731
Bewertung:
(4905 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#236733]

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

Martin Fischer
  
Beiträge gesamt: 12814

10. Mai 2007, 10:13
Beitrag # 25 von 31
Beitrag ID: #290738
Bewertung:
(4903 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#290731]

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

smartclip
Beiträge gesamt: 24

10. Mai 2007, 11:30
Beitrag # 26 von 31
Beitrag ID: #290765
Bewertung:
(4896 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#290738]

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

Martin Fischer
  
Beiträge gesamt: 12814

10. Mai 2007, 11:56
Beitrag # 27 von 31
Beitrag ID: #290776
Bewertung:
(4887 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#290765]

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

smartclip
Beiträge gesamt: 24

10. Mai 2007, 11:57
Beitrag # 28 von 31
Beitrag ID: #290777
Bewertung:
(4884 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
super + danke :)

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

j


als Antwort auf: [#290776]

Fußnoten zu Endnoten und umgekehrt

zenocosini
Beiträge gesamt: 15

5. Dez 2007, 14:50
Beitrag # 29 von 31
Beitrag ID: #325792
Bewertung:
(4787 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#236733]

Fußnoten zu Endnoten und umgekehrt

Martin Fischer
  
Beiträge gesamt: 12814

5. Dez 2007, 16:20
Beitrag # 30 von 31
Beitrag ID: #325807
Bewertung:
(4754 mal gelesen)
URL zum Beitrag
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) + "";
}
}



als Antwort auf: [#325792]

Fußnoten zu Endnoten und umgekehrt

zenocosini
Beiträge gesamt: 15

5. Dez 2007, 17:17
Beitrag # 31 von 31
Beitrag ID: #325819
Bewertung:
(935 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ganz herzlichen Dank!

Grüße
Rudi


als Antwort auf: [#325807]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
30.07.2024

Online
Dienstag, 30. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 16.07.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 30.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen Anlage von Beschnittzugaben Automatische Erzeugung der Schnittkontur Erstellung von Strichcodes, Textmarkierungen und Registrierungen ... IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix2Switch ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow