author | František Kučera <franta-hg@frantovo.cz> |
Mon, 22 Aug 2011 00:23:38 +0200 | |
changeset 27 | 037a9f20bf3a |
parent 21 | 2f50f9e10a27 |
child 28 | 3298cafa8686 |
permissions | -rw-r--r-- |
franta-hg@6 | 1 |
package cz.frantovo.xmlWebGenerator; |
franta-hg@6 | 2 |
|
franta-hg@27 | 3 |
import java.io.BufferedReader; |
franta-hg@6 | 4 |
import java.io.File; |
franta-hg@27 | 5 |
import java.io.IOException; |
franta-hg@27 | 6 |
import java.io.InputStream; |
franta-hg@27 | 7 |
import java.io.InputStreamReader; |
franta-hg@27 | 8 |
import java.io.PrintStream; |
franta-hg@6 | 9 |
import java.util.Date; |
franta-hg@6 | 10 |
import java.net.URI; |
franta-hg@6 | 11 |
import java.net.URISyntaxException; |
franta-hg@6 | 12 |
|
franta-hg@6 | 13 |
public class Funkce { |
franta-hg@27 | 14 |
|
franta-hg@21 | 15 |
public static Date posledníZměna(String soubor) throws URISyntaxException { |
franta-hg@21 | 16 |
return new Date(new File(new URI(soubor)).lastModified()); |
franta-hg@21 | 17 |
} |
franta-hg@27 | 18 |
|
franta-hg@27 | 19 |
/** |
franta-hg@27 | 20 |
* Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize. |
franta-hg@27 | 21 |
* @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu |
franta-hg@27 | 22 |
* @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> |
franta-hg@27 | 23 |
* @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 | 24 |
*/ |
franta-hg@27 | 25 |
public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { |
franta-hg@27 | 26 |
String příkaz = "pygmentizexxx"; |
franta-hg@27 | 27 |
|
franta-hg@27 | 28 |
if (isPrikazDostupny(příkaz)) { |
franta-hg@27 | 29 |
Runtime r = Runtime.getRuntime(); |
franta-hg@27 | 30 |
Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); |
franta-hg@27 | 31 |
|
franta-hg@27 | 32 |
PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); |
franta-hg@27 | 33 |
vstupProcesu.print(zdroják); |
franta-hg@27 | 34 |
vstupProcesu.close(); |
franta-hg@27 | 35 |
|
franta-hg@27 | 36 |
String výsledek = načtiProud(p.getInputStream()); |
franta-hg@27 | 37 |
String chyby = načtiProud(p.getErrorStream()); |
franta-hg@27 | 38 |
|
franta-hg@27 | 39 |
p.waitFor(); |
franta-hg@27 | 40 |
|
franta-hg@27 | 41 |
if (chyby.length() == 0) { |
franta-hg@27 | 42 |
return výsledek; |
franta-hg@27 | 43 |
} else { |
franta-hg@27 | 44 |
System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby); |
franta-hg@27 | 45 |
return "______chyba_____"; |
franta-hg@27 | 46 |
} |
franta-hg@27 | 47 |
} else { |
franta-hg@27 | 48 |
System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat."); |
franta-hg@27 | 49 |
System.err.println("Můžete ho nainstalovat pomocí: aptitude install python-pygments"); |
franta-hg@27 | 50 |
// TODO: příkaz pro Fedoru/RedHat |
franta-hg@27 | 51 |
// TODO: vracet escapovaný zdroják v <pre/> |
franta-hg@27 | 52 |
return "__xxx____chyba_____"; |
franta-hg@27 | 53 |
} |
franta-hg@27 | 54 |
} |
franta-hg@27 | 55 |
|
franta-hg@27 | 56 |
private static String načtiProud(InputStream proud) throws IOException { |
franta-hg@27 | 57 |
StringBuilder výsledek = new StringBuilder(); |
franta-hg@27 | 58 |
BufferedReader buf = new BufferedReader(new InputStreamReader(proud)); |
franta-hg@27 | 59 |
while (true) { |
franta-hg@27 | 60 |
String radek = buf.readLine(); |
franta-hg@27 | 61 |
if (radek == null) { |
franta-hg@27 | 62 |
break; |
franta-hg@27 | 63 |
} else { |
franta-hg@27 | 64 |
výsledek.append(radek); |
franta-hg@27 | 65 |
výsledek.append("\n"); |
franta-hg@27 | 66 |
} |
franta-hg@27 | 67 |
} |
franta-hg@27 | 68 |
return výsledek.toString(); |
franta-hg@27 | 69 |
} |
franta-hg@27 | 70 |
|
franta-hg@27 | 71 |
private static boolean isPrikazDostupny(String příkaz) { |
franta-hg@27 | 72 |
try { |
franta-hg@27 | 73 |
Runtime r = Runtime.getRuntime(); |
franta-hg@27 | 74 |
Process p = r.exec(new String[]{"which", příkaz}); |
franta-hg@27 | 75 |
p.waitFor(); |
franta-hg@27 | 76 |
return p.exitValue() == 0; |
franta-hg@27 | 77 |
} catch (Exception e) { |
franta-hg@27 | 78 |
return false; |
franta-hg@27 | 79 |
} |
franta-hg@27 | 80 |
} |
franta-hg@6 | 81 |
} |