~fusonic/chive/1.1

« back to all changes in this revision

Viewing changes to yii/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php

  • Committer: Matthias Burtscher
  • Date: 2010-02-12 09:12:35 UTC
  • Revision ID: matthias.burtscher@fusonic.net-20100212091235-jqxrb62klx872ajc
* Updated Yii to 1.1.0
* Removed CodePress and CodeMirror
* Updated jQuery and some plugins
* Cleaned some code ...

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
 
/**
4
 
 * BB code renderer.
5
 
 *
6
 
 * This BB renderer produces BB code, ready to be pasted in bulletin boards and
7
 
 * other applications that accept BB code. Based on the HTML renderer by Andrey Demenev.
8
 
 *
9
 
 * LICENSE: This source file is subject to version 3.0 of the PHP license
10
 
 * that is available through the world-wide-web at the following URI:
11
 
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
12
 
 * the PHP License and are unable to obtain it through the web, please
13
 
 * send a note to license@php.net so we can mail you a copy immediately.
14
 
 *
15
 
 * @category   Text
16
 
 * @package    Text_Highlighter
17
 
 * @author     Stoyan Stefanov <ssttoo@gmail.com>
18
 
 * @copyright  2005 Stoyan Stefanov
19
 
 * @license    http://www.php.net/license/3_0.txt  PHP License
20
 
 * @version    CVS: $Id: BB.php,v 1.1 2007/06/03 02:37:08 ssttoo Exp $
21
 
 * @link       http://pear.php.net/package/Text_Highlighter
22
 
 */
23
 
 
24
 
/**
25
 
 * @ignore
26
 
 */
27
 
 
28
 
require_once dirname(__FILE__).'/../Renderer.php';
29
 
 
30
 
/**
31
 
 * BB code renderer, based on Andrey Demenev's HTML renderer.
32
 
 *
33
 
 * Elements of $options argument of constructor (each being optional):
34
 
 *
35
 
 * - 'numbers' - Line numbering TRUE or FALSE
36
 
 * - 'tabsize' - Tab size, default is 4
37
 
 * - 'bb_tags' - An array containing three BB tags, see below
38
 
 * - 'tag_brackets' - An array that conains opening and closing tags, [ and ]
39
 
 * - 'colors' - An array with all the colors to be used for highlighting
40
 
 *
41
 
 * The default BB tags are:
42
 
 * - 'color' => 'color'
43
 
 * - 'list'  => 'list'
44
 
 * - 'list_item' => '*'
45
 
 *
46
 
 * The default colors for the highlighter are:
47
 
 * - 'default'    => 'Black',
48
 
 * - 'code'       => 'Gray',
49
 
 * - 'brackets'   => 'Olive',
50
 
 * - 'comment'    => 'Orange',
51
 
 * - 'mlcomment'  => 'Orange',
52
 
 * - 'quotes'     => 'Darkred',
53
 
 * - 'string'     => 'Red',
54
 
 * - 'identifier' => 'Blue',
55
 
 * - 'builtin'    => 'Teal',
56
 
 * - 'reserved'   => 'Green',
57
 
 * - 'inlinedoc'  => 'Blue',
58
 
 * - 'var'        => 'Darkblue',
59
 
 * - 'url'        => 'Blue',
60
 
 * - 'special'    => 'Navy',
61
 
 * - 'number'     => 'Maroon',
62
 
 * - 'inlinetags' => 'Blue',
63
 
 *
64
 
 *
65
 
 * @author     Stoyan Stefanov <ssttoo@gmail.com>
66
 
 * @category   Text
67
 
 * @package    Text_Highlighter
68
 
 * @copyright  20045 Stoyan Stefanov
69
 
 * @license    http://www.php.net/license/3_0.txt  PHP License
70
 
 * @version    Release: 0.5.0
71
 
 * @link       http://pear.php.net/package/Text_Highlighter
72
 
 */
73
 
 
74
 
class Text_Highlighter_Renderer_BB extends Text_Highlighter_Renderer_Array
75
 
{
76
 
 
77
 
    /**#@+
78
 
     * @access private
79
 
     */
80
 
 
81
 
    /**
82
 
     * Line numbering - will use the specified BB tag for listings
83
 
     *
84
 
     * @var boolean
85
 
     */
86
 
    var $_numbers = false;
87
 
 
88
 
    /**
89
 
     * BB tags to be used
90
 
     *
91
 
     * @var array
92
 
     */
93
 
    var $_bb_tags = array (
94
 
        'color'     => 'color',
95
 
        'list'      => 'list',
96
 
        'list_item' => '*',
97
 
        'code'      => 'code',
98
 
    );
99
 
 
100
 
    /**
101
 
     * BB brackets - [ and ]
102
 
     *
103
 
     * @var array
104
 
     */
105
 
    var $_tag_brackets = array ('start' => '[', 'end' => ']');
106
 
 
107
 
    /**
108
 
     * Colors map
109
 
     *
110
 
     * @var boolean
111
 
     */
112
 
    var $_colors = array(
113
 
        'default'    => 'Black',
114
 
        'code'       => 'Gray',
115
 
        'brackets'   => 'Olive',
116
 
        'comment'    => 'Orange',
117
 
        'mlcomment'  => 'Orange',
118
 
        'quotes'     => 'Darkred',
119
 
        'string'     => 'Red',
120
 
        'identifier' => 'Blue',
121
 
        'builtin'    => 'Teal',
122
 
        'reserved'   => 'Green',
123
 
        'inlinedoc'  => 'Blue',
124
 
        'var'        => 'Darkblue',
125
 
        'url'        => 'Blue',
126
 
        'special'    => 'Navy',
127
 
        'number'     => 'Maroon',
128
 
        'inlinetags' => 'Blue',
129
 
    );
130
 
 
131
 
    /**#@-*/
132
 
 
133
 
    /**
134
 
     * Resets renderer state
135
 
     *
136
 
     * @access protected
137
 
     *
138
 
     *
139
 
     * Descendents of Text_Highlighter call this method from the constructor,
140
 
     * passing $options they get as parameter.
141
 
     */
142
 
    function reset()
143
 
    {
144
 
        parent::reset();
145
 
        if (isset($this->_options['numbers'])) {
146
 
            $this->_numbers = $this->_options['numbers'];
147
 
        }
148
 
        if (isset($this->_options['bb_tags'])) {
149
 
            $this->_bb_tags = array_merge($this->_bb_tags, $this->_options['bb_tags']);
150
 
        }
151
 
        if (isset($this->_options['tag_brackets'])) {
152
 
            $this->_tag_brackets = array_merge($this->_tag_brackets, $this->_options['tag_brackets']);
153
 
        }
154
 
        if (isset($this->_options['colors'])) {
155
 
            $this->_colors = array_merge($this->_colors, $this->_options['colors']);
156
 
        }
157
 
    }
158
 
 
159
 
 
160
 
    /**
161
 
     * Signals that no more tokens are available
162
 
     *
163
 
     * @abstract
164
 
     * @access public
165
 
     *
166
 
     */
167
 
    function finalize()
168
 
    {
169
 
 
170
 
        // get parent's output
171
 
        parent::finalize();
172
 
        $output = parent::getOutput();
173
 
 
174
 
        $bb_output = '';
175
 
 
176
 
        $color_start = $this->_tag_brackets['start'] . $this->_bb_tags['color'] . '=%s'  . $this->_tag_brackets['end'];
177
 
        $color_end   = $this->_tag_brackets['start'] . '/' . $this->_bb_tags['color'] . $this->_tag_brackets['end'];
178
 
 
179
 
        // loop through each class=>content pair
180
 
        foreach ($output AS $token) {
181
 
 
182
 
            if ($this->_enumerated) {
183
 
                $class = $token[0];
184
 
                $content = $token[1];
185
 
            } else {
186
 
                $key = key($token);
187
 
                $class = $key;
188
 
                $content = $token[$key];
189
 
            }
190
 
 
191
 
            $iswhitespace = ctype_space($content);
192
 
            if (!$iswhitespace && !empty($this->_colors[$class])) {
193
 
                $bb_output .= sprintf($color_start, $this->_colors[$class]);
194
 
                $bb_output .= $content;
195
 
                $bb_output .= $color_end;
196
 
            } else {
197
 
                $bb_output .= $content;
198
 
            }
199
 
        }
200
 
 
201
 
        if ($this->_numbers) {
202
 
 
203
 
            $item_tag = $this->_tag_brackets['start'] .
204
 
                        $this->_bb_tags['list_item'] .
205
 
                        $this->_tag_brackets['end'];
206
 
            $this->_output = $item_tag . str_replace("\n", "\n". $item_tag .' ', $bb_output);
207
 
            $this->_output = $this->_tag_brackets['start'] .
208
 
                             $this->_bb_tags['list'] .
209
 
                             $this->_tag_brackets['end'] .
210
 
                             $this->_output .
211
 
                             $this->_tag_brackets['start'] .
212
 
                             '/'.
213
 
                             $this->_bb_tags['list'] .
214
 
                             $this->_tag_brackets['end']
215
 
                             ;
216
 
        } else {
217
 
            $this->_output = $this->_tag_brackets['start'] .
218
 
                             $this->_bb_tags['code'] .
219
 
                             $this->_tag_brackets['end'] .
220
 
                             $bb_output .
221
 
                             $this->_tag_brackets['start'] .
222
 
                             '/' .
223
 
                             $this->_bb_tags['code'] .
224
 
                             $this->_tag_brackets['end'];
225
 
        }
226
 
    }
227
 
 
228
 
}
229
 
 
230
 
/*
231
 
 * Local variables:
232
 
 * tab-width: 4
233
 
 * c-basic-offset: 4
234
 
 * c-hanging-comment-ender-p: nil
235
 
 * End:
236
 
 */
237
 
 
 
1
<?php
 
2
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
3
/**
 
4
 * BB code renderer.
 
5
 *
 
6
 * This BB renderer produces BB code, ready to be pasted in bulletin boards and
 
7
 * other applications that accept BB code. Based on the HTML renderer by Andrey Demenev.
 
8
 *
 
9
 * LICENSE: This source file is subject to version 3.0 of the PHP license
 
10
 * that is available through the world-wide-web at the following URI:
 
11
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
 
12
 * the PHP License and are unable to obtain it through the web, please
 
13
 * send a note to license@php.net so we can mail you a copy immediately.
 
14
 *
 
15
 * @category   Text
 
16
 * @package    Text_Highlighter
 
17
 * @author     Stoyan Stefanov <ssttoo@gmail.com>
 
18
 * @copyright  2005 Stoyan Stefanov
 
19
 * @license    http://www.php.net/license/3_0.txt  PHP License
 
20
 * @version    CVS: $Id: BB.php,v 1.1 2007/06/03 02:37:08 ssttoo Exp $
 
21
 * @link       http://pear.php.net/package/Text_Highlighter
 
22
 */
 
23
 
 
24
/**
 
25
 * @ignore
 
26
 */
 
27
 
 
28
require_once dirname(__FILE__).'/../Renderer.php';
 
29
 
 
30
/**
 
31
 * BB code renderer, based on Andrey Demenev's HTML renderer.
 
32
 *
 
33
 * Elements of $options argument of constructor (each being optional):
 
34
 *
 
35
 * - 'numbers' - Line numbering TRUE or FALSE
 
36
 * - 'tabsize' - Tab size, default is 4
 
37
 * - 'bb_tags' - An array containing three BB tags, see below
 
38
 * - 'tag_brackets' - An array that conains opening and closing tags, [ and ]
 
39
 * - 'colors' - An array with all the colors to be used for highlighting
 
40
 *
 
41
 * The default BB tags are:
 
42
 * - 'color' => 'color'
 
43
 * - 'list'  => 'list'
 
44
 * - 'list_item' => '*'
 
45
 *
 
46
 * The default colors for the highlighter are:
 
47
 * - 'default'    => 'Black',
 
48
 * - 'code'       => 'Gray',
 
49
 * - 'brackets'   => 'Olive',
 
50
 * - 'comment'    => 'Orange',
 
51
 * - 'mlcomment'  => 'Orange',
 
52
 * - 'quotes'     => 'Darkred',
 
53
 * - 'string'     => 'Red',
 
54
 * - 'identifier' => 'Blue',
 
55
 * - 'builtin'    => 'Teal',
 
56
 * - 'reserved'   => 'Green',
 
57
 * - 'inlinedoc'  => 'Blue',
 
58
 * - 'var'        => 'Darkblue',
 
59
 * - 'url'        => 'Blue',
 
60
 * - 'special'    => 'Navy',
 
61
 * - 'number'     => 'Maroon',
 
62
 * - 'inlinetags' => 'Blue',
 
63
 *
 
64
 *
 
65
 * @author     Stoyan Stefanov <ssttoo@gmail.com>
 
66
 * @category   Text
 
67
 * @package    Text_Highlighter
 
68
 * @copyright  20045 Stoyan Stefanov
 
69
 * @license    http://www.php.net/license/3_0.txt  PHP License
 
70
 * @version    Release: 0.5.0
 
71
 * @link       http://pear.php.net/package/Text_Highlighter
 
72
 */
 
73
 
 
74
class Text_Highlighter_Renderer_BB extends Text_Highlighter_Renderer_Array
 
75
{
 
76
 
 
77
    /**#@+
 
78
     * @access private
 
79
     */
 
80
 
 
81
    /**
 
82
     * Line numbering - will use the specified BB tag for listings
 
83
     *
 
84
     * @var boolean
 
85
     */
 
86
    var $_numbers = false;
 
87
 
 
88
    /**
 
89
     * BB tags to be used
 
90
     *
 
91
     * @var array
 
92
     */
 
93
    var $_bb_tags = array (
 
94
        'color'     => 'color',
 
95
        'list'      => 'list',
 
96
        'list_item' => '*',
 
97
        'code'      => 'code',
 
98
    );
 
99
 
 
100
    /**
 
101
     * BB brackets - [ and ]
 
102
     *
 
103
     * @var array
 
104
     */
 
105
    var $_tag_brackets = array ('start' => '[', 'end' => ']');
 
106
 
 
107
    /**
 
108
     * Colors map
 
109
     *
 
110
     * @var boolean
 
111
     */
 
112
    var $_colors = array(
 
113
        'default'    => 'Black',
 
114
        'code'       => 'Gray',
 
115
        'brackets'   => 'Olive',
 
116
        'comment'    => 'Orange',
 
117
        'mlcomment'  => 'Orange',
 
118
        'quotes'     => 'Darkred',
 
119
        'string'     => 'Red',
 
120
        'identifier' => 'Blue',
 
121
        'builtin'    => 'Teal',
 
122
        'reserved'   => 'Green',
 
123
        'inlinedoc'  => 'Blue',
 
124
        'var'        => 'Darkblue',
 
125
        'url'        => 'Blue',
 
126
        'special'    => 'Navy',
 
127
        'number'     => 'Maroon',
 
128
        'inlinetags' => 'Blue',
 
129
    );
 
130
 
 
131
    /**#@-*/
 
132
 
 
133
    /**
 
134
     * Resets renderer state
 
135
     *
 
136
     * @access protected
 
137
     *
 
138
     *
 
139
     * Descendents of Text_Highlighter call this method from the constructor,
 
140
     * passing $options they get as parameter.
 
141
     */
 
142
    function reset()
 
143
    {
 
144
        parent::reset();
 
145
        if (isset($this->_options['numbers'])) {
 
146
            $this->_numbers = $this->_options['numbers'];
 
147
        }
 
148
        if (isset($this->_options['bb_tags'])) {
 
149
            $this->_bb_tags = array_merge($this->_bb_tags, $this->_options['bb_tags']);
 
150
        }
 
151
        if (isset($this->_options['tag_brackets'])) {
 
152
            $this->_tag_brackets = array_merge($this->_tag_brackets, $this->_options['tag_brackets']);
 
153
        }
 
154
        if (isset($this->_options['colors'])) {
 
155
            $this->_colors = array_merge($this->_colors, $this->_options['colors']);
 
156
        }
 
157
    }
 
158
 
 
159
 
 
160
    /**
 
161
     * Signals that no more tokens are available
 
162
     *
 
163
     * @abstract
 
164
     * @access public
 
165
     *
 
166
     */
 
167
    function finalize()
 
168
    {
 
169
 
 
170
        // get parent's output
 
171
        parent::finalize();
 
172
        $output = parent::getOutput();
 
173
 
 
174
        $bb_output = '';
 
175
 
 
176
        $color_start = $this->_tag_brackets['start'] . $this->_bb_tags['color'] . '=%s'  . $this->_tag_brackets['end'];
 
177
        $color_end   = $this->_tag_brackets['start'] . '/' . $this->_bb_tags['color'] . $this->_tag_brackets['end'];
 
178
 
 
179
        // loop through each class=>content pair
 
180
        foreach ($output AS $token) {
 
181
 
 
182
            if ($this->_enumerated) {
 
183
                $class = $token[0];
 
184
                $content = $token[1];
 
185
            } else {
 
186
                $key = key($token);
 
187
                $class = $key;
 
188
                $content = $token[$key];
 
189
            }
 
190
 
 
191
            $iswhitespace = ctype_space($content);
 
192
            if (!$iswhitespace && !empty($this->_colors[$class])) {
 
193
                $bb_output .= sprintf($color_start, $this->_colors[$class]);
 
194
                $bb_output .= $content;
 
195
                $bb_output .= $color_end;
 
196
            } else {
 
197
                $bb_output .= $content;
 
198
            }
 
199
        }
 
200
 
 
201
        if ($this->_numbers) {
 
202
 
 
203
            $item_tag = $this->_tag_brackets['start'] .
 
204
                        $this->_bb_tags['list_item'] .
 
205
                        $this->_tag_brackets['end'];
 
206
            $this->_output = $item_tag . str_replace("\n", "\n". $item_tag .' ', $bb_output);
 
207
            $this->_output = $this->_tag_brackets['start'] .
 
208
                             $this->_bb_tags['list'] .
 
209
                             $this->_tag_brackets['end'] .
 
210
                             $this->_output .
 
211
                             $this->_tag_brackets['start'] .
 
212
                             '/'.
 
213
                             $this->_bb_tags['list'] .
 
214
                             $this->_tag_brackets['end']
 
215
                             ;
 
216
        } else {
 
217
            $this->_output = $this->_tag_brackets['start'] .
 
218
                             $this->_bb_tags['code'] .
 
219
                             $this->_tag_brackets['end'] .
 
220
                             $bb_output .
 
221
                             $this->_tag_brackets['start'] .
 
222
                             '/' .
 
223
                             $this->_bb_tags['code'] .
 
224
                             $this->_tag_brackets['end'];
 
225
        }
 
226
    }
 
227
 
 
228
}
 
229
 
 
230
/*
 
231
 * Local variables:
 
232
 * tab-width: 4
 
233
 * c-basic-offset: 4
 
234
 * c-hanging-comment-ender-p: nil
 
235
 * End:
 
236
 */
 
237
 
238
238
?>
 
 
b'\\ No newline at end of file'