I just modified this code, added a link at the bottom of the newly created code blocks that allows you to select the code.
// ==UserScript== // @name BlitzMax Code Highlighting // @description Highlights BlitzMax code within codeblocks in the forums at blitzbasic.com // @include http://blitzmax.com/* // @include http://blitzbasic.com/* // @include http://www.blitzmax.com/* // @include http://www.blitzbasic.com/* // ==/UserScript== // keywords var vartypes = [ "\$", "\!", "\%", "\#", "Byte", "Short", "Int", "Long", "Float", "Double", "String", "Object" ]; var keywords = [ "Strict","SuperStrict","End","True","False","Null","Pi","Nan","Var","Ptr","If","Then","Else","ElseIf","EndIf","For","To","Step","Next","EachIn", "While","Wend","EndWhile","Repeat","Until","Forever","Select","EndSelect","Case","Default","Exit","Continue","Const","Local","Global", "Field","Function","EndFunction","Type","EndType","Extends","Method","EndMethod","Abstract","Final","New","Self","Super","Delete", "Release","Public","Private","Extern","EndExtern","Module","ModuleInfo","Incbin","IncbinPtr","IncbinLen","Include","Framework","Import", "Assert","Goto","Try","EndTry","Catch","Throw","DefData","ReadData","RestoreData","And","Or","Not","Shl","Shr","Sar","Len","Abs","Mod", "Sgn","Min","Max","Varptr","SizeOf","Asc","Chr","Return" ]; var blitz_mod = [ "RuntimeError", "DebugStop", "DebugLog", "AppDir", "AppFile", "AppTitle", "AppArgs", "LaunchDir", "OnEnd", "ReadStdin", "WriteStdout", "WriteStderr", "Delay", "MilliSecs", "MemAlloc", "MemFree", "MemExtend", "MemClear", "MemCopy", "MemMove", "GCSetMode", "GCSuspend", "GCResume", "GCCollect", "GCMemAlloced", "GCEnter", "GCLeave", "HandleFromObject", "HandleToObject", "Print", "Input"] function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } // color styles use by highlighter addGlobalStyle( // background & normal text styles "pre.code, pre.codebox { background-color: #013c77 !important; color: #f0f0f0 !important; }" + "pre.codebox { border: 2px solid gray !important; }" + // code styles ".code-comment { color: #06bed9 !important; font-weight: none !important; }" + ".code-keyword { color: #fbfb00 !important; font-weight: none !important; }" + ".code-vartype { color: #fbc300 !important; font-weight: none !important; }" + ".code-string { color: #00f400 !important; font-weight: none !important; }" + ".code-number { color: #bbbbbb !important; font-weight: none !important; }" + ".code-attribute { color: #808080 !important; font-weight: none !important; }" ); function HighlightWord( source, word, style) { return source.replace( new RegExp( "\\b("+word+")\\b", "gim"), "<font class=" + style + ">$1</font>"); } function Sanitize( source) { return source.replace( /<\/?font( class=code-(comment|keyword|vartype|string|number|attribute))?(>|$)/gi, ""); } function HighlightSource( code) { // vartypes for( var x=0; x<vartypes.length; x++) code = HighlightWord( code, vartypes[x], "code-vartype"); // keywords for( var x=0; x<keywords.length; x++) code = HighlightWord( code, keywords[x], "code-keyword"); for( var x=0; x<blitz_mod.length; x++) code = HighlightWord( code, blitz_mod[x], "code-keyword"); // numerals code = code.replace( /\b(\$[a-f0-9]+|%[0-1]+|\d+(\.\d*)?)\b/gi, "<font class=code-number>$1</font>"); // attributes code = code.replace( /(\{[^\r\n\}]*\})/g, function(match,p) { return "<font class=code-attribute>"+Sanitize(p)+"</font>"; }); // strings code = code.replace( /("[^\r\n"]*")/g, function(match,p) { // hack to get around comments inside strings var s = Sanitize(p).replace( /'/g, "=SINGLE-QUOTE=") return "<font class=code-string>"+s+"</font>"; }); // comments code = code.replace( /('.*)$/gm, function(match,p) { return "<font class=code-comment>"+Sanitize(p)+"</font>"; }); code = code.replace( /^(Rem(\n|.)*EndRem)$/gim, function(match,p) { return "<font class=code-comment>"+Sanitize(p)+"</font>"; }); // hack to get around comments inside strings return code.replace( /=SINGLE-QUOTE=/g, "'"); } // highlight all codebox elements on the page var codes = document.evaluate( "//pre[@class='code']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for( var i=0; i<codes.snapshotLength; i++) { var e = codes.snapshotItem(i); e.id = "greasemonkey_bbcode_"+(i+1); e.innerHTML = HighlightSource( e.innerHTML); var a = document.createElement("a"); a.href = "#"; a.id = "greasemonkey_bbcode_"+(i+1)+"_a" a.addEventListener('click', selectCodeBoxCode, false); a.appendChild( document.createTextNode("Select Above Code") ); a.style.marginTop = "0"; e.style.marginBottom = "0"; e.parentNode.insertBefore(a, e.nextSibling); } var codeboxes = document.evaluate( "//textarea[@class='codebox']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for( var i=0; i<codeboxes.snapshotLength; i++) { var e = codeboxes.snapshotItem(i); var c = document.createElement("pre"); c.id = "greasemonkey_bbcodebox_"+(i+1); c.className = "codebox"; c.style.overflow = "auto"; c.style.width = 800; c.style.height = 300; c.style.fontSize = "1.5em"; c.innerHTML = HighlightSource( e.innerHTML); e.parentNode.insertBefore( c, e); e.parentNode.removeChild(e); var a = document.createElement("a"); a.href = "#"; a.id = "greasemonkey_bbcodebox_"+(i+1)+"_a" a.addEventListener('click', selectCodeBoxCode, false); a.appendChild( document.createTextNode("Select Above Code") ); a.style.marginTop = "0"; c.style.marginBottom = "0"; c.parentNode.insertBefore(a, c.nextSibling); } function selectCodeBoxCode(event){ var userSelection; if (window.getSelection) { userSelection = window.getSelection(); } if (document.createRange){ var oRange = document.createRange(); var target = document.getElementById( this.id.substring( 0, this.id.length - 2 ) ); oRange.selectNodeContents(target); userSelection.addRange(oRange); } event.preventDefault() return false; }