hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Zeichen interaktiv finden

 

« « 1 2 » »  


Gerald Singelmann  M  p
Beiträge: 5747

18. Sep 2007, 20:28

Beitrag #1 von 16
Bewertung:

(9452 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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 :)
Top

Gerald Singelmann  M  p
Beiträge: 5747

18. Sep 2007, 20:44

Beitrag #2 von 16
Beitrag ID: #313090

Bewertung:

(9445 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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


Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#313088] Top

kkauer
Beiträge: 323

19. Sep 2007, 21:42

Beitrag #3 von 16
Beitrag ID: #313292

Bewertung:

(9395 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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

Gerald Singelmann  M  p
Beiträge: 5747

19. Sep 2007, 21:57

Beitrag #4 von 16
Beitrag ID: #313295

Bewertung:

(9391 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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.

Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#313292] Top

kkauer
Beiträge: 323

19. Sep 2007, 23:24

Beitrag #5 von 16
Beitrag ID: #313302

Bewertung:

(9369 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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

manne
Beiträge: 97

20. Sep 2007, 07:24

Beitrag #6 von 16
Beitrag ID: #313312

Bewertung:

(9336 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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?

Ciao
Manne

als Antwort auf: [#313302] Top

Gerald Singelmann  M  p
Beiträge: 5747

20. Sep 2007, 07:48

Beitrag #7 von 16
Beitrag ID: #313316

Bewertung:

(9330 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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

Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#313302] Top

Martin Fischer  M  p
Beiträge: 9422

20. Sep 2007, 07:55

Beitrag #8 von 16
Beitrag ID: #313319

Bewertung:

(9327 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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;



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#313312]

(Dieser Beitrag wurde von Martin Fischer am 20. Sep 2007, 08:19 geändert)
Top

Martin Fischer  M  p
Beiträge: 9422

20. Sep 2007, 08:14

Beitrag #9 von 16
Beitrag ID: #313322

Bewertung:

(9321 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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?


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#313316] Top

Gerald Singelmann  M  p
Beiträge: 5747

20. Sep 2007, 09:23

Beitrag #10 von 16
Beitrag ID: #313340

Bewertung:

(9306 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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.

Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#313322] Top

kkauer
Beiträge: 323

20. Sep 2007, 12:07

Beitrag #11 von 16
Beitrag ID: #313390

Bewertung:

(9283 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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

Marco Morgenthaler p
Beiträge: 2181

20. Sep 2007, 18:06

Beitrag #12 von 16
Beitrag ID: #313457

Bewertung:

(9240 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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
iMac 3.06 GHz | 8 GB RAM | OS X 10.6.8 | Indesign 7.0.4 (CS5 Design Premium)

als Antwort auf: [#313340] Top

Anhang:
Grossbuchstabe.png (79.6 KB)

Martin Fischer  M  p
Beiträge: 9422

20. Sep 2007, 18:09

Beitrag #13 von 16
Beitrag ID: #313458

Bewertung:

(9237 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


Marco,

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


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#313457] Top

kkauer
Beiträge: 323

20. Sep 2007, 18:58

Beitrag #14 von 16
Beitrag ID: #313465

Bewertung:

(9228 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


Hallo Marco,

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

Karsten

als Antwort auf: [#313457] Top

kkauer
Beiträge: 323

20. Sep 2007, 19:25

Beitrag #15 von 16
Beitrag ID: #313468

Bewertung:

(9209 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zeichen interaktiv finden


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] Top
« « 1 2 » »  


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Zeichen interaktiv finden


^