21 import java.io.IOException; |
21 import java.io.IOException; |
22 import java.io.PrintStream; |
22 import java.io.PrintStream; |
23 import java.util.Date; |
23 import java.util.Date; |
24 import java.net.URI; |
24 import java.net.URI; |
25 import java.net.URISyntaxException; |
25 import java.net.URISyntaxException; |
|
26 import java.net.URLDecoder; |
|
27 import java.nio.charset.Charset; |
26 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*; |
28 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*; |
27 |
29 |
28 /** |
30 /** |
29 * Knihovna funkcí volaných z XSLT. |
31 * Knihovna funkcí volaných z XSLT. |
30 * |
32 * |
39 private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize"; |
41 private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize"; |
40 private static final String PŘÍKAZ_DOT = "dot"; |
42 private static final String PŘÍKAZ_DOT = "dot"; |
41 private static final String PŘÍKAZ_MARKDOWN = "markdown"; |
43 private static final String PŘÍKAZ_MARKDOWN = "markdown"; |
42 private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup"; |
44 private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup"; |
43 private static int počítadloDiagramů = 0; |
45 private static int počítadloDiagramů = 0; |
|
46 private static String počítadloDiagramůKontext = ""; |
44 |
47 |
45 /** |
48 /** |
46 * Zjištuje, kdy byl naposledy daný soubor změněn. |
49 * Zjištuje, kdy byl naposledy daný soubor změněn. |
47 * @param soubor cesta k souboru |
50 * @param soubor cesta k souboru |
48 * @return datum poslední změny |
51 * @return datum poslední změny |
113 /** |
116 /** |
114 * Vytvoří obrázek s diagramem. |
117 * Vytvoří obrázek s diagramem. |
115 * @param zadání definice diagramu ve formátu dot |
118 * @param zadání definice diagramu ve formátu dot |
116 * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>) |
119 * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>) |
117 * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code> |
120 * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code> |
|
121 * @param kontext kam diagram patří – typicky název stránky, do které je vložen |
|
122 * diagramy se pak budou číslovat v rámci tohoto kontextu |
|
123 * → nebude docházet k přepisování diagramů jiných stránek při částečném přegenerování webu. |
|
124 * @param souborZadání null pokud chceme automatické číslování | nebo zadáme název souboru se zadáním diagramu – vygenerovaný diagram se pak bude jmenovat stejně |
118 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě. |
125 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě. |
119 */ |
126 */ |
120 public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní) throws IOException, InterruptedException { |
127 public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní, String kontext, String souborZadání) throws IOException, InterruptedException { |
121 if (isPříkazDostupný(PŘÍKAZ_DOT)) { |
128 if (isPříkazDostupný(PŘÍKAZ_DOT)) { |
122 počítadloDiagramů++; |
129 System.err.println("XXX Kontext: " + URLDecoder.decode(kontext, Charset.defaultCharset().name())); |
123 String soubor = "diagram-" + počítadloDiagramů; |
130 System.err.println("XXX Soubor: " + souborZadání); |
|
131 |
|
132 String soubor; |
|
133 if (souborZadání == null) { |
|
134 if (kontext == null) { |
|
135 počítadloDiagramů++; |
|
136 soubor = "diagram-" + počítadloDiagramů; |
|
137 } else { |
|
138 // TODO: tohle by se mělo udělat v XSLT |
|
139 kontext = URLDecoder.decode(kontext, Charset.defaultCharset().name()); |
|
140 |
|
141 // Každá stránka bude mít svoje diagramy číslované od 1 |
|
142 if (!počítadloDiagramůKontext.equals(kontext)) { |
|
143 počítadloDiagramůKontext = kontext; |
|
144 počítadloDiagramů = 0; |
|
145 } |
|
146 |
|
147 počítadloDiagramů++; |
|
148 soubor = "diagram-" + kontext + "-" + počítadloDiagramů; |
|
149 } |
|
150 } else { |
|
151 soubor = souborZadání; |
|
152 } |
124 String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor; |
153 String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor; |
125 |
154 |
126 String zdroják; |
155 String zdroják; |
127 if (kompletní) { |
156 if (kompletní) { |
128 zdroják = zadání; |
157 zdroják = zadání; |