/* @@@BUILDINFO@@@ "illustrator-13.0.jsx" 2.0 221 14-Jul-2006 */ /* @@@START_XML@@@ Adobe Illustrator CS3 This script enables other applications to communicate with Adobe Illustrator CS3. @@@END_XML@@@ */ /*********************************************************************/ /* */ /* Copyright (C) 2004 Adobe Systems, Inc. All rights reserved. */ /* */ /* Module Name: illustrator13.jsx */ /* */ /* Description: Illustrator Cross-DOM implementation for the Bridge. */ /* */ /* */ /* NOTICE: All information contained herein or attendant */ /* hereto is, and remains, the property of Adobe Systems, Inc. */ /* Many of the intellectual and technical concepts contained */ /* herein are proprietary to Adobe Systems, Inc. and may be */ /* covered by U.S. and Foreign Patents or Patents Pending or */ /* are protected as trade secrets. Any dissemination of this */ /* information or reproduction of this material are strictly */ /* forbidden unless prior written permission is obtained from */ /* Adobe Systems, Inc. */ /* */ /*********************************************************************/ /** Set debugging level: 0-2 (0:disable, 1:break on error, 2:break at beginning) */ $.level = 0; /** Guard against loading of multiple revisions of the same startup script. The latest revision will take precedence. */ try { // overall try-catch if (typeof illustrator13 != "undefined") { if (illustrator13.revision == undefined || illustrator13.revision < 2) // in-sync: revision # of current startup script delete illustrator13; else // bail out right here... throw "Object illustrator13() has been defined! New definition is ignored."; } illustrator13 = new Object; illustrator13.revision = 2; // in-sync: revision # of current startup script illustrator13.appName = "illustrator"; illustrator13.targetName = "illustrator-13.0"; illustrator13.ColorModeRGB = 0; illustrator13.ColorModeCMYK = 1; illustrator13.LibraryTypeArtwork= 0; illustrator13.LibraryTypeSwatches= 1; illustrator13.LibraryTypeBrushes= 2; illustrator13.LibraryTypeGraphicStyles= 3; illustrator13.LibraryTypeSymbols= 4; /** Do the file open. @param files File or Array of File to be opened. @return true if all the files are successfully opened. */ illustrator13.open = function ( files ) { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); var fileArray = new Array; if (files instanceof File) fileArray.push(files); else fileArray = files.concat(fileArray); var reply = true; for( var i = 0; i < fileArray.length; i++ ) { try { app.open( fileArray[i] ); } catch (err) { reply = false; //rs = ("Error on open(): " + (err.number & 0xFFFF) + ", " + err.description + ", " + fileArray[i].toString() ); //alert(rs); } } return reply; } else { // create a BridgeTalk message for Illustrator to invoke open var filesString = illustrator13.fileArrayToString ( files ); var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.open (" + filesString + ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** Do the file open with Options @param files File or Array of File to be opened. @return true if all the files are successfully opened. */ illustrator13.openWithOptions = function ( files, colorspace, library ) { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); var fileArray = new Array; if (files instanceof File) fileArray.push(files); else fileArray = files.concat(fileArray); var reply = true; var aiColorSpace = DocumentColorSpace.CMYK; // Initialize with default value if( colorspace == illustrator13.ColorModeRGB ) aiColorSpace = DocumentColorSpace.RGB; else if( colorspace == illustrator13.ColorModeCMYK ) aiColorSpace = DocumentColorSpace.CMYK; var openOpts = new OpenOptions; openOpts.openAs = LibraryType.SWATCHES; if( library == illustrator13.LibraryTypeArtwork ) openOpts.openAs = LibraryType.IllustratorArtwork; else if( library == illustrator13.LibraryTypeSwatches ) openOpts.openAs = LibraryType.SWATCHES; else if( library == illustrator13.LibraryTypeBrushes ) openOpts.openAs = LibraryType.BRUSHES; else if( library == illustrator13.LibraryTypeGraphicStyles ) openOpts.openAs = LibraryType.GRAPHICSTYLES; else if( library == illustrator13.LibraryTypeSymbols ) openOpts.openAs = LibraryType.SYMBOLS; for( var i = 0; i < fileArray.length; i++ ) { try { app.open( fileArray[i], aiColorSpace, openOpts ); } catch (err) { reply = false; //rs = ("Error on open(): " + (err.number & 0xFFFF) + ", " + err.description + ", " + fileArray[i].toString() ); //alert(rs); } } return reply; } else { // create a BridgeTalk message for Illustrator to invoke open var filesString = illustrator13.fileArrayToString ( files ); var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.openWithOptions (" + filesString + "," + colorspace + "," + library + ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** Create a new un-titled document. @param creationOptions Optional Illustrator specific creation settings [ [ ]]. @return true if new artwork is successfully created. */ illustrator13.openAsNew = function () { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); var doc = null; try { // handle valid creation options if (arguments.length > 0) { var colorSpace = null; var width = 0; var height = 0; // []: DocumentColorSpace for (var i = 0; i < arguments.length; i++) { if (typeof(arguments[i]) == "object" && (arguments[i] == DocumentColorSpace.RGB || arguments[i] == DocumentColorSpace.CMYK)) { colorSpace = arguments[i]; break; } } // [ ] : two numbers for (var i = 0; i < arguments.length - 1; i++) { if (typeof(arguments[i]) == "number" && typeof(arguments[i+1]) == "number") { width = arguments[i]; height = arguments[i+1]; break; } } if (colorSpace != null && width > 0 && height > 0) doc = app.documents.add(colorSpace, width, height); else if (colorSpace != null) doc = app.documents.add(colorSpace); else doc = app.documents.add(); } else { doc = app.documents.add(); } } catch (err) { doc = null; //rs = ("Error on reveal(): " + (err.number & 0xFFFF) + ", " + err.description ); //alert(rs); } if (doc != null) return true; else return false; } else { // create a BridgeTalk message for Illustrator to invoke openAsNew var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.openAsNew ("; if (arguments.length > 0) { for (var i = 0; i < arguments.length; i++) { btMessage.body += arguments[i].toSource(); } } btMessage.body += ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** Place linking files. @param files File or Array of File to be place-linked. @return true if all the files are successfully place-linked. */ illustrator13.place = function ( files ) { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); var fileArray = new Array; if (files instanceof File) fileArray.push(files); else fileArray = files.concat(fileArray); var reply = false; if (app.documents.length == 0) { app.documents.add(); } reply = true; for( var i = 0; i < fileArray.length; i++ ) { try { var placedArt = app.activeDocument.placedItems.add(); placedArt.file = fileArray[i]; } catch (err) { // rollback the earlier actions if (placedArt != null && placedArt != undefined) placedArt.remove(); reply = false; //rs = ("Error on place(): " + (err.number & 0xFFFF) + ", " + err.description + ", " + fileArray[i].toString() ); //alert(rs); } } return reply; } else { // create a BridgeTalk message for Illustrator to invoke place var filesString = illustrator13.fileArrayToString ( files ); var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.place (" + filesString + ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** Do the file print. @param files File or Array of File to be printed. @return true if all the files are successfully printed. */ illustrator13.print = function ( files ) { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); var fileArray = new Array; if (files instanceof File) fileArray.push(files); else fileArray = files.concat(fileArray); var reply = true; for( var i = 0; i < fileArray.length; i++ ) { try { var doc = app.open( fileArray[i] ); doc.print(); } catch (err) { reply = false; //rs = ("Error on print(): " + (err.number & 0xFFFF) + ", " + err.description + ", " + fileArray[i].toString() ); //alert(rs); } } return reply; } else { // create a BridgeTalk message for Illustrator to invoke print var filesString = illustrator13.fileArrayToString ( files ); var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.print (" + filesString + ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** Give the target application focus and bring the specified document to the foreground if it is already open. @param file File to be activated. @return true if the file was open and is successfully brought to the foreground. */ illustrator13.reveal = function ( file ) { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); var reply = false; try { for(var index = 0; index < app.documents.length; index ++) { var doc = app.documents[index]; if (doc.fullName.toString() == file.toString()) { doc.activate(); reply = true; break; } } } catch (err) { //rs = ("Error on reveal(): " + (err.number & 0xFFFF) + ", " + err.description + ", " + file.toString() ); //alert(rs); } return reply; } else { // create a BridgeTalk message for Illustrator to invoke reveal var fileString = "File ('" + file.path.toString() + "')";; var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.reveal (" + fileString + ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** Shutdown Illustrator. @param none. @return none. */ illustrator13.quit = function () { if( BridgeTalk.appName == illustrator13.appName ) { try { app.quit(); } catch (err) { //rs = ("Error on quit(): " + (err.number & 0xFFFF) + ", " + err.description); //alert(rs); } } else { // create a BridgeTalk message for Illustrator to invoke quit var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.quit();"; btMessage.send(); } } /** Execute arbitrary Illustrator JavaScript. @param jsscript The script for the Illustrator to run. @return result from evaluating the script. */ illustrator13.executeScript = function ( jsscript ) { if( BridgeTalk.appName == illustrator13.appName ) { BridgeTalk.bringToFront(illustrator13.targetName); try { return eval(jsscript); } catch (err) { //rs = ("Error on executeScript(): " + (err.number & 0xFFFF) + ", " + err.description); //alert(rs); } } else { // create a BridgeTalk message for Illustrator to invoke executeScript var btMessage = new BridgeTalk; btMessage.target = illustrator13.targetName; btMessage.body = "illustrator13.executeScript(" + jsscript + ");"; btMessage.onResult = function(bto) {BridgeTalk.bringToFront(bto.sender);} btMessage.send(); } } /** This routine create a string for the files array that we can transmit over BridgeTalk as text, like this: Array (File ('path1'), File ('path2'), File ('path3')) @param files File or Array of Files. @return String. */ illustrator13.fileArrayToString = function ( files ) { var fileArray = new Array; if (files instanceof File) fileArray.push(files); else fileArray = files.concat(fileArray); return fileArray.toSource(); } /** This routine sets the argument menu node to be enabled if single item is selected. */ illustrator13.singleSelectionEnabled = function (menuElement) { menuElement.enabled = false; if (app.document != undefined) { if (app.document.selectionLength == 1) menuElement.enabled = true; } } /** This routine sets the argument menu node to be enabled if something is selected. */ illustrator13.selectionEnabled = function (menuElement) { menuElement.enabled = false; if (app.document != undefined) { if (app.document.selectionLength > 0) menuElement.enabled = true; } } /** This routine takes an array of thumbnails and returns an array of the files represented by those thumbnail objects. @param thumbnails Array of thumbnails. @return Array of Files. */ illustrator13.thumbnailArrayToFileArray = function (thumbnails) { var filesArray = new Array (); for (var index = 0; index < thumbnails.length; index++ ) { // Filter out folders if (!thumbnails[index].container) { if(thumbnails[index].spec != undefined) { filesArray.push (thumbnails[index].spec); } } } return filesArray; } /** This routine returns the selected files, or if no files are selected, all the files. @return Array of Files. */ illustrator13.getBridgeFileList = function () { var files = new Array; if (app.document.thumbnail != undefined) { var thumbnails = new Array; thumbnails = app.document.getSelection("*"); for (var index = 0; index < thumbnails.length; index++ ) { // Filter out folders if (!thumbnails[index].container) { if(thumbnails[index].spec != undefined) { files.push (thumbnails[index].spec); } } } } return files; } /** This routine takes an array of thumbnails and returns an array of file paths represented by those thumbnail objects. @param thumbnails Array of thumbnails. @return Array of Strings. */ illustrator13.thumbnailArrayToFilePathArray = function (thumbnails) { var filesArray = new Array (); for (var index = 0; index < thumbnails.length; index++ ) { // Filter out folders if (!thumbnails[index].container) { filesArray.push (thumbnails[index].path); } } return filesArray; } /** This routine returns an array of file paths for the selected files, or if no files are selected, all the files. @return Array of Strings. */ illustrator13.getBridgeFilePathList = function () { var files = new Array; if (app.document.thumbnail != undefined) { files = illustrator13.thumbnailArrayToFilePathArray (app.document.getSelection("*")); } return files; } /** Worker routine to place files from Bridge. */ illustrator13.placeLinkFromBridge = function () { var files = new Array; if (app.document.thumbnail != undefined) { var thumbnails = app.document.getSelection("*"); files = illustrator13.thumbnailArrayToFileArray (thumbnails); if (files.length == 0) { alert(localize("$$$/Bridge/Menu/Scripting/Illustrator/NoFilesToPlace=There are no files to place into Illustrator.")); } else { // preflighting app.acquirePhysicalFiles(thumbnails); // call Illustrator place command illustrator13.place (files); } } } /** Returns true iff the current target app is the highest version installed on the user machine. */ illustrator13.CheckHighestInstalledTarget = function() { var thisVersionExists = false; var higherVersionExists = false; if (BridgeTalk.getTargets(null).join().indexOf(illustrator13.appName) >= 0) { var appTargetVersion = illustrator13.targetName.substring(illustrator13.targetName.indexOf('-')+1); var appSpecifiers = BridgeTalk.getTargets(0); for( var i = 0; i < appSpecifiers.length; i++ ) { var appSpecifier = appSpecifiers[i]; if( appSpecifier.indexOf(illustrator13.appName) == 0 ) { // get the version # var appVersion = appSpecifier.substring(appSpecifier.indexOf('-')+1) if (appVersion == appTargetVersion) { thisVersionExists = true; } else if (appVersion > appTargetVersion) { higherVersionExists = true; } } } } if (!higherVersionExists && thisVersionExists ) return true; else return false; } /** Create the default version-less illustrator BridgeTalk namespace */ illustrator13.isHighestInstalledTarget = illustrator13.CheckHighestInstalledTarget(); if (illustrator13.isHighestInstalledTarget) { illustrator = illustrator13; } /** This routine inserts the "Place/Link to Illustrator" menu item into the Bridge object menu and inserts the "Open As AI Library" in right-click context menu for .ai files. */ if (BridgeTalk.appName == "bridge" && illustrator13.isHighestInstalledTarget) { var placeLinkCmd = MenuElement.create("command", localize("$$$/Bridge/Menu/Scripting/Illustrator/PlaceLink=In Illustrator"), "at the end of submenu/Place", "PlaceLinkInIllustrator"); placeLinkCmd.onDisplay = function() { illustrator13.selectionEnabled(this); } placeLinkCmd.onSelect = illustrator13.placeLinkFromBridge; // create illustrator context menu var contextMenu = MenuElement.create( "menu", localize("$$$/AI13/MainContextMenu=Open As AI Library"), "-at the end of Thumbnail", "AIContextMenu" ); contextMenu.onDisplay = function(m) { m.enabled = true; try { m.enabled = app.document.selectionLength > 200 || app.document.getSelection("ai").length > 0; } catch(error) { Window.alert(error); } } // create sub-menu-items var subMenuBrush = MenuElement.create( "command", localize("$$$/AI13/BrushLibrary=AI Brush Library"), "at the end of AIContextMenu", "AIContextMenu/BrushLibrary"); var subMenuGraphic = MenuElement.create( "command", localize("$$$/AI13/GraphicLibrary=AI Graphic Library"), "at the end of AIContextMenu", "AIContextMenu/GraphicLibrary"); var subMenuSwatch = MenuElement.create( "command", localize("$$$/AI13/SwatchLibrary=AI Swatch Library"), "at the end of AIContextMenu", "AIContextMenu/SwatchLibrary"); var subMenuSymbol = MenuElement.create( "command", localize("$$$/AI13/SymbolLibrary=AI Symbol Library"), "at the end of AIContextMenu", "AIContextMenu/SymbolLibrary"); subMenuBrush.onSelect = function() { var thumbnails = app.document.selections; app.acquirePhysicalFiles(thumbnails); var files = illustrator13.thumbnailArrayToFileArray(thumbnails); illustrator13.openWithOptions(files, illustrator13.ColorModeRGB, illustrator13.LibraryTypeBrushes); } subMenuGraphic.onSelect = function() { var thumbnails = app.document.selections; app.acquirePhysicalFiles(thumbnails); var files = illustrator13.thumbnailArrayToFileArray(thumbnails); illustrator13.openWithOptions(files, illustrator13.ColorModeRGB, illustrator13.LibraryTypeGraphicStyles); } subMenuSwatch.onSelect = function() { var thumbnails = app.document.selections; app.acquirePhysicalFiles(thumbnails); var files = illustrator13.thumbnailArrayToFileArray(thumbnails); illustrator13.openWithOptions(files, illustrator13.ColorModeRGB, illustrator13.LibraryTypeSwatches); } subMenuSymbol.onSelect = function() { var thumbnails = app.document.selections; app.acquirePhysicalFiles(thumbnails); var files = illustrator13.thumbnailArrayToFileArray(thumbnails); illustrator13.openWithOptions(files, illustrator13.ColorModeRGB, illustrator13.LibraryTypeSymbols); } } illustrator13.matchesFileExtensions = function ( aThumbnail, extensionsToMatch ) { if(aThumbnail.spec == undefined) { return false; } var period = "."; var index = aThumbnail.spec.name.toString().lastIndexOf(period); if (index > -1) { ext = aThumbnail.spec.name.substring(index+1).toLowerCase(); if (extensionsToMatch.length > 0) { for (var extIndex = 0; extIndex < extensionsToMatch.length; extIndex++ ) { if (ext == extensionsToMatch[extIndex]) return true; } } } return false; } illustrator13.matchesMacFileType = function ( fileType, fileTypesToMatch ) { if (fileTypesToMatch.length > 0 && fileType != "????" && fileType != " " && fileType != null) { for (var i = 0; i < fileTypesToMatch.length; i++ ) { if (fileType == fileTypesToMatch[i]) return true; } } return false; } } // overall try-catch catch(ex) { }