<!-- Sacado de http://simon.incutio.com/archive/2003/05/19/syntaxHighlighting -->

highlighted = false;

function syntaxHighlight() {
    /* CSS syntax highlighting */
    if (highlighted) {
        return;
    }
    ruleRE = new RegExp('([^\\{]+)\\{([^\\}]+)\\}', 'g');
    idselectorRE = new RegExp('(#[a-zA-Z0-9]+)\\b', 'g');
    classselectorRE = new RegExp('(\\.[a-zA-Z0-9]+)\\b', 'g');
    pairRE = new RegExp('([a-zA-Z-]+):([^;]+);', 'g');
    css = document.getElementsBySelector('code.css');
    for (i = 0; i < css.length; i++) {
        c = css[i];
        content = c.innerHTML;
        content = content.replace(ruleRE, function(text, selector, body) {
            selector = selector.replace(idselectorRE, '<span class="idselector">$1</span>');
            selector = selector.replace(classselectorRE, '<span class="classselector">$1</span>');
            body = body.replace(pairRE, '<span class="property">$1</span>:<span class="value">$2</span>;');
            return selector + '{' + body + '}';
        });
        c.innerHTML = content;
    }
    
    /* HTML syntax highlighting */
    html = document.getElementsBySelector('code.html');
    tagRE = new RegExp('&lt;([/a-z0-9]+)([^&]*)&gt;', 'g');
    attrRE = new RegExp('\\b([a-zA-Z]+)="([^"]+)"', 'g');
    for (i = 0; i < html.length; i++) {
        c = html[i];
        content = c.innerHTML;
        content = content.replace(tagRE, function(text, tagname, rest) {
            /* This function gets a tag and must work out how to highlight it */
            // First highlight any attributes in 'rest'
            rest = rest.replace(attrRE, '<span class="attribute">$1=</span>"<span class="value">$2</span>"');
            return '<span class="tag">&lt;'+tagname+'</span>'+rest+'<span class="tag">&gt;</span>';
        });
        c.innerHTML = content;
    }
    highlighted = true;
} /* End of function */