/[ascend]/trunk/tools/mediawiki/ashighlight.class.php
ViewVC logotype

Annotation of /trunk/tools/mediawiki/ashighlight.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1390 - (hide annotations) (download)
Mon Apr 16 06:19:43 2007 UTC (15 years, 9 months ago) by jpye
File size: 2752 byte(s)
Moved support files for variouso outside 'tools' into their own folder together.
1 jpye 1390 <?php
2    
3     define(ASHIGHLIGHT_LANG_ROOT,"/usr/share/highlight/langDefs");
4    
5     class ASHighlight{
6    
7     function __construct($dir="/tmp",$default_lang="py"){
8     $this->env=array();
9     $this->dir=$dir;
10     $this->encoding="ascii";
11     $this->line_numbers=false;
12     $this->default_lang=$default_lang;
13     }
14    
15     function set_encoding($encoding="UTF-8"){
16     $this->encoding=$encoding;
17     }
18    
19     function enable_line_numbers(){
20     $this->line_numbers = true;
21     }
22     function disable_line_numbers(){
23     $this->line_numbers = false;
24     }
25    
26     function start_line_numbers_at($start_line){
27     $this->start_line = int($start_line);
28     }
29    
30     function set_tab_width($tabwidth){
31     $this->tabwidth=int($tabwidth);
32     }
33    
34     function parse_code($text,$lang=""){
35     $descriptorspec = array(
36     0 => array("pipe", "r"), // stdin is a pipe that the child will read from
37     1 => array("pipe", "w"), // stdout is a pipe that the child will write to
38     2 => array("pipe", "w") // stderr is another pipe that the child (might) write to
39     );
40    
41     if(!$lang)$lang=$this->default_lang;
42    
43     $cmd = "highlight --fragment"
44     ." --syntax=".escapeshellarg($lang);
45    
46     if($this->line_numbers){
47     $cmd.=" --linenumbers";
48     if(isset($this->start_line)){
49     $cmd.=" --line-number-start=".$this->start_line;
50     }
51     }
52    
53     if($this->tabwidth)$cmd.=" --replace-tabs=".$this->tabwidth;
54    
55     $css = $this->dir . "/" . "highlight.css";
56     $cmd.=" --style-outfile=".escapeshellarg($css);
57     if(file_exists($css)){
58     $this->error=-888;
59     $this->errmsg="'highlight.css' file already exists in ".$this->dir;
60     }
61    
62     if(!$this->env)$this->env=array();
63    
64     $process = proc_open($cmd, $descriptorspec, $pipes, $this->dir, $this->env);
65    
66     if(is_resource($process)) {
67     // $pipes now looks like this:
68     // 0 => writeable handle connected to child stdin
69     // 1 => readable handle connected to child stdout
70     // Any error output will be appended to /tmp/error-output.txt
71    
72     fwrite($pipes[0], $text);
73     fclose($pipes[0]);
74    
75     $out = stream_get_contents($pipes[1]);
76     fclose($pipes[1]);
77    
78     $err = stream_get_contents($pipes[2]);
79     fclose($pipes[2]);
80    
81     // It is important that you close any pipes before calling
82     // proc_close in order to avoid a deadlock
83     $this->error = proc_close($process);
84    
85     if(!$this->error){
86     if(file_exists($css)){
87     $this->stylesheet = file_get_contents($css);
88     unlink($css);
89     return $out;
90     }else{
91     $this->error=-777;
92     $this->stylesheet="kwa{font:bold}";
93     $this->errmsg="'$css' was not created by $cmd (dir=$this->dir)";
94     return $out;
95     }
96     }else{
97     $this->errmsg = $err;
98     }
99     }else{
100     $this->error = -999;
101     $this->errmsg="Process '$cmd' failed to start?";
102     }
103     }
104    
105     function get_stylesheet(){
106     return $this->stylesheet;
107     }
108     }
109    
110     ?>

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22