X-Git-Url: https://git.cweiske.de/phorkie.git/blobdiff_plain/e3757ad55ac7f161d4de11e38fb57166a8ee85f7..e8d13647a1fba053a2b6c7d6ae18a3bd4d0193a0:/src/Phorkie/File.php diff --git a/src/Phorkie/File.php b/src/Phorkie/File.php index 14a7bbf..84f7eb5 100644 --- a/src/Phorkie/File.php +++ b/src/Phorkie/File.php @@ -17,6 +17,11 @@ class File */ public $repo; + /** + * Maps file extensions to MIME Types + * + * @var array + */ public static $arMimeTypeMap = array( 'css' => 'text/css', 'htm' => 'text/html', @@ -24,6 +29,17 @@ class File 'js' => 'application/javascript', 'php' => 'text/x-php', 'txt' => 'text/plain', + 'xml' => 'text/xml', + ); + + /** + * Maps file extensions to geshi types + * + * @var array + */ + public static $arTypeMap = array( + 'htm' => 'xml', + 'html' => 'xml', ); public function __construct($path, Repository $repo) @@ -43,13 +59,18 @@ class File } /** - * Returns the type of the file, as used internally by Phorkie + * Returns the type of the file, as used by Geshi * * @return string */ public function getType() { - return substr($this->path, strrpos($this->path, '.') + 1); + $ext = substr($this->path, strrpos($this->path, '.') + 1); + if (isset(static::$arTypeMap[$ext])) { + $ext = static::$arTypeMap[$ext]; + } + + return $ext; } public function getContent() @@ -57,6 +78,19 @@ class File return file_get_contents($this->path); } + public function getHighlightedContent() + { + /** + * Yes, geshi needs to be in your include path + * We use the mediawiki geshi extension package. + */ + require 'MediaWiki/geshi/geshi/geshi.php'; + $geshi = new \GeSHi($this->getContent(), $this->getType()); + $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); + $geshi->set_header_type(GESHI_HEADER_DIV); + return $geshi->parse_code(); + } + public function getMimeType() { $type = $this->getType();