original_string: protected function _doCodeBlocks_callback($matches) {
  		$codeblock = $matches[1];
  
  		$codeblock = $this->outdent($codeblock);
  		if ($this->code_block_content_func) {
  			$codeblock = call_user_func($this->code_block_content_func, $codeblock, "");
  		} else {
  			$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
  		}
  
  		# trim leading newlines and trailing newlines
  		$codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
  
  		$codeblock = "<pre><code>$codeblock\n</code></pre>";
  		return "\n\n" . $this->hashBlock($codeblock) . "\n\n";
  	}
code: protected function _doCodeBlocks_callback($matches) {
  		$codeblock = $matches[1];
  
  		$codeblock = $this->outdent($codeblock);
  		if ($this->code_block_content_func) {
  			$codeblock = call_user_func($this->code_block_content_func, $codeblock, "");
  		} else {
  			$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
  		}
  
  		# trim leading newlines and trailing newlines
  		$codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
  
  		$codeblock = "<pre><code>$codeblock\n</code></pre>";
  		return "\n\n" . $this->hashBlock($codeblock) . "\n\n";
  	}
code_tokens: protected function _doCodeBlocks_callback ( $ matches ) { $ codeblock = $ matches [ 1 ] ; $ codeblock = $ this -> outdent ( $ codeblock ) ; if ( $ this -> code_block_content_func ) { $ codeblock = call_user_func ( $ this -> code_block_content_func , $ codeblock , "" ) ; } else { $ codeblock = htmlspecialchars ( $ codeblock , ENT_NOQUOTES ) ; } # trim leading newlines and trailing newlines $ codeblock = preg_replace ( '/\A\n+|\n+\z/' , '' , $ codeblock ) ; $ codeblock = "<pre><code>$codeblock\n</code></pre>" ; return "\n\n" . $ this -> hashBlock ( $ codeblock ) . "\n\n" ; }
docstring: Code block parsing callback
  @param  array $matches
  @return string
docstring_tokens: Code block parsing callback