| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- //===============================================================================================================
- // 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");
- }
|