root/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java @ 27:037a9f20bf3a

Revision 27:037a9f20bf3a, 2.6 KB (checked in by František Kučera <franta-hg@…>, 13 years ago)

Zvýrazňování syntaxe #12 – začátek.

Line 
1package cz.frantovo.xmlWebGenerator;
2
3import java.io.BufferedReader;
4import java.io.File;
5import java.io.IOException;
6import java.io.InputStream;
7import java.io.InputStreamReader;
8import java.io.PrintStream;
9import java.util.Date;
10import java.net.URI;
11import java.net.URISyntaxException;
12
13public class Funkce {
14
15        public static Date posledníZměna(String soubor) throws URISyntaxException {
16                return new Date(new File(new URI(soubor)).lastModified());
17        }
18
19        /**
20         * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize.
21         * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu
22         * @param jazyk předáme příkazu pygmentize jako parametr -l &lt;lexer&gt;
23         * @return TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
24         */
25        public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException {
26                String příkaz = "pygmentizexxx";
27
28                if (isPrikazDostupny(příkaz)) {
29                        Runtime r = Runtime.getRuntime();
30                        Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk});
31
32                        PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
33                        vstupProcesu.print(zdroják);
34                        vstupProcesu.close();
35
36                        String výsledek = načtiProud(p.getInputStream());
37                        String chyby = načtiProud(p.getErrorStream());
38
39                        p.waitFor();
40
41                        if (chyby.length() == 0) {
42                                return výsledek;
43                        } else {
44                                System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby);
45                                return "______chyba_____";
46                        }
47                } else {
48                        System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat.");
49                        System.err.println("Můžete ho nainstalovat pomocí: aptitude install python-pygments");
50                        // TODO: příkaz pro Fedoru/RedHat
51                        // TODO: vracet escapovaný zdroják v <pre/>
52                        return "__xxx____chyba_____";
53                }
54        }
55
56        private static String načtiProud(InputStream proud) throws IOException {
57                StringBuilder výsledek = new StringBuilder();
58                BufferedReader buf = new BufferedReader(new InputStreamReader(proud));
59                while (true) {
60                        String radek = buf.readLine();
61                        if (radek == null) {
62                                break;
63                        } else {
64                                výsledek.append(radek);
65                                výsledek.append("\n");
66                        }
67                }
68                return výsledek.toString();
69        }
70
71        private static boolean isPrikazDostupny(String příkaz) {
72                try {
73                        Runtime r = Runtime.getRuntime();
74                        Process p = r.exec(new String[]{"which", příkaz});
75                        p.waitFor();
76                        return p.exitValue() == 0;
77                } catch (Exception e) {
78                        return false;
79                }
80        }
81}
Note: See TracBrowser for help on using the browser.