diff -r 037a9f20bf3a -r 3298cafa8686 šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 00:23:38 2011 +0200 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 01:10:55 2011 +0200 @@ -10,22 +10,41 @@ import java.net.URI; import java.net.URISyntaxException; +/** + * Knihovna funkcí volaných z XSLT. + * + * TODO: časem rozdělit na více modulů (jmenných prostorů). + * + * @author fiki + */ public class Funkce { + /** + * Zjištuje, kdy byl naposledy daný soubor změněn. + * @param soubor cesta k souboru + * @return datum poslední změny + * @throws URISyntaxException + */ public static Date posledníZměna(String soubor) throws URISyntaxException { - return new Date(new File(new URI(soubor)).lastModified()); + URI uri = new URI(soubor); + File f = new File(uri); + return new Date(f.lastModified()); } /** * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize. * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> - * @return TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html + * @return zvýrazněný text nebo null, pokud došlo k chybě. + * TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html */ public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { - String příkaz = "pygmentizexxx"; + String příkaz = "pygmentize"; - if (isPrikazDostupny(příkaz)) { + if (jazyk == null || jazyk.length() == 0) { + System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat."); + return null; + } else if (isPrikazDostupny(příkaz)) { Runtime r = Runtime.getRuntime(); Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); @@ -39,20 +58,27 @@ p.waitFor(); if (chyby.length() == 0) { + // Pozor: pygmentize má i při chybě návratový kód 0 → je potřeba kontrolovat chybový výstup. return výsledek; } else { - System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby); - return "______chyba_____"; + System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby); + return null; } } else { System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat."); - System.err.println("Můžete ho nainstalovat pomocí: aptitude install python-pygments"); - // TODO: příkaz pro Fedoru/RedHat - // TODO: vracet escapovaný zdroják v
-			return "__xxx____chyba_____";
+			System.err.println("Můžete ho nainstalovat pomocí:");
+			System.err.println("\t$ aptitude install python-pygments   # (Debian/Ubuntu)");
+			System.err.println("\t$ yum install python-pygments        # (Fedora/RedHat)");
+			return null;
 		}
 	}
 
+	/**
+	 * Čte proud dat dokud to jde a výsledek pak vrátí jako text.
+	 * @param proud vstupní proud
+	 * @return obsah proudu jako text
+	 * @throws IOException 
+	 */
 	private static String načtiProud(InputStream proud) throws IOException {
 		StringBuilder výsledek = new StringBuilder();
 		BufferedReader buf = new BufferedReader(new InputStreamReader(proud));
@@ -68,6 +94,11 @@
 		return výsledek.toString();
 	}
 
+	/**
+	 * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný.
+	 * @param příkaz jehož přítomnost zjišťujeme
+	 * @return true pokud příkaz v systému existuje
+	 */
 	private static boolean isPrikazDostupny(String příkaz) {
 		try {
 			Runtime r = Runtime.getRuntime();