paint($mixed); } function paintIf($mixed, $conditional) { $Debugger =& Debugger::instance(); return $Debugger->paintIf($mixed, $conditional); } function paintWhen($mixed, $scopes = array()) { $Debugger =& Debugger::instance(); return $Debugger->paintWhen($mixed, $scopes); } function paintIfWhen($mixed, $conditional, $scopes = array()) { $Debugger =& Debugger::instance(); return $Debugger->paintIfWhen($mixed, $conditional, $scopes); } function addScope($id = false) { $Debugger =& Debugger::instance(); return $Debugger->addScope($id); } function removeScope($id) { $Debugger =& Debugger::instance(); return $Debugger->removeScope($id); } function resetScopes() { $Debugger =& Debugger::instance(); return $Debugger->resetScopes(); } function isInScopes($array = array()) { $Debugger =& Debugger::instance(); return $Debugger->isInScopes($array); } /**#@-*/ /** * The debugging singleton. Most interesting stuff happens here. */ class Debugger { public $shouldPaint = false; public $paints = 0; public $current_scopes = array(); public $scope_nextID = 1; public $add_pre = true; public function Debugger() { $this->add_pre = !extension_loaded('xdebug'); } public static function &instance() { static $soleInstance = false; if (!$soleInstance) $soleInstance = new Debugger(); return $soleInstance; } public function paintIf($mixed, $conditional) { if (!$conditional) return; $this->paint($mixed); } public function paintWhen($mixed, $scopes = array()) { if (!$this->isInScopes($scopes)) return; $this->paint($mixed); } public function paintIfWhen($mixed, $conditional, $scopes = array()) { if (!$conditional) return; if (!$this->isInScopes($scopes)) return; $this->paint($mixed); } public function paint($mixed) { $this->paints++; if($this->add_pre) echo '
';
        var_dump($mixed);
        if($this->add_pre) echo '';
    }
    public function addScope($id = false)
    {
        if ($id == false) {
            $id = $this->scope_nextID++;
        }
        $this->current_scopes[$id] = true;
    }
    public function removeScope($id)
    {
        if (isset($this->current_scopes[$id])) unset($this->current_scopes[$id]);
    }
    public function resetScopes()
    {
        $this->current_scopes = array();
        $this->scope_nextID = 1;
    }
    public function isInScopes($scopes = array())
    {
        if (empty($this->current_scopes)) {
            return false;
        }
        if (!is_array($scopes)) {
            $scopes = array($scopes);
        }
        foreach ($scopes as $scope_id) {
            if (empty($this->current_scopes[$scope_id])) {
                return false;
            }
        }
        if (empty($scopes)) {
            if ($this->scope_nextID == 1) {
                return false;
            }
            for($i = 1; $i < $this->scope_nextID; $i++) {
                if (empty($this->current_scopes[$i])) {
                    return false;
                }
            }
        }
        return true;
    }
}
// vim: et sw=4 sts=4