/** * the only public entry point to return a parsed representation of a variable * * @static * * @param mixed $variable * @param null|string $name * * @return KintParser */ public static final function factory(&$variable, $name = null) { # save internal data to revert after dumping to properly handle recursions etc $revert = array('level' => self::$_level, 'objects' => self::$_objects); self::$_level++; $varData = new KintVariableData(); $varData->name = $name; # first parse the variable based on its type $varType = gettype($variable); if ($varType === 'unknown type') { $varType = 'unknown'; # PHP 5.4 inconsistency } $methodName = '_parse_' . $varType; # objects can be presented in a different way altogether, INSTEAD, not ALONGSIDE the generic parser if ($varType === 'object') { foreach (self::$_objectParsers as $parserClass) { $className = 'kint\\parsers\\objects\\Kint_Objects_' . $parserClass; /** @var $object KintObject */ $object = new $className(); if (($alternativeTabs = $object->parse($variable)) !== false) { self::$_skipAlternatives = true; $alternativeDisplay = new KintVariableData(); $alternativeDisplay->type = $object->name; $alternativeDisplay->value = $object->value; $alternativeDisplay->name = $name; foreach ($alternativeTabs as $nameInner => $values) { $alternative = self::factory($values); $alternative->type = $nameInner; if (Kint::enabled() === Kint::MODE_RICH) { empty($alternative->value) and $alternative->value = $alternative->extendedValue; $alternativeDisplay->_alternatives[] = $alternative; } else { $alternativeDisplay->extendedValue[] = $alternative; } } self::$_skipAlternatives = false; self::$_level = $revert['level']; self::$_objects = $revert['objects']; return $alternativeDisplay; } } } # base type parser returning false means "stop processing further": e.g. recursion if (self::$methodName($variable, $varData) === false) { self::$_level--; return $varData; } if (!self::$_skipAlternatives && Kint::enabled() === Kint::MODE_RICH) { # if an alternative returns something that can be represented in an alternative way, don't :) self::$_skipAlternatives = true; # now check whether the variable can be represented in a different way foreach (self::$_customDataTypes as $parserClass) { $className = 'kint\\parsers\\custom\\Kint_Parsers_' . $parserClass; /** @var $parser KintParser */ $parser = new $className(); $parser->name = $name; # the parser may overwrite the name value, so set it first if ($parser->_parse($variable) !== false) { $varData->_alternatives[] = $parser; } } # if alternatives exist, push extendedValue to their front and display it as one of alternatives if (!empty($varData->_alternatives) && isset($varData->extendedValue)) { $_ = new KintVariableData(); $_->value = $varData->extendedValue; $_->type = 'contents'; $_->size = null; array_unshift($varData->_alternatives, $_); $varData->extendedValue = null; } self::$_skipAlternatives = false; } self::$_level = $revert['level']; self::$_objects = $revert['objects']; if (strlen($varData->name) > 80) { $varData->name = self::_substr($varData->name, 0, 37) . '...' . self::_substr($varData->name, -38, null); } return $varData; }
/** * @return string */ public static function wrapStart() { if (Kint::enabled() === Kint::MODE_PLAIN) { return '<pre class="-kint">'; } return ''; }