<?php
//
// +------------------------------------------------------------------------+
// | phpDocumentor                                                          |
// +------------------------------------------------------------------------+
// | Copyright (c) 2000-2003 Joshua Eichorn, Gregory Beaver                 |
// | Email         jeichorn@phpdoc.org, cellog@phpdoc.org                   |
// | Web           http://www.phpdoc.org                                    |
// | Mirror        http://phpdocu.sourceforge.net/                          |
// | PEAR          http://pear.php.net/package-info.php?pacid=137           |
// +------------------------------------------------------------------------+
// | This source file is subject to version 3.00 of the PHP License,        |
// | that is available at http://www.php.net/license/3_0.txt.               |
// | If you did not receive a copy of the PHP license and are unable to     |
// | obtain it through the world-wide-web, please send a note to            |
// | license@php.net so we can mail you a copy immediately.                 |
// +------------------------------------------------------------------------+
//

/**
 * Common variables/functions used by other files in phpDocumentor
 * @package phpDocumentor
 * @filesource
 */
/** phpDocumentor version */
if ('@VER@' != '@'.'VER@')
{
    define("PHPDOCUMENTOR_VER","@VER@");
} else {
    define("PHPDOCUMENTOR_VER","1.3.0RC4");
}
/** phpDocumentor version */
define("PHPDOCUMENTOR_WEBSITE","http://www.phpdoc.org");
define('SMART_PATH_DELIMITER', DIRECTORY_SEPARATOR ); // set the correct path delimiter
define('tokenizer_ext', extension_loaded('tokenizer') && version_compare(phpversion(),"4.3.0",">="));
// we just replace all the \ with / so that we can just operate on /
define('PATH_DELIMITER', '/' ); // set the correct path delimiter
define('PHPDOCUMENTOR_WINDOWS',substr(PHP_OS, 0, 3) == 'WIN');
define('_IN_PHP5', phpversion() == '5.0.0RC1-dev' || phpversion() == '5.0.0RC2-dev' ||
    version_compare(phpversion(), '5.0.0', 'ge'));
if (/*@donotremove@*/0)
{
    if (_IN_PHP5) {
        require_once 'PhpDocumentor/phpDocumentor/clone5.inc.php';
    } else {
        require_once 'PhpDocumentor/phpDocumentor/clone.inc.php';
    }
} else {
    if (_IN_PHP5) {
        require_once dirname(__FILE__) . '/clone5.inc.php';
    } else {
        require_once dirname(__FILE__) . '/clone.inc.php';
    }
}
if (isset($_SERVER['argv'])) {
    $argv = $_SERVER['argv'];
    $argc = $_SERVER['argc'];
}

/** used in phpdoc.php and new_phpdoc.php */
function phpDocumentor_ConfigFileList($directory)
{
    $ret = array();
    if (@is_dir($directory))
    {
        $ret = array();
        $d = @dir($directory); // thanks to Jason E Sweat (jsweat@users.sourceforge.net) for fix
        while($d && $entry=$d->read())
        {
            $getentry = false;
            if (strcmp($entry,".") != 0 && strcmp($entry,"..") != 0)
            {
                if (substr($entry,0,1) != ".") $getentry = true;
            }
            if ($getentry == true)
            {
                if (strpos($entry,'.ini'))
                if (is_file($directory . PATH_DELIMITER . $entry))
                {
                    $ret[] = str_replace('.ini','',$entry);
                }
            }
        }
        if ($d) $d->close();
    } else
    {
    }
    return $ret;
}


/**
 * Parse an .ini file
 * 
 * Works like {@link parse_ini_file}, except it will take a section like:
 *
 * <pre>
 * [MYVAR]
 * value1
 * value2
 * value3
 * </pre>
 *
 * and return an associative array(MYVAR => array(value1, value2, value3))
 * @return array
 * @param string full path to the ini file
 * @param boolean add an associative index for each section [in brackets]
 */
function phpDocumentor_parse_ini_file($filename, $process_sections = false)
{
    $ini_array = array();
    $sec_name = "";
    $lines = @file($filename);
    if( !$lines) return $lines;
    foreach($lines as $line)
    {
        // code by Greg Beaver, ignore comments
        if ($line[0] == ';') continue;
        $line = trim($line);
        
        if($line == "")
        {
            continue;
        }
        if($line[0] == "[" && $line[strlen($line) - 1] == "]")
        {
            $sec_name = substr($line, 1, strlen($line) - 2);
        } else
        {
            if (strpos($line,"="))
            {
                $pos = strpos($line, "=");
                $property = trim(substr($line, 0, $pos));
                // code by Greg Beaver
                if (substr($property, 0, 1) == '"' && substr($property, -1) == '"') {
                    $property = stripcslashes(substr($property,1,count($property) - 2));
                }
                $value = trim(substr($line, $pos + 1));
                if ($value == 'false') $value = false;
                if ($value == 'true') $value = true;
                if (substr($value, 0, 1) == '"' && substr($value,-1) == '"')
                {
                    $value = stripcslashes(substr($value,1,count($value) - 2));
                }
                // done additions
                
                if($process_sections)
                {
                    if ($sec_name != '')
                    $ini_array[$sec_name][$property] = $value;
                    else
                    $ini_array[$property] = $value;
                } else
                {
                    $ini_array[$property] = $value;
                }
            } else
            {
                // code by Greg Beaver
                if (trim($line[0]) == ';') continue;
                if($process_sections)
                {
                    $ini_array[$sec_name][] = trim($line);
                }
                // done additions
            }
        }
    }
    return $ini_array;
}


if (!function_exists('array_key_exists'))
{
/** @ignore */
function array_key_exists($key, $search)
{
    foreach($search as $keys => $nul)
    {
        if ($key == $keys) return true;
    }
    return false;
}
}
if (!function_exists('is_a'))
{
/** @ignore */
function is_a($classname, $classquery)
{
    $father = get_parent_class($classname);
    if (strtolower($father) == strtolower($classquery))
    {
        return true;
    } elseif (!empty($father))
    {
        return is_a($father, $classquery);
    } else
    {
        return false;
    }
}
}


/** Debugging output */
function debug($s)
{
    echo "$s\n";
}

/**
 * Returns a formatted var_dump for debugging purposes.
 * @param string $s string to display
 * @param mixed $v variable to display with var_dump()
 * @param mixed $v... unlimited number of additional variables to display with var_dump()
 */
function fancy_debug($s,$v)
{
    if (isset($GLOBALS['dont_debug']) && $GLOBALS['dont_debug']) return;
    debug($s."\n\n</pre><blockquote><pre>");
    var_dump($v);
    if (func_num_args()>2)
    {
        for($i=2;$i<func_num_args();$i++)
        {
            $a = func_get_arg($i);
//            debug(" ");
            var_dump($a);
        }
    }
    debug("</pre></blockquote><pre>\n\n");
}

/**
 * Returns a lower-cased version of get_class for PHP 5
 *
 * get_class() returns case as declared in the file in PHP 5
 */
function phpDocumentor_get_class($object)
{
    return strtolower(get_class($object));
}

?>