Specter Syntax Highlighting

Implements syntax highlighting for [CODE] bb tags.

// ==UserScript==
// @name        Specter Syntax Highlighting
// @namespace   ngusyntax
// @description Implements syntax highlighting for [CODE] bb tags.
// @include     https://www.nextgenupdate.com/forums/*
// @include     http://www.nextgenupdate.com/forums/*
// @version     1.02
// @grant       none
// ==/UserScript==

/* Test if the thread contains a [CODE] tag */
if(/<pre class="bbcode_code"/i.test(document.body.innerHTML))
{
  alert("This thread uses bbcode [CODE] tags. We have attempted to highlight the syntax for you!");
  
  /* Keep comments grayed out */
  document.body.innerHTML= document.body.innerHTML.replace(/\n\/\/.+/g, function(m){
    return '<span style="color:#C2C2C2">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/\n\/\*[^]*?\*\//g, function(m){
    return '<span style="color:#C2C2C2">'+m+'</span>'
  });
  
  /* Highlight all #include pre-processor directives and "import" for python to a green colour */
  document.body.innerHTML= document.body.innerHTML.replace(/#include/g, function(m){
    return '<span style="color:#30B300">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/import /g, function(m){
    return '<span style="color:#30B300">'+m+'</span>'
  });
  
  /* Highlight all strings to a green colour */
  document.body.innerHTML= document.body.innerHTML.replace(/\ \".+?\"\\;/g, function(m){
    return '<span style="color:#30B300">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/\ \".+?\"\)/g, function(m){
    return '<span style="color:#30B300">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/\(\".+?\"/g, function(m){
    return '<span style="color:#30B300">'+m+'</span>'
  });
  
  /* Highlight all function names to a purple colour */
  document.body.innerHTML= document.body.innerHTML.replace(/\ (?!rgb)[a-zA-Z]+(?=\()/g, function(m){
    return '<span style="color:#cc0099">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/\t(?!rgb)[a-zA-Z]+(?=\()/g, function(m){
    return '<span style="color:#cc0099">'+m+'</span>'
  });
  
  /* Highlight all data-types to a yellow colour */
  document.body.innerHTML= document.body.innerHTML.replace(/unsigned int /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/int /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/unsigned char /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/char /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/string /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/short /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/float /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/double /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/void/g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/struct /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/enum /g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/ return/g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/\treturn/g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  /* Highlight all if conditions to a yellow colour */
  document.body.innerHTML= document.body.innerHTML.replace(/if(?=\()/g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/else if(?=\()/g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
  
  document.body.innerHTML= document.body.innerHTML.replace(/switch/g, function(m){
    return '<span style="color:#ff9933">'+m+'</span>'
  });
}