Diagramy #13 – první verze, celkem funguje.
1.1 --- a/vstup/css/styl.css Mon Aug 22 13:57:20 2011 +0200
1.2 +++ b/vstup/css/styl.css Tue Aug 23 16:45:30 2011 +0200
1.3 @@ -60,3 +60,23 @@
1.4 padding: 6px;
1.5 border-radius: 4px;
1.6 }
1.7 +
1.8 +.diagram {
1.9 + background-color: #ddf;
1.10 + padding: 6px;
1.11 + border-radius: 4px;
1.12 + text-align: center;
1.13 + max-width: 100%;
1.14 + overflow: auto;
1.15 +}
1.16 +
1.17 +.diagram .nadpis {
1.18 + font-size: 60%;
1.19 + padding: 4px;
1.20 + margin-top: 6px;
1.21 + margin-bottom: -6px;
1.22 + margin-left: -6px;
1.23 + margin-right: -6px;
1.24 + background-color: #d0d0f0;
1.25 + border-radius: 0px 0px 4px 4px;
1.26 +}
2.1 --- a/vstup/kontakt.xml Mon Aug 22 13:57:20 2011 +0200
2.2 +++ b/vstup/kontakt.xml Tue Aug 23 16:45:30 2011 +0200
2.3 @@ -1,4 +1,6 @@
2.4 -<stránka xmlns="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana">
2.5 +<stránka
2.6 + xmlns="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana"
2.7 + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro">
2.8 <nadpis>Kontakt</nadpis>
2.9 <perex>Kde nás najdete.</perex>
2.10 <pořadí>60</pořadí>
2.11 @@ -12,6 +14,42 @@
2.12 Tučňákova Lhota<br/>
2.13 Česká republika
2.14 </p>
2.15 +
2.16 + <h2>Organizační struktura</h2>
2.17 +
2.18 + <p>
2.19 + Zde je orgranizační struktura naší skvělé firmy:
2.20 + </p>
2.21 +
2.22 + <m:diagram nadpis="Naše organizační struktura">
2.23 + tovarnik[label="pan továrník\n(majitel)"];
2.24 + reditel[label="pan ředitel"];
2.25 + sekretarka[label="slečna sekretářka"];
2.26 + root[label="Linuxový guru"];
2.27 + architekt[label="Softwarový architekt"];
2.28 +
2.29 + tovarnik -> reditel;
2.30 +
2.31 + reditel -> sekretarka;
2.32 + reditel -> architekt;
2.33 + reditel -> root;
2.34 + </m:diagram>
2.35 +
2.36 + <h2>Procesy</h2>
2.37 +
2.38 + <p>
2.39 + Ve firmě máme spoustu procesů. Jeden z nich vypadá takto:
2.40 + </p>
2.41 +
2.42 + <m:diagram orientace="vodorovně">
2.43 + A -> B;
2.44 + B -> C;
2.45 + </m:diagram>
2.46 +
2.47 + <p>
2.48 + Ale protože je to tajné, tak vám neřekneme, co A, B a C znamenají.
2.49 + </p>
2.50 +
2.51 </text>
2.52
2.53 </stránka>
3.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Mon Aug 22 13:57:20 2011 +0200
3.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Tue Aug 23 16:45:30 2011 +0200
3.3 @@ -13,14 +13,19 @@
3.4 /**
3.5 * Knihovna funkcí volaných z XSLT.
3.6 *
3.7 - * TODO: časem rozdělit na více modulů (jmenných prostorů).
3.8 + * TODO:
3.9 + * - rozdělit na více modulů (jmenných prostorů).
3.10 + * - CLI konektor
3.11 *
3.12 * @author fiki
3.13 */
3.14 public class Funkce {
3.15
3.16 private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize";
3.17 + private static final String PŘÍKAZ_DOT = "dot";
3.18 private static final String PŘÍKAZ_WHICH = "which";
3.19 + private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
3.20 + private static int počítadloDiagramů = 0;
3.21
3.22 /**
3.23 * Zjištuje, kdy byl naposledy daný soubor změněn.
3.24 @@ -91,6 +96,57 @@
3.25 }
3.26
3.27 /**
3.28 + * Vytvoří obrázek s diagramem.
3.29 + * @param zadání definice diagramu ve formátu dot
3.30 + * @param vodorovně zda má být graf orientovaný vodorovně
3.31 + * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
3.32 + */
3.33 + public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException {
3.34 + if (isPrikazDostupny(PŘÍKAZ_DOT)) {
3.35 + počítadloDiagramů++;
3.36 + String soubor = "diagram-" + počítadloDiagramů;
3.37 + String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
3.38 +
3.39 + StringBuilder zdroják = new StringBuilder(zadání.length() + 200);
3.40 +
3.41 + zdroják.append("digraph d {\n");
3.42 + zdroják.append("\tbgcolor=\"transparent\";\n");
3.43 + if (vodorovně) {
3.44 + zdroják.append("\trankdir=LR;");
3.45 + }
3.46 + zdroják.append(zadání);
3.47 + zdroják.append("}\n");
3.48 +
3.49 + Runtime r = Runtime.getRuntime();
3.50 + Process p = r.exec(new String[]{PŘÍKAZ_DOT, "-T", "svg", "-o", souborSložka + ".svg"});
3.51 +
3.52 + /**
3.53 + * TODO: generovat i PNG bitmapu
3.54 + */
3.55 + PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
3.56 + vstupProcesu.print(zdroják.toString());
3.57 + vstupProcesu.close();
3.58 +
3.59 + String chyby = načtiProud(p.getErrorStream());
3.60 +
3.61 + p.waitFor();
3.62 +
3.63 + if (chyby.length() == 0) {
3.64 + return soubor;
3.65 + } else {
3.66 + System.err.print("Při vytváření diagramu došlo k chybě: " + chyby);
3.67 + return null;
3.68 + }
3.69 + } else {
3.70 + System.err.println("Příkaz " + PŘÍKAZ_DOT + " není na vašem systému dostupný → diagramy nelze vygreslit.");
3.71 + System.err.println("Můžete ho nainstalovat pomocí:");
3.72 + System.err.println("\t$ aptitude install graphviz # (Debian/Ubuntu)");
3.73 + System.err.println("\t$ yum install graphviz # (Fedora/RedHat)");
3.74 + return null;
3.75 + }
3.76 + }
3.77 +
3.78 + /**
3.79 * Čte proud dat dokud to jde a výsledek pak vrátí jako text.
3.80 * @param proud vstupní proud
3.81 * @return obsah proudu jako text
4.1 --- a/šablona/stránka.xsl Mon Aug 22 13:57:20 2011 +0200
4.2 +++ b/šablona/stránka.xsl Tue Aug 23 16:45:30 2011 +0200
4.3 @@ -129,6 +129,33 @@
4.4 <pre><xsl:apply-templates/></pre>
4.5 </xsl:otherwise>
4.6 </xsl:choose>
4.7 - </xsl:template>
4.8 + </xsl:template>
4.9 +
4.10 + <!--
4.11 + Makro pro diagramy/grafy
4.12 + -->
4.13 + <xsl:template match="m:diagram">
4.14 + <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/>
4.15 + <xsl:choose>
4.16 + <xsl:when test="$souborDiagramu">
4.17 + <div class="diagram">
4.18 + <a href="{$souborDiagramu}.svg">
4.19 + <img src="{$souborDiagramu}.svg" alt="Diagram {$souborDiagramu}"/>
4.20 + </a>
4.21 + <!-- TODO: SVG+PNG
4.22 + <object data="{$souborDiagramu}.svg" type="image/svg+xml">
4.23 + <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/>
4.24 + </object>
4.25 + -->
4.26 + <xsl:if test="@nadpis">
4.27 + <p class="nadpis"><xsl:value-of select="@nadpis"/></p>
4.28 + </xsl:if>
4.29 + </div>
4.30 + </xsl:when>
4.31 + <xsl:otherwise>
4.32 + <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message>
4.33 + </xsl:otherwise>
4.34 + </xsl:choose>
4.35 + </xsl:template>
4.36
4.37 </xsl:stylesheet>