PHP Classes
elePHPant
Icontem

File: highlighter.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Giulio Bai  >  Highlighter  >  highlighter.php  >  Download  
File: highlighter.php
Role: Class source
Content type: text/plain
Description: The main class file, containing comments and examples.
Class: Highlighter
Reformat highlighted PHP code
Author: By
Last change:
Date: 8 years ago
Size: 4,817 bytes
 

Contents

Class file image Download
<?php

/**
 * Highlighter - PHP Class to highlight code blocks and add some extra tags
 *
 * Tested and working on PHP 4.3.2 and higher
 *
 * LICENSE: This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License v2 as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 * @author Giulio Bai <slide.wow@gmail.com>
 * @copyright (C)2007 Giulio Bai - GNU GPL
 * @license http://www.gnu.org/licenses/gpl.html GNU General public License
 * @version 1.0
 * @link http://hewle.com/
 */
 

/**
 * A class to highlight blocks of php code and add personalized tags to them.
 *
 * Example of use:
 * The following use will add the <box> tag to the text and highligh it using
 * php's default colors.
 * Then it will link all the functions to their page on the php manual
 * <code>
 * include_once('highlighter.php');
 *
 * $highlight = new Highlighter();
 * $code = $highlight->add_tags($code, "box");
 *
 * echo $code;
 * </code>
 *
 * @author Giulio Bai <slide.wow@gmail.com>
 * @copyright (C)2007 Giulio Bai
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License
 * @version 1.0
 * @link http://hewle.com
 */
class Highlighter
{
   
   
/**
     * Logs if the begin php tag is present (1) or not (0)
     *
     * @var bool
     */
   
var $begin_tag = 1;
   
   
/**
     * Logs if the end php tag is present (1) or not (0)
     *
     * @var bool
     */
   
var $end_tag = 1;
   
   
   
/**
     * Adds the specified tag to the code block
     *
     *
     * Example 1:
     * If the code passed to the method was
     * <code>
     * $code = "Hello World!";
     * add_tags($code, "boxed", 1);
     * </code>
     * The returning code, returned by the function would be (in HTML)
     * <code>
     * <div class="boxed">Hello World!</div>
     * </code>
     *
     * Example 2:
     * If the code passed to the method was
     * <code>
     * $code = "Hello World!";
     * add_tags($code, "boxed-class", 0);
     * </code>
     * Thereturning text would be (in HTML)
     * <code>
     * <boxed-class>Hello World!</boxed-class>
     * </code>
     *
     * @param string $text the code to parse
     * @param string $type the code tag to add
     * @param bool $div switch beetwen divs and "pure-tags"
     *
     * @return string the new text, tagged!
     */
   
function add_tags($text, $ype = "code", $div = 0)
    {
        if (
$div) {
           
$tagl = "div class=\"$type\"";
           
$tagr = "div";
        } else
           
$tagl = $tagr = $type;
       
        return
"<$tagl>" . nl2br(htmlentities($text)) . "</$tagr>";
       
    }
   
   
   
/**
     * Highlights the code and links functions to their page on php.net
     *
     * @param string $text the code to highlight
     *
     * @return string the code, highlighted
     */
   
function highlight($text)
    {
       
ob_start();
       
       
highlight_string($text);
       
$code = ob_get_contents();
       
       
ob_end_clean();

       
$color= ini_get("highlight.keyword");
       
$manual = "http://www.php.net/manual-lookup.php?lang=en&amp;pattern=";

       
$code = preg_replace( '{([\w_]+)(\s*</font>)' . '(\s*<font\s+color="' . $color . '">\s*\()}m',
                   
'<a class="code" title="Further info about $1" href="' . $manual . '$1">$1</a>$2$3', $code);

        if(
check_be_tags($code) == 0) $code = add_be_tags($code);
       
        return
$code;
    }

   
/**
     * Checks if the begin and end tags are present in the code block
     *
     * @param string $code the code
     *
     * @return bool returns TRUE if tags are present, else FALSE
     */
   
function check_be_tags($code)
    {
       
$code = trim($code);
       
        if (
strpos($code, '<?') === 0) {
           
$this->begin_tag = 0;
           
            return
0;
        }
       
        if (
strpos($code, '?>') === 0) {
           
$this->end_tag = 0;
           
            return
0;
        }

        return
1;
    }
   
   
   
/**
     * Adds the begin and end tags to a code block
     *
     * @param string $code the code
     *
     * @return string the code with tags
     */
   
function add_be_tags($code)
    {
       
$code = trim($code);
       
        if (
$this->begin_tag == 0) {
           
$code = "<?php\n" . $code;
           
$this->begin_tag = 1;
        }
       
        if (
$this->end_tag == 0) {
           
$code .= "\n?>";
           
$this->end_tag = 1;
        }
           
        return
$code;
    }

}

?>