summary refs log tree commit diff stats
path: root/includes/bbcode.php
blob: 40533a3a1baaae598498920b10276000b861c342 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
/*
       444444444  
      4::::::::4  
     4:::::::::4  
    4::::44::::4  
   4::::4 4::::4   Four Island
  4::::4  4::::4  
 4::::4   4::::4   Written and maintained by Starla Insigna
4::::444444::::444
4::::::::::::::::4  includes/bbcode.php
4444444444:::::444
          4::::4   Please do not use, reproduce or steal the
          4::::4   contents of this file without explicit
          4::::4   permission from Hatkirby.
        44::::::44
        4::::::::4
        4444444444
*/

if (!defined('S_INCLUDE_FILE')) {define('S_INCLUDE_FILE',1);}

require('headerproc.php');

class BBCode
{
	var $init = false;
	var $bbcodes;
	var $bbcodes2;

	function init()
	{
		$this->bbcodes['b'] = '<B>{CONTENT}</B>';
		$this->bbcodes['i'] = '<I>{CONTENT}</I>';
		$this->bbcodes['url'] = '<A HREF="{CONTENT}">{CONTENT}</A>';
		$this->bbcodes2['url'] = '<A HREF="{PARAM}">{CONTENT}</A>';
		$this->bbcodes['img'] = '<IMG SRC="{CONTENT}" />';
		$this->bbcodes2['img'] = '<IMG SRC="{CONTENT}" ALT="{PARAM}" TITLE="{PARAM}" ALIGN="right" />';
		$this->bbcodes['big'] = '<BIG>{CONTENT}</BIG>';
		$this->bbcodes['small'] = '<SMALL>{CONTENT}</SMALL>';
		$this->bbcodes['ul'] = '<UL>{CONTENT}</UL>';
		$this->bbcodes['ol'] = '<OL>{CONTENT}</OL>';
		$this->bbcodes['li'] = '<LI>{CONTENT}</LI>';
		$this->bbcodes['code'] = '<CODE>{CONTENT}</CODE>';
		$this->bbcodes['pre'] = '<P><DIV CLASS="autosize"><DIV CLASS="bubble"><DIV CLASS="bquote"><BLOCKQUOTE><DIV><PRE>{CONTENT}</PRE></DIV></BLOCKQUOTE></DIV></DIV></DIV><DIV CLASS="cleardiv"></DIV>';
		$this->bbcodes2['blog'] = '<A HREF="/blog/{PARAM}/">{CONTENT}</A>';
		$this->bbcodes['ins'] = '<INS>{CONTENT}</INS>';
		$this->bbcodes['del'] = '<DEL>{CONTENT}</DEL>';
		$this->bbcodes['bquote'] = '<P><DIV CLASS="autosize"><DIV CLASS="bubble"><DIV CLASS="bquote"><BLOCKQUOTE><DIV><NOBR>{CONTENT}</NOBR></DIV></BLOCKQUOTE></DIV><CITE><STRONG>Anonymous</STRONG></CITE></DIV></DIV><DIV CLASS="cleardiv"></DIV>';
		$this->bbcodes2['bquote'] = '<P><DIV CLASS="autosize"><DIV CLASS="bubble"><DIV CLASS="bquote"><BLOCKQUOTE><DIV><NOBR>{CONTENT}</NOBR></DIV></BLOCKQUOTE></DIV><CITE><STRONG>{PARAM}</STRONG></CITE></DIV></DIV><DIV CLASS="cleardiv"></DIV>';
		$this->bbcodes2['abbr'] = '<ABBR TITLE="{PARAM}">{CONTENT}</ABBR>';
		$this->bbcodes['hidden'] = '<DIV STYLE="display: none">{CONTENT}</DIV>';

		$this->init = true;
	}

	function parseBBCode($text)
	{
		if (!$this->init)
		{
			$this->init();
		}

		$to_parse = str_replace("\n",'[br]',htmlentities($text));
		
		foreach ($this->bbcodes as $name => $value)
		{
			while (strpos($to_parse, '[' . $name . ']') !== FALSE)
			{
				$bbcode_uid = unique_id();
				$bbpos = strpos($to_parse, '[' . $name . ']');
				$to_parse = substr_replace($to_parse, '[' . $name . ':' . $bbcode_uid . ']', $bbpos, strlen($name) + 2);
				$to_parse = substr_replace($to_parse, '[/' . $name . ':' . $bbcode_uid . ']', strpos(substr($to_parse, $bbpos), '[/' . $name . ']') + $bbpos, strlen($name) + 3);

				$value = str_replace('{CONTENT}', '\1', $value);
				$to_parse = preg_replace('/\[' . $name . ':' . $bbcode_uid . '\](.*)\[\/' . $name . ':' . $bbcode_uid . '\]/', $value, $to_parse);
			}
		}

		foreach ($this->bbcodes2 as $name => $value)
		{
			while (strpos($to_parse, '[' . $name . '=') !== FALSE)
			{
				$bbcode_uid = unique_id();
				$bbpos = strpos($to_parse, '[' . $name . '=');
				$to_parse = substr_replace($to_parse, '[' . $name . ':' . $bbcode_uid . '=', $bbpos, strlen($name) + 2);
				$to_parse = substr_replace($to_parse, '[/' . $name . ':' . $bbcode_uid . ']', strpos(substr($to_parse, $bbpos), '[/' . $name . ']') + $bbpos, strlen($name) + 3);

				$value = str_replace('{PARAM}', '\1', $value);
				$value = str_replace('{CONTENT}', '\2', $value);
				$to_parse = preg_replace('/\[' . $name . ':' . $bbcode_uid . '=([^\]]*)\](.*)\[\/' . $name . ':' . $bbcode_uid . '\]/', $value, $to_parse);
			}
		}

		return str_replace('[br]','<BR />',$to_parse);
	}
}

function parseBBCode($text)
{
	global $bbcode;
	if (!isset($bbcode))
	{
		$bbcode = new BBCode();
	}

	return $bbcode->parseBBCode($text);
}

?>