43 * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize. |
43 * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize. |
44 * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu |
44 * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu |
45 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> |
45 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> |
46 * @return zvýrazněný text nebo null, pokud došlo k chybě. |
46 * @return zvýrazněný text nebo null, pokud došlo k chybě. |
47 * TODO: |
47 * TODO: |
48 * - použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html |
48 * - vracet místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html |
49 * - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost pygmentize) |
49 * - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost pygmentize) |
50 */ |
50 */ |
51 public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { |
51 public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { |
52 if (jazyk == null || jazyk.length() == 0) { |
52 if (jazyk == null || jazyk.length() == 0) { |
53 System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat."); |
53 System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat."); |
54 return null; |
54 return null; |
55 } else if (isPrikazDostupny(PŘÍKAZ_PYGMENTIZE)) { |
55 } else if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) { |
56 Runtime r = Runtime.getRuntime(); |
56 Runtime r = Runtime.getRuntime(); |
57 Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk}); |
57 Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk}); |
58 |
58 |
59 PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); |
59 PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); |
60 vstupProcesu.print(zdroják); |
60 vstupProcesu.print(zdroják); |
84 /** |
84 /** |
85 * Vygeneruje CSS styl pro zvýrazňování syntaxe. |
85 * Vygeneruje CSS styl pro zvýrazňování syntaxe. |
86 * @return obsah CSS souboru nebo null, pokud generování nebylo možné |
86 * @return obsah CSS souboru nebo null, pokud generování nebylo možné |
87 */ |
87 */ |
88 public static String generujCssSyntaxe() throws IOException, InterruptedException { |
88 public static String generujCssSyntaxe() throws IOException, InterruptedException { |
89 if (isPrikazDostupny(PŘÍKAZ_PYGMENTIZE)) { |
89 if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) { |
90 Runtime r = Runtime.getRuntime(); |
90 Runtime r = Runtime.getRuntime(); |
91 Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-S", "default", "-f", "html"}); |
91 Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-S", "default", "-f", "html"}); |
92 return načtiProud(p.getInputStream()); |
92 return načtiProud(p.getInputStream()); |
93 } else { |
93 } else { |
94 return null; |
94 return null; |
100 * @param zadání definice diagramu ve formátu dot |
100 * @param zadání definice diagramu ve formátu dot |
101 * @param vodorovně zda má být graf orientovaný vodorovně |
101 * @param vodorovně zda má být graf orientovaný vodorovně |
102 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě. |
102 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě. |
103 */ |
103 */ |
104 public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException { |
104 public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException { |
105 if (isPrikazDostupny(PŘÍKAZ_DOT)) { |
105 if (isPříkazDostupný(PŘÍKAZ_DOT)) { |
106 počítadloDiagramů++; |
106 počítadloDiagramů++; |
107 String soubor = "diagram-" + počítadloDiagramů; |
107 String soubor = "diagram-" + počítadloDiagramů; |
108 String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor; |
108 String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor; |
109 |
109 |
110 StringBuilder zdroják = new StringBuilder(zadání.length() + 200); |
110 StringBuilder zdroják = new StringBuilder(zadání.length() + 200); |
170 /** |
170 /** |
171 * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný. |
171 * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný. |
172 * @param příkaz jehož přítomnost zjišťujeme |
172 * @param příkaz jehož přítomnost zjišťujeme |
173 * @return true pokud příkaz v systému existuje |
173 * @return true pokud příkaz v systému existuje |
174 */ |
174 */ |
175 private static boolean isPrikazDostupny(String příkaz) { |
175 private static boolean isPříkazDostupný(String příkaz) { |
176 try { |
176 try { |
177 Runtime r = Runtime.getRuntime(); |
177 Runtime r = Runtime.getRuntime(); |
178 Process p = r.exec(new String[]{PŘÍKAZ_WHICH, příkaz}); |
178 Process p = r.exec(new String[]{PŘÍKAZ_WHICH, příkaz}); |
179 p.waitFor(); |
179 p.waitFor(); |
180 return p.exitValue() == 0; |
180 return p.exitValue() == 0; |