franta-hg@6: package cz.frantovo.xmlWebGenerator; franta-hg@6: franta-hg@27: import java.io.BufferedReader; franta-hg@6: import java.io.File; franta-hg@27: import java.io.IOException; franta-hg@27: import java.io.InputStream; franta-hg@27: import java.io.InputStreamReader; franta-hg@27: import java.io.PrintStream; franta-hg@6: import java.util.Date; franta-hg@6: import java.net.URI; franta-hg@6: import java.net.URISyntaxException; franta-hg@6: franta-hg@6: public class Funkce { franta-hg@27: franta-hg@21: public static Date posledníZměna(String soubor) throws URISyntaxException { franta-hg@21: return new Date(new File(new URI(soubor)).lastModified()); franta-hg@21: } franta-hg@27: franta-hg@27: /** franta-hg@27: * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize. franta-hg@27: * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu franta-hg@27: * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> franta-hg@27: * @return TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html franta-hg@27: */ franta-hg@27: public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { franta-hg@27: String příkaz = "pygmentizexxx"; franta-hg@27: franta-hg@27: if (isPrikazDostupny(příkaz)) { franta-hg@27: Runtime r = Runtime.getRuntime(); franta-hg@27: Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); franta-hg@27: franta-hg@27: PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); franta-hg@27: vstupProcesu.print(zdroják); franta-hg@27: vstupProcesu.close(); franta-hg@27: franta-hg@27: String výsledek = načtiProud(p.getInputStream()); franta-hg@27: String chyby = načtiProud(p.getErrorStream()); franta-hg@27: franta-hg@27: p.waitFor(); franta-hg@27: franta-hg@27: if (chyby.length() == 0) { franta-hg@27: return výsledek; franta-hg@27: } else { franta-hg@27: System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby); franta-hg@27: return "______chyba_____"; franta-hg@27: } franta-hg@27: } else { franta-hg@27: System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat."); franta-hg@27: System.err.println("Můžete ho nainstalovat pomocí: aptitude install python-pygments"); franta-hg@27: // TODO: příkaz pro Fedoru/RedHat franta-hg@27: // TODO: vracet escapovaný zdroják v
franta-hg@27: 			return "__xxx____chyba_____";
franta-hg@27: 		}
franta-hg@27: 	}
franta-hg@27: 
franta-hg@27: 	private static String načtiProud(InputStream proud) throws IOException {
franta-hg@27: 		StringBuilder výsledek = new StringBuilder();
franta-hg@27: 		BufferedReader buf = new BufferedReader(new InputStreamReader(proud));
franta-hg@27: 		while (true) {
franta-hg@27: 			String radek = buf.readLine();
franta-hg@27: 			if (radek == null) {
franta-hg@27: 				break;
franta-hg@27: 			} else {
franta-hg@27: 				výsledek.append(radek);
franta-hg@27: 				výsledek.append("\n");
franta-hg@27: 			}
franta-hg@27: 		}
franta-hg@27: 		return výsledek.toString();
franta-hg@27: 	}
franta-hg@27: 
franta-hg@27: 	private static boolean isPrikazDostupny(String příkaz) {
franta-hg@27: 		try {
franta-hg@27: 			Runtime r = Runtime.getRuntime();
franta-hg@27: 			Process p = r.exec(new String[]{"which", příkaz});
franta-hg@27: 			p.waitFor();
franta-hg@27: 			return p.exitValue() == 0;
franta-hg@27: 		} catch (Exception e) {
franta-hg@27: 			return false;
franta-hg@27: 		}
franta-hg@27: 	}
franta-hg@6: }