Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Implemented support for XML
  • Loading branch information
kasperg committed Aug 9, 2011
1 parent 076938b commit b49053c
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 2 deletions.
2 changes: 1 addition & 1 deletion bin/phrocco
Expand Up @@ -19,7 +19,7 @@ if(count($argv)>1){
Command line options:
-i <input directory> Where to look for source code files - Searches recursively
-o <output directory> Root directory to output to
-l <language> Language to parse. Currently PHP only, more to come.
-l <language> Language to parse. Currently PHP and XML only, more to come.
Examples:
phrocco -i ./ -o ./docs
Expand Down
71 changes: 71 additions & 0 deletions lib/adapters/XmlAdapter.php
@@ -0,0 +1,71 @@
<?php

/**
* XML Adapter Class
* Its job is to handle XML code and create an array of
* code and comments from a XML file.
* @author Kasper Garnæs
**/

class XmlAdapter {

/**
* Main parsing method.
* Uses the php tokenizer to separate comments from code
* @return `array`
* array("code"=>`array of code lines`, "docs"=>`array of doc blocks`)
**/
public function parse($file) {
// Load the file
$file = trim(file_get_contents($file));
// Determine if we start with a documentation or code block
$is_start_doc = '<!--' == substr($file, 0, 4);
// Explode by start comment delimiter.
// If we start with a comment block every array entry will contain
// documentation first followed by code. Otherwise we start with a entry
// containing nothing but code followed by documentation-code entries.
$file = explode('<!--', $file);
// Explode every entry by end comment delimiter.
foreach ($file as &$f) {
$f = explode('-->', $f);
}
// Every entry should now be an array containing documentation first and
// code second. If we started with a code only block then we add an empty
// documentation block to keep this structure.
if (!$is_start_doc) {
array_unshift($file[0], '');
}

// Separate entries into code and documentation
$docs = array();
$code = array();
for ($i = 0; $i < sizeof($file); $i++) {
$docs[] = trim($file[$i][0]);
$code[] = $file[$i][1];
}

// Passes code onto pygmentize to add syntax highlighting
// Assemble the code into a single string we can pass on to pygmentize.
// Each block is separated by a delimiter.
$code = implode("\n<!--CODEBLOCK-->\n", $code);
$pyg = new Pygment;
$code = $pyg->pygmentize("xml", $code);
// Separate by syntax highlighted delimiter again
$code = explode('<span class="c">&lt;!--CODEBLOCK--&gt;</span>', $code);

foreach($code as &$val) {
$val = rtrim($val);
$val = str_replace("\t", " ", $val);
$val='<div class="highlight"><pre>'.trim($val, "\n\r").'</pre></div>';
}

// Pass documentation through Markdown
foreach($docs as &$doc) {
$doc = Markdown($doc);
}

// Our final array of code mapped to comments
return array("code"=>$code,"docs"=>$docs);
}

}
3 changes: 2 additions & 1 deletion phrocco.php
Expand Up @@ -57,7 +57,8 @@ public function getExtension() {
class PhroccoGroup {

public $extensions = array(
"php" => array("php","phps","phpt")
"php" => array("php","phps","phpt"),
"xml" => array("xml")
);
public $language = "php";
public $defaults = array(
Expand Down

0 comments on commit b49053c

Please sign in to comment.