Changeset 52:a221785fe3ac

Show
Ignore:
Timestamp:
01/06/12 21:58:52 (12 years ago)
Author:
František Kučera <franta-hg@…>
Branch:
default
Message:

Diagramy #13: možnost načítání ze souboru.

Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • vstup/zdrojáky.xml

    r41 r52  
    6565# tento kód nebude zvýrazněn, protože atribut „jazyk“ chybí 
    6666# &lt;blee/&gt;</m:pre> 
     67 
     68                <h2>Objekty</h2> 
    6769                 
     70                <p> 
     71                        Při vývoji softwaru používáme <abbr title="objektově orientované programování">OOP</abbr>. 
     72                </p> 
     73 
     74                <m:diagram src="kočka-a-pes-oop.dot" nadpis="Třídy Kočka a Pes jsou potomkem třídy Zvíře"/> 
    6875                 
    6976    </text> 
  • šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java

    r43 r52  
    22 
    33import java.io.File; 
    4 import java.io.FileInputStream; 
    54import java.io.IOException; 
    65import java.io.PrintStream; 
     
    2423        private static final String PŘÍKAZ_DOT = "dot"; 
    2524        private static final String PŘÍKAZ_MARKDOWN = "markdown"; 
    26         private static final String ADRESÁŘ_VSTUPNÍ = "vstup"; 
    2725        private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup"; 
    2826        private static int počítadloDiagramů = 0; 
     
    9997         * Vytvoří obrázek s diagramem. 
    10098         * @param zadání definice diagramu ve formátu dot 
    101          * @param vodorovně zda má být graf orientovaný vodorovně 
     99         * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>) 
     100         * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code> 
    102101         * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě. 
    103102         */ 
    104         public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException { 
     103        public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní) throws IOException, InterruptedException { 
    105104                if (isPříkazDostupný(PŘÍKAZ_DOT)) { 
    106105                        počítadloDiagramů++; 
     
    108107                        String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor; 
    109108 
    110                         StringBuilder zdroják = new StringBuilder(zadání.length() + 200); 
    111  
    112                         zdroják.append("digraph d {\n"); 
    113                         zdroják.append("\tbgcolor=\"transparent\";\n"); 
    114                         if (vodorovně) { 
    115                                 zdroják.append("\trankdir=LR;"); 
     109                        String zdroják; 
     110                        if (kompletní) { 
     111                                zdroják = zadání; 
     112                        } else { 
     113                                StringBuilder b = new StringBuilder(zadání.length() + 200); 
     114                                b.append("digraph d {\n"); 
     115                                b.append("\tbgcolor=\"transparent\";\n"); 
     116                                if (vodorovně) { 
     117                                        b.append("\trankdir=LR;"); 
     118                                } 
     119                                b.append(zadání); 
     120                                b.append("}\n"); 
     121                                zdroják = b.toString(); 
    116122                        } 
    117                         zdroják.append(zadání); 
    118                         zdroják.append("}\n"); 
    119123 
    120124                        Runtime r = Runtime.getRuntime(); 
  • šablona/makra/diagramy.xsl

    r51 r52  
    77        exclude-result-prefixes="m j"> 
    88     
    9     <!-- 
    10         Diagramy/grafy 
    11         ************** 
    12         Můžeme vložit diagram – obrázek. 
    13         Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi. 
    14         * 
    15         @orientace „vodorovně“ nebo „svisle“ (výchozí) 
    16         @nadpis můžeme uvést název diagramu 
    17     --> 
    18     <xsl:template match="m:diagram"> 
    19         <!--  
    20                 TODO: umožnit vkládání diagramů ze souboru (@src)  
    21         --> 
    22         <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/> 
    23         <xsl:choose> 
     9        <!-- 
     10                Diagramy/grafy 
     11                ************** 
     12                Můžeme vložit diagram – obrázek. 
     13                Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi. 
     14                * 
     15                @orientace „vodorovně“ nebo „svisle“ (výchozí) 
     16                @nadpis můžeme uvést název diagramu 
     17                @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;“.   
     18                @src zadání diagramu načteme ze souboru (potom je výchozí kompletní = 'ne') 
     19        --> 
     20        <xsl:template match="m:diagram"> 
     21                <xsl:call-template name="vložDiagram"> 
     22                        <xsl:with-param name="zadání" select="text()"/> 
     23                        <xsl:with-param name="kompletní" select="@kompletní = 'ano'"/> 
     24                </xsl:call-template> 
     25        </xsl:template> 
     26         
     27        <xsl:template match="m:diagram[@src]"> 
     28                <xsl:call-template name="vložDiagram"> 
     29                        <xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/> 
     30                        <xsl:with-param name="kompletní" select="not(@kompletní) or @kompletní = 'ano'"/> 
     31                </xsl:call-template> 
     32        </xsl:template> 
     33     
     34    <xsl:template name="vložDiagram"> 
     35                <xsl:param name="zadání"/> 
     36                <xsl:param name="kompletní"/> 
     37                <xsl:variable name="souborDiagramu" select="j:vytvořDiagram($zadání, @orientace = 'vodorovně', $kompletní)"/> 
     38                <xsl:choose> 
    2439                        <xsl:when test="$souborDiagramu"> 
    2540                                <div class="diagram"> 
     
    3449                                                <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/> 
    3550                                                <object 
    36                                                         data="{$souborDiagramu}.svg" 
    37                                                         type="image/svg+xml" 
    38                                                         style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> 
    39                                                                 <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> 
     51                                                data="{$souborDiagramu}.svg" 
     52                                                type="image/svg+xml" 
     53                                                style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> 
     54                                                <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> 
    4055                                                </object> 
    4156                                        --> 
     
    4863                                <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message> 
    4964                        </xsl:otherwise> 
    50         </xsl:choose> 
    51     </xsl:template> 
     65                </xsl:choose> 
     66        </xsl:template> 
    5267 
    5368</xsl:stylesheet>