/** * * @param array $stackFrame * @return TokenStream */ public function parseStackFrame(array $stackFrame, VarParser $varParser) { $builder = new TokenStreamBuilder(); if (isset($stackFrame['class'])) { $reflect = new \ReflectionClass($stackFrame['class']); $builder->addKeyword($reflect->getShortName(), $stackFrame['class'])->addPunctuation($stackFrame['type']); } if (isset($stackFrame['function'])) { $args = array(); foreach ($stackFrame['args'] as $arg) { $args[] = $varParser->parse($arg, -1); } $builder->addKeyword($stackFrame['function'])->addBrace('('); if (count($args)) { $builder->addStream(array_shift($args)); while (count($args)) { $builder->addPunctuation(',')->addWhitespece()->addStream(array_shift($args)); } } $builder->addBrace(')'); } if (isset($stackFrame['file'])) { if (isset($stackFrame['class']) or isset($stackFrame['function'])) { $builder->addWhitespece()->addPlainText('in')->addWhitespece(); } $builder->addKeyword(basename($stackFrame['file']), $stackFrame['file']); if (isset($stackFrame['line'])) { $builder->addWhitespece()->addPlainText('line')->addWhitespece()->addKeyword($stackFrame['line']); } } return $builder->getStream(); }
protected function tokenizeProps(TokenStreamBuilder $builder, $var, $props, $deep, VarParser $parser) { $keyLen = array_reduce($props, function ($maxLen, $prop) { $len = strlen($prop->getName()); return $len > $maxLen ? $len : $maxLen; }); $builder->addNewLine(); foreach ($props as $prop) { $propName = $prop->getName(); $propValue = $prop->getValue($var); $modifiers = $this->getPropModifiers($prop); $diff = $keyLen - strlen($propName . ''); $builder->addIndention()->addType(implode('', $modifiers))->addWhitespece()->addBrace('[')->addString('"' . $propName . '"')->addBrace(']')->addWhitespece($diff + 1)->addPunctuation('=>')->addWhitespece(); $stream = $parser->parse($propValue, $deep - 1); $builder->addStream($stream); $builder->addNewLine(); } }
protected function tokenizeItems(TokenStreamBuilder $builder, $var, $deep, VarParser $parser) { $keyLen = array_reduce(array_keys($var), function ($maxLen, $key) { $len = strlen($key . '') + (is_string($key) ? 2 : 0); return $len > $maxLen ? $len : $maxLen; }); $builder->addWhitespece()->addBrace('{')->addNewLine(); foreach ($var as $key => $value) { $builder->addIndention(); // $builder->addBrace('['); if (is_string($key)) { $builder->addString('"' . $key . '"'); } else { $builder->addNumber($key); } // $builder->addBrace(']'); $diff = $keyLen - strlen($key . '') - (is_string($key) ? 2 : 0); $builder->addWhitespece($diff + 1)->addPunctuation('=>')->addWhitespece(); $stream = $parser->parse($value, $deep - 1); $builder->addStream($stream); $builder->addNewLine(); } $builder->addBrace('}'); }
/** * Get singleton instance of dumper * @return Dumper */ public static function enable($output, $defineGlobalFunctions = true) { $varParser = new VarParser(); $varParser->addTokenizer(new Tokenizer\GenericTokenizer()); $varParser->addTokenizer(new Tokenizer\StringTokenizer()); $varParser->addTokenizer(new Tokenizer\ArrayTokenizer()); $varParser->addTokenizer(new Tokenizer\ObjectTokanizer()); $backtraceParser = new BacktraceParser(); $backtraceFactory = new BacktraceFactory(); $backtraceFactory->addExcule(__DIR__); $backtraceFactory->addExcule(__NAMESPACE__); if (!$output instanceof OutputInterface) { switch (strtolower($output)) { case static::BROWSER: $output = new Output\BrowserOutput(); break; case static::CONSOLE: $output = new Output\ConsoleOutput(); break; default: $output = new Output\NullOutput(); break; } } self::$instance = new self($varParser, $backtraceParser, $backtraceFactory, $output); if ($defineGlobalFunctions) { static::defineGlobalFunctions(); } return self::$instance; }