function scanString($php_source) { $this->collate_cache = array(); $this->ancestors_cache = array(); $tokenizer = new TokenStreamParser(); $token_stream = $tokenizer->scan($php_source); $token_stream->iterate($this->scanner); }
require_once 'reflector.inc.php'; if (realpath($_SERVER['SCRIPT_FILENAME']) === __FILE__) { error_reporting(E_ALL | E_STRICT); $trace_filename = "dumpfile.xt"; $file_to_weave = $argv[1]; if (!is_file($file_to_weave)) { throw new Exception("File ({$file_to_weave}) isn't readable"); } // read trace $reflector = new StaticReflector(); $sigs = new Signatures($reflector); $trace = new xtrace_TraceReader(new SplFileObject($trace_filename)); $collector = new xtrace_TraceSignatureLogger($sigs, $reflector); $trace->process(new xtrace_FunctionTracer($collector, $reflector)); // transform file $scanner = new ScannerMultiplexer(); $parameters_scanner = $scanner->appendScanner(new FunctionParametersScanner()); $function_body_scanner = $scanner->appendScanner(new FunctionBodyScanner()); $modifiers_scanner = $scanner->appendScanner(new ModifiersScanner()); $class_scanner = $scanner->appendScanner(new ClassScanner()); $editor = new TracerDocBlockEditor($sigs, $class_scanner, $function_body_scanner); $transformer = $scanner->appendScanner(new DocCommentEditorTransformer($function_body_scanner, $modifiers_scanner, $parameters_scanner, $editor)); $tokenizer = new TokenStreamParser(); $token_stream = $tokenizer->scan(file_get_contents($file_to_weave)); $token_stream->iterate($scanner); if (isset($argv[2])) { file_put_contents($argv[2], $transformer->getOutput()); } else { echo $transformer->getOutput(); } }
function scan($source, $editor = null) { $editor = $editor ? $editor : new PassthruBufferEditor(); $scanner = new ScannerMultiplexer(); $parameters_scanner = $scanner->appendScanner(new FunctionParametersScanner()); $function_body_scanner = $scanner->appendScanner(new FunctionBodyScanner()); $modifiers_scanner = $scanner->appendScanner(new ModifiersScanner()); $transformer = $scanner->appendScanner(new DocCommentEditorTransformer($function_body_scanner, $modifiers_scanner, $parameters_scanner, $editor)); $tokenizer = new TokenStreamParser(); $token_stream = $tokenizer->scan($source); $token_stream->iterate($scanner); return $transformer; }