// ==UserScript== // @name CPSyntax // @author Joshua Heyer // @namespace http://shog9.com/greasemonkey/scripts/ // @description Use Alex Gorbatchev's client-side syntax highlighting for code samples in CP forums (scripts are loaded from CP server-side storage,and run unprivileged) // @version 4 // @include http://*.codeproject.com/* // @include http://*.codetools.com/* // @include http://*.thecodeproject.com/* // ==/UserScript== // // Tested with SyntaxHighlighter 1.5 (or rather, a version slightly modified for this purpose) // no sense loading anything if this isn't even a forum - do a quick test for a forum table var forumTable = document.evaluate("//table[@id='ForumTable']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if ( forumTable ) { // specialized highlighting for certain forums var forumLink = document.evaluate(".//a[substring-after(@href, 'forumid=')]", forumTable, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var forumId = 0; if ( forumLink.href.match(/forumid=(\d*)/) ) forumId = RegExp.$1; var forumLUT = { 1640 : "javascript", // web dev forum 1647 : "cpp", // CPP forum 1649 : "c#", // C# forum 12076 : "c#", // ASP.NET forum 1650 : "c#", // .NET forum 1646 : "vb", // VB forum 1725 : "sql", // SQL / ADO / ADO.NET forum 3421 : "xml", // XML / XSL "default" : "javascript" // default for other forums (javascript) }; var langLUT = { "python" : "shBrushPython.js.txt", "ruby" : "shBrushRuby.js.txt", "sql" : "shBrushSql.js.txt", "vb" : "shBrushVb.js.txt", "xml" : "shBrushXml.js.txt", "cpp" : "shBrushCpp.js.txt", "c#" : "shBrushCSharp.js.txt", "css" : "shBrushCss.js.txt", "delphi" : "shBrushDelphi.js.txt", "java" : "shBrushJava.js.txt", "javascript" : "shBrushJScript.js.txt", "php" : "shBrushPhp.js.txt" }; if ( !forumLUT[forumId] ) forumId = "default"; // styles var styles = document.createElement("style"); styles.innerHTML = "@import url(/script/profile/upload/20101/SyntaxHighlighter.css.txt);"; document.body.insertBefore(styles, document.body.firstChild); // base highlighter script var script = document.createElement("script"); script.src = "/script/profile/upload/20101/" + "shCore.js.txt"; script.language = "javascript"; document.body.insertBefore(script, document.body.firstChild); // set of brushes to load var langsToLoad = { }; // mark code blocks for highlighting var codeBlocks = document.evaluate(".//pre", forumTable, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i=0; i/gi, "\n"); } } // load the brushes... for (var lang in langsToLoad) { script = document.createElement("script"); script.src = "/script/profile/upload/20101/" + langLUT[lang]; script.language = "javascript"; document.body.insertBefore(script, document.body.firstChild); } // do the highlighting script = document.createElement("script"); script.language = "javascript"; script.innerHTML = "dp.SyntaxHighlighter.ClipboardSwf = '/script/profile/upload/20101/clipboardswf.txt';dp.SyntaxHighlighter.HighlightAll('code', false, true);"; document.body.insertBefore(script, document.body.firstChild); }