0 Replies Latest reply on Jan 9, 2014 5:18 AM by Raphael.tebarts

    FindChangeByList.jsx changing multyple files

    Raphael.tebarts

      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