1
0
mirror of https://github.com/php/phd.git synced 2026-03-24 07:02:07 +01:00
Files
archived-phd/phpdotnet/phd/Config.php
2009-05-28 19:45:46 +00:00

151 lines
3.9 KiB
PHP

<?php
/* $Id$ */
require $ROOT . "/include/PhDErrors.php";
define("PHD_VERSION", "0.4.0-enterprise");
class PhDConfig
{
private static $optionArray = array(
'output_format' => array(
'xhtml',
'php',
'bigxhtml',
),
'chunk_extra' => array(
"legalnotice" => true,
"phpdoc:exception" => true,
),
'index' => true,
'xml_root' => '.',
'xml_file' => "./.manual.xml",
'lang_dir' => './',
'language' => 'en',
'verbose' => VERBOSE_DEFAULT,
'date_format' => "H:i:s",
'render_ids' => array(
),
'skip_ids' => array(
),
'color_output' => false,
'output_dir' => './output/',
'intermediate_output_dir' => '.',
'php_error_output' => NULL,
'php_error_color' => false,
'user_error_output' => NULL,
'user_error_color' => false,
'phd_info_output' => NULL,
'phd_info_color' => false,
'package' => 'PHP',
);
public static function init(array $a) {
self::$optionArray = array_merge(self::$optionArray, (array)$a);
}
public static function __callStatic($name, $params) {
$name = strtolower($name); // FC if this becomes case-sensitive
if (strncmp($name, 'set', 3) === 0) {
$name = substr($name, 3);
if ($name[0] === '_') {
$name = substr($name, 1);
}
if (strlen($name) < 1 || count($params) !== 1) { // assert
trigger_error("Misuse of config option setter", E_USER_ERROR);
}
self::$optionArray[$name] = $params[0];
// no return, intentional
}
return isset(self::$optionArray[$name]) ? self::$optionArray[$name] : NULL;
}
}
PhDConfig::set_php_error_output(STDERR);
PhDConfig::set_user_error_output(STDERR);
PhDConfig::set_phd_info_output(STDOUT);
/* {{{ Workaround/fix for Windows prior to PHP5.3 */
if (!function_exists("getopt")) {
function getopt($short, $long) {
global $argv;
printf("I'm sorry, you are running an operating system that does not support getopt()\n");
printf("Please either upgrade to PHP5.3 or try '%s /path/to/your/docbook.xml'\n", $argv[0]);
return array();
}
}
/* }}} */
/* {{{ phd_bool($var) Returns boolean true/false on success, null on failure */
function phd_bool($val) {
if (!is_string($val)) {
return null;
}
switch ($val) {
case "on":
case "yes":
case "true":
case "1":
return true;
break;
case "off":
case "no":
case "false":
case "0":
return false;
break;
default:
return null;
}
}
/* }}} */
abstract class PhDOptionParser
{
abstract public function getOptionList();
public function handlerForOption($opt)
{
if (method_exists($this, "option_{$opt}")) {
return array($this, "option_{$opt}");
} else {
return NULL;
}
}
public function getopt()
{
$opts = $this->getOptionList();
$args = getopt(implode("", array_values($opts)), array_keys($opts));
if ($args === false) {
trigger_error("Something happend with getopt(), please report a bug", E_USER_ERROR);
}
foreach ($args as $k => $v) {
$handler = $this->handlerForOption($k);
if (is_callable($handler)) {
call_user_func($handler, $k, $v);
} else {
var_dump($k, $v);
trigger_error("Hmh, something weird has happend, I don't know this option", E_USER_ERROR);
}
}
}
}
/* {{{ Can't function_call()['key'], so val(function_call(), 'key') */
function val($a, $k)
{
return $a[$k];
}
/* }}} */
/*
* vim600: sw=4 ts=4 syntax=php et
* vim<600: sw=4 ts=4
*/