[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt FindChangeByList-Sonderfälle

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

FindChangeByList-Sonderfälle

t-kittel
Beiträge gesamt: 254

29. Mär 2011, 11:50
Beitrag # 1 von 10
Bewertung:
(4721 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Grep-Profis,

nachdem ich mehrere Dutzend Suchen/Ersetzen-Routinen via FindChangeByList_mod3.jsx erfolgreich vorbereitet habe, beiße ich mir gerade an den vier untenstehenden Fällen die Zähne aus. Allen gemeinsam ist, dass sie per manuellem Grep-Suchen/Ersetzen innerhalb Indesign noch funktionieren, per Script aber ihren Dienst verweigern oder anstelle der gewünschten Sonderzeichen ganz andere, falsche Buchstabenkolonnen einfügen. Darum meine Vermutung, dass ich hierbei (unwissentlich) Zeichen verwende, welche vielleicht durch JavaScript reserviert sind?
Auch mit Hilfe von RecordFindChange_CS3-CS5.jsx komme ich bei den folgenden Codezeilen nicht weiter. Eine Kurzbeschreibung, was gesucht und ersetzt werden soll, findet sich jeweils am Ende als Kommentar (ich hoffe verständlich formuliert):

Code
grep	{findWhat:"(\\d+)\\s?°C"}	{changeTo:"$1~4°C", changeConditionsMode:1919250519}	{includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true}	//Viertelgeviert vor °C-Angaben, anstelle eines Leerzeichens oder anstelle eines fehlenden Weißraumes (vor °C) 
grep {findWhat:"(\\s|\\()á\\s"} {changeTo:"$1à\\s", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //à mit korrektem Akzent, wenn vor dem falschen "á" entweder ein Leerzeichen oder eine öffnende Klammer steht
grep {findWhat:"Vorsicht:?(?=\\sheiß)"} {changeTo:"Vorsicht,", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Ersetzt den Begriff "Vorsicht heiß" (optional auch mit Doppelpunkt direkt nach "Vorsicht") durch "Vorsicht, heiß"
grep {findWhat:"\\s(?<!»)klassisch(\\s)(?!«)"} {changeTo:"\\s»klassisch«$1", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Umschließt alle Vorkommnisse von " klassisch " (mit Weißraum davor und dahinter) mit franz. An- und Abführungszeichen (»Doppelpfeile«), aber nicht bei "klassische Gemüsesuppe"

Wer kann mir sagen, wo hier jeweils der Fehler liegt?

Vielen Dank im Voraus!
Gruß Thomas
X

FindChangeByList-Sonderfälle

t-kittel
Beiträge gesamt: 254

29. Mär 2011, 12:05
Beitrag # 2 von 10
Beitrag ID: #467909
Bewertung:
(4717 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
..und noch einen "Übeltäter" hab' ich, bei dem ich das gewünschte Ausschlusskriterium einfach nicht hinbekomme ;o)

Code
grep	{findWhat:"^\\s+"}	{changeConditionsMode:1919250519}	{includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true}	//Streiche ersatzlos einzelne oder mehrfache Leerzeichen, welche am Absatzbeginn stehen. Schließe aber am Absatzbeginn stehende Weißräume (welche nicht LeerZEICHEN sind, z.B. Leerzeilen) vom Löschen aus. 



als Antwort auf: [#467906]

FindChangeByList-Sonderfälle

t-kittel
Beiträge gesamt: 254

29. Mär 2011, 16:59
Beitrag # 3 von 10
Beitrag ID: #467937
Bewertung:
(4677 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Greps,

für alle, die es ebenfalls interessiert, habe ich die Lösungen für die Fälle 1-4 hier mal aufgelistet, welche sich allesamt mit Hilfe von Unicode realisieren ließen:

Code
grep	{findWhat:"(\\d+)\\s?(?=\\x{00B0})"}	{changeTo:"$1~<", changeConditionsMode:1919250519}	{includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true}	//Finde Leerzeichen vor Grad-Angaben und ersetze durch Achtelgeviert 
grep {findWhat:"(\\s|\\()\\x{00E1}\\s"} {changeTo:"$1\\x{00E0}\\s", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //à mit korrektem Akzent, wenn vor dem falschen "á" entweder ein Leerzeichen oder eine öffnende Klammer steht
grep {findWhat:"Vorsicht:?(?=\\shei\\x{00DF})"} {changeTo:"Vorsicht,", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Ersetzt den Begriff "Vorsicht heiß" (optional auch mit Doppelpunkt direkt nach "Vorsicht") durch "Vorsicht, heiß"
grep {findWhat:"\\s(?<!\\x{00BB})klassisch(\\s)(?!\\x{00AB})"} {changeTo:"\\s\\x{00BB}klassisch\\x{00AB}$1", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Umschließt alle Vorkommnisse von " klassisch " (mit Weißraum davor und dahinter) mit franz. An- und Abführungszeichen (»Doppelpfeile«), aber nicht bei "klassische Gemüsesuppe"


Nur am Fall Nr. 5 hänge ich noch immer bei der Ausschlussbedingung:
Code
grep	{findWhat:"^\\s+"}	{changeConditionsMode:1919250519}	{includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true}	//Streiche ersatzlos einzelne oder mehrfache Leerzeichen, welche am Absatzbeginn stehen. Schließe aber am Absatzbeginn stehende Weißräume (welche nicht LeerZEICHEN sind, z.B. Leerzeilen) vom Löschen aus. 

Gruß Thomas


als Antwort auf: [#467909]

FindChangeByList-Sonderfälle

Martin Fischer
  
Beiträge gesamt: 12691

29. Mär 2011, 17:14
Beitrag # 4 von 10
Beitrag ID: #467939
Bewertung:
(4673 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Thomas,

wenn ich Dich richtig verstanden habe, dann willst Du alle Leerzeichen, aber nicht alle Weißräume (die auch Absatzschaltungen, Tabs und feste Zeilenumbrüche enthalten können), am Anfang einer Zeile löschen.

Dann solltest Du nicht \s als Platzhalter für alle Weißräume verwenden, sondern eine Gruppe mit allen Leerzeichen: [ ~s~S~<~>~3~4~%~f~|~m]

Also
Code
grep	{findWhat:"^[ ~s~S~<~>~3~4~%~f~|~m]+"}	{changeConditionsMode:1919250519}	{includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true}	//Streiche ersatzlos einzelne oder mehrfache Leerzeichen, welche am Absatzbeginn stehen. Schließe aber am Absatzbeginn stehende Weißräume (welche nicht LeerZEICHEN sind, z.B. Leerzeilen) vom Löschen aus. 


Vielleicht möchtest Du auch noch Tabs \t einschließen.


als Antwort auf: [#467937]
(Dieser Beitrag wurde von Martin Fischer am 29. Mär 2011, 17:34 geändert)

FindChangeByList-Sonderfälle

t-kittel
Beiträge gesamt: 254

29. Mär 2011, 17:30
Beitrag # 5 von 10
Beitrag ID: #467940
Bewertung:
(4665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

Du hast das genau richtig erfasst und mit
Code
grep	{findWhat:"^[ ~s~S~<~>~3~4~%~f~|~m]+"}	{changeConditionsMode:1919250519}	{includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true}	//Streiche ersatzlos einzelne oder mehrfache Leerzeichen, welche am Absatzbeginn stehen. Schließe aber am Absatzbeginn stehende Weißräume (welche nicht LeerZEICHEN sind, z.B. Leerzeilen) vom Löschen aus. 

tut es nun genau das, was ich wollte. :o))

Der Trick war also, an Stelle des einfachen \s eine Gruppe aller Leerzeichen zu bilden.

Herzlichen Dank und sonnigen Feierabend!
Gruß Thomas


als Antwort auf: [#467939]

FindChangeByList-Sonderfälle

Martin Fischer
  
Beiträge gesamt: 12691

29. Mär 2011, 17:35
Beitrag # 6 von 10
Beitrag ID: #467941
Bewertung:
(4660 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Der Trick war also, an Stelle des einfachen \s eine Gruppe aller Leerzeichen zu bilden.


Ja, so ist es.
Ich hatte oben ursprünglich fehlerhaft von einer Gruppe aller Weißräume geschrieben.
Richtig ist natürlich – wie Du festgestellt hast – eine Gruppe aller Leerzeichen.


als Antwort auf: [#467940]

FindChangeByList-Sonderfälle

t-kittel
Beiträge gesamt: 254

31. Mär 2011, 18:35
Beitrag # 7 von 10
Beitrag ID: #468116
Bewertung:
(4565 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin (und andere)!

Ein weiterer Fall will mir partout nicht gelingen und ich finde leider auch im WWW keine passende Vorlage.

Es geht um die Fettstellung einer bestimmten Textpassage per Zeichenstilvorlage. Der Beginn dieser Fettstellung/Textpassage soll durch ein Stichwort (im folgenden "Stichwort" genannt) unabhängig von dessen Groß-/Kleinschreibung definiert sein, gefolgt von einem "normalen Leerzeichen"* (oder einem beliebigen Weißraum), gefolgt von einer beliebig langen Zeichenkette (alphanumerisch, Leeräume und Satzzeichen wie An-/Abführungen). Das Ende der Fettstellung soll durch das Sonderzeichen "Verschachteltes Format hier beenden" (kurz "VFhb") bestimmt werden.

Mein Versuch...
Code
(?i)Stichwort\s[[:print:]]+~h 

...ist leider nur dann von Erfolg gekrönt, wenn das "Stichwort" nicht im gleichen Absatz noch einmal (oder gar noch mehrere Male) vorkommt. Ist dies der Fall, wird vom 1. Vorkommnis des Stichworts bis zum "VFbh" gefettet, was ja auch logisch ist.

Es fehlt also die Einarbeitung der "kürzesten Entsprechung", die in diesem Falle ja dann irgendwie nur "von hinten lesend" ausfindig zu machen wäre, oder?

Trotz mehrfachem Vorkommen des (identischen) Stichworts (im gleichen Absatz) soll also nur vom "VFhb" beginnnend, bis zum 1. Vorkommnis (allerdings rückwärts gelesen) gefettet werden!

Ist so etwas ebenfalls mit GREP realisierbar?

Gruß Thomas

* Ist es eigentlich möglich, per Grep das "normale Leerzeichen" isoliert anzusprechen oder kann man immer nur auf mehrere Arten Weißräume einschränken, z.B. mit
Code
[[:blank:]] 

Leerzeichen (inkl. aller Gevierte) und Tabulatoren?


als Antwort auf: [#467941]

FindChangeByList-Sonderfälle

Martin Fischer
  
Beiträge gesamt: 12691

31. Mär 2011, 23:31
Beitrag # 8 von 10
Beitrag ID: #468145
Bewertung:
(4545 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Thomas,

ich bin mir nicht sicher, ob ich Dich richtig verstanden habe.
Vor allem das 'rückwärts lesen' bereitet mir etwas Kopfzerbrechen.

Möglicherweise suchst Du nach einer Zähmung der Gier Deines GREP.
Da könnte eventuell bereits (?i)Stichwort\s[[:print:]]+?~h helfen.

Oder (?i)Stichwort\s[^~h]+~h.

Das normale Leerzeichen findest Du über das normale Leerzeichen (einmal Leertaste drücken) oder über den Unicode-Wert \x{20}.


als Antwort auf: [#468116]

FindChangeByList-Sonderfälle

Martin Fischer
  
Beiträge gesamt: 12691

31. Mär 2011, 23:52
Beitrag # 9 von 10
Beitrag ID: #468147
Bewertung:
(4534 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich glaube, ich fange an zu verstehen, was Du mit
Zitat Trotz mehrfachem Vorkommen des (identischen) Stichworts (im gleichen Absatz) soll also nur vom "VFhb" beginnnend, bis zum 1. Vorkommnis (allerdings rückwärts gelesen) gefettet werden!

meinst.

Mir fällt im Moment keine Lösung ein, wie das über einen einzigen GREP-Suchlauf zu bewerkstelligen wäre.

Aber Du könntest eventuell erst mal vom ersten Vorkommen von 'Stichwort' bis zum 'VFhb' formatieren und in einem zweiten Durchlauf mit (?i)(Stichwort)\s.+(?=\1)* wieder entformatieren (die Fettung rückgängig machen) – oder?

Vielleicht solltest Du beim ersten Durchgang eine Formatierung (Farbe, Durchstreichen) verwenden, die sonst nirgends vorkommt, nicht dass Du im zweiten Durchgang eine Fettung, die bereits vor dem ersten Durchgang bestand, versehendlich löscht.
Das wären dann also drei Druchgänge:
1. temporäre Formatierung
2. teilweise Aufhebung der temporären Formatierung
3. Umwandlung der übrig bleibenden temporären Formatierung in die endgültige Formatierung.


-----
* \1 wiederholt den Inhalt der ersten Gruppe, hier also 'Stichwort'. Der Stern * gehört nicht mehr zum GREP, sondern ist ein Fußnotenzeichen!


als Antwort auf: [#468145]

FindChangeByList-Sonderfälle

t-kittel
Beiträge gesamt: 254

1. Apr 2011, 09:44
Beitrag # 10 von 10
Beitrag ID: #468161
Bewertung:
(4501 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

herzlichen Dank für Deine wie immer sehr präzisen und lehrreichen Antworten!!!
(Offtopic: "Schläfst Du eigentlich auch irgendwann?" ;o)

Also - nach ettlichen Tests folgendes Ergebnis:
Beide o.g. Lösungsvorschläge "(?i)Stichwort\s[^~h]+~h" und "(?i)Stichwort\s[^~h]+~h" führen bei mir zum gleichen Ergebnis, welches sich wiederum mit meinem 1. Versuch "(?i)Stichwort\s[[:print:]]+~h" deckt – GREP bleibt gierig.
Obwohl Du in Deinem nächsten Beitrag die Problematik der Mehrfachvorkommnisse innerhalb eines Absatzes dann exakt erkannt hast, scheidet eine dreistufige Lösung für meinen Fall aus, da ich diesen Grepcode gerne direkt innerhalb eines Grep-Stils verwenden möchte.

Da ich aber im Anschluss per FindChangeByList_mod3 sowieso noch viele Dutzend Suchen/Ersetzen-Durchläufe ausführen lasse, habe ich nun die folgenden beiden Elemente miteinander kombiniert:
Im Step 1 erfolgt die (zu gierige) Fettstellung per Grepstil durch "(?i)Stichwort\s[^~h]+~h", während im Step 2 das nachgelagerte Skript die zu großzügig gefetteten Textteile mit "(?i)(Stichwort)\\s.+(?=\\1)" wieder rückgängig macht. Von einem Einbau Deiner dreistufigen Lösung ins Skript (ohne Grepstil) möchte ich einerseits absehen, um den Benutzer durch die autom. Fettstellung auf den entsprechenden Absatz aufmerksam zu machen, andererseits habe ich Angst, beim mehrmaligen Skriptaufruf evtl. bereits korrgierte Formatierungen wieder zu "zerschießen".

Somit erhalte ich das gewünschte Ergebnis momentan durch die o.g. zwei Steps und bin fast glücklich...
...wäre da nicht noch mein sehnlicher Wunsch, dieses besagte Stichwort auch auf mehrere Stichworte ausweiten zu können, ohne den "Skript- und GREP-unerfahrenenen" Benutzern abzuverlangen zu müssen, weitere Stichworte sowohl in den betroffenen Grepstilen als auch im Skript ergänzen zu müssen.

Deshalb meine fixe Idee, Grepstil und Stichworte per "benutzerdefinierte Textvariablen" zu kombinieren!? ;o)

Leider erschließt sich mir hierbei die Grep-Funktionsweise von benutzerdefiniertem Text per "~u" in der Kategorie "Variablen" noch nicht.
Indesign (hier CS4) lässt zwar die Definition einer benutzerdefinierten Textvariable zu, für die ich einen eigenen Namen vergeben kann – im Grepstil jedoch erscheint dieser neue (Textvariablen-)Name anschließend nicht als Auswahlmöglichkeit, um die (diese neue benutzerdefinierte Text-)Variable direkt im Grepcode verwenden zu können!

Mein Wunschgedanke, "Stichwort1", "Stichwort2" und "Stichwort3" in ID als "benutzerdefinerte Variablen"-Namen zu definieren und diese Namen einfach im Grepcode zu verwenden scheint nicht machbar!? Wozu dient dann aber der Grepcode "~u"? Gibt es hierfür ein Beispiel?

Thanks und Gruß
Thomas


als Antwort auf: [#468147]
X