[GastForen Programme Print/Bildbearbeitung Adobe InDesign Zeichen interaktiv finden

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

Zeichen interaktiv finden

Gerald Singelmann
  
Beiträge gesamt: 6269

18. Sep 2007, 20:28
Beitrag # 1 von 16
Bewertung:
(66199 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi all,

mal wieder etwas aus Onkel Geralds großem Gruselkabinett... Ich gehe gerade einen Text durch, in dem der Autor nach dem Doppelpunkt immer klein weitergeschrieben hat.

Per grep kann ich das nicht beheben, da ich beim Ersetzten in InDesign keinen case-modifier habe (Die Diskussion hatten wir kürzlich. Da fiel mir kein Beispiel ein, dies ist eins).

Ich könnte nach einem Doppelpunkt suchen, aber dann ist ja der Doppelpunkt markiert und nicht das Zeichen, das ich eigentlich ändern will.

Also gibt es dieses Script, das sich leicht an andere Bedürfnisse anpassen lassen sollte:
Code
set findThese to {":"} 
tell application "Adobe InDesign CS3"
set allSel to selection
try
set aSel to item 1 of allSel
on error
return
end try
if class of aSel is character or class of aSel is insertion point then
set aStory to parent story of aSel
set n to index of aSel
set myC to ""
repeat
set n to n + 1
set myC to contents of character n of aStory
try
if myC is in findThese then exit repeat
end try
--select character n of aStory
--my showCharacter
end repeat
if contents of character (n + 1) of aStory is " " then
select character (n + 2) of aStory
else
select character (n + 1) of aStory
end if
my showCharacter()
end if
end tell

on showCharacter()
tell application "Adobe InDesign CS3"
set aSel to a reference to item 1 of selection
set aFrame to item 1 of parent text frames of aSel
if class of parent of aFrame is text then
set aFrame to first item of parent text frames of parent of aFrame
end if
repeat until class of aFrame is page or class of aFrame is document
set aFrame to parent of aFrame
end repeat
if class of aFrame is page then
set active page of layout window 1 to aFrame
set zoom percentage of layout window 1 to 200
end if
end tell
end showCharacter


Und jetzt die Frage: Wenn ich diese Zeile
Code
			try 
if myC is in findThese then exit repeat
end try

nicht in einem try-Block einfasse, bricht das Script bei jeder verankerten Grafik mit "can't turn '?' into string" ab. Klar, der content ist ja auch kein ?, sondern ein Rahmen, aber wie bekomme ich raus (wenn ichs nicht weiß), ob das wirklich ein ? ist oder ein Rahmen? Bug in der Scripting Schnittstelle?

Schönes Wochenende wünscht

Onkel Gerald :)
X

Zeichen interaktiv finden

Gerald Singelmann
  
Beiträge gesamt: 6269

18. Sep 2007, 20:44
Beitrag # 2 von 16
Beitrag ID: #313090
Bewertung:
(66118 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und schon die erste Abwandlung...
Diese Version markiert den nächsten Text, der in Anführungsstrichen steht. Zum Start muss der Cursor blinken, es sollte nichts markiert sein.

Code
set startWith to {"»"} 
set endWith to {"«"}

tell application "Adobe InDesign CS3"
set allSel to selection
try
set aSel to item 1 of allSel
on error
return
end try
if class of aSel is character or class of aSel is insertion point then
set aStory to parent story of aSel
set n to index of aSel
set myC to ""
repeat
set n to n + 1
set myC to contents of character n of aStory
try
if myC is in startWith then exit repeat
end try
end repeat
set myStart to n
repeat
set n to n + 1
set myC to contents of character n of aStory
try
if myC is in endWith then exit repeat
end try
end repeat
set myEnd to n
select text from character myStart to character myEnd of aStory
my showCharacter(a reference to character myStart of aStory)
end if
end tell

on showCharacter(aChar)
tell application "Adobe InDesign CS3"
set aFrame to item 1 of parent text frames of aChar
if class of parent of aFrame is text then
set aFrame to first item of parent text frames of parent of aFrame
end if
repeat until class of aFrame is page or class of aFrame is document
set aFrame to parent of aFrame
end repeat
if class of aFrame is page then
set active page of layout window 1 to aFrame
set zoom percentage of layout window 1 to 200
end if
end tell
end showCharacter



als Antwort auf: [#313088]

Zeichen interaktiv finden

kkauer
Beiträge gesamt: 661

19. Sep 2007, 21:42
Beitrag # 3 von 16
Beitrag ID: #313292
Bewertung:
(66068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ist zwar keine direkte Antwort auf die Frage, aber das Durchsteppen aller Zeichen ist doch ohnehin viel zu träge. Warum holen Sie die Doppelpunkt-Referenzen nicht via Skript-Suche und testen ab Referenzliste das/die Folgezeichen?

Karsten


als Antwort auf: [#313088]

Zeichen interaktiv finden

Gerald Singelmann
  
Beiträge gesamt: 6269

19. Sep 2007, 21:57
Beitrag # 4 von 16
Beitrag ID: #313295
Bewertung:
(66064 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Es ist nicht ansatzweise "viel zu träge". Die Warte-Zeiten bis zum nächsten Vorkommnis liegen bei ein, maximal zwei Sekunden, was bei diesem interaktiven Vorgehen mehr als akzeptabel ist. Das über Suchen-Ersetzen zu lösen wäre ein Kanonen auf Spatzen schießen, noch schlechter von CS3 auf CS2 anzupassen und komplizierter zu implementieren, vor allem wenn es darum geht Variationen zu bauen wie das Suchen nach Begriffen in quotes.

Die beiden Skripte tun mit angemessenem Programmieraufwand exakt was sie sollen in einer völlig angemessenen Performance.

In etwa darum.


als Antwort auf: [#313292]

Zeichen interaktiv finden

kkauer
Beiträge gesamt: 661

19. Sep 2007, 23:24
Beitrag # 5 von 16
Beitrag ID: #313302
Bewertung:
(66042 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Aha,

wieder was gelernt! Ich habe den Einleitungstext wohl zu wörtlich genommen.
Zitat Ich gehe gerade einen Text durch, in dem der Autor nach dem Doppelpunkt immer klein weitergeschrieben hat.
Per grep kann ich das nicht beheben, da ich beim Ersetzten in InDesign keinen case-modifier habe (Die Diskussion hatten wir kürzlich. Da fiel mir kein Beispiel ein, dies ist eins).
Ich könnte nach einem Doppelpunkt suchen, aber dann ist ja der Doppelpunkt markiert und nicht das Zeichen, das ich eigentlich ändern will.

Diese Aufgabe wäre eben auch anders zu lösen.

Ihnen ging es wohl eher um das im Titel vermerkte "interaktive" Element. Da Sie jetzt auch noch Cross-Version angesprochen haben (einleitend war von GREP die Rede!) macht vielleicht auch Skript-Variante 2 irgendwie Sinn, denn diese Aufgabe ist in CS3 mit GREP bequem zu lösen.

Karsten


als Antwort auf: [#313295]

Zeichen interaktiv finden

manne
Beiträge gesamt: 99

20. Sep 2007, 07:24
Beitrag # 6 von 16
Beitrag ID: #313312
Bewertung:
(66009 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Karsten,

Antwort auf: macht vielleicht auch Skript-Variante 2 irgendwie Sinn, denn diese Aufgabe ist in CS3 mit GREP bequem zu lösen.


Oh.
Und wie?


als Antwort auf: [#313302]

Zeichen interaktiv finden

Gerald Singelmann
  
Beiträge gesamt: 6269

20. Sep 2007, 07:48
Beitrag # 7 von 16
Beitrag ID: #313316
Bewertung:
(66003 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat denn diese Aufgabe ist in CS3 mit GREP bequem zu lösen


Sicherlich, aber dann darf ich zwischen zwei grep Läufen keine andere Suche durchfühen oder ich muss jedesmal kontrollieren, ob noch der richtige grep Begriff im Suchfeld steht. Die Scriptlösung lege ich auf ein Tastaturkürzel und ich weiß, was sie tut, egal ob ich in der Zwischenzeit etwas anderes gemacht /gesucht habe oder nicht.

Auf "Wie eigentlich?":
Code
»[^«]+« 

ist der normale Ansatz


als Antwort auf: [#313302]

Zeichen interaktiv finden

Martin Fischer
  
Beiträge gesamt: 12783

20. Sep 2007, 07:55
Beitrag # 8 von 16
Beitrag ID: #313319
Bewertung:
(66000 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Eine Lösung zur nicht-interaktiven Umwandlung der Kleinbuchstaben nach einem Doppelpunkt in Großbuchstaben:

Code
// capitalizeCharAfterColon.jsx 

app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = ": [a-z]";
var myResult = app.documents[0].findGrep();
for (i = myResult.length -1; i >= 0; i--)
myResult[i].characters[-1].capitalization = Capitalization.allCaps;



als Antwort auf: [#313312]
(Dieser Beitrag wurde von Martin Fischer am 20. Sep 2007, 08:19 geändert)

Zeichen interaktiv finden

Martin Fischer
  
Beiträge gesamt: 12783

20. Sep 2007, 08:14
Beitrag # 9 von 16
Beitrag ID: #313322
Bewertung:
(65994 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Gerald,

Antwort auf: »[^«]+«


Ich steh' grad auf dem Schlauch.
Ging es nicht um die Kleinbuchstaben nach einem Doppelpunkt, die in Großbuchstaben umgewandelt werden sollten?
Mit dem Ausdruck oben findest Du Text zwischen Guillemets.
Was haben die mit den Kleinbuchstaben nach dem Doppelpunkt zu tun?


als Antwort auf: [#313316]

Zeichen interaktiv finden

Gerald Singelmann
  
Beiträge gesamt: 6269

20. Sep 2007, 09:23
Beitrag # 10 von 16
Beitrag ID: #313340
Bewertung:
(65979 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Martin, der grep macht, was das zweite Script macht. Ich hatte Karsten so verstanden, dass er sich mit seinem "das geht per grep" auf das zweite Script bezieht.
Das erste Script sollte äquivalent zu
Code
(?<=:\s)\l 

sein.


als Antwort auf: [#313322]

Zeichen interaktiv finden

kkauer
Beiträge gesamt: 661

20. Sep 2007, 12:07
Beitrag # 11 von 16
Beitrag ID: #313390
Bewertung:
(65956 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,


Zitat Es ist nicht ansatzweise "viel zu träge". Die Warte-Zeiten bis zum nächsten Vorkommnis liegen bei ein, maximal zwei Sekunden, was bei diesem interaktiven Vorgehen mehr als akzeptabel ist. Das über Suchen-Ersetzen zu lösen wäre ein Kanonen auf Spatzen schießen, noch schlechter von CS3 auf CS2 anzupassen und komplizierter zu implementieren, vor allem wenn es darum geht Variationen zu bauen wie das Suchen nach Begriffen in quotes.


Ich emfinde es als sehr träge. Ist ja auch klar, da ja alle Zeichen nacheinander abgeklappert werden. Meine Anmerkung ging in diese Richtung.

Code
set findThese to ":" 
tell application "Adobe InDesign CS2"
set version of script preferences to 4.0
set allSel to selection
try
set aSel to item 1 of allSel
on error
return
end try
if class of aSel is character or class of aSel is insertion point then
set aStory to parent story of aSel
set n to index of aSel
-- -- -- --
set sScope to object reference of text from character n to character -1 of aStory
(*CS2*)
set find preferences to nothing
set foundThose to search sScope for findThese
tell aStory
repeat with i in foundThose
set nIDX to (index of i)
if character (nIDX + 1) is " " then
select character (nIDX + 2) of aStory
else
select character (nIDX + 1) of aStory
end if
my showCharacter()
exit repeat
end repeat
end tell
-- -- -- --
end if
end tell

on showCharacter()
tell application "Adobe InDesign CS2"
set aSel to a reference to item 1 of selection
set aFrame to item 1 of parent text frames of aSel
if class of parent of aFrame is text then
set aFrame to first item of parent text frames of parent of aFrame
end if
repeat until class of aFrame is page or class of aFrame is document
set aFrame to parent of aFrame
end repeat
if class of aFrame is page then
set active page of layout window 1 to aFrame
set zoom percentage of layout window 1 to 200
end if
end tell
end showCharacter


Dieses Skript läuft deutlich schneller und wird auch durch verankerte Rahmen nicht beeinträchtigt. Um das Skript in CS2 und CS3 zu nutzen kann der Kompatabilitätsmodus gewählt werden oder das Ermitteln der Fundstellen mittels eines (nicht nach Javascript portierbaren) Konstrukts wie
Code
set foundThose to {} 
try
set foundThose to object reference of every character of sScope whose contents is findThese
end try

erfolgen. Wobei bei Einsatz von CS3 natürlich auch innerhalb eines Skripts die GREP-Suche gegebenenfalls weitere Vorteile bringt.

Karsten


als Antwort auf: [#313295]

Zeichen interaktiv finden

Marco Morgenthaler
Beiträge gesamt: 2474

20. Sep 2007, 18:06
Beitrag # 12 von 16
Beitrag ID: #313457
Bewertung:
(65913 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald

Warum nicht mit deinem GREP-Code nach einem Kleinbuchstaben nach Doppelpunkt suchen und im Format ersetzen: Grossbuchstaben auswählen (s. Screenshot)?

Gruss Marco


als Antwort auf: [#313340]
Anhang:
Grossbuchstabe.png (79.6 KB)

Zeichen interaktiv finden

Martin Fischer
  
Beiträge gesamt: 12783

20. Sep 2007, 18:09
Beitrag # 13 von 16
Beitrag ID: #313458
Bewertung:
(65910 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Marco,

manche Dinge sind so naheliegend, daß man dafür die Brille absetzen muß.
Klasse!


als Antwort auf: [#313457]

Zeichen interaktiv finden

kkauer
Beiträge gesamt: 661

20. Sep 2007, 18:58
Beitrag # 14 von 16
Beitrag ID: #313465
Bewertung:
(65901 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marco,

das geht zwar, die Änderung ist aber eben "nur" ein Zeichenattribut und keine "echte" Textänderung.

Karsten


als Antwort auf: [#313457]

Zeichen interaktiv finden

kkauer
Beiträge gesamt: 661

20. Sep 2007, 19:25
Beitrag # 15 von 16
Beitrag ID: #313468
Bewertung:
(65882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hello again,

Ich sehe gerade, dass Martin in seinem JS auch diesen Zeichenattibut-Weg gewählt hat.

Statt
Code
capitalization = Capitalization.allCaps 

ginge auch
Code
changecase(ChangecaseMode.uppercase) 

und das wäre dann die Textänderung, die im GUI so leider nicht zu realisieren ist.

Karsten


als Antwort auf: [#313457]
X