0 something is wrong with the quote syntax if ($q_depth) { $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 4']; return; } else if ($q_depth < 0) { $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 5']; return; } // If the quote depth level was higher than $max_depth we return the index for the // beginning and end of the part we should strip out if (isset($overflow_begin)) return array($overflow_begin, $overflow_end); else return null; } // // Split text into chunks ($inside contains all text inside $start and $end, and $outside contains all text outside) // function split_text($text, $start, $end) { global $pun_config; $tokens = explode($start, $text); $outside[] = $tokens[0]; $num_tokens = count($tokens); for ($i = 1; $i < $num_tokens; ++$i) { $temp = explode($end, $tokens[$i]); $inside[] = $temp[0]; $outside[] = $temp[1]; } if ($pun_config['o_indent_num_spaces'] != 8 && $start == '[code]') { $spaces = str_repeat(' ', $pun_config['o_indent_num_spaces']); $inside = str_replace("\t", $spaces, $inside); } return array($inside, $outside); } // // Truncate URL if longer than 55 characters (add http:// or ftp:// if missing) // function handle_url_tag($url, $link = '') { global $pun_user; $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url); if (strpos($url, 'www.') === 0) // If it starts with www, we add http:// $full_url = 'http://'.$full_url; else if (strpos($url, 'ftp.') === 0) // Else if it starts with ftp, we add ftp:// $full_url = 'ftp://'.$full_url; else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah)) // Else if it doesn't start with abcdef://, we add http:// $full_url = 'http://'.$full_url; // Ok, not very pretty :-) $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' … '.substr($url, -10) : $url) : stripslashes($link); return ''.$link.''; } // // Turns an URL from the [img] tag into an tag or a tag // function handle_img_tag($url, $is_signature = false) { global $lang_common, $pun_config, $pun_user; $img_tag = '<'.$lang_common['Image link'].'>'; if ($is_signature && $pun_user['show_img_sig'] != '0') $img_tag = ''; else if (!$is_signature && $pun_user['show_img'] != '0') $img_tag = ''; return $img_tag; } // // Convert BBCodes to their HTML equivalent // function do_bbcode($text) { global $lang_common, $pun_user; if (strpos($text, 'quote') !== false) { $text = str_replace('[quote]', '
', $text); $text = preg_replace('#\[quote=("|"|\'|)(.*)\\1\]#seU', '"
".str_replace(array(\'[\', \'\\"\'), array(\'[\', \'"\'), \'$2\')." ".$lang_common[\'wrote\'].":
"', $text); $text = preg_replace('#\[\/quote\]\s*#', '
', $text); } $pattern = array('#\[b\](.*?)\[/b\]#s', '#\[i\](.*?)\[/i\]#s', '#\[u\](.*?)\[/u\]#s', '#\[url\]([^\[]*?)\[/url\]#e', '#\[url=([^\[]*?)\](.*?)\[/url\]#e', '#\[email\]([^\[]*?)\[/email\]#', '#\[email=([^\[]*?)\](.*?)\[/email\]#', '#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#s', '#\[font=(.*?)](.*?)\[/font\]#s', '#\[align=(.*?)\](.*?)\[/align\]#s', '#\[hr /\]#', '#\[hr\]#', '#\[s\](.*?)\[/s\]#s', '#\[h\](.*?)\[/h\]#s', '#\[size=([0-9]{1,2})](.*?)\[/size\]#s'); $replace = array('$1', '$1', '$1', 'handle_url_tag(\'$1\')', 'handle_url_tag(\'$1\', \'$2\')', '$1', '$2', '$2', '$2', '
$2', '
', '
', '$1', '$1', '$2'); // This thing takes a while! :) $text = preg_replace($pattern, $replace, $text); return $text; } // // Make hyperlinks clickable // function do_clickable($text) { global $pun_user; $text = ' '.$text; $text = preg_replace('#([\s\(\)])(https?|ftp|news){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^"\s\(\)<\[]*)?)#ie', '\'$1\'.handle_url_tag(\'$2://$3\')', $text); $text = preg_replace('#([\s\(\)])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^"\s\(\)<\[]*)?)#ie', '\'$1\'.handle_url_tag(\'$2.$3\', \'$2.$3\')', $text); return substr($text, 1); } // // Convert a series of smilies to images // function do_smilies($text) { global $smiley_text, $smiley_img; $text = ' '.$text.' '; $num_smilies = count($smiley_text); for ($i = 0; $i < $num_smilies; ++$i) $text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1$2', $text); return substr($text, 1, -1); } // // Parse message text // function parse_message($text, $hide_smilies) { global $pun_config, $lang_common, $pun_user; if ($pun_config['o_censoring'] == '1') $text = censor_words($text); // Convert applicable characters to HTML entities $text = pun_htmlspecialchars($text); // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched) if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false) { list($inside, $outside) = split_text($text, '[code]', '[/code]'); $outside = array_map('ltrim', $outside); $text = implode('<">', $outside); } if ($pun_config['o_make_links'] == '1') $text = do_clickable($text); if ($pun_config['o_smilies'] == '1' && $pun_user['show_smilies'] == '1' && $hide_smilies == '0') $text = do_smilies($text); if ($pun_config['p_message_bbcode'] == '1' && strpos($text, '[') !== false && strpos($text, ']') !== false) { $text = do_bbcode($text); if ($pun_config['p_message_img_tag'] == '1') { // $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\.(jpg|jpeg|png|gif)\[/img\]#e', 'handle_img_tag(\'$1$3.$4\')', $text); $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e', 'handle_img_tag(\'$1$3\')', $text); } } // Deal with newlines, tabs and multiple spaces $pattern = array("\n", "\t", ' ', ' '); $replace = array('
', ' ', ' ', ' '); $text = str_replace($pattern, $replace, $text); // If we split up the message before we have to concatenate it together again (code tags) if (isset($inside)) { $outside = explode('<">', $text); $text = ''; $num_tokens = count($outside); for ($i = 0; $i < $num_tokens; ++$i) { $text .= $outside[$i]; if (isset($inside[$i])) { $num_lines = ((substr_count($inside[$i], "\n")) + 3) * 1.5; $height_str = ($num_lines > 35) ? '35em' : $num_lines.'em'; $text .= ''.$lang_common['Code'].':
'.$inside[$i].''; } } } // Add paragraph tag around post, but make sure there are no empty paragraphs $text = str_replace('
', '', ''.$text.'
'); // Mod: Flash MP3 Player (8 nouvelles lignes suivent) $player_url = 'dewplayer-multi.swf'; $player_bgcolor = 'ffffff'; $player_width = 240; $player_height = 20; $player_param = '?bgcolor='.$player_bgcolor.'&mp3=$1'; // Pour plus d'options: http://www.alsacreations.fr/?dewplayer $player_alternative = 'Flash non détécté'; $player_code = "\n\t\t\t\t\t\n\t\t\t\t\t"; $text = preg_replace("/\[mp3 url=([^ ]+)\]/", $player_code, $text); return $text; } // // Parse signature text // function parse_signature($text) { global $pun_config, $lang_common, $pun_user; if ($pun_config['o_censoring'] == '1') $text = censor_words($text); $text = pun_htmlspecialchars($text); if ($pun_config['o_make_links'] == '1') $text = do_clickable($text); if ($pun_config['o_smilies_sig'] == '1' && $pun_user['show_smilies'] != '0') $text = do_smilies($text); if ($pun_config['p_sig_bbcode'] == '1' && strpos($text, '[') !== false && strpos($text, ']') !== false) { $text = do_bbcode($text); if ($pun_config['p_sig_img_tag'] == '1') { // $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\.(jpg|jpeg|png|gif)\[/img\]#e', 'handle_img_tag(\'$1$3.$4\', true)', $text); $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e', 'handle_img_tag(\'$1$3\', true)', $text); } } // Deal with newlines, tabs and multiple spaces $pattern = array("\n", "\t", ' ', ' '); $replace = array('
', ' ', ' ', ' '); $text = str_replace($pattern, $replace, $text); return $text; } ?>