Phrocco\Adapter\PhpAdapter::parse PHP Method

parse() public method

Uses the php tokenizer to separate comments from code
public parse ( $file ) : `array`
return `array`
    public function parse($file)
    {
        $fname = $file;
        $file = file_get_contents($file);
        $code = "";
        $all_matches = array();
        $prev_token = false;
        /*  This is the main parsing technique. It splits a php file into two arrays of comments
         *  and corresponding code. To do this is uses the PHP tokenizer to analyze the file
         *  for comments.
         */
        foreach (token_get_all($file) as $tok) {
            if (is_array($tok)) {
                if (in_array(token_name($tok[0]), $this->comment_tokens)) {
                    if (isset($prev_tok[0]) && token_name($prev_tok[0]) == "T_COMMENT" && token_name($tok[0]) == "T_COMMENT") {
                        $last = array_pop($all_matches);
                        $tok[1] = str_replace("\t", "  ", $tok[1]);
                        $all_matches[] = $last . preg_replace($this->comment_blocks, "\$1", $tok[1]);
                    } else {
                        $tok[1] = str_replace("\t", "  ", $tok[1]);
                        $all_matches[] = preg_replace($this->comment_blocks, "\$1", $tok[1]);
                        $code .= "\n//CODEBLOCK\n";
                    }
                } else {
                    $code .= $tok[1];
                }
            } else {
                $code .= $tok;
            }
            $prev_token = $tok;
        }
        // Passes code onto pygmentize to add syntax highlighting
        $pyg = new Pygment();
        $code = $pyg->pygmentize("php", $code);
        $code = explode('<span class="c1">//CODEBLOCK</span>', $code);
        array_shift($code);
        foreach ($code as &$val) {
            $val = rtrim($val);
            $val = str_replace("\t", " ", $val);
            $val = '<div class="highlight"><pre>' . trim($val, "\n\r") . '</pre></div>';
        }
        // Adds html markup to identify php docblock parameters
        $docs = array();
        foreach ($all_matches as $match) {
            $match = preg_replace($this->doc_params, "<em class='docparam'>\$1</em>", $match);
            $docs[] = Markdown::defaultTransform($match);
        }
        // Our final array of code mapped to comments
        return array("code" => $code, "docs" => $docs);
    }
PhpAdapter