-
-
Save sys9kdr/b1232c47956dcd017b1644ddd4392584 to your computer and use it in GitHub Desktop.
Slightly modified `FindChangeByList.jsx` for InDesign CS6 - supports multiple List file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//FindChangeByList.jsx | |
//An InDesign CS6 JavaScript | |
/* | |
@@@BUILDINFO@@@ "FindChangeByList.jsx" 3.0.0 15 December 2009 | |
Mod by senki on 2015-06-29 | |
- added dialog with list of files under FindChangeSupport | |
- and choose between. default is the first | |
*/ | |
//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>findChangeOptions<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(){ | |
// Choose between files | |
var lst = getFolderFilenames ("/FindChangeSupport"); | |
var daChoice = chooseFromList ( lst , 'Choose file:' ); | |
// old script start here | |
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(lst[daChoice]); | |
break; | |
default: | |
//Something was selected, but it wasn't a text object, so search the document. | |
myFindChangeByList(app.documents.item(0), lst[daChoice]); | |
} | |
} | |
else{ | |
//Nothing was selected, so simply search the document. | |
myFindChangeByList(app.documents.item(0), lst[daChoice]); | |
} | |
} | |
else{ | |
alert("No documents are open. Please open a document and try again."); | |
} | |
} | |
function myDisplayDialog(lstChoose){ | |
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:"Selection", 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, lstChoose); | |
} | |
else{ | |
myDialog.destroy(); | |
} | |
} | |
function myFindChangeByList(myObject, myFindChangeFile){ | |
var myScriptFileName, myFindChangeFileName, myScriptFile, myResult; | |
var myFindChangeArray, myFindPreferences, myChangePreferences, myFindLimit, myStory; | |
var myStartCharacter, myEndCharacter; | |
var myFindChangeFile = myFindFile("/FindChangeSupport/" + myFindChangeFile) | |
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.substring(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; | |
} | |
function getFolderFilenames (myFolderPath) { | |
var myScriptFile = myGetScriptPath(); | |
var myScriptFile = File(myScriptFile); | |
var myScriptFolder = myScriptFile.path; | |
myFolderPath = myScriptFolder + myFolderPath; | |
if(Folder(myFolderPath).exists == false){ | |
//Display a dialog. | |
myFolderPath = File.openDialog("Choose the folder containing your find/change list"); | |
} | |
var myFiles = Folder(myFolderPath).getFiles(); | |
var myFileList = new Array(); | |
for (var i = 0; i < myFiles.length; i++) { | |
myFileList[i] = myFiles[i].name; | |
}; | |
return (myFileList ); | |
} | |
//------------------------------------------------------------------------- | |
//-- Taken from: http://extendscript.blogspot.hu/2009/07/select-element-item-via-radio-buttons.html | |
//------------------------------------------------------------------------- | |
function chooseFromList(lst, prmt, dflt) { | |
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL; | |
dflt = dflt || 0; | |
dflt = (dflt <0 ) ? 0 : dflt; | |
var listDialog = app.dialogs.add({ | |
canCancel: true, | |
name: prmt | |
}); | |
var buttons = new Array(); with(listDialog) { | |
with(dialogColumns.add()) { | |
var userChoice = radiobuttonGroups.add() | |
with(userChoice) { | |
for (var loopIndex = 0; loopIndex < lst.length; loopIndex++) { | |
buttons[loopIndex] = radiobuttonControls.add({ | |
staticLabel: String(lst[loopIndex]) | |
}); | |
} | |
selectedButton = dflt; | |
} | |
if (this.scriptVersion) { | |
with(dialogRows.add()) { | |
with(dialogRows.add()) { | |
staticTexts.add({ | |
staticLabel: String(this.scriptVersion) | |
}); | |
} | |
} | |
} | |
} | |
} | |
var listResult = listDialog.show(); | |
return (listResult ? userChoice.selectedButton : -1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment