<?php
error_reporting (E_ALL);

// paar defines voor extra typen
define ('PREG_HIGHLIGHT_CASELESS', 1);
define ('PREG_HIGHLIGHT_MULTILINE', 2);
define ('PREG_HIGHLIGHT_DOTALL', 4);
define ('PREG_HIGHLIGHT_EXTENDED', 8);

/*
*    string preg_highlight (string pattern, string subject[, int args[, int sub]])
*
*    @param    string    pattern
*    @param    string    subject
*    @param    integer   args      optional
*    @param    integer   sub       optional
*
*    @return   string
*/
function preg_highlight ($pattern, $subject, $args = 0, $sub = 0)
{
    // hoe moeten resultaten gehighlight worden
    // 1e %s = kleur, 2e %s = de text
    $highlight = '<span style="background-color: %s">%s</span>';
    // kleuren - all = hele match
    // sub = subpatroon
    $colors = array (
        'all' => '#808080', 
        'sub' => '#c0c0c0'
    );

    // het patroon, delimiter escapen
    $pattern = '/' . str_replace ('/', '\/', $pattern) . '/';

    // caseless
    if ($args & PREG_HIGHLIGHT_CASELESS)
    {
        $pattern .= 'i';
    }
    // multiline
    if ($args & PREG_HIGHLIGHT_MULTILINE)
    {
        $pattern .= 'm';
    }
    // dot match all
    if ($args & PREG_HIGHLIGHT_DOTALL)
    {
        $pattern .= 's';
    }
    // extended match - comments allowed
    if ($args & PREG_HIGHLIGHT_EXTENDED)
    {
        $pattern .= 'x';
    }

    // als er geen subpatroon aangegeven is
    if ($sub == 0)
    {
        // is de replacement simpel
        $replacement = sprintf ($highlight, $colors['all'], $sub);
    }
    // als er wel een subpatroon is
    else
    {
        // evaluaten als php
        $pattern .= 'e';

        // begin met replacement, de code moet goed intact gehouden worden
        $replacement = "' . str_replace ('\\" . $sub . "', '" . sprintf ($highlight, $colors['sub'], '\\' . $sub) . "', '\\0') . '";
        // en nu de complete replacement
        $replacement = "'" . sprintf ($highlight, $colors['all'], $replacement) . "'";
    }

    // return het resultaat
    return preg_replace ($pattern, $replacement, $subject);
} // ** END preg_highlight
// ** EOF **
?>