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; + } + } } -