1 package cz.frantovo.xmlWebGenerator; |
1 package cz.frantovo.xmlWebGenerator; |
2 |
2 |
|
3 import java.io.BufferedReader; |
3 import java.io.File; |
4 import java.io.File; |
|
5 import java.io.IOException; |
|
6 import java.io.InputStream; |
|
7 import java.io.InputStreamReader; |
|
8 import java.io.PrintStream; |
4 import java.util.Date; |
9 import java.util.Date; |
5 import java.net.URI; |
10 import java.net.URI; |
6 import java.net.URISyntaxException; |
11 import java.net.URISyntaxException; |
7 |
12 |
8 public class Funkce { |
13 public class Funkce { |
|
14 |
9 public static Date posledníZměna(String soubor) throws URISyntaxException { |
15 public static Date posledníZměna(String soubor) throws URISyntaxException { |
10 return new Date(new File(new URI(soubor)).lastModified()); |
16 return new Date(new File(new URI(soubor)).lastModified()); |
11 } |
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 <lexer> |
|
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 } |
12 } |
81 } |
13 |
|