Diagramy #13: možnost načítání ze souboru.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/vstup/kočka-a-pes-oop.dot Fri Jan 06 21:58:52 2012 +0100
1.3 @@ -0,0 +1,18 @@
1.4 +digraph G {
1.5 + bgcolor="transparent";
1.6 +
1.7 +
1.8 + // Třídy:
1.9 + node [shape = "record"]
1.10 + Pes [label = "{Pes|+ kouše : boolean\l|+ štěkej() : void\l}"];
1.11 + Kočka [label = "{Kočka|+ spí : boolean\l|+ mňoukej() : void\l}"];
1.12 + Zvíře [label = "{Zvíře|+ jméno : string\l+ věk : int\l|+ běhej() : void\l}"];
1.13 +
1.14 +
1.15 + // Dědičnost:
1.16 + edge [arrowhead = "empty"]
1.17 +
1.18 + Pes -> Zvíře
1.19 + Kočka -> Zvíře
1.20 +}
1.21 +
2.1 --- a/vstup/zdrojáky.xml Fri Jan 06 20:48:42 2012 +0100
2.2 +++ b/vstup/zdrojáky.xml Fri Jan 06 21:58:52 2012 +0100
2.3 @@ -64,7 +64,14 @@
2.4 <m:pre>#!/bin/bash
2.5 # tento kód nebude zvýrazněn, protože atribut „jazyk“ chybí
2.6 # <blee/></m:pre>
2.7 +
2.8 + <h2>Objekty</h2>
2.9
2.10 + <p>
2.11 + Při vývoji softwaru používáme <abbr title="objektově orientované programování">OOP</abbr>.
2.12 + </p>
2.13 +
2.14 + <m:diagram src="kočka-a-pes-oop.dot" nadpis="Třídy Kočka a Pes jsou potomkem třídy Zvíře"/>
2.15
2.16 </text>
2.17
3.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Fri Jan 06 20:48:42 2012 +0100
3.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Fri Jan 06 21:58:52 2012 +0100
3.3 @@ -1,7 +1,6 @@
3.4 package cz.frantovo.xmlWebGenerator;
3.5
3.6 import java.io.File;
3.7 -import java.io.FileInputStream;
3.8 import java.io.IOException;
3.9 import java.io.PrintStream;
3.10 import java.util.Date;
3.11 @@ -23,7 +22,6 @@
3.12 private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize";
3.13 private static final String PŘÍKAZ_DOT = "dot";
3.14 private static final String PŘÍKAZ_MARKDOWN = "markdown";
3.15 - private static final String ADRESÁŘ_VSTUPNÍ = "vstup";
3.16 private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
3.17 private static int počítadloDiagramů = 0;
3.18
3.19 @@ -98,24 +96,30 @@
3.20 /**
3.21 * Vytvoří obrázek s diagramem.
3.22 * @param zadání definice diagramu ve formátu dot
3.23 - * @param vodorovně zda má být graf orientovaný vodorovně
3.24 + * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>)
3.25 + * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code>
3.26 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
3.27 */
3.28 - public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException {
3.29 + public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní) throws IOException, InterruptedException {
3.30 if (isPříkazDostupný(PŘÍKAZ_DOT)) {
3.31 počítadloDiagramů++;
3.32 String soubor = "diagram-" + počítadloDiagramů;
3.33 String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
3.34
3.35 - StringBuilder zdroják = new StringBuilder(zadání.length() + 200);
3.36 -
3.37 - zdroják.append("digraph d {\n");
3.38 - zdroják.append("\tbgcolor=\"transparent\";\n");
3.39 - if (vodorovně) {
3.40 - zdroják.append("\trankdir=LR;");
3.41 + String zdroják;
3.42 + if (kompletní) {
3.43 + zdroják = zadání;
3.44 + } else {
3.45 + StringBuilder b = new StringBuilder(zadání.length() + 200);
3.46 + b.append("digraph d {\n");
3.47 + b.append("\tbgcolor=\"transparent\";\n");
3.48 + if (vodorovně) {
3.49 + b.append("\trankdir=LR;");
3.50 + }
3.51 + b.append(zadání);
3.52 + b.append("}\n");
3.53 + zdroják = b.toString();
3.54 }
3.55 - zdroják.append(zadání);
3.56 - zdroják.append("}\n");
3.57
3.58 Runtime r = Runtime.getRuntime();
3.59 Process p = r.exec(new String[]{PŘÍKAZ_DOT, "-T", "svg", "-o", souborSložka + ".svg"});
4.1 --- a/šablona/makra/diagramy.xsl Fri Jan 06 20:48:42 2012 +0100
4.2 +++ b/šablona/makra/diagramy.xsl Fri Jan 06 21:58:52 2012 +0100
4.3 @@ -6,21 +6,36 @@
4.4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4.5 exclude-result-prefixes="m j">
4.6
4.7 - <!--
4.8 - Diagramy/grafy
4.9 - **************
4.10 - Můžeme vložit diagram – obrázek.
4.11 - Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi.
4.12 - *
4.13 - @orientace „vodorovně“ nebo „svisle“ (výchozí)
4.14 - @nadpis můžeme uvést název diagramu
4.15 - -->
4.16 - <xsl:template match="m:diagram">
4.17 - <!--
4.18 - TODO: umožnit vkládání diagramů ze souboru (@src)
4.19 - -->
4.20 - <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/>
4.21 - <xsl:choose>
4.22 + <!--
4.23 + Diagramy/grafy
4.24 + **************
4.25 + Můžeme vložit diagram – obrázek.
4.26 + Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi.
4.27 + *
4.28 + @orientace „vodorovně“ nebo „svisle“ (výchozí)
4.29 + @nadpis můžeme uvést název diagramu
4.30 + @kompletní „ano“ → předpokládáme kompletní zdroják v GraphViz syntaxi (pak nemá smysl uvádět orientaci). Výchozí je však „ne“ → uživatel zadává jen „vnitřek“ grafu – např. „A -> B; B -> C;“.
4.31 + @src zadání diagramu načteme ze souboru (potom je výchozí kompletní = 'ne')
4.32 + -->
4.33 + <xsl:template match="m:diagram">
4.34 + <xsl:call-template name="vložDiagram">
4.35 + <xsl:with-param name="zadání" select="text()"/>
4.36 + <xsl:with-param name="kompletní" select="@kompletní = 'ano'"/>
4.37 + </xsl:call-template>
4.38 + </xsl:template>
4.39 +
4.40 + <xsl:template match="m:diagram[@src]">
4.41 + <xsl:call-template name="vložDiagram">
4.42 + <xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/>
4.43 + <xsl:with-param name="kompletní" select="not(@kompletní) or @kompletní = 'ano'"/>
4.44 + </xsl:call-template>
4.45 + </xsl:template>
4.46 +
4.47 + <xsl:template name="vložDiagram">
4.48 + <xsl:param name="zadání"/>
4.49 + <xsl:param name="kompletní"/>
4.50 + <xsl:variable name="souborDiagramu" select="j:vytvořDiagram($zadání, @orientace = 'vodorovně', $kompletní)"/>
4.51 + <xsl:choose>
4.52 <xsl:when test="$souborDiagramu">
4.53 <div class="diagram">
4.54 <a href="{$souborDiagramu}.svg">
4.55 @@ -33,10 +48,10 @@
4.56 TODO: SVG+PNG:
4.57 <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/>
4.58 <object
4.59 - data="{$souborDiagramu}.svg"
4.60 - type="image/svg+xml"
4.61 - style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}">
4.62 - <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/>
4.63 + data="{$souborDiagramu}.svg"
4.64 + type="image/svg+xml"
4.65 + style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}">
4.66 + <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/>
4.67 </object>
4.68 -->
4.69 <xsl:if test="@nadpis">
4.70 @@ -47,7 +62,7 @@
4.71 <xsl:otherwise>
4.72 <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message>
4.73 </xsl:otherwise>
4.74 - </xsl:choose>
4.75 - </xsl:template>
4.76 + </xsl:choose>
4.77 + </xsl:template>
4.78
4.79 </xsl:stylesheet>