Geshi with pre tags was crashing templates sometimes
[gitphp.git] / include / display.git_blob.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
/*
 *  display.git_blob.php
 *  gitphp: A PHP git repository browser
 *  Component: Display - blob
 *
 *  Copyright (C) 2008 Christopher Han <xiphux@gmail.com>
 */
 
 require_once('gitutil.git_read_head.php');
 require_once('gitutil.git_get_hash_by_path.php');
 require_once('gitutil.git_cat_file.php');
 require_once('gitutil.git_read_commit.php');
 require_once('gitutil.git_path_trees.php');
 require_once('gitutil.read_info_ref.php');
 require_once('util.file_mime.php');
 
function git_blob($projectroot, $project, $hash, $file, $hashbase)
{
        global $gitphp_conf,$tpl;
        if (!isset($hashbase))
                $hashbase = git_read_head($projectroot . $project);
        if (!isset($hash) && isset($file))
                $hash = git_get_hash_by_path($projectroot . $project, $hashbase,$file,"blob");
        $catout = git_cat_file($projectroot . $project, $hash);
        $tpl->clear_all_assign();
        $tpl->assign("hash",$hash);
        $tpl->assign("project",$project);
        $tpl->assign("hashbase",$hashbase);
        if ($co = git_read_commit($projectroot . $project, $hashbase)) {
                $tpl->assign("fullnav",TRUE);
                $refs = read_info_ref($projectroot . $project);
                $tpl->assign("tree",$co['tree']);
                $tpl->assign("title",$co['title']);
                if (isset($file))
                        $tpl->assign("file",$file);
                if (isset($refs[$hashbase]))
                        $tpl->assign("hashbaseref",$refs[$hashbase]);
        }
        $paths = git_path_trees($projectroot . $project, $hashbase, $file);
        $tpl->assign("paths",$paths);
 
        if ($gitphp_conf['filemimetype']) {
                $mime = file_mime($catout,$file);
                if ($mime)
                        $mimetype = strtok($mime, "/");
        }
 
        if ($mimetype == "image") {
                $tpl->assign("mime", $mime);
                $tpl->assign("data", base64_encode($catout));
        } else {
                $usedgeshi = $gitphp_conf['geshi'];
                if ($usedgeshi) {
                        $usedgeshi = FALSE;
                        include_once($gitphp_conf['geshiroot'] . "geshi.php");
                        if (class_exists("GeSHi")) {
                                $geshi = new GeSHi("",'php');
                                if ($geshi) {
                                        $lang = "";
                                        if (isset($file))
                                                $lang = $geshi->get_language_name_from_extension(substr(strrchr($file,'.'),1));
                                        if (isset($lang) && (strlen($lang) > 0)) {
                                                $geshi->set_source($catout);
                                                $geshi->set_language($lang);
                                                $geshi->set_header_type(GESHI_HEADER_DIV);
                                                $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS);
                                                $tpl->assign("geshiout",$geshi->parse_code());
                                                $usedgeshi = TRUE;
                                        }
                                }
                        }
                }
 
                if (!$usedgeshi) {
                        $lines = explode("\n",$catout);
                        $tpl->assign("lines",$lines);
                }
        }
 
        $tpl->display("blob.tpl");
}
 
?>
 
comments