function _DoBlockQuotes_callback($matches)
{
    $bq = $matches[1];
    $bq = preg_replace('/^[ \\t]*>[ \\t]?/m', '', $bq);
    $bq = _RunBlockGamut($bq);
    # recurse
    $bq = preg_replace('/^/m', "\t", $bq);
    return "<blockquote>\n{$bq}\n</blockquote>\n\n";
}
function _DoBlockQuotes_callback($matches)
{
    $bq = $matches[1];
    # trim one level of quoting - trim whitespace-only lines
    $bq = preg_replace(array('/^[ \\t]*>[ \\t]?/m', '/^[ \\t]+$/m'), '', $bq);
    $bq = _RunBlockGamut($bq);
    # recurse
    $bq = preg_replace('/^/m', "  ", $bq);
    # These leading spaces screw with <pre> content, so we need to fix that:
    $bq = preg_replace_callback('{(\\s*<pre>.+?</pre>)}sx', '_DoBlockQuotes_callback2', $bq);
    return "<blockquote>\n{$bq}\n</blockquote>\n\n";
}