17 * |
17 * |
18 * @author fiki |
18 * @author fiki |
19 */ |
19 */ |
20 public class Funkce { |
20 public class Funkce { |
21 |
21 |
|
22 private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize"; |
|
23 private static final String PŘÍKAZ_WHICH = "which"; |
|
24 |
22 /** |
25 /** |
23 * Zjištuje, kdy byl naposledy daný soubor změněn. |
26 * Zjištuje, kdy byl naposledy daný soubor změněn. |
24 * @param soubor cesta k souboru |
27 * @param soubor cesta k souboru |
25 * @return datum poslední změny |
28 * @return datum poslední změny |
26 * @throws URISyntaxException |
29 * @throws URISyntaxException |
37 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> |
40 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> |
38 * @return zvýrazněný text nebo null, pokud došlo k chybě. |
41 * @return zvýrazněný text nebo null, pokud došlo k chybě. |
39 * TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html |
42 * TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html |
40 */ |
43 */ |
41 public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { |
44 public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { |
42 String příkaz = "pygmentize"; |
|
43 |
|
44 if (jazyk == null || jazyk.length() == 0) { |
45 if (jazyk == null || jazyk.length() == 0) { |
45 System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat."); |
46 System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat."); |
46 return null; |
47 return null; |
47 } else if (isPrikazDostupny(příkaz)) { |
48 } else if (isPrikazDostupny(PŘÍKAZ_PYGMENTIZE)) { |
48 Runtime r = Runtime.getRuntime(); |
49 Runtime r = Runtime.getRuntime(); |
49 Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); |
50 Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk}); |
50 |
51 |
51 PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); |
52 PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); |
52 vstupProcesu.print(zdroják); |
53 vstupProcesu.print(zdroják); |
53 vstupProcesu.close(); |
54 vstupProcesu.close(); |
54 |
55 |
63 } else { |
64 } else { |
64 System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby); |
65 System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby); |
65 return null; |
66 return null; |
66 } |
67 } |
67 } else { |
68 } else { |
68 System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat."); |
69 System.err.println("Příkaz " + PŘÍKAZ_PYGMENTIZE + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat."); |
69 System.err.println("Můžete ho nainstalovat pomocí:"); |
70 System.err.println("Můžete ho nainstalovat pomocí:"); |
70 System.err.println("\t$ aptitude install python-pygments # (Debian/Ubuntu)"); |
71 System.err.println("\t$ aptitude install python-pygments # (Debian/Ubuntu)"); |
71 System.err.println("\t$ yum install python-pygments # (Fedora/RedHat)"); |
72 System.err.println("\t$ yum install python-pygments # (Fedora/RedHat)"); |
72 return null; |
73 return null; |
73 } |
74 } |
100 * @return true pokud příkaz v systému existuje |
101 * @return true pokud příkaz v systému existuje |
101 */ |
102 */ |
102 private static boolean isPrikazDostupny(String příkaz) { |
103 private static boolean isPrikazDostupny(String příkaz) { |
103 try { |
104 try { |
104 Runtime r = Runtime.getRuntime(); |
105 Runtime r = Runtime.getRuntime(); |
105 Process p = r.exec(new String[]{"which", příkaz}); |
106 Process p = r.exec(new String[]{PŘÍKAZ_WHICH, příkaz}); |
106 p.waitFor(); |
107 p.waitFor(); |
107 return p.exitValue() == 0; |
108 return p.exitValue() == 0; |
108 } catch (Exception e) { |
109 } catch (Exception e) { |
|
110 System.err.printf("Při zjišťování dostupnosti příkazu „%s“ došlo k chybě: %s", příkaz, e.getLocalizedMessage()); |
109 return false; |
111 return false; |
110 } |
112 } |
111 } |
113 } |
112 } |
114 } |