Skip to main content
Participant
January 9, 2014
Question

FindChangeByList.jsx changing multyple files

  • January 9, 2014
  • 0 replies
  • 818 views

Hello everyone,

I found this helpfull script wich change all open documents for CS5.5.

Is it possible to use it for CS4? At this moment it doesnt work!

Here`s the links:

http://forums.adobe.com/thread/947527

Here`s the script:

/ Copyright ZITRONE Romano Studer

// Melbourne, Australia 2012

// www.zitrone.com.au

// Changes to the code in order to process multyple files

//target any InDesign

#target "InDesign"

//FindChangeByList.jsx

//An InDesign CS5.5 JavaScript

/* 

@@@BUILDINFO@@@ "FindChangeByList.jsx" 3.0.0 15 December 2009

*/

//Loads a series of tab-delimited strings from a text file, then performs a series

//of find/change operations based on the strings read from the file.

//

//The data file is tab-delimited, with carriage returns separating records.

//

//The format of each record in the file is:

//findType<tab>findProperties<tab>changeProperties<tab>findChangeOptio ns<tab>description

//

//Where:

//<tab> is a tab character

//findType is "text", "grep", or "glyph" (this sets the type of find/change operation to use).

//findProperties is a properties record (as text) of the find preferences.

//changeProperties is a properties record (as text) of the change preferences.

//findChangeOptions is a properties record (as text) of the find/change options.

//description is a description of the find/change operation

//

//Very simple example:

//text          {findWhat:"--"}          {changeTo:"^_"}          {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}          Find all double dashes and replace with an em dash.

//

//More complex example:

//text          {findWhat:"^9^9.^9^9"}          {appliedCharacterStyle:"price"}          {include footnotes:true, include master pages:true, include hidden layers:true, whole word:false}          Find $10.00 to $99.99 and apply the character style "price".

//

//All InDesign search metacharacters are allowed in the "findWhat" and "changeTo" properties for findTextPreferences and changeTextPreferences.

//

//If you enter backslashes in the findWhat property of the findGrepPreferences object, they must be "escaped"

//as shown in the example below:

//

//{findWhat:"\\s+"}

//

//For more on InDesign scripting, go to http://www.adobe.com/products/indesign/scripting/index.html

//or visit the InDesign Scripting User to User forum at http://www.adobeforums.com

//

main();

function main(){

          var myObject;

          //Make certain that user interaction (display of dialogs, etc.) is turned on.

          app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

          if(app.documents.length > 0){

                    if(app.selection.length > 0){

                              switch(app.selection[0].constructor.name){

                                        case "InsertionPoint":

                                        case "Character":

                                        case "Word":

                                        case "TextStyleRange":

                                        case "Line":

                                        case "Paragraph":

                                        case "TextColumn":

                                        case "Text":

                                        case "Cell":

                                        case "Column":

                                        case "Row":

                                        case "Table":

                                                  myDisplayDialog();

                                                  break;

                                        default:

                                                  //Something was selected, but it wasn't a text object, so search the document.

                                                  myFindChangeByList(app.documents.item(0));

                              }

                    }

                    else{

            //Nothing was selected, so simply search the document.

            var myNumberOfDocuments = app.documents.length;

           

            //The FindChangeList.txt file used to be aquirred inside the myFindChangeByList function. Hence we would ask for it many times.

            //Here we ask only one time. We use the same FindChangeList.txt file for the operation on all InDesign files.

            var myFindChangeFile = myFindFile("/FindChangeSupport/FindChangeList.txt")

           

            for(i=0;i<myNumberOfDocuments;i++){

                myFindChangeByList(app.documents.item(i), myFindChangeFile);

            }

                    }

          }

          else{

                    alert("No documents are open. Please open a document and try again.");

          }

}

function myDisplayDialog(){

          var myObject;

          var myDialog = app.dialogs.add({name:"FindChangeByList"});

          with(myDialog.dialogColumns.add()){

                    with(dialogRows.add()){

                              with(dialogColumns.add()){

                                        staticTexts.add({staticLabel:"Search Range:"});

                              }

                              var myRangeButtons = radiobuttonGroups.add();

                              with(myRangeButtons){

                                        radiobuttonControls.add({staticLabel:"Document", checkedState:true});

                                        radiobuttonControls.add({staticLabel:"Selected Story"});

                                        if(app.selection[0].contents != ""){

                                                  radiobuttonControls.add({staticLabel:"Select ion", checkedState:true});

                                        }

                              }

                    }

          }

          var myResult = myDialog.show();

          if(myResult == true){

                    switch(myRangeButtons.selectedButton){

                              case 0:

                                        myObject = app.documents.item(0);

                                        break;

                              case 1:

                                        myObject = app.selection[0].parentStory;

                                        break;

                              case 2:

                                        myObject = app.selection[0];

                                        break;

                    }

                    myDialog.destroy();

                    myFindChangeByList(myObject);

          }

          else{

                    myDialog.destroy();

          }

}

function myFindChangeByList(myObject, myFindChangeFile){

          var myScriptFileName, myFindChangeFile, myFindChangeFileName, myScriptFile, myResult;

          var myFindChangeArray, myFindPreferences, myChangePreferences, myFindLimit, myStory;

          var myStartCharacter, myEndCharacter;

          //var myFindChangeFile = myFindFile("/FindChangeSupport/FindChangeList.txt")

          if(myFindChangeFile != null){

                    myFindChangeFile = File(myFindChangeFile);

                    var myResult = myFindChangeFile.open("r", undefined, undefined);

                    if(myResult == true){

                              //Loop through the find/change operations.

                              do{

                                        myLine = myFindChangeFile.readln();

                                        //Ignore comment lines and blank lines.

                                        if((myLine.substring(0,4)=="text")||(myLine.subst ring(0,4)=="grep")||(myLine.substring(0,5)=="glyph")){

                                                  myFindChangeArray = myLine.split("\t");

                                                  //The first field in the line is the findType string.

                                                  myFindType = myFindChangeArray[0];

                                                  //The second field in the line is the FindPreferences string.

                                                  myFindPreferences = myFindChangeArray[1];

                                                  //The second field in the line is the ChangePreferences string.

                                                  myChangePreferences = myFindChangeArray[2];

                                                  //The fourth field is the range--used only by text find/change.

                                                  myFindChangeOptions = myFindChangeArray[3];

                                                  switch(myFindType){

                                                            case "text":

                                                                      myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

                                                                      break;

                                                            case "grep":

                                                                      myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

                                                                      break;

                                                            case "glyph":

                                                                      myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

                                                                      break;

                                                  }

                                        }

                              } while(myFindChangeFile.eof == false);

                              myFindChangeFile.close();

                    }

          }

}

function myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

          //Reset the find/change preferences before each search.

          app.changeTextPreferences = NothingEnum.nothing;

          app.findTextPreferences = NothingEnum.nothing;

          var myString = "app.findTextPreferences.properties = "+ myFindPreferences + ";";

          myString += "app.changeTextPreferences.properties = " + myChangePreferences + ";";

          myString += "app.findChangeTextOptions.properties = " + myFindChangeOptions + ";";

          app.doScript(myString, ScriptLanguage.javascript);

          myFoundItems = myObject.changeText();

          //Reset the find/change preferences after each search.

          app.changeTextPreferences = NothingEnum.nothing;

          app.findTextPreferences = NothingEnum.nothing;

}

function myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

          //Reset the find/change grep preferences before each search.

          app.changeGrepPreferences = NothingEnum.nothing;

          app.findGrepPreferences = NothingEnum.nothing;

          var myString = "app.findGrepPreferences.properties = "+ myFindPreferences + ";";

          myString += "app.changeGrepPreferences.properties = " + myChangePreferences + ";";

          myString += "app.findChangeGrepOptions.properties = " + myFindChangeOptions + ";";

          app.doScript(myString, ScriptLanguage.javascript);

          var myFoundItems = myObject.changeGrep();

          //Reset the find/change grep preferences after each search.

          app.changeGrepPreferences = NothingEnum.nothing;

          app.findGrepPreferences = NothingEnum.nothing;

}

function myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

          //Reset the find/change glyph preferences before each search.

          app.changeGlyphPreferences = NothingEnum.nothing;

          app.findGlyphPreferences = NothingEnum.nothing;

          var myString = "app.findGlyphPreferences.properties = "+ myFindPreferences + ";";

          myString += "app.changeGlyphPreferences.properties = " + myChangePreferences + ";";

          myString += "app.findChangeGlyphOptions.properties = " + myFindChangeOptions + ";";

          app.doScript(myString, ScriptLanguage.javascript);

          var myFoundItems = myObject.changeGlyph();

          //Reset the find/change glyph preferences after each search.

          app.changeGlyphPreferences = NothingEnum.nothing;

          app.findGlyphPreferences = NothingEnum.nothing;

}

function myFindFile(myFilePath){

          var myScriptFile = myGetScriptPath();

          var myScriptFile = File(myScriptFile);

          var myScriptFolder = myScriptFile.path;

          myFilePath = myScriptFolder + myFilePath;

          if(File(myFilePath).exists == false){

                    //Display a dialog.

                    myFilePath = File.openDialog("Choose the file containing your find/change list");

          }

          return myFilePath;

}

function myGetScriptPath(){

          try{

                    myFile = app.activeScript;

          }

          catch(myError){

                    myFile = myError.fileName;

          }

          return myFile;

}

Thanks!

Raphael

This topic has been closed for replies.