A small but capable wiki rendering engine. Used in WabiSabi Wiki. It achieves the small size mostly by being stateless. Also part of my Code Grimoire.
If you are asking what license this software is released under, you are asking the wrong question.
<?php
define('URL', '[a-z\\+]+://[\\w\\.-]+(:\\d+)?/[\\w$-.+!*\'(),\\?#%&;=\\/]*');
define('WIKIWORD', '(([A-Z]+[a-z1-9_-]+){2,})');
$wiki_patterns = array(
'/^\\{\\{\\{(.*?)\\}\\}\\}/mse' => 'wiki_preserve(\'<pre>$1</pre>\');',
'/\s*==+\s*$/m' => '',
'/^======(.*)/m' => '<h6>$1</h6>',
'/^=====(.*)/m' => '<h5>$1</h5>',
'/^====(.*)/m' => '<h4>$1</h4>',
'/^===(.*)/m' => '<h3>$1</h3>',
'/^==(.*)/m' => '<h2>$1</h2>',
'/^\s*$/m' => '<p>',
'/^----+/m' => "<hr>\n",
'/^:(.*)/m' => '<blockquote>$1</blockquote>',
'/^\\*+(.*)/m' => '<ul><li>$1</li></ul>',
'/^#+(.*)/m' => '<ol><li>$1</li></ol>',
'/^;([^:]+):(.*)/m' => '<dl><dt>$1</dt><dd>$2</dd></dl>',
'!(</ul>\s<ul>)|(</ol>\s<ol>)|(</dl>\s<dl>)!m' => "\n",
'/^\\{\\|(.*?)\\|\\}/mse'
=> '"<table><tr>".wiki_render_table("$1")."</tr></table>";',
'|\\{\\{(' . URL . ')(.*?)\\}\\}|e'
=> 'wiki_preserve(\'<img src="$1" alt="$3">\');',
'|\\[(' . URL . ')(.+?)\\]|e'
=> 'wiki_preserve(\'<a href="$1">$3</a>\');',
'|(' . URL . ')|e' => 'wiki_preserve(\'<a href="$1">$1</a>\');',
'/' . WIKIWORD . '/' => '<a href="?$1">$1</a>',
'/\\{\\{\\{(.*?)\\}\\}\\}/e' => 'wiki_preserve(\'<code>$1</code>\');',
'/\\*\\*(.*?)\\*\\*/' => '<b>$1</b>',
'|//(.*?)//|' => '<i>$1</i>',
'/\\\\\\\\/' => "<br>\n",
'/\\^\\^(.*?)\\^\\^/' => '<sup>$1</sup>',
'/,,(.*?),,/' => '<sub>$1</sub>');
$wiki_table_patterns = array(
'/^\s*\\|-/m' => '</tr><tr>',
'/^\s*\\|\\+(.*)/m' => '<th>$1</th>',
'/^\s*\\|(.*)/m' => '<td>$1</td>');
$preserved_strings = array();
function wiki_preserve($text) {
global $preserved_strings;
$gensym = '_' . count($preserved_strings);
$preserved_strings[$gensym] = $text;
return "\$$gensym";
}
function wiki_render($text, $patterns = array()) {
global $preserved_strings;
$preserved_strings = array();
$tmp = preg_replace_callback(
'/<<(\w+)(.*?)>>/', 'wiki_plugin', $text);
$tmp = preg_replace(
array_keys($patterns),
array_values($patterns),
htmlspecialchars($tmp, ENT_QUOTES, "UTF-8"));
return tpl_render($tmp, $preserved_strings);
}
function wiki_render_table($text) {
global $wiki_table_patterns;
return preg_replace(
array_keys($wiki_table_patterns),
array_values($wiki_table_patterns),
$text);
}
function wiki_plugin($matches) {
$fn = 'wiki_plugin_' . $matches[1];
return function_exists($fn) ? $fn($matches[2]) : $matches[0];
}
?>
Last modified: Tue 04 05 2010, 12:41:27 UTC
