//=============================================================================================================== // System : Color Syntax Highlighter // File : Highlight.js // Author : Eric Woodruff (Eric@EWoodruff.us) // Updated : 10/21/2012 // Note : Copyright 2006-2012, Eric Woodruff, All rights reserved // // This contains the script to expand and collapse the regions in the syntax highlighted code. // // This is a customized version for the Sandcastle Help File Builder. It overrides the CopyCode() function // from the Hana, Prototype, and VS2005 presentation styles to remove the line numbering and collapsible // region elements. The VS2010 style does not currently use the CopyCode() function in here as it has its own // version for copying the code. //=============================================================================================================== // Expand/collapse a region function HighlightExpandCollapse(showId, hideId) { var showSpan = document.getElementById(showId), hideSpan = document.getElementById(hideId); showSpan.style.display = "inline"; hideSpan.style.display = "none"; } // Copy the code from a colorized code block to the clipboard. function CopyCode(key) { var idx, line, block, htmlLines, lines, codeText, hasLineNos, hasRegions, clip, trans, copyObject, clipID; var reLineNo = /^\s*\d{1,4}/; var reRegion = /^\s*\d{1,4}\+.*?\d{1,4}-/; var reRegionText = /^\+.*?\-/; // Find the table row element containing the code var trElements = document.getElementsByTagName("tr"); for(idx = 0; idx < trElements.length; idx++) if(key.parentNode.parentNode.parentNode == trElements[idx].parentNode) { block = trElements[idx].nextSibling; break; } if(block.innerText != undefined) codeText = block.innerText; else codeText = block.textContent; hasLineNos = block.innerHTML.indexOf("highlight-lineno"); hasRegions = block.innerHTML.indexOf("highlight-collapsebox"); htmlLines = block.innerHTML.split("\n"); lines = codeText.split("\n"); // Remove the line numbering and collapsible regions if present if(hasLineNos != -1 || hasRegions != -1) { codeText = ""; for(idx = 0; idx < lines.length; idx++) { line = lines[idx]; if(hasRegions && reRegion.test(line)) line = line.replace(reRegion, ""); else { line = line.replace(reLineNo, ""); // Lines in expanded blocks have an extra space if(htmlLines[idx].indexOf("highlight-expanded") != -1 || htmlLines[idx].indexOf("highlight-endblock") != -1) line = line.substr(1); } if(hasRegions && reRegionText.test(line)) line = line.replace(reRegionText, ""); codeText += line; // Not all browsers keep the line feed when split if(line[line.length - 1] != "\n") codeText += "\n"; } } // IE or FireFox/Netscape? if(window.clipboardData) window.clipboardData.setData("Text", codeText); else if(window.netscape) { // Give unrestricted access to browser APIs using XPConnect try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch(e) { alert("Universal Connect was refused, cannot copy to clipboard. Go to about:config and set " + "signed.applets.codebase_principal_support to true to enable clipboard support."); return; } // Creates an instance of nsIClipboard clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance( Components.interfaces.nsIClipboard); // Creates an instance of nsITransferable if(clip) trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance( Components.interfaces.nsITransferable); if(!trans) { alert("Copy to Clipboard is not supported by this browser"); return; } // Register the data flavor trans.addDataFlavor("text/unicode"); // Create object to hold the data copyObject = new Object(); // Creates an instance of nsISupportsString copyObject = Components.classes["@mozilla.org/supports-string;1"].createInstance( Components.interfaces.nsISupportsString); // Assign the data to be copied copyObject.data = codeText; // Add data objects to transferable trans.setTransferData("text/unicode", copyObject, codeText.length * 2); clipID = Components.interfaces.nsIClipboard; if(!clipID) { alert("Copy to Clipboard is not supported by this browser"); return; } // Transfer the data to the clipboard clip.setData(trans, null, clipID.kGlobalClipboard); } else alert("Copy to Clipboard is not supported by this browser"); }