Diagramy #13: číslování v rámci stránky + u diagramů ze souboru použijeme název souboru se zadáním.
--- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Sat Jan 07 17:34:57 2012 +0100
+++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Sat Jan 07 18:45:54 2012 +0100
@@ -23,6 +23,8 @@
import java.util.Date;
import java.net.URI;
import java.net.URISyntaxException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
/**
@@ -41,6 +43,7 @@
private static final String PŘÍKAZ_MARKDOWN = "markdown";
private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
private static int počítadloDiagramů = 0;
+ private static String počítadloDiagramůKontext = "";
/**
* Zjištuje, kdy byl naposledy daný soubor změněn.
@@ -115,12 +118,38 @@
* @param zadání definice diagramu ve formátu dot
* @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>
+ * @param kontext kam diagram patří – typicky název stránky, do které je vložen
+ * diagramy se pak budou číslovat v rámci tohoto kontextu
+ * → nebude docházet k přepisování diagramů jiných stránek při částečném přegenerování webu.
+ * @param souborZadání null pokud chceme automatické číslování | nebo zadáme název souboru se zadáním diagramu – vygenerovaný diagram se pak bude jmenovat stejně
* @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ě, boolean kompletní) throws IOException, InterruptedException {
+ public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní, String kontext, String souborZadání) throws IOException, InterruptedException {
if (isPříkazDostupný(PŘÍKAZ_DOT)) {
- počítadloDiagramů++;
- String soubor = "diagram-" + počítadloDiagramů;
+ System.err.println("XXX Kontext: " + URLDecoder.decode(kontext, Charset.defaultCharset().name()));
+ System.err.println("XXX Soubor: " + souborZadání);
+
+ String soubor;
+ if (souborZadání == null) {
+ if (kontext == null) {
+ počítadloDiagramů++;
+ soubor = "diagram-" + počítadloDiagramů;
+ } else {
+ // TODO: tohle by se mělo udělat v XSLT
+ kontext = URLDecoder.decode(kontext, Charset.defaultCharset().name());
+
+ // Každá stránka bude mít svoje diagramy číslované od 1
+ if (!počítadloDiagramůKontext.equals(kontext)) {
+ počítadloDiagramůKontext = kontext;
+ počítadloDiagramů = 0;
+ }
+
+ počítadloDiagramů++;
+ soubor = "diagram-" + kontext + "-" + počítadloDiagramů;
+ }
+ } else {
+ soubor = souborZadání;
+ }
String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
String zdroják;
--- a/šablona/makra/diagramy.xsl Sat Jan 07 17:34:57 2012 +0100
+++ b/šablona/makra/diagramy.xsl Sat Jan 07 18:45:54 2012 +0100
@@ -51,13 +51,19 @@
<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:variable name="souborDiagramu" select="j:vytvořDiagram(
+ $zadání,
+ @orientace = 'vodorovně',
+ $kompletní,
+ tokenize(base-uri(), '/')[last()],
+ @src
+ )"/>
<xsl:choose>
<xsl:when test="$souborDiagramu">
<div class="diagram">
- <a href="{$souborDiagramu}.svg">
+ <a href="{encode-for-uri($souborDiagramu)}.svg">
<img
- src="{$souborDiagramu}.svg"
+ src="{encode-for-uri($souborDiagramu)}.svg"
alt="Diagram {(@nadpis, $souborDiagramu)[1]} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru"
title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/>
</a>