function bbcode_init($allow_custom_bbcode = true)
{
global $phpbb_dispatcher;
static $rowset;
// This array holds all bbcode data. BBCodes will be processed in this
// order, so it is important to keep [code] in first position and
// [quote] in second position.
// To parse multiline URL we enable dotall option setting only for URL text
// but not for link itself, thus [url][/url] is not affected.
//
// To perform custom validation in extension, use $this->validate_bbcode_by_extension()
// method which accepts variable number of parameters
$this->bbcodes = array('code' => array('bbcode_id' => 8, 'regexp' => array('#\\[code(?:=([a-z]+))?\\](.+\\[/code\\])#uise' => "\$this->bbcode_code('\$1', '\$2')")), 'quote' => array('bbcode_id' => 0, 'regexp' => array('#\\[quote(?:="(.*?)")?\\](.+)\\[/quote\\]#uise' => "\$this->bbcode_quote('\$0')")), 'attachment' => array('bbcode_id' => 12, 'regexp' => array('#\\[attachment=([0-9]+)\\](.*?)\\[/attachment\\]#uise' => "\$this->bbcode_attachment('\$1', '\$2')")), 'b' => array('bbcode_id' => 1, 'regexp' => array('#\\[b\\](.*?)\\[/b\\]#uise' => "\$this->bbcode_strong('\$1')")), 'i' => array('bbcode_id' => 2, 'regexp' => array('#\\[i\\](.*?)\\[/i\\]#uise' => "\$this->bbcode_italic('\$1')")), 'url' => array('bbcode_id' => 3, 'regexp' => array('#\\[url(=(.*))?\\](?(1)((?s).*(?-s))|(.*))\\[/url\\]#uiUe' => "\$this->validate_url('\$2', ('\$3') ? '\$3' : '\$4')")), 'img' => array('bbcode_id' => 4, 'regexp' => array('#\\[img\\](.*)\\[/img\\]#uiUe' => "\$this->bbcode_img('\$1')")), 'size' => array('bbcode_id' => 5, 'regexp' => array('#\\[size=([\\-\\+]?\\d+)\\](.*?)\\[/size\\]#uise' => "\$this->bbcode_size('\$1', '\$2')")), 'color' => array('bbcode_id' => 6, 'regexp' => array('!\\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\\-]+)\\](.*?)\\[/color\\]!uise' => "\$this->bbcode_color('\$1', '\$2')")), 'u' => array('bbcode_id' => 7, 'regexp' => array('#\\[u\\](.*?)\\[/u\\]#uise' => "\$this->bbcode_underline('\$1')")), 'list' => array('bbcode_id' => 9, 'regexp' => array('#\\[list(?:=(?:[a-z0-9]|disc|circle|square))?].*\\[/list]#uise' => "\$this->bbcode_parse_list('\$0')")), 'email' => array('bbcode_id' => 10, 'regexp' => array('#\\[email=?(.*?)?\\](.*?)\\[/email\\]#uise' => "\$this->validate_email('\$1', '\$2')")), 'flash' => array('bbcode_id' => 11, 'regexp' => array('#\\[flash=([0-9]+),([0-9]+)\\](.*?)\\[/flash\\]#uie' => "\$this->bbcode_flash('\$1', '\$2', '\$3')")));
// Zero the parsed items array
$this->parsed_items = array();
foreach ($this->bbcodes as $tag => $bbcode_data) {
$this->parsed_items[$tag] = 0;
}
if (!$allow_custom_bbcode) {
return;
}
if (!is_array($rowset)) {
global $db;
$rowset = array();
$sql = 'SELECT *
FROM ' . BBCODES_TABLE;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) {
$rowset[] = $row;
}
$db->sql_freeresult($result);
}
foreach ($rowset as $row) {
$this->bbcodes[$row['bbcode_tag']] = array('bbcode_id' => (int) $row['bbcode_id'], 'regexp' => array($row['first_pass_match'] => str_replace('$uid', $this->bbcode_uid, $row['first_pass_replace'])));
}
$bbcodes = $this->bbcodes;
/**
* Event to modify the bbcode data for later parsing
*
* @event core.modify_bbcode_init
* @var array bbcodes Array of bbcode data for use in parsing
* @var array rowset Array of bbcode data from the database
* @since 3.1.0-a3
*/
$vars = array('bbcodes', 'rowset');
extract($phpbb_dispatcher->trigger_event('core.modify_bbcode_init', compact($vars)));
$this->bbcodes = $bbcodes;
}