# HG changeset patch # User František Kučera <franta-hg@frantovo.cz> # Date 1325883532 -3600 # Node ID a221785fe3ac58dccdf300803660d394f5935f27 # Parent df1f942f7b69686b487357a426f0e8a0f76a3aa3 Diagramy #13: možnost načítání ze souboru. diff -r df1f942f7b69 -r a221785fe3ac vstup/kočka-a-pes-oop.dot --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vstup/kočka-a-pes-oop.dot Fri Jan 06 21:58:52 2012 +0100 @@ -0,0 +1,18 @@ +digraph G { + bgcolor="transparent"; + + + // Třídy: + node [shape = "record"] + Pes [label = "{Pes|+ kouše : boolean\l|+ štěkej() : void\l}"]; + Kočka [label = "{Kočka|+ spí : boolean\l|+ mňoukej() : void\l}"]; + Zvíře [label = "{Zvíře|+ jméno : string\l+ věk : int\l|+ běhej() : void\l}"]; + + + // Dědičnost: + edge [arrowhead = "empty"] + + Pes -> Zvíře + Kočka -> Zvíře +} + diff -r df1f942f7b69 -r a221785fe3ac vstup/zdrojáky.xml --- a/vstup/zdrojáky.xml Fri Jan 06 20:48:42 2012 +0100 +++ b/vstup/zdrojáky.xml Fri Jan 06 21:58:52 2012 +0100 @@ -64,7 +64,14 @@ <m:pre>#!/bin/bash # tento kód nebude zvýrazněn, protože atribut „jazyk“ chybí # <blee/></m:pre> + + <h2>Objekty</h2> + <p> + Při vývoji softwaru používáme <abbr title="objektově orientované programování">OOP</abbr>. + </p> + + <m:diagram src="kočka-a-pes-oop.dot" nadpis="Třídy Kočka a Pes jsou potomkem třídy Zvíře"/> </text> diff -r df1f942f7b69 -r a221785fe3ac šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Fri Jan 06 20:48:42 2012 +0100 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Fri Jan 06 21:58:52 2012 +0100 @@ -1,7 +1,6 @@ package cz.frantovo.xmlWebGenerator; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.PrintStream; import java.util.Date; @@ -23,7 +22,6 @@ private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize"; private static final String PŘÍKAZ_DOT = "dot"; private static final String PŘÍKAZ_MARKDOWN = "markdown"; - private static final String ADRESÁŘ_VSTUPNÍ = "vstup"; private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup"; private static int počítadloDiagramů = 0; @@ -98,24 +96,30 @@ /** * Vytvoří obrázek s diagramem. * @param zadání definice diagramu ve formátu dot - * @param vodorovně zda má být graf orientovaný vodorovně + * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>) + * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code> * @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 { + public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní) throws IOException, InterruptedException { if (isPříkazDostupný(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;"); + String zdroják; + if (kompletní) { + zdroják = zadání; + } else { + StringBuilder b = new StringBuilder(zadání.length() + 200); + b.append("digraph d {\n"); + b.append("\tbgcolor=\"transparent\";\n"); + if (vodorovně) { + b.append("\trankdir=LR;"); + } + b.append(zadání); + b.append("}\n"); + zdroják = b.toString(); } - 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"}); diff -r df1f942f7b69 -r a221785fe3ac šablona/makra/diagramy.xsl --- a/šablona/makra/diagramy.xsl Fri Jan 06 20:48:42 2012 +0100 +++ b/šablona/makra/diagramy.xsl Fri Jan 06 21:58:52 2012 +0100 @@ -6,21 +6,36 @@ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="m j"> - <!-- - Diagramy/grafy - ************** - Můžeme vložit diagram – obrázek. - Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi. - * - @orientace „vodorovně“ nebo „svisle“ (výchozí) - @nadpis můžeme uvést název diagramu - --> - <xsl:template match="m:diagram"> - <!-- - TODO: umožnit vkládání diagramů ze souboru (@src) - --> - <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/> - <xsl:choose> + <!-- + Diagramy/grafy + ************** + Můžeme vložit diagram – obrázek. + Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi. + * + @orientace „vodorovně“ nebo „svisle“ (výchozí) + @nadpis můžeme uvést název diagramu + @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;“. + @src zadání diagramu načteme ze souboru (potom je výchozí kompletní = 'ne') + --> + <xsl:template match="m:diagram"> + <xsl:call-template name="vložDiagram"> + <xsl:with-param name="zadání" select="text()"/> + <xsl:with-param name="kompletní" select="@kompletní = 'ano'"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="m:diagram[@src]"> + <xsl:call-template name="vložDiagram"> + <xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/> + <xsl:with-param name="kompletní" select="not(@kompletní) or @kompletní = 'ano'"/> + </xsl:call-template> + </xsl:template> + + <xsl:template name="vložDiagram"> + <xsl:param name="zadání"/> + <xsl:param name="kompletní"/> + <xsl:variable name="souborDiagramu" select="j:vytvořDiagram($zadání, @orientace = 'vodorovně', $kompletní)"/> + <xsl:choose> <xsl:when test="$souborDiagramu"> <div class="diagram"> <a href="{$souborDiagramu}.svg"> @@ -33,10 +48,10 @@ TODO: SVG+PNG: <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/> <object - data="{$souborDiagramu}.svg" - type="image/svg+xml" - style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> - <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> + data="{$souborDiagramu}.svg" + type="image/svg+xml" + style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> + <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> </object> --> <xsl:if test="@nadpis"> @@ -47,7 +62,7 @@ <xsl:otherwise> <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message> </xsl:otherwise> - </xsl:choose> - </xsl:template> + </xsl:choose> + </xsl:template> </xsl:stylesheet>