diff options
Diffstat (limited to 'src/phorkie/File.php')
| -rw-r--r-- | src/phorkie/File.php | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/phorkie/File.php b/src/phorkie/File.php new file mode 100644 index 0000000..bad21e6 --- /dev/null +++ b/src/phorkie/File.php @@ -0,0 +1,116 @@ +<?php +namespace phorkie; + +class File +{ + /** + * Full path to the file + * + * @var string + */ + public $path; + + /** + * Repository this file belongs to + * + * @var string + */ + public $repo; + + public function __construct($path, Repository $repo = null) + { + $this->path = $path; + $this->repo = $repo; + } + + /** + * Get filename relative to the repository path + * + * @return string + */ + public function getFilename() + { + return basename($this->path); + } + + /** + * Return the full path to the file + * + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * Get file extension without dot + * + * @return string + */ + public function getExt() + { + return substr($this->path, strrpos($this->path, '.') + 1); + } + + public function getContent() + { + 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_once 'MediaWiki/geshi/geshi/geshi.php'; + $geshi = new \GeSHi($this->getContent(), $this->getGeshiType()); + $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); + $geshi->set_header_type(GESHI_HEADER_DIV); + return $geshi->parse_code(); + } + + /** + * Get a link to the file + * + * @param string $type Link type. Supported are: + * - "raw" + * - "display" + * + * @return string + */ + public function getLink($type) + { + if ($type == 'raw') { + return '/' . $this->repo->id . '/raw/' . $this->getFilename(); + } + throw new Exception('Unknown type'); + } + + /** + * Returns the type of the file, as used by Geshi + * + * @return string + */ + public function getGeshiType() + { + $ext = $this->getExt(); + if (isset($GLOBALS['phorkie']['languages'][$ext]['geshi'])) { + $ext = $GLOBALS['phorkie']['languages'][$ext]['geshi']; + } + + return $ext; + } + + public function getMimeType() + { + $ext = $this->getExt(); + if (!isset($GLOBALS['phorkie']['languages'][$ext])) { + return null; + } + return $GLOBALS['phorkie']['languages'][$ext]['mime']; + } +} + +?>
\ No newline at end of file |
