Skip to:
Content
Pages
Categories
Search
Top
Bottom

Re: Plugin suggestions


Olaf Lederer
Participant

@finalwebsites

@_ck_

I worked on the wp-syntax plugin but it doesn’t parse the code :(

do you have an idea what’s missing?

function allow_syntax_tag($tags) {
$tags['pre'] = array('lang' => array(), 'line' => array(), 'escaped' => array(), 'style' => array(), 'width' => array());
return $tags;
}
add_filter('bb_allowed_tags', 'allow_syntax_tag');

include_once("geshi/geshi.php");

if (!defined("BB_PLUGIN_URL")) define("BB_PLUGIN_URL", bb_get_uri() . "/my-plugins");

function wp_syntax_head()
{
$css_url = BB_PLUGIN_URL . "wp-syntax/wp-syntax.css";
echo "n".'<link rel="stylesheet" href="' . $css_url . '" type="text/css" media="screen" />'."n";
}

function wp_syntax_code_trim($code)
{
// special ltrim b/c leading whitespace matters on 1st line of content
$code = preg_replace("/^s*n/siU", "", $code);
$code = rtrim($code);
return $code;
}

function wp_syntax_substitute(&$match)
{
global $wp_syntax_token, $wp_syntax_matches;

$i = count($wp_syntax_matches);
$wp_syntax_matches[$i] = $match;

return "nn<p>" . $wp_syntax_token . sprintf("%03d", $i) . "</p>nn";
}

function wp_syntax_line_numbers($code, $start)
{
$line_count = count(explode("n", $code));
$output = "<pre>";
for ($i = 0; $i < $line_count; $i++)
{
$output .= ($start + $i) . "n";
}
$output .= "</pre>";
return $output;
}

function wp_syntax_highlight($match)
{
global $wp_syntax_matches;

$i = intval($match[1]);
$match = $wp_syntax_matches[$i];

$language = strtolower(trim($match[1]));
$line = trim($match[2]);
$escaped = trim($match[3]);
$code = wp_syntax_code_trim($match[4]);
if ($escaped == "true") $code = htmlspecialchars_decode($code);
//$code = clean_pre($code);// new
$geshi = new GeSHi($code, $language);
$geshi->enable_keyword_links(false);
do_action_ref_array('wp_syntax_init_geshi', array(&$geshi));

$output = "n<div class="wp_syntax">";

if ($line)
{
$output .= "<table><tr><td class="line_numbers">";
$output .= wp_syntax_line_numbers($code, $line);
$output .= "</td><td class="code">";
$output .= $geshi->parse_code();
$output .= "</td></tr></table>";
}
else
{
$output .= "<div class="code">";
$output .= $geshi->parse_code();
$output .= "</div>";
}

$output .= "</div>n";

return $output;
}

function wp_syntax_before_filter($content)
{
$content = preg_replace_callback(
"/s*<pre(?:lang=["']([w-]+)["']|line=["'](d*)["']|escaped=["'](true|false)?["']|s)+>(.*)</pre>s*/siU",
"wp_syntax_substitute",
$content
);
return $content;
}

function wp_syntax_after_filter($content)
{
global $wp_syntax_token;

$content = preg_replace_callback(
"/<p>s*".$wp_syntax_token."(d{3})s*</p>/si",
"wp_syntax_highlight",
$content
);

return $content;
}

$wp_syntax_token = md5(uniqid(rand()));

// Add styling
add_action('bb_head', 'wp_syntax_head');

// We want to run before other filters; hence, a priority of 0 was chosen.
// The lower the number, the higher the priority. 10 is the default and
// several formatting filters run at or around 6.
add_filter('post_text', 'wp_syntax_before_filter', 0);

// We want to run after other filters; hence, a priority of 99.
add_filter('post_text', 'wp_syntax_after_filter', 99);

Skip to toolbar