<?
class XmlSyntaxHighlight {
    public static function process( $s ) {
        $s = htmlspecialchars( $s );
        
        // Workaround for escaped backslashes
        $s = str_replace( '\\\\','\\\\<e>', $s ); 
        
        $regexp = array(
            

						
						// Comments/Strings
            '/(
                <\!--.*?-->|
                &quot;.*?&quot;|
                \'(.*?)\'
            )/isex' 
            => 'self::replaceId($tokens,\'$1\')',
						
            // Numbers (also look for Hex)
            '/(?<!\w)(
                0x[\da-f]+|
                \d+
            )(?!\w)/ix'
            => '<span class="N">$1</span>',
            
            // Make the bold assumption that an all uppercase word has a 
            // special meaning
            '/(?<!\w|>)(
                [A-Z_0-9]{2,}
            )(?!\w)/x'
            => '<span class="D">$1</span>', 
            
            // Keywords
            '/(?<!\w|\$|\%|\@|>)('.self::getKeywords($language).')(?!\w|=")/'
            => '<span style="color:#000080;font-weight:bold">$1</span>', 

            // Keywords
            '/(?<!\w|\$|\%|\@|>)(self)(?!\w|=")/'
            => '<span style="color:blue;font-weight:italic">$1</span>', 
            
            // PHP/Perl-Style Vars: $var, %var, @var
            '/(?<!\w)(
                (\$|\%|\@)(\-&gt;|\w)+
            )(?!\w)/ix'
            => '<span class="V">$1</span>'
        );
        
        $tokens = array(); // This array will be filled from the regexp-callback
        $s = preg_replace( array_keys($regexp), array_values($regexp), $s );
        
        // Paste the comments and strings back in again
        $s = str_replace( array_keys($tokens), array_values($tokens), $s );
        
        // Delete the "Escaped Backslash Workaround Token" (TM) and replace 
        // tabs with four spaces.
        $s = str_replace( array( '<e>', "\t" ), array( '', '  ' ), $s );
        
        return '<pre>'.$s.'</pre>';
    }
    
		private static function getKeywords($language) {
			return "import|ref|package|class|abstract|val|attr|container|oppositeof|operation|String|Integer|Real|Boolean|Float|extends|enumeration|item|enum";
		}
		
    // Regexp-Callback to replace every comment or string with a uniqid and save 
    // the matched text in an array
    // This way, strings and comments will be stripped out and wont be processed 
    // by the other expressions searching for keywords etc.
    private static function replaceId( &$a, $match ) {
        $id = "##r".uniqid()."##";
        
        // String or Comment?
        if( $match{0} == '<') {
            $a[$id] = '<span style="color:green">'.$match.'</span>';
        } else {
            $a[$id] = '<span style="color:blue">'.$match.'</span>';
        }
        return $id;
    }
}
?>