Enfore ISO-8859-1 encoding for htmlentities().
[diogenes.git] / include / Text / Wiki / Render / Xhtml / Code.php
CommitLineData
6855525e
JL
1<?php
2
3class Text_Wiki_Render_Xhtml_Code extends Text_Wiki_Render {
4
5 var $conf = array(
6 'css' => null, // class for <pre>
7 'css_code' => null, // class for generic <code>
8 'css_php' => null, // class for PHP <code>
9 'css_html' => null // class for HTML <code>
10 );
11
12 /**
13 *
14 * Renders a token into text matching the requested format.
15 *
16 * @access public
17 *
18 * @param array $options The "options" portion of the token (second
19 * element).
20 *
21 * @return string The text rendered from the token options.
22 *
23 */
24
25 function token($options)
26 {
27 $text = $options['text'];
28 $attr = $options['attr'];
29 $type = strtolower($attr['type']);
30
31 $css = $this->formatConf(' class="%s"', 'css');
32 $css_code = $this->formatConf(' class="%s"', 'css_code');
33 $css_php = $this->formatConf(' class="%s"', 'css_php');
34 $css_html = $this->formatConf(' class="%s"', 'css_html');
35
36 if ($type == 'php') {
37
38 // PHP code example:
39 // add the PHP tags
40 $text = "<?php\n" . $options['text'] . "\n?>"; // <?php
41
42 // convert tabs to four spaces
43 $text = str_replace("\t", " ", $text);
44
45 // colorize the code block (also converts HTML entities and adds
46 // <code>...</code> tags)
47 ob_start();
48 highlight_string($text);
49 $text = ob_get_contents();
50 ob_end_clean();
51
52 // replace <br /> tags with simple newlines.
53 // replace non-breaking space with simple spaces.
54 // translate HTML <font> and color to XHTML <span> and style.
55 // courtesy of research by A. Kalin :-).
56 $map = array(
57 '<br />' => "\n",
58 '&nbsp;' => ' ',
59 '<font' => '<span',
60 '</font>' => '</span>',
61 'color="' => 'style="color:'
62 );
63 $text = strtr($text, $map);
64
65 // get rid of the last newline inside the code block
66 // (becuase higlight_string puts one there)
67 if (substr($text, -8) == "\n</code>") {
68 $text = substr($text, 0, -8) . "</code>";
69 }
70
71 // replace all <code> tags with classed tags
72 if ($css_php) {
73 $text = str_replace('<code>', "<code$css_php>", $text);
74 }
75
76 // done
77 $text = "<pre$css>$text</pre>";
78
79 } elseif ($type == 'html' || $type == 'xhtml') {
80
81 // HTML code example:
82 // add <html> opening and closing tags,
83 // convert tabs to four spaces,
84 // convert entities.
85 $text = str_replace("\t", " ", $text);
86 $text = "<html>\n$text\n</html>";
322efd77 87 $text = htmlentities($text, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");
6855525e
JL
88 $text = "<pre$css><code$css_html>$text</code></pre>";
89
90 } else {
91 // generic code example:
92 // convert tabs to four spaces,
93 // convert entities.
94 $text = str_replace("\t", " ", $text);
322efd77 95 $text = htmlentities($text, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");
6855525e
JL
96 $text = "<pre$css><code$css_code>$text</code></pre>";
97 }
98
99 return "\n$text\n\n";
100 }
101}
322efd77 102?>