[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Skript KerningOrNoBreak Fehler unter CS5

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

Skript KerningOrNoBreak Fehler unter CS5

--silke--
Beiträge gesamt: 27

2. Aug 2011, 07:58
Beitrag # 1 von 10
Bewertung:
(7710 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Skript KerningOrNoBreak: Es lief wunderbar unter InDesign CS3, aber nicht mehr unter CS5.

Ich kann mir irgendwie nicht vorstellen, dass es nicht schon Beiträge zu diesem Thema gab, möchte nicht den geballten Unmut auf mich ziehen, kann aber nichts dazu finden; also trau ich mich:

Versuche ich das Skript auszuführen, wird mir folgende Fehlermeldung gezeigt:
Fehlernummer 55
Fehlerzeichenfolge: Objekt unterstützt Eigenschaft oder Methode findPreferences nicht
Zeile: 155
Quelle: app.findPreferences = 0


Zeile 156 mit „app.changePreferences = null“ würde damit dann wohl auch nicht ausgeführt werden können.

Kann mir jemand sagen, ob / wie ich dieses Skript wieder zum Laufen bekomme bzw. ob es ein (oder auch zwei verschiedene) Ersatzskript(e) gibt (nicht mit speziellen Laufweiten, einfach nur „Kerning“ / „No Break“)?
Danke + viele Grüße
Silke Doepner
X

Skript KerningOrNoBreak Fehler unter CS5

Uwe Laubender
Beiträge gesamt: 5316

2. Aug 2011, 09:27
Beitrag # 2 von 10
Beitrag ID: #477278
Bewertung:
(7686 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Silke!

Code
app.findPreferences = 0 

kann ja auch nicht funktionieren. Wegen der "0" (Zahl).

Code
app.findPreferences = null; 

funktioniert schon. Aber nur in InDesign CS2 oder drunter. "Null" bedeutet nicht die Zahl "0", sondern die Abwesenheit jeglicher Eigenschaft, also "Nix"; in diesem speziellen Fall das Löschen der Einträge in den Suchvorgaben.

Dein Script bekommst Du nur in CS3 zum Laufen, weil es in einem Kompatibilitätsmodus zu CS2 läuft, also der Scriptengine von CS3 diejenige von CS2 soweit möglich unterschiebt (das gelingt in Deinem Fall für CS5 nicht mehr):

Code
app.scriptPreferences.version = 4.0; 


Die Such/Ersetzenfunktion wurde ab CS3 erheblich aufgebohrt, sodass für das Löschen der alten Suchen- und Ersetzenvorgaben spezifisch angegeben werden muß, welche Art von Suche gemeint ist (CS3 - CS5.5):

Code
app.findTextPreferences = app.changeTextPreferences = null 


oder alternativ:

Code
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING 


Könntest Du mit einem Link zum Originalscript verweisen?
Hast Du schon beim Autor nachgefragt? Denn ich befürchte, daß das ganze Script für CS5 angepasst werden muß.

MacBook Pro 2.4GHz | OS X 10.5.8 | Adobe CS3/CS4/CS5/CS5.5 Design Premium


als Antwort auf: [#477272]
(Dieser Beitrag wurde von Uwe Laubender am 2. Aug 2011, 09:33 geändert)

Skript KerningOrNoBreak Fehler unter CS5

--silke--
Beiträge gesamt: 27

2. Aug 2011, 10:41
Beitrag # 3 von 10
Beitrag ID: #477286
Bewertung:
(7661 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
danke für die schnelle Antwort.
Das Skript ist, denke ich, von Martin Fischer ausgetüftelt worden. Ich hab ein wenig gestöbert und es hier, als Suche/Ersetze Skript, im HDS-Service gefunden:

http://www.hilfdirselbst.ch/..._P199273.html#199273

(oder s.u.)

Wahrscheinlich hast du recht und das ganze Skript muss angepasst werden, denn anstatt „=0“ steht dort „=null“ (sorry), und so läuft es nicht.

Wenn Martin der Autor ist. Vielleicht liest er mit (Hallo Martin!) und hat das Skript angepasst?

Schöne Grüße
Silke Doepner


//KerningOrNoBreak.js
//DESCRIPTION: Weist definierten Zeichenfolgen das Attribut "optisches Kerning" oder "kein Umbruch" zu. Der zu bearbeitende Bereich kann eingeschränkt werden.
//
var myObject;
var myCheckSelection = false;
if(app.documents.length != 0){
if(app.activeDocument.stories.length != 0){
var myArray = myDisplayDialog();
myChoice = myArray[0];
myObject = myArray[1];
myCheckSelection = myArray[2];
if(myObject != "None"){
doIt(myChoice, myObject);
}
}
else{
alert("The current document contains no text. Please open a document containing text and try again.");
}
}
else{
alert("No documents are open. Please open a document and try again.");
}

function myDisplayDialog(){
var myCheckSelection = false;
var myDialog = app.dialogs.add({name:"Modify Pairs"});
with(myDialog.dialogColumns.add()){
if(app.selection.length != 0){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Suchbereich", minWidth:100});
}
var myRangeButtons = radiobuttonGroups.add();
with(myRangeButtons){
radiobuttonControls.add({staticLabel:"Ausgewählter Textfluß", checkedState:true});
radiobuttonControls.add({staticLabel:"Dokument"});
if(app.selection[0].contents != ""){
radiobuttonControls.add({staticLabel:"Auswahl"});
}
}
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"----------------------------------"});
}
}
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Auswahl", minWidth:100});
}
var myChoiceButtons = radiobuttonGroups.add();
with(myChoiceButtons){
radiobuttonControls.add({staticLabel:"Kerning", checkedState:true});
radiobuttonControls.add({staticLabel:"Kein Umbruch"});
}
}
}
var myResult = myDialog.show();
var aChoice = myChoiceButtons.selectedButton;
if (myResult == true){
var myObject = app.documents[0];
if(app.selection.length != 0){
switch(myRangeButtons.selectedButton){
case 0:
switch(app.selection[0].constructor.name){
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
myObject = app.selection[0].parentStory;
break;
default:
myObject = "None";
break;
}
break;
case 1:
myObject = app.activeDocument;
break;
case 2:
switch(app.selection[0].constructor.name){
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
if(app.selection[0].contents != ""){
myObject = app.selection[0].texts.item(0);
myCheckSelection = true;
}
else{
myObject = "None";
}
break;
default:
myObject = "None";
break;
}
break;
}
}
}
else{
myObject = "None";
}
myDialog.destroy();
return [aChoice, myObject, myCheckSelection];
}

function doIt(aChoice, aObject){
var myWords = [""];
var myCounter=0;
var KerningTextFileName="KernPairsOptical.txt"
var noBreakTextFileName="noBreak.txt"
var noBreakColor="noBreak";

if (aChoice == 0) {
TextFileName=KerningTextFileName;
myChangeFormat= {kerningMethod:"optical"};
}
// no Break
else if (aChoice == 1) {
TextFileName=noBreakTextFileName;
//myChangeFormat= {noBreak:true, fillColor:noBreakColor};
myChangeFormat= {noBreak:true};
//checkColor(noBreakColor);
}
var myScriptFileName = app.activeScript;
var myScriptFile = File(myScriptFileName);
var myFolder = myScriptFile.parent;
var myFindChangeFileName = myFolder + "/" + TextFileName;
var myFindChangeFile = File(myFindChangeFileName);
var myFileOpen = myFindChangeFile.open("r", undefined, undefined);
if (myFileOpen == false){
myFindChangeFile = File.openDialog("Wähle die Datei mit der Liste der Zeichenfolgen:")
myFileOpen = myFindChangeFile.open("r", undefined, undefined);
}

do{
myLine = myFindChangeFile.readln();
myFindChangeArray = myLine.split("#*#");
if (myFindChangeArray[0].length > 1){
myWords[myCounter] = myFindChangeArray[0];
myCounter+=1;
}
} while(myFindChangeFile.eof == false);
myFindChangeFile.close();

app.findPreferences = null;
app.changePreferences = null;
for (k=0; k < myWords.length; k++){
myChanging(aObject, myWords[k]);
}

function myChanging(oneRange,oneWord) {
if (oneWord.length>0 && oneWord !=" ") {
myResults = oneRange.search(oneWord,false,true,undefined, undefined, myChangeFormat);
}
}
}

function checkColor(oneColor) {
try{
mySwatch = app.documents[0].colors.add({name:oneColor,space:ColorSpace.rgb, colorValue:Array(250,0,0)});
}
catch (myError){
mySwatch = app.documents[0].colors.item(oneColor);
}
}


als Antwort auf: [#477278]

Skript KerningOrNoBreak Fehler unter CS5

Martin Fischer
  
Beiträge gesamt: 12783

2. Aug 2011, 11:08
Beitrag # 4 von 10
Beitrag ID: #477289
Bewertung:
(7647 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Silke,

Antwort auf: Wenn Martin der Autor ist. Vielleicht liest er mit (Hallo Martin!) und hat das Skript angepasst?


Nein, das Skript habe ich bislang noch nicht an CS3 und höher angepasst, könnte dies aber gelegentlich nachholen.

Wenn das Skript bei Dir unter CS3 gelaufen ist, dann – wie von Uwe angegeben – im Kompatibilitätsmodus. Entweder durch Ergänzung der Skriptzeile zur Version oder in einem Unterverzeichnis 'Version 4.0' vom Skriptverzeichnis.

Hast Du Uwes Tipp schon ausprobiert?


als Antwort auf: [#477286]
(Dieser Beitrag wurde von Martin Fischer am 3. Aug 2011, 07:03 geändert)

Skript KerningOrNoBreak Fehler unter CS5

--silke--
Beiträge gesamt: 27

2. Aug 2011, 12:50
Beitrag # 5 von 10
Beitrag ID: #477304
Bewertung:
(7625 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo + Ja, (+ Juchu!)
habe Uwes Vorschlag – Ersetzen der Zeilen / Angaben
app.findPreferences = null;
app.changePreferences = null;


durch
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;

umgesetzt, und das Skript läuft ein paar Schritte weiter. Jetzt stockt es an der Stelle (Zeile 162)
myResults = oneRange.search(oneWord,false,true,undefined, undefined, myChangeFormat);

mit der Angabe
Fehlernummer: 24
Fehlerzeichenfolge oneRange.search ist keine Funktion

Kann mir einer von euch schreiben, woran das liegt und was ich dort stattdessen eintragen könnte?
Silke Doepner


als Antwort auf: [#477289]

Skript KerningOrNoBreak Fehler unter CS5

Martin Fischer
  
Beiträge gesamt: 12783

2. Aug 2011, 13:49
Beitrag # 6 von 10
Beitrag ID: #477308
Bewertung:
(7607 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sorry, ich meinte nicht den Ersetzen-Vorschlag von Uwe, sondern den Oben-Einfügen-Vorschlag:

Code
app.scriptPreferences.version = 4.0; 



Ich hab mal einen Blick auf das Skript geworfen.
Es ist wirklich uralt und umständlich (das Werk eines Anfängers?) und sollte, wenn, dann gründlich überarbeitet werden.

In der Zwischenzeit gibt es für diese beiden Aufgaben aber geeignetere Instrumente als zu CS2-Zeiten. GREP als neue Suchen-Ersetzen Funktion und findChangeByList.jsx für immer wiederkehrende Ersetzungen.

Ich vermute, es wäre für Dich effektiver und zukunftssicherer (und für mich einfacher), wenn Du auf GREP bzw. findChangeByList.jsx umsatteln würdest.


Offen gesagt habe ich keine Lust, diesen alten Gruschd hochzukonvertieren.

Wenn Du Unterstützung beim Umkrempeln Deiner Datendateien von KerningNoBreak.js auf findChangeByList.jsx brauchst, dann laß uns wissen, wo Du nicht weiterkommst, oder stell' diese Daten zur Verfügung.

Es dürfte schneller gehen, diese Daten für findChangeByList.jsx umzubauen, als das Skript anzupassen.


als Antwort auf: [#477304]

Skript KerningOrNoBreak Fehler unter CS5

Martin Fischer
  
Beiträge gesamt: 12783

2. Aug 2011, 14:17
Beitrag # 7 von 10
Beitrag ID: #477309
Bewertung:
(7594 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wenn einem mal was im Kopf rumgeistert, dann muss es irgendwie wieder raus ...

Hier eine Version, die unter CS3-5.5 laufen sollte.

Code
//kerningOrNoBreak_CS3.jsx 

app.findTextPreferences = app.changeTextPreferences = null;
var myObject;
var myCheckSelection = false;
if(app.documents.length != 0){
if(app.activeDocument.stories.length != 0){
var myArray = myDisplayDialog();
myChoice = myArray[0];
myObject = myArray[1];
myCheckSelection = myArray[2];
if(myObject != "None"){
doIt(myChoice, myObject);
}
}
else{
alert("The current document contains no text. Please open a document containing text and try again.");
}
}
else{
alert("No documents are open. Please open a document and try again.");
}
app.findTextPreferences = app.changeTextPreferences = null;


function myDisplayDialog(){
var myCheckSelection = false;
var myDialog = app.dialogs.add({name:"Modify Pairs"});
with(myDialog.dialogColumns.add()){
if(app.selection.length != 0){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Suchbereich", minWidth:100});
}
var myRangeButtons = radiobuttonGroups.add();
with(myRangeButtons){
radiobuttonControls.add({staticLabel:"Ausgewählter Textfluß", checkedState:true});
radiobuttonControls.add({staticLabel:"Dokument"});
if(app.selection[0].contents != ""){
radiobuttonControls.add({staticLabel:"Auswahl"});
}
}
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"----------------------------------"});
}
}
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Auswahl", minWidth:100});
}
var myChoiceButtons = radiobuttonGroups.add();
with(myChoiceButtons){
radiobuttonControls.add({staticLabel:"Kerning", checkedState:true});
radiobuttonControls.add({staticLabel:"Kein Umbruch"});
}
}
}
var myResult = myDialog.show();
var aChoice = myChoiceButtons.selectedButton;
if (myResult == true){
var myObject = app.documents[0];
if(app.selection.length != 0){
switch(myRangeButtons.selectedButton){
case 0:
switch(app.selection[0].constructor.name){
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
myObject = app.selection[0].parentStory;
break;
default:
myObject = "None";
break;
}
break;
case 1:
myObject = app.activeDocument;
break;
case 2:
switch(app.selection[0].constructor.name){
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
if(app.selection[0].contents != ""){
myObject = app.selection[0].texts.item(0);
myCheckSelection = true;
}
else{
myObject = "None";
}
break;
default:
myObject = "None";
break;
}
break;
}
}
}
else{
myObject = "None";
}
myDialog.destroy();
return [aChoice, myObject, myCheckSelection];
}

function doIt(aChoice, aObject){
var myWords = [""];
var myCounter=0;
var KerningTextFileName="KernPairsOptical.txt"
var noBreakTextFileName="noBreak.txt"
var noBreakColor="noBreak";

if (aChoice == 0) {
TextFileName=KerningTextFileName;
app.changeTextPreferences.kerningMethod = "Optisch";
}
// no Break
else if (aChoice == 1) {
TextFileName = noBreakTextFileName;
app.changeTextPreferences.noBreak = true;
}
var myScriptFile = get_script_name;
var myFolder = myScriptFile.parent;
var myFindChangeFileName = myFolder + "/" + TextFileName;
var myFindChangeFile = File(myFindChangeFileName);
var myFileOpen = myFindChangeFile.open("r", undefined, undefined);
if (myFileOpen == false){
myFindChangeFile = File.openDialog("Wähle die Datei mit der Liste der Zeichenfolgen:")
myFileOpen = myFindChangeFile.open("r", undefined, undefined);
}

do{
myLine = myFindChangeFile.readln();
myFindChangeArray = myLine.split("#*#");
if (myFindChangeArray[0].length > 1){
myWords[myCounter] = myFindChangeArray[0];
myCounter+=1;
}
} while(myFindChangeFile.eof == false);
myFindChangeFile.close();

for (k=0; k < myWords.length; k++){
myChanging(aObject, myWords[k]);
}

function myChanging(oneRange,oneWord)
{
app.findTextPreferences.findWhat = oneWord;
if (oneWord.length>0 && oneWord !=" ")
{
myResults = oneRange.changeText();
}
}
}

function checkColor(oneColor) {
try{
mySwatch = app.documents[0].colors.add({name:oneColor,space:ColorSpace.rgb, colorValue:Array(250,0,0)});
}
catch (myError){
mySwatch = app.documents[0].colors.item(oneColor);
}
}
function get_script_name() {
try {
return File( app.activeScript ).fullName
}
catch( e ) {
return File( e.fileName ).fullName
}
}


Trotzdem empfehle ich dringend die schlagkräftigeren und komfortableren Instrumente der neueren InDesign-Versionen zu nutzen.


als Antwort auf: [#477308]
(Dieser Beitrag wurde von Martin Fischer am 2. Aug 2011, 14:22 geändert)

Skript KerningOrNoBreak Fehler unter CS5

--silke--
Beiträge gesamt: 27

2. Aug 2011, 14:41
Beitrag # 8 von 10
Beitrag ID: #477310
Bewertung:
(7579 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
Hilfe :-) du bist so schnell! Gerade habe ich eine Antwort an dich fertigformuliert und schick die jetzt, obwohl veraltet, auch ab (deine überarbeitete Skript-Version probier ich gleich aus) – vielleicht war deine vorletzte Mail denn doch eine passende Anregung dazu, mich nicht auf dem Stand des Skripte-Mittelalters zu bewegen:

kann deine Unlust verstehen – was es nicht wert ist, ist es nicht wert -- und werde mein Bestes versuchen, um „moderner“ zu arbeiten.
Der andere Tipp von Uwe funktioniert nicht; das Skript hängt damit wieder an der alten Stelle.
Für grep sind meine Kerning- und die NoBreak-Listen zu lang. findChangeByList.jsx dafür nutzen zu können wäre prima, weil ich es zumindest – auch ohne Alles zu verstehen -- hinbekomme, das Skript so zum Laufen zu bringen, wie ich möchte. Ich arbeite damit zum Ersetzen einer ganzen Liste immer wiederkehrender Fehler im Sinne von

text {findWhat:"( ", caseSensitive:true} {changeTo:"(", caseSensitive:true} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}


Ich wäre damit also in der Lage dem Skript zu sagen, was es suchen soll, aber weiß nicht, wie ich ihm dann sagen soll, dass das Gefundene optisch gekernt bzw. nicht umbrochen werden soll, greife auf dein Angebot zurück, mir dabei zu helfen und zwar mit zwei konkreten Beispielen, bei denen ich die mir unbekannten Stellen mit ??? markiert habe. Wenn ich die füllen könnte, sollte ich in der Lage sein, das Ausgangsproblem in den Griff zu bekommen.

Optisches Kerning:

text {findWhat:"www", caseSensitive:true} {changeTo:"www", ???} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}

Kein Umbruch:

text {findWhat:"Abbildung ^9", caseSensitive:true} {changeTo:" Abbildung ^9", ???} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}


Schöne Grüße
Silke


als Antwort auf: [#477308]

Skript KerningOrNoBreak Fehler unter CS5

Martin Fischer
  
Beiträge gesamt: 12783

2. Aug 2011, 16:27
Beitrag # 9 von 10
Beitrag ID: #477322
Bewertung:
(7549 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Silke,

hier zwei Musterzeilen für Deine Ersetzungen.
Einmal als Text- und einmal als GREP-Suche:

Code
// Optisches Kerning 
text {findWhat:"www"} {kerningMethod:'Optisch'} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:true, includeMasterPages:true, includeFootnotes:true, wholeWord:false, caseSensitive:true} //www - optisches Kerning

// Kein Umbruch
grep {findWhat:"Abbildung \\d+"} {noBreak:true} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:true, includeMasterPages:true, includeFootnotes:true} //Abbildung 9 - kein Umbruch



Kennst Du den Rekorder RecordFindChange_CS3-CS5.jsx?

Damit kannst Du (in der Regel) die aktuellen Ersetzen-Einstellungen für TEXT- und GREP-Suche für findChangeByList.jsx aufzeichnen.
Allerdings scheitert er bei mir in CS4 bei der Aufzeichnung der Kerning-Methode.
Keine Ahnung, an was das liegt. Muss ich gelegentlich mal genauer untersuchen.


als Antwort auf: [#477310]

Skript KerningOrNoBreak Fehler unter CS5

--silke--
Beiträge gesamt: 27

2. Aug 2011, 18:44
Beitrag # 10 von 10
Beitrag ID: #477343
Bewertung:
(7528 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

dein überarbeitetes KerningOrNoBreak läuft,
findChangeByList.jsx plus die neue txt -- erstellt mit Hilfe deiner Musterzeilen -- läuft,
RecordFindChange_CS3-CS5.jsx läuft bei mir nicht.

Egal, ich bin viel schlauer, sehr glücklich und weniger veraltet ;-) Du glaubst nicht, wie viele Tage ich rumgesucht und nachgedacht habe, bevor ich letztlich die Frage eingestellt habe -- du hast mir sehr geholfen!

Danke
Silke Doepner


als Antwort auf: [#477322]
X