/**
  *
  * @param mixed $var
  * @param integer $deep
  * @param VarParser $parser
  * @return TokenStream
  */
 public function tokenize($var, $deep, VarParser $parser)
 {
     $builder = new TokenStreamBuilder();
     switch (gettype($var)) {
         case 'object':
             if ($deep >= 0) {
                 $builder->addKeyword(get_class($var))->addWhitespece()->addBrace('{}');
             } else {
                 $reflect = new \ReflectionClass($var);
                 $builder->addKeyword($reflect->getShortName())->addWhitespece()->addBrace('{}');
             }
             break;
         case 'array':
             $builder->addType('array')->addBrace('(')->addNumber(count($var))->addBrace(')')->addWhitespece()->addBrace('{');
             if (count($var)) {
                 $builder->addKeyword('…');
             }
             $builder->addBrace('{}');
             break;
         case 'NULL':
             $builder->addKeyword('null');
             break;
         case 'boolean':
             $builder->addKeyword($var ? 'true' : 'false');
             break;
         case 'integer':
         case 'double':
             $builder->addNumber($var);
             break;
         case 'string':
             $builder->addString('"' . $var . '"');
             break;
     }
     return $builder->getStream();
 }
 /**
  *
  * @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();
 }
 /**
  *
  * @param mixed $var
  * @param integer $deep
  * @param VarParser $parser
  * @return TokenStream
  */
 public function tokenize($var, $deep, VarParser $parser)
 {
     $builder = new TokenStreamBuilder();
     $count = count($var);
     $builder->addType('array')->addBrace('(')->addNumber($count)->addBrace(')');
     //        if ($deep < 0) {
     //            return $builder->getStream();
     //        }
     if (!$count or $deep < 0) {
         $builder->addWhitespece()->addBrace('{');
         if ($count) {
             $builder->addKeyword('…');
         }
         $builder->addBrace('}');
         return $builder->getStream();
     }
     $this->tokenizeItems($builder, $var, $deep, $parser);
     return $builder->getStream();
 }
 /**
  *
  * @param mixed $var
  * @param integer $deep
  * @param VarParser $parser
  * @return TokenStream
  */
 public function tokenize($var, $deep, VarParser $parser)
 {
     $builder = new TokenStreamBuilder();
     $props = $this->getProps($var);
     $reflect = new \ReflectionClass($var);
     $builder->addKeyword($reflect->getShortName(), get_class($var));
     if (false !== ($asString = $this->getAsString($var, $deep))) {
         $builder->addBrace('(')->addStream($parser->parse($asString, -1))->addBrace(')');
     }
     if ($deep < 0) {
         return $builder->getStream();
     }
     $builder->addWhitespece()->addBrace('{');
     if ($deep > 0) {
         $this->tokenizeProps($builder, $var, $props, $deep, $parser);
     } elseif (count($props)) {
         $builder->addKeyword('…');
     }
     $builder->addBrace('}');
     return $builder->getStream();
 }