1.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 00:23:38 2011 +0200
1.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 01:17:12 2011 +0200
1.3 @@ -10,22 +10,41 @@
1.4 import java.net.URI;
1.5 import java.net.URISyntaxException;
1.6
1.7 +/**
1.8 + * Knihovna funkcí volaných z XSLT.
1.9 + *
1.10 + * TODO: časem rozdělit na více modulů (jmenných prostorů).
1.11 + *
1.12 + * @author fiki
1.13 + */
1.14 public class Funkce {
1.15
1.16 + /**
1.17 + * Zjištuje, kdy byl naposledy daný soubor změněn.
1.18 + * @param soubor cesta k souboru
1.19 + * @return datum poslední změny
1.20 + * @throws URISyntaxException
1.21 + */
1.22 public static Date posledníZměna(String soubor) throws URISyntaxException {
1.23 - return new Date(new File(new URI(soubor)).lastModified());
1.24 + URI uri = new URI(soubor);
1.25 + File f = new File(uri);
1.26 + return new Date(f.lastModified());
1.27 }
1.28
1.29 /**
1.30 * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize.
1.31 * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu
1.32 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer>
1.33 - * @return TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
1.34 + * @return zvýrazněný text nebo null, pokud došlo k chybě.
1.35 + * TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
1.36 */
1.37 public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException {
1.38 - String příkaz = "pygmentizexxx";
1.39 + String příkaz = "pygmentize";
1.40
1.41 - if (isPrikazDostupny(příkaz)) {
1.42 + if (jazyk == null || jazyk.length() == 0) {
1.43 + System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat.");
1.44 + return null;
1.45 + } else if (isPrikazDostupny(příkaz)) {
1.46 Runtime r = Runtime.getRuntime();
1.47 Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk});
1.48
1.49 @@ -39,20 +58,27 @@
1.50 p.waitFor();
1.51
1.52 if (chyby.length() == 0) {
1.53 + // Pozor: pygmentize má i při chybě návratový kód 0 → je potřeba kontrolovat chybový výstup.
1.54 return výsledek;
1.55 } else {
1.56 - System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby);
1.57 - return "______chyba_____";
1.58 + System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby);
1.59 + return null;
1.60 }
1.61 } else {
1.62 System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat.");
1.63 - System.err.println("Můžete ho nainstalovat pomocí: aptitude install python-pygments");
1.64 - // TODO: příkaz pro Fedoru/RedHat
1.65 - // TODO: vracet escapovaný zdroják v <pre/>
1.66 - return "__xxx____chyba_____";
1.67 + System.err.println("Můžete ho nainstalovat pomocí:");
1.68 + System.err.println("\t$ aptitude install python-pygments # (Debian/Ubuntu)");
1.69 + System.err.println("\t$ yum install python-pygments # (Fedora/RedHat)");
1.70 + return null;
1.71 }
1.72 }
1.73
1.74 + /**
1.75 + * Čte proud dat dokud to jde a výsledek pak vrátí jako text.
1.76 + * @param proud vstupní proud
1.77 + * @return obsah proudu jako text
1.78 + * @throws IOException
1.79 + */
1.80 private static String načtiProud(InputStream proud) throws IOException {
1.81 StringBuilder výsledek = new StringBuilder();
1.82 BufferedReader buf = new BufferedReader(new InputStreamReader(proud));
1.83 @@ -68,6 +94,11 @@
1.84 return výsledek.toString();
1.85 }
1.86
1.87 + /**
1.88 + * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný.
1.89 + * @param příkaz jehož přítomnost zjišťujeme
1.90 + * @return true pokud příkaz v systému existuje
1.91 + */
1.92 private static boolean isPrikazDostupny(String příkaz) {
1.93 try {
1.94 Runtime r = Runtime.getRuntime();