# HG changeset patch # User František Kučera # Date 1314110730 -7200 # Node ID 6bc25517ac4f241c5b2315fd10337e58c37dce68 # Parent da6ae32853cb837f74bac70de45de13f8bf35c83 Diagramy #13 – první verze, celkem funguje. diff -r da6ae32853cb -r 6bc25517ac4f vstup/css/styl.css --- a/vstup/css/styl.css Mon Aug 22 13:57:20 2011 +0200 +++ b/vstup/css/styl.css Tue Aug 23 16:45:30 2011 +0200 @@ -60,3 +60,23 @@ padding: 6px; border-radius: 4px; } + +.diagram { + background-color: #ddf; + padding: 6px; + border-radius: 4px; + text-align: center; + max-width: 100%; + overflow: auto; +} + +.diagram .nadpis { + font-size: 60%; + padding: 4px; + margin-top: 6px; + margin-bottom: -6px; + margin-left: -6px; + margin-right: -6px; + background-color: #d0d0f0; + border-radius: 0px 0px 4px 4px; +} diff -r da6ae32853cb -r 6bc25517ac4f vstup/kontakt.xml --- a/vstup/kontakt.xml Mon Aug 22 13:57:20 2011 +0200 +++ b/vstup/kontakt.xml Tue Aug 23 16:45:30 2011 +0200 @@ -1,4 +1,6 @@ - + Kontakt Kde nás najdete. 60 @@ -12,6 +14,42 @@ Tučňákova Lhota
Česká republika

+ +

Organizační struktura

+ +

+ Zde je orgranizační struktura naší skvělé firmy: +

+ + + tovarnik[label="pan továrník\n(majitel)"]; + reditel[label="pan ředitel"]; + sekretarka[label="slečna sekretářka"]; + root[label="Linuxový guru"]; + architekt[label="Softwarový architekt"]; + + tovarnik -> reditel; + + reditel -> sekretarka; + reditel -> architekt; + reditel -> root; + + +

Procesy

+ +

+ Ve firmě máme spoustu procesů. Jeden z nich vypadá takto: +

+ + + A -> B; + B -> C; + + +

+ Ale protože je to tajné, tak vám neřekneme, co A, B a C znamenají. +

+
diff -r da6ae32853cb -r 6bc25517ac4f šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 13:57:20 2011 +0200 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Tue Aug 23 16:45:30 2011 +0200 @@ -13,14 +13,19 @@ /** * Knihovna funkcí volaných z XSLT. * - * TODO: časem rozdělit na více modulů (jmenných prostorů). + * TODO: + * - rozdělit na více modulů (jmenných prostorů). + * - CLI konektor * * @author fiki */ public class Funkce { private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize"; + private static final String PŘÍKAZ_DOT = "dot"; private static final String PŘÍKAZ_WHICH = "which"; + private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup"; + private static int počítadloDiagramů = 0; /** * Zjištuje, kdy byl naposledy daný soubor změněn. @@ -91,6 +96,57 @@ } /** + * Vytvoří obrázek s diagramem. + * @param zadání definice diagramu ve formátu dot + * @param vodorovně zda má být graf orientovaný vodorovně + * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě. + */ + public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException { + if (isPrikazDostupny(PŘÍKAZ_DOT)) { + počítadloDiagramů++; + String soubor = "diagram-" + počítadloDiagramů; + String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor; + + StringBuilder zdroják = new StringBuilder(zadání.length() + 200); + + zdroják.append("digraph d {\n"); + zdroják.append("\tbgcolor=\"transparent\";\n"); + if (vodorovně) { + zdroják.append("\trankdir=LR;"); + } + zdroják.append(zadání); + zdroják.append("}\n"); + + Runtime r = Runtime.getRuntime(); + Process p = r.exec(new String[]{PŘÍKAZ_DOT, "-T", "svg", "-o", souborSložka + ".svg"}); + + /** + * TODO: generovat i PNG bitmapu + */ + PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); + vstupProcesu.print(zdroják.toString()); + vstupProcesu.close(); + + String chyby = načtiProud(p.getErrorStream()); + + p.waitFor(); + + if (chyby.length() == 0) { + return soubor; + } else { + System.err.print("Při vytváření diagramu došlo k chybě: " + chyby); + return null; + } + } else { + System.err.println("Příkaz " + PŘÍKAZ_DOT + " není na vašem systému dostupný → diagramy nelze vygreslit."); + System.err.println("Můžete ho nainstalovat pomocí:"); + System.err.println("\t$ aptitude install graphviz # (Debian/Ubuntu)"); + System.err.println("\t$ yum install graphviz # (Fedora/RedHat)"); + return null; + } + } + + /** * Čte proud dat dokud to jde a výsledek pak vrátí jako text. * @param proud vstupní proud * @return obsah proudu jako text diff -r da6ae32853cb -r 6bc25517ac4f šablona/stránka.xsl --- a/šablona/stránka.xsl Mon Aug 22 13:57:20 2011 +0200 +++ b/šablona/stránka.xsl Tue Aug 23 16:45:30 2011 +0200 @@ -129,6 +129,33 @@
- + + + + + + + +
+ + Diagram {$souborDiagramu} + + + +

+
+
+
+ + Při vytváření diagramu došlo k chybě. + +
+