diff -r 32e192fb934a -r 037a9f20bf3a šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Wed Jul 06 23:42:32 2011 +0200 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 00:23:38 2011 +0200 @@ -1,13 +1,81 @@ package cz.frantovo.xmlWebGenerator; +import java.io.BufferedReader; import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintStream; import java.util.Date; import java.net.URI; import java.net.URISyntaxException; public class Funkce { + public static Date posledníZměna(String soubor) throws URISyntaxException { return new Date(new File(new URI(soubor)).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 + */ + public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { + String příkaz = "pygmentizexxx"; + + if (isPrikazDostupny(příkaz)) { + Runtime r = Runtime.getRuntime(); + Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); + + PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); + vstupProcesu.print(zdroják); + vstupProcesu.close(); + + String výsledek = načtiProud(p.getInputStream()); + String chyby = načtiProud(p.getErrorStream()); + + p.waitFor(); + + if (chyby.length() == 0) { + return výsledek; + } else { + System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby); + return "______chyba_____"; + } + } 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_____";
+		}
+	}
+
+	private static String načtiProud(InputStream proud) throws IOException {
+		StringBuilder výsledek = new StringBuilder();
+		BufferedReader buf = new BufferedReader(new InputStreamReader(proud));
+		while (true) {
+			String radek = buf.readLine();
+			if (radek == null) {
+				break;
+			} else {
+				výsledek.append(radek);
+				výsledek.append("\n");
+			}
+		}
+		return výsledek.toString();
+	}
+
+	private static boolean isPrikazDostupny(String příkaz) {
+		try {
+			Runtime r = Runtime.getRuntime();
+			Process p = r.exec(new String[]{"which", příkaz});
+			p.waitFor();
+			return p.exitValue() == 0;
+		} catch (Exception e) {
+			return false;
+		}
+	}
 }
-