Since workspaces.acrobat.com is retiring soon, placing the (above) refered complete script here itself: --------------------------------------------------------- /*********************************************************************************************************** * $$FileName EclipseHelp Generator.jsx * * $$Description This script file generates Eclipse help from RoboHelp Project * (works for version 9 & above.) * * $$Author Praful Jain * * $$Modified By Amit Agarwal (Added index.xml generation) * * Copyright (c) 2014 Adobe Systems Incorporated. All Rights Reserved. ************************************************************************************************************/ var mainDlg; //load all the information var OPF_TITLE; var OPF_PROVIDER; var OPF_VERSION; var OPF_ID; var userOutputFolder; var outputFolder; var currentProject; var strTOCOutputXML; var szCurrentXMLSSLName; var PAGE = "page"; var BOOK = "book"; var TITLE = "title"; var URL = "url"; var ITEM = "item"; var CHUNK = "chunk"; var NAME = "name"; var REF = "ref"; var INDEXDATA = "indexdata"; var CHUNKINFO = "chunkinfo"; var KEY = "key"; var TOPIC = "topic"; var ECLIPSEHELPCONFXMLFILE = "RH_EclipseHelp.xml"; var PLUGINFILENAME = "plugin.xml"; var OUTPUTTOCFILENAME = "toc.xml"; var OUTPUTINDEXFILENAME = "index.xml"; var listOfTOCFiles = new Array(); //this is the main UI dialog string var mainDlgResource = "dialog { \ properties: { closeButton: false }, \ text:'Generate Eclipse Help output', \ g_Output: Group { \ st: StaticText { \ text:'Help Output Location:' \ }, \ et: EditText { \ characters: 40 \ }, \ btn: Button{ \ text: 'Browse' \ } \ }, \ g_SSL: Group { orientation: 'row', alignment: ['fill', 'bottom'], \ st: StaticText { \ text:'Select WebHelp output SSL:' \ }, \ ddl: DropDownList { alignment: ['fill', 'center']} \ }, \ tabnav: Panel { \ type:'tabbedpanel', \ helpTip:'Panel: type tabbedpanel', \ minimumSize:[500, 250], \ metaTab: Panel { \ type:'tab', text:'Eclipse Help Information', \ orientation: 'column', \ alignChildren:'right', \ g_Title: Group { \ st: StaticText { \ text:'Title:' \ }, \ et: EditText { \ characters: 60 \ } \ }, \ g_Provider: Group { \ st: StaticText { \ text:'Provider Name:' \ }, \ et: EditText { \ characters: 60 \ } \ }, \ g_Version: Group { \ st: StaticText { \ text:'Version:' \ }, \ et: EditText { \ characters: 60 \ } \ }, \ g_ID: Group { \ st: StaticText { \ text:'ID:' \ }, \ et: EditText { \ helpTip:'Enter Plugin ID here', \ characters: 60 \ } \ } \ } \ }, \ btnGroup: Group { \ alignment:['right', 'bottom'], \ okBtn: Button { \ text:'Generate' \ }, \ cancelBtn: Button { \ text:'Close' \ } \ } \ } "; //start main(); function main() { if (isValidType(RoboHelp)) { //check for the project open currentProject = RoboHelp.getCurrentProject(); if (isValidType(currentProject)) { //we need to show the main dialog now showMainDialog(); } else { alert("Please open project"); } } else { alert("Please launch RoboHelp HTML"); } } function readFile(szFilePath) { return RoboHelp.readWholeFile(szFilePath); //this takes care of BOM, encoding and all } function writeToFile(szFilePath, szOutput, bWriteUsingNewFunction) { var bSuccess = false; if (bWriteUsingNewFunction) { bSuccess = RoboHelp.writeWholeFile(szFilePath, szOutput); //this takes care of BOM and encoding as well. } if (!bSuccess) { var fileObj = new File(szFilePath); fileObj.open("w"); fileObj.write(szOutput); fileObj.close(); bSuccess = true; } return bSuccess; } function AddEventHandlers() { mainDlg.btnGroup.okBtn.onClick = OnGenerateBtnClick; mainDlg.g_Output.btn.onClick = onBrowseOutputClick; } function showMainDialog() { mainDlg = new Window(mainDlgResource); //set close button as cancel button now mainDlg.cancelElement = mainDlg.btnGroup.cancelBtn; //set the generate button command handler AddEventHandlers(); //we need to load the output SSL dialog now LoadDDList(); //we need to load all the saved values as well LoadAllSavedInformation(); mainDlg.show(); } function isEmptyString(szString) { var bRetVal = true; if (isValidType(szString)) { szString = trim(szString); bRetVal = szString.length == 0; } return bRetVal; } function FilePathExists(szFile) { var bRetVal = false; if (!isEmptyString(szFile)) { //check if the file exists or not var file = new File(szFile); if (isValidType(file)) { bRetVal = file.exists; } } return bRetVal; } function trim(szString) { return szString.replace(/^\s+|\s+$/g, ""); } function ValidateAllInputs() { var bRetVal = true; var szOutputFile = mainDlg.g_Output.et.text; var szHelpTitle = mainDlg.tabnav.metaTab.g_Title.et.text; var szHelpProvider = mainDlg.tabnav.metaTab.g_Provider.et.text; var szHelpVersion = mainDlg.tabnav.metaTab.g_Version.et.text; var szHelpID = mainDlg.tabnav.metaTab.g_ID.et.text; //check for output file location if (isEmptyString(szOutputFile) || !FilePathExists(szOutputFile)) { bRetVal = false; Window.alert("Please specify valid Output File Path"); mainDlg.g_Output.et.active = true; } else if (isEmptyString(szHelpTitle)) { bRetVal = false; Window.alert("Please specify Help Title"); mainDlg.tabnav.metaTab.g_Title.et.active = true; } else if (isEmptyString(szHelpProvider)) { bRetVal = false; Window.alert("Please specify Provider Name"); mainDlg.tabnav.metaTab.g_Provider.et.active = true; } else if (isEmptyString(szHelpVersion)) { bRetVal = false; Window.alert("Please specify Help Version"); mainDlg.tabnav.metaTab.g_Version.et.active = true; } else if (isEmptyString(szHelpID)) { bRetVal = false; Window.alert("Please specify Help ID"); mainDlg.tabnav.metaTab.g_ID.et.active = true; } return bRetVal; } function onBrowseOutputClick() { var folder = new Folder(mainDlg.g_Output.et.text); var selectedFolder = folder.selectDlg("Select Eclipse Help Output Location"); if (isValidType(selectedFolder)) { mainDlg.g_Output.et.text = selectedFolder.fsName; } return isValidType(selectedFile); } function ReadXMLChild(xml, tagName, TextField, defaultValue) { var child = null; if (isValidType(xml)) { child = xml.child(tagName); } if (isValidType(child)) { TextField.text = child.toString(); } if (isEmptyString(TextField.text)) { TextField.text = defaultValue; } } function LoadDDList() { var sslManager = currentProject.SSLManager; var nCount = sslManager.count; for (var i = 1; i <= nCount; i++) { var ssl = sslManager.item(i); if (ssl.layoutType == RoboHelp.SSLLayoutType.WEBHELP) { //this is output, add this to DD mainDlg.g_SSL.ddl.add("item", ssl.name); } } } function SaveAllInformation() { //we need to save the 7zip information in common location, var xmloutput = new XML("<eclipsehelpinfo/>"); //we need to save the project specific information in the project folder area only //we need the currentProject Path var projectXMLFile = currentProject.path + "\\" + ECLIPSEHELPCONFXMLFILE; //we need to read all the information now xmloutput = new XML("<eclipsehelpinfo/>"); var szSSLName = ""; if (isValidType(mainDlg.g_SSL.ddl.selection)) { szSSLName = mainDlg.g_SSL.ddl.selection.toString(); } xmloutput.appendChild(GetNewXMLChild("sslname", szSSLName)); xmloutput.appendChild(GetNewXMLChild("title", mainDlg.tabnav.metaTab.g_Title.et.text)); xmloutput.appendChild(GetNewXMLChild("provider", mainDlg.tabnav.metaTab.g_Provider.et.text)); xmloutput.appendChild(GetNewXMLChild("version", mainDlg.tabnav.metaTab.g_Version.et.text)); xmloutput.appendChild(GetNewXMLChild("id", mainDlg.tabnav.metaTab.g_ID.et.text)); xmloutput.appendChild(GetNewXMLChild("outputfile", mainDlg.g_Output.et.text)); writeToFile(projectXMLFile, xmloutput.toXMLString(), true); } function LoadAllSavedInformation() { //we need to load the project specific information as well //we need the currentProject Path var projectXMLFile = currentProject.path + "\\" + ECLIPSEHELPCONFXMLFILE; szXML = readFile(projectXMLFile); inputXML = null; if (!isEmptyString(szXML)) { //we need to load the XML and read all the information now try { inputXML = new XML(szXML); } catch (e) { inputXML = null; } } ReadXMLChild(inputXML, "sslname", mainDlg.tabnav.metaTab.g_Title.et, ""); var szSSLName = mainDlg.tabnav.metaTab.g_Title.et.text; mainDlg.tabnav.metaTab.g_Title.et.text = ""; ReadXMLChild(inputXML, "title", mainDlg.tabnav.metaTab.g_Title.et, currentProject.name); ReadXMLChild(inputXML, "provider", mainDlg.tabnav.metaTab.g_Provider.et, "RoboHelp"); ReadXMLChild(inputXML, "version", mainDlg.tabnav.metaTab.g_Version.et, "1.00"); ReadXMLChild(inputXML, "id", mainDlg.tabnav.metaTab.g_ID.et, currentProject.name); ReadXMLChild(inputXML, "outputfile", mainDlg.g_Output.et, ""); //we need to select the ssl name from drop down list now UpdateSSLSelection(mainDlg.g_SSL.ddl, szSSLName); } function UpdateSSLSelection(dropdownControl,szSSLName) { var currentSelectionIndex = 0; for (var index = 0; index < dropdownControl.children.length; index++) { if (dropdownControl.children[index].toString() == szSSLName) { currentSelectionIndex = index; break; } } dropdownControl.selection = dropdownControl.children[currentSelectionIndex]; } function GetNewXMLChild(tagName, tagValue) { return new XML("<" + tagName + "><![CDATA[" + tagValue + "]]></" + tagName + ">"); } function OnGenerateBtnClick() { //before going further we need to check if all the things are in place or not if (ValidateAllInputs()) { //in this case we need to save this information in a file and start the generate process now SaveAllInformation(); //load all the information OPF_TITLE = mainDlg.tabnav.metaTab.g_Title.et.text; OPF_PROVIDER = mainDlg.tabnav.metaTab.g_Provider.et.text; OPF_VERSION = mainDlg.tabnav.metaTab.g_Version.et.text; OPF_ID = mainDlg.tabnav.metaTab.g_ID.et.text; if (isValidType(mainDlg.g_SSL.ddl.selection)) { szCurrentXMLSSLName = mainDlg.g_SSL.ddl.selection.toString(); } userOutputFolder = mainDlg.g_Output.et.text; mainDlg.close(); //hide the main dialog now GenerateEclipseHelpFormat(); } } function GenerateEclipseHelpFormat() { var bSuccess = true; ShowMessage("\nStarting the Generation of Eclipse Help Output Now....\n"); outputFolder = new Folder(userOutputFolder); strTOCOutputXML = ""; //listOfTOCFiles = new Array(); strProjectName = currentProject.name; if (GenerateOutput()) { //create TOC File bSuccess = bSuccess && CreateTOCFile(); //create plugin file now bSuccess = bSuccess && CreatePluginFile(); //create Index File bSuccess = bSuccess && CreateIndexFile(); if (bSuccess) { ShowMessage("\n EclipseHelp Generated Successfully!"); alert("EclipseHelp Generated Successfully!"); } else { alert("Script Failed"); } } } function CreateTOCFile() { ShowMessage("\nCreating TOC File Now"); var bSuccess = false; var baseTOCFile = new File(outputFolder.fsName + "\\whxdata\\whtoc_xml.js"); if (baseTOCFile.exists) { //read this base TOC now PatchEclipseHelpTOC("whtoc.xml"); bSuccess = true; } else { alert('TOC file not found'); } return bSuccess; } function AddChunk(tNode) { var fileName = getAttributeFromXML(tNode,REF); var labelName = getAttributeFromXML(tNode,NAME); var newFile = new File(outputFolder.fsName.concat("\\eclipse_", fileName)); listOfTOCFiles.push(newFile); var y = new XML("<toc label=\"" + EscapeAllXMLValues(labelName) + "\">"); y.appendChild(PatchEclipseHelpTOC(fileName)); var szXMLOutput = GenerateXMLOutput(y.toXMLString()); writeToFile(newFile.fsName, szXMLOutput); var x = new XML("<topic label=\"" + EscapeAllXMLValues(labelName) + "\">"); return x.appendChild(XML("<link toc=\"" + EscapeAllXMLValues(newFile.displayName) + "\" />")); ; } function GetXMLContentFromJSFile(szBuffer){ var szRetVal = szBuffer; var szTemp; var index = szBuffer.indexOf('"'); if(index!=-1){ szTemp = szBuffer.substr(index+1); //find the last index of " index = szTemp.lastIndexOf('"'); if(index!=-1) { szTemp = szTemp.substr(0,index); //we have the XML convert \" to " szRetVal =ReplaceString(szTemp,"\\\\\"",'\"'); } } return szRetVal; } function PatchEclipseHelpTOC(szFileName) { var inputTOCFile = new File(outputFolder.fsName + "\\whxdata\\" + szFileName); if(!inputTOCFile.exists) { szFileName=ReplaceString(szFileName,'.xml','_xml.js'); inputTOCFile = new File(outputFolder.fsName + "\\whxdata\\" + szFileName); } var szBuffer = readFile(inputTOCFile.fsName); var szXMLBuffer = GetXMLContentFromJSFile(szBuffer); var xmlInput = new XML(szXMLBuffer); var books = xmlInput.children(); var ec = XML(String("<toc/>")); if (books.length() <= 0) { //this case is for whtoc.xml which is always <toc root="whdata0.xml"></toc> if (xmlInput.name() == "toc") { AddRoot(xmlInput) } } if (books.length() == 1) { var tNode = books; if (tNode.name() == ITEM) { ec = ec.appendChild(AddItem(tNode)); } else if (tNode.name() == BOOK) { ec = ec.appendChild(AddBook(tNode)); } } else { var i = 0; for (i = 0; i < books.length(); i++) { var tNode = books.child(i); if (tNode.name() == ITEM) { ec = ec.appendChild(AddItem(tNode)); } else if (tNode.name() == BOOK) { ec = ec.appendChild(AddBook(tNode)); } } } return ec.children(); } function PatchEclipseHelpIndex(szFileName) { var inputIndexFile = new File(outputFolder.fsName + "\\whxdata\\" + szFileName); if(!inputIndexFile.exists) { szFileName=ReplaceString(szFileName,'.xml','_xml.js'); inputIndexFile = new File(outputFolder.fsName + "\\whxdata\\" + szFileName); } var szBuffer = readFile(inputIndexFile.fsName); var szXMLBuffer = GetXMLContentFromJSFile(szBuffer); var xmlInput = new XML(szXMLBuffer); var books = xmlInput.children(); var indexXML; if(books.length() == 1) { var tNode = books; if(tNode.name() == CHUNKINFO) indexXML = AddIndex(tNode); else Window.alert("Script failed as index data file is incorrect, please check whidx_xml.js"); } else { ShowMessage ("Script failed as no index data file was found, please check whidx_xml.js"); return true; } if (writeToFile(outputFolder.fsName + "\\"+OUTPUTINDEXFILENAME+"", GenerateXMLOutput(indexXML), true)) return true; else { ShowMessage ("Script failed in writing index output xml"); return; } } function AddIndex(tNode) { var fileName = tNode.attribute(URL); return ParseIndexFile(fileName.toString()); } function ParseIndexFile(szFileName) { var inputIndexFile = new File(outputFolder.fsName + "\\whxdata\\" + szFileName); if(!inputIndexFile.exists) { szFileName = ReplaceString(szFileName,'.xml','_xml.js'); inputIndexFile = new File(outputFolder.fsName + "\\whxdata\\" + szFileName); } var szBuffer = readFile(inputIndexFile.fsName); var szXMLBuffer = GetXMLContentFromJSFile(szBuffer); var xmlInput = new XML(szXMLBuffer); var keys = xmlInput.children(); var indexXML = XML(String("<index/>")); var i = 0; if(keys.length() == 1) { indexXML = indexXML.appendChild(AddEntry(keys)); } else { for(i=0;i<keys.length();i++) { var tNode = keys.child(i); if(tNode.name() == KEY) indexXML = indexXML.appendChild(AddEntry(tNode)); else ShowMessage ("Index key did not match in the XML"); } } return indexXML; } function AddEntry(tNode) { var keyName = tNode.attribute(NAME); var keyXML = XML(String("<entry keyword=\"" + keyName + "\"/>")); var keyChildren = tNode.children(); var i = 0; if(keyChildren.length() == 1) { var tChild = keyChildren; if(tChild.name() == KEY) keyXML = keyXML.appendChild(AddEntry(tChild)); else if(tChild.name() == TOPIC) keyXML = keyXML.appendChild(AddTopic(tChild)); } else { for(i = 0; i < keyChildren.length();i++) { var tChild = keyChildren.child(i); if(tChild.name() == KEY) keyXML = keyXML.appendChild(AddEntry(tChild)); else if(tChild.name() == TOPIC) keyXML = keyXML.appendChild(AddTopic(tChild)); } } return keyXML; } function AddTopic(tNode) { var url = tNode.attribute(URL); var topicXML = XML(String("<topic href=\"" + url + "\"/>")); return topicXML; } function AddItem(tItem) { var szName = getAttributeFromXML(tItem, NAME); var szURL = getAttributeFromXML(tItem, URL); var txt = "<topic label=\"" + EscapeAllXMLValues(szName) + "\" "; if(!isEmptyString(szURL)) { txt += "href=\"" + EscapeAllXMLValues(szURL) + "\" "; } txt += "/>"; return new XML(txt); } function AddBook(tBook) { var x = AddItem(tBook); var tChildren = tBook.children(); var i = 0; if (tChildren.length() == 1) { var tNode = tChildren; if (tNode.name() == ITEM) x = x.appendChild(AddItem(tNode)); else if (tNode.name() == BOOK) x = x.appendChild(AddBook(tNode)); else if (tNode.name() == CHUNK) x = AddChunk(tNode); } else { for (i = 0; i < tChildren.length(); i++) { var tNode = tChildren.child(i); if (tNode.name() == ITEM) x = x.appendChild(AddItem(tNode)); else if (tNode.name() == BOOK) x = x.appendChild(AddBook(tNode)); else if (tNode.name() == CHUNK) x = AddChunk(tNode); } } return x; } function AddRoot(xl) { var tXML = XML(String("<toc label=\"" + EscapeAllXMLValues(OPF_TITLE) + "\"/>")); var res = PatchEclipseHelpTOC(getAttributeFromXML(xl, "root")); var tX = tXML.appendChild(res); var ecTOC = File(outputFolder.fsName.concat("\\"+OUTPUTTOCFILENAME)); var szXMLOutput = GenerateXMLOutput(tX.toXMLString()); writeToFile(ecTOC.fsName, szXMLOutput, true) } function CreatePluginFile() { ShowMessage("\nCreating Plugin File Now"); var pluginfile = new File(outputFolder.fsName + "\\" + PLUGINFILENAME); var szXMLOutput = "<plugin "; szXMLOutput += "name=\"" + EscapeAllXMLValues(OPF_TITLE) + "\" "; szXMLOutput += "id=\"" + EscapeAllXMLValues(OPF_ID) + "\" "; szXMLOutput += "version=\"" + EscapeAllXMLValues(OPF_VERSION) + "\" "; szXMLOutput += "provider-name=\"" + EscapeAllXMLValues(OPF_PROVIDER) + "\" "; szXMLOutput += ">\n"; szXMLOutput += "<extension point=\"org.eclipse.help.toc\">\n<toc file=\""+OUTPUTTOCFILENAME+"\" primary=\"true\" />\n"; if (isValidType(listOfTOCFiles) && listOfTOCFiles.length > 0) { for (; listOfTOCFiles.length > 0; ) { var tFile = listOfTOCFiles.pop(); szXMLOutput += "\n<toc file=\"" + EscapeAllXMLValues(tFile.displayName) + "\" />"; } } szXMLOutput += "</extension>"; szXMLOutput += "<extension point=\"org.eclipse.help.index\">"; szXMLOutput += "<index file=\""+OUTPUTINDEXFILENAME+"\"/>"; szXMLOutput += "\n</extension>\n</plugin>"; return writeToFile(pluginfile.fsName, GenerateXMLOutput(szXMLOutput), true); } function CreateIndexFile() { ShowMessage("\nCreating Index File Now"); var bSuccess = false; var baseIndexFile = new File(outputFolder.fsName + "\\whxdata\\whidx_xml.js"); if (baseIndexFile.exists) { // read this base Index now bSuccess = PatchEclipseHelpIndex("whidx.xml"); // the bSuccess is false if the index is not patched } else { alert('Index file not found'); } return bSuccess; } function GenerateXMLOutput(szOutput) { var szRetVal = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; //start of XML file var xml = new XML(szOutput); return szRetVal + xml.toXMLString(); } function GenerateOutput() { ShowMessage("\nGenerating Webhelp output..."); strProjectName = currentProject.name; var sslManager = currentProject.SSLManager; var nCount = sslManager.count; var bWebHelpOutputExists = false; for (var i = 1; i <= nCount; i++) { var ssl = sslManager.item(i); if (ssl.layoutType == RoboHelp.SSLLayoutType.WEBHELP && ssl.name == szCurrentXMLSSLName) { bWebHelpOutputExists = true; break; } } if (!bWebHelpOutputExists) { alert("WebHelp Output SSL does not exist. Please create one"); } else { //we need to check if there is a multiple context defined or not if (!isMultipleContentCategoryDefined(ssl)) { var szOldSSLOutputFileName = ssl.outputFileName; //we need to clean up the folder as well now CleanUp(outputFolder, true); if (!outputFolder.exists) { CreateFolderRecursive(outputFolder); } var szOldBreadCrumbOption; var szOldTOCShowOption; //we need to set some values like //reset breadcrumb and reset toc navigation var sslFilePath = currentProject.path + "\\" + ssl.name + ".ssl"; if (!FilePathExists(sslFilePath) || isEmptyString(szOldSSLOutputFileName)) { ssl.generate(); } szOldSSLOutputFileName = ssl.outputFileName; //get the old values first szOldBreadCrumbOption = ssl.getSpecificProperty("m_bAddBreadcrumbs"); szOldTOCShowOption = ssl.getSpecificProperty("m_strTopicBarSelOrder"); //now set the new values var szNewTOCShowOption = szOldTOCShowOption; szNewTOCShowOption = ReplaceString(szNewTOCShowOption, "TpcShow|", ""); ssl.setSpecificProperty("m_bAddBreadcrumbs", "0"); ssl.setSpecificProperty("m_strTopicBarSelOrder", szNewTOCShowOption); //before generate first save the old HTML output option var bHTMLOutputOption = false; bHTMLOutputOption = RoboHelp.convertToHTMLOutput; RoboHelp.convertToHTMLOutput = true; ssl.outputFileName = outputFolder.fsName + "\\index.htm"; ssl.generate(); ShowMessage("\nWebHelp Output Generated successfully"); var tempFile = new File(szOldSSLOutputFileName); tempFile = tempFile.parent; if (!tempFile.exists) { CreateFolderRecursive(tempFile); } ssl.outputFileName = szOldSSLOutputFileName; RoboHelp.convertToHTMLOutput = bHTMLOutputOption; ssl.setSpecificProperty("m_bAddBreadcrumbs", szOldBreadCrumbOption); ssl.setSpecificProperty("m_strTopicBarSelOrder", szOldTOCShowOption); } else { bWebHelpOutputExists = false; alert("Multiple content categories are not supported for Eclipse Help generation."); } } return bWebHelpOutputExists; } function isMultipleContentCategoryDefined(ssl) { var iCount = 0; if (isValidType(ssl)) { var contentManager = ssl.ContentManager; if (isValidType(contentManager)) { iCount = contentManager.count; } } return iCount > 1; } function ReplaceString(szStringToBeReplaced, szStringToSearch, szStringToReplace) { try { if (isValidType(szStringToBeReplaced) && isValidType(szStringToSearch) && isValidType(szStringToReplace)) { var myPattern = new RegExp(szStringToSearch, "gi"); return szStringToBeReplaced.replace(myPattern, szStringToReplace); } } catch (e) { ShowMessage("\nError While calling Replace String function check the string"); } return szStringToBeReplaced; } function EscapeAllXMLValues(szTemp) { if (!isEmptyString(szTemp)) { // special handling for XML restricted characters - Begins // szTemp = ReplaceString(szTemp, "&", "&"); szTemp = ReplaceString(szTemp, "<", "<"); szTemp = ReplaceString(szTemp, ">", ">"); szTemp = ReplaceString(szTemp, "'", "'"); szTemp = ReplaceString(szTemp, "‘", "'"); szTemp = ReplaceString(szTemp, "’", "'"); szTemp = ReplaceString(szTemp, "\"", """); szTemp = ReplaceString(szTemp, "“", """); szTemp = ReplaceString(szTemp, "”", """); } // special handling for XML restricted characters - ends // return szTemp; } function CopyFilesFolder(srcFolder, tarFolder) { var listOfFiles = new Array(); listOfFiles = srcFolder.getFiles("*.*"); for (; listOfFiles.length > 0; ) { tFile = listOfFiles.pop(); if (tFile instanceof Folder) { var tempFolder = Folder(tarFolder.fsName.concat("\\", tFile.displayName)); if (tempFolder.exists == false) { CreateFolderRecursive(tempFolder); } CopyFilesFolder(tFile, tempFolder); } else { tFile.copy(tarFolder.fsName.concat("\\", tFile.displayName)); } } } function CreateFolderRecursive(folderObject) { if (isValidType(folderObject) && !folderObject.exists) { //try to create the parent first of all CreateFolderRecursive(folderObject.parent); folderObject.create(); } } function CleanUp(folder, deleteRootFolder) { if (folder.exists == false) { return false; } var listOfFiles = folder.getFiles("*.*"); var tFile; for (; listOfFiles.length > 0; ) { tFile = listOfFiles.pop(); if (tFile instanceof Folder) { CleanUp(tFile, true); } else { tFile.remove(); } } if (deleteRootFolder == true) { folder.remove(); } if (isValidType(listOfFiles)) { delete listOfFiles; } } function getAttributeFromXML(xml, attributeName) { var szRetVal = null; if (isValidType(xml)) { var attributeValue = xml.attribute(attributeName); if (isValidType(attributeValue)) { szRetVal = attributeValue.toString(); } } return szRetVal; } function isValidType(value) { if (typeof (value) !== 'undefined' && value != null) { return true; } return false; } function ShowMessage(msg) { RoboHelp.project.outputMessage(msg); } ---------------------------------------------------------
... View more