home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Text / Wiki / Render / Xhtml / Code.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  4.3 KB  |  134 lines

  1. <?php
  2. // vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
  3. /**
  4.  * Code rule end renderer for Xhtml
  5.  *
  6.  * PHP versions 4 and 5
  7.  *
  8.  * @category   Text
  9.  * @package    Text_Wiki
  10.  * @author     Paul M. Jones <pmjones@php.net>
  11.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  12.  * @version    CVS: $Id: Code.php,v 1.13 2006/02/10 23:07:03 toggg Exp $
  13.  * @link       http://pear.php.net/package/Text_Wiki
  14.  */
  15.  
  16. /**
  17.  * This class renders code blocks in XHTML.
  18.  *
  19.  * @category   Text
  20.  * @package    Text_Wiki
  21.  * @author     Paul M. Jones <pmjones@php.net>
  22.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  23.  * @version    Release: @package_version@
  24.  * @link       http://pear.php.net/package/Text_Wiki
  25.  */
  26. class Text_Wiki_Render_Xhtml_Code extends Text_Wiki_Render {
  27.  
  28.     var $conf = array(
  29.         'css'      => null, // class for <pre>
  30.         'css_code' => null, // class for generic <code>
  31.         'css_php'  => null, // class for PHP <code>
  32.         'css_html' => null, // class for HTML <code>
  33.         'css_filename' => null // class for optional filename <div>
  34.     );
  35.  
  36.     /**
  37.     *
  38.     * Renders a token into text matching the requested format.
  39.     *
  40.     * @access public
  41.     *
  42.     * @param array $options The "options" portion of the token (second
  43.     * element).
  44.     *
  45.     * @return string The text rendered from the token options.
  46.     *
  47.     */
  48.  
  49.     function token($options)
  50.     {
  51.         $text = $options['text'];
  52.         $attr = $options['attr'];
  53.         $type = strtolower($attr['type']);
  54.  
  55.         $css      = $this->formatConf(' class="%s"', 'css');
  56.         $css_code = $this->formatConf(' class="%s"', 'css_code');
  57.         $css_php  = $this->formatConf(' class="%s"', 'css_php');
  58.         $css_html = $this->formatConf(' class="%s"', 'css_html');
  59.         $css_filename = $this->formatConf(' class="%s"', 'css_filename');
  60.  
  61.         if ($type == 'php') {
  62.             if (substr($options['text'], 0, 5) != '<?php') {
  63.                 // PHP code example:
  64.                 // add the PHP tags
  65.                 $text = "<?php\n" . $options['text'] . "\n?>"; // <?php
  66.             }
  67.  
  68.             // convert tabs to four spaces
  69.             $text = str_replace("\t", "    ", $text);
  70.  
  71.             // colorize the code block (also converts HTML entities and adds
  72.             // <code>...</code> tags)
  73.             ob_start();
  74.             highlight_string($text);
  75.             $text = ob_get_contents();
  76.             ob_end_clean();
  77.  
  78.             // replace <br /> tags with simple newlines.
  79.             // replace non-breaking space with simple spaces.
  80.             // translate HTML <font> and color to XHTML <span> and style.
  81.             // courtesy of research by A. Kalin :-).
  82.             $map = array(
  83.                 '<br />'  => "\n",
  84.                 ' '  => ' ',
  85.                 '<font'   => '<span',
  86.                 '</font>' => '</span>',
  87.                 'color="' => 'style="color:'
  88.             );
  89.             $text = strtr($text, $map);
  90.  
  91.             // get rid of the last newline inside the code block
  92.             // (becuase higlight_string puts one there)
  93.             if (substr($text, -8) == "\n</code>") {
  94.                 $text = substr($text, 0, -8) . "</code>";
  95.             }
  96.  
  97.             // replace all <code> tags with classed tags
  98.             if ($css_php) {
  99.                 $text = str_replace('<code>', "<code$css_php>", $text);
  100.             }
  101.  
  102.             // done
  103.             $text = "<pre$css>$text</pre>";
  104.  
  105.         } elseif ($type == 'html' || $type == 'xhtml') {
  106.  
  107.             // HTML code example:
  108.             // add <html> opening and closing tags,
  109.             // convert tabs to four spaces,
  110.             // convert entities.
  111.             $text = str_replace("\t", "    ", $text);
  112.             $text = "<html>\n$text\n</html>";
  113.             $text = $this->textEncode($text);
  114.             $text = "<pre$css><code$css_html>$text</code></pre>";
  115.  
  116.         } else {
  117.             // generic code example:
  118.             // convert tabs to four spaces,
  119.             // convert entities.
  120.             $text = str_replace("\t", "    ", $text);
  121.             $text = $this->textEncode($text);
  122.             $text = "<pre$css><code$css_code>$text</code></pre>";
  123.         }
  124.  
  125.         if ($css_filename && isset($attr['filename'])) {
  126.             $text = "<div$css_filename>" .
  127.                 $attr['filename'] . '</div>' . $text;
  128.         }
  129.  
  130.         return "\n$text\n\n";
  131.     }
  132. }
  133. ?>
  134.