Rozdělení knihovny funkcí podle maker, ve kterých se funkce používají. #8
1.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Sun Jan 08 11:36:36 2012 +0100
1.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Sun Jan 08 16:52:30 2012 +0100
1.3 @@ -18,33 +18,17 @@
1.4 package cz.frantovo.xmlWebGenerator;
1.5
1.6 import java.io.File;
1.7 -import java.io.IOException;
1.8 -import java.io.PrintStream;
1.9 import java.util.Date;
1.10 import java.net.URI;
1.11 import java.net.URISyntaxException;
1.12 -import java.net.URLDecoder;
1.13 -import java.nio.charset.Charset;
1.14 -import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
1.15
1.16 /**
1.17 - * Knihovna funkcí volaných z XSLT.
1.18 + * Společná knihovna funkcí volaných z XSLT
1.19 *
1.20 - * TODO:
1.21 - * - rozdělit na více modulů (jmenných prostorů).
1.22 - * - CLI konektor
1.23 - *
1.24 - * @author fiki
1.25 + * @author František Kučera (frantovo.cz)
1.26 */
1.27 public class Funkce {
1.28 -
1.29 - private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize";
1.30 - private static final String PŘÍKAZ_DOT = "dot";
1.31 - private static final String PŘÍKAZ_MARKDOWN = "markdown";
1.32 - private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
1.33 - private static int počítadloDiagramů = 0;
1.34 - private static String počítadloDiagramůKontext = ""; // aktuálně zpracovávaná stránka, při změně vynulujeme počítadlo
1.35 -
1.36 +
1.37 /**
1.38 * Zjištuje, kdy byl naposledy daný soubor změněn.
1.39 * @param soubor cesta k souboru
1.40 @@ -56,178 +40,4 @@
1.41 File f = new File(uri);
1.42 return new Date(f.lastModified());
1.43 }
1.44 -
1.45 - /**
1.46 - * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize.
1.47 - * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu
1.48 - * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer>
1.49 - * @return zvýrazněný text nebo null, pokud došlo k chybě.
1.50 - * TODO:
1.51 - * - vracet místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
1.52 - * - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost pygmentize)
1.53 - */
1.54 - public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException {
1.55 - if (jazyk == null || jazyk.length() == 0) {
1.56 - System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat.");
1.57 - return null;
1.58 - } else if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) {
1.59 - Runtime r = Runtime.getRuntime();
1.60 - Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk});
1.61 -
1.62 - PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
1.63 - vstupProcesu.print(zdroják);
1.64 - vstupProcesu.close();
1.65 -
1.66 - String výsledek = načtiProud(p.getInputStream());
1.67 - String chyby = načtiProud(p.getErrorStream());
1.68 -
1.69 - p.waitFor();
1.70 -
1.71 - if (chyby.length() == 0) {
1.72 - // Pozor: pygmentize má i při chybě návratový kód 0 → je potřeba kontrolovat chybový výstup.
1.73 - return výsledek;
1.74 - } else {
1.75 - System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby);
1.76 - return null;
1.77 - }
1.78 - } else {
1.79 - System.err.println("Příkaz " + PŘÍKAZ_PYGMENTIZE + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat.");
1.80 - System.err.println("Můžete ho nainstalovat pomocí:");
1.81 - System.err.println("\t$ aptitude install python-pygments # (Debian/Ubuntu)");
1.82 - System.err.println("\t$ yum install python-pygments # (Fedora/RedHat)");
1.83 - return null;
1.84 - }
1.85 - }
1.86 -
1.87 - /**
1.88 - * Vygeneruje CSS styl pro zvýrazňování syntaxe.
1.89 - * @return obsah CSS souboru nebo null, pokud generování nebylo možné
1.90 - */
1.91 - public static String generujCssSyntaxe() throws IOException, InterruptedException {
1.92 - if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) {
1.93 - Runtime r = Runtime.getRuntime();
1.94 - Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-S", "default", "-f", "html"});
1.95 - return načtiProud(p.getInputStream());
1.96 - } else {
1.97 - return null;
1.98 - }
1.99 - }
1.100 -
1.101 - /**
1.102 - * Vytvoří obrázek s diagramem.
1.103 - * @param zadání definice diagramu ve formátu dot
1.104 - * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>)
1.105 - * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code>
1.106 - * @param kontext kam diagram patří – typicky název stránky, do které je vložen
1.107 - * diagramy se pak budou číslovat v rámci tohoto kontextu
1.108 - * → nebude docházet k přepisování diagramů jiných stránek při částečném přegenerování webu.
1.109 - * @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ě
1.110 - * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
1.111 - */
1.112 - public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní, String kontext, String souborZadání) throws IOException, InterruptedException {
1.113 - if (isPříkazDostupný(PŘÍKAZ_DOT)) {
1.114 -
1.115 - String soubor;
1.116 - if (souborZadání == null) {
1.117 - if (kontext == null) {
1.118 - počítadloDiagramů++;
1.119 - soubor = "diagram-" + počítadloDiagramů;
1.120 - } else {
1.121 - // TODO: tohle by se mělo udělat v XSLT
1.122 - kontext = URLDecoder.decode(kontext, Charset.defaultCharset().name());
1.123 -
1.124 - // Každá stránka bude mít svoje diagramy číslované od 1
1.125 - if (!počítadloDiagramůKontext.equals(kontext)) {
1.126 - počítadloDiagramůKontext = kontext;
1.127 - počítadloDiagramů = 0;
1.128 - }
1.129 -
1.130 - počítadloDiagramů++;
1.131 - soubor = "diagram-" + kontext + "-" + počítadloDiagramů;
1.132 - }
1.133 - } else {
1.134 - soubor = souborZadání;
1.135 - }
1.136 - String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
1.137 -
1.138 - String zdroják;
1.139 - if (kompletní) {
1.140 - zdroják = zadání;
1.141 - } else {
1.142 - StringBuilder b = new StringBuilder(zadání.length() + 200);
1.143 - b.append("digraph d {\n");
1.144 - b.append("\tbgcolor=\"transparent\";\n");
1.145 - if (vodorovně) {
1.146 - b.append("\trankdir=LR;");
1.147 - }
1.148 - b.append(zadání);
1.149 - b.append("}\n");
1.150 - zdroják = b.toString();
1.151 - }
1.152 -
1.153 - Runtime r = Runtime.getRuntime();
1.154 - Process p = r.exec(new String[]{PŘÍKAZ_DOT, "-T", "svg", "-o", souborSložka + ".svg"});
1.155 -
1.156 - /**
1.157 - * TODO: generovat i PNG bitmapu
1.158 - */
1.159 - PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
1.160 - vstupProcesu.print(zdroják.toString());
1.161 - vstupProcesu.close();
1.162 -
1.163 - String chyby = načtiProud(p.getErrorStream());
1.164 -
1.165 - p.waitFor();
1.166 -
1.167 - if (chyby.length() == 0) {
1.168 - return soubor;
1.169 - } else {
1.170 - System.err.print("Při vytváření diagramu došlo k chybě: " + chyby);
1.171 - return null;
1.172 - }
1.173 - } else {
1.174 - System.err.println("Příkaz " + PŘÍKAZ_DOT + " není na vašem systému dostupný → diagramy nelze vygreslit.");
1.175 - System.err.println("Můžete ho nainstalovat pomocí:");
1.176 - System.err.println("\t$ aptitude install graphviz # (Debian/Ubuntu)");
1.177 - System.err.println("\t$ yum install graphviz # (Fedora/RedHat)");
1.178 - return null;
1.179 - }
1.180 - }
1.181 -
1.182 - /**
1.183 - * Převede text ve wiki syntaxi do XHTML.
1.184 - * @param wiki vstupní text v dané wiki syntaxi
1.185 - * @param syntaxe null nebo volitelně syntaxe (markdown, texy)
1.186 - * @return naformátované XHTML
1.187 - */
1.188 - public static String formátujWiki(String wiki, String syntaxe) throws IOException {
1.189 - if (isPříkazDostupný(PŘÍKAZ_MARKDOWN)) {
1.190 - Runtime r = Runtime.getRuntime();
1.191 - Process p = r.exec(new String[]{PŘÍKAZ_MARKDOWN});
1.192 -
1.193 - /**
1.194 - * TODO: oříznout mezery na začátcích řádků, pokud je jich všude stejně?
1.195 - * (odsazení v XML)
1.196 - */
1.197 - PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
1.198 - vstupProcesu.print(wiki);
1.199 - vstupProcesu.close();
1.200 -
1.201 - String chyby = načtiProud(p.getErrorStream());
1.202 - String xhtml = načtiProud(p.getInputStream());
1.203 -
1.204 - if (chyby.length() == 0) {
1.205 - return xhtml;
1.206 - } else {
1.207 - System.err.print("Při zpracování wiki syntaxe došlo k chybě: " + chyby);
1.208 - return null;
1.209 - }
1.210 - } else {
1.211 - System.err.println("Příkaz " + PŘÍKAZ_MARKDOWN + " není na vašem systému dostupný → nelze formátovat texty ve wiki syntaxi.");
1.212 - System.err.println("Můžete ho nainstalovat pomocí:");
1.213 - System.err.println("\t$ aptitude install markdown # (Debian/Ubuntu)");
1.214 - System.err.println("\t$ yum install perl-Text-Markdown # (Fedora/RedHat)");
1.215 - return null;
1.216 - }
1.217 - }
1.218 }
2.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/NástrojeCLI.java Sun Jan 08 11:36:36 2012 +0100
2.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/NástrojeCLI.java Sun Jan 08 16:52:30 2012 +0100
2.3 @@ -24,7 +24,10 @@
2.4
2.5 /**
2.6 * Pomocné funkce pro práci s příkazy
2.7 - * @author fiki
2.8 + *
2.9 + * Tyto funkce nejsou určené k přímému volání z XSLT.
2.10 + *
2.11 + * @author František Kučera (frantovo.cz)
2.12 */
2.13 public class NástrojeCLI {
2.14
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Diagram.java Sun Jan 08 16:52:30 2012 +0100
3.3 @@ -0,0 +1,119 @@
3.4 +/**
3.5 + * XML Web generátor – program na generování webových stránek
3.6 + * Copyright © 2012 František Kučera (frantovo.cz)
3.7 + *
3.8 + * This program is free software: you can redistribute it and/or modify
3.9 + * it under the terms of the GNU General Public License as published by
3.10 + * the Free Software Foundation, either version 3 of the License, or
3.11 + * (at your option) any later version.
3.12 + *
3.13 + * This program is distributed in the hope that it will be useful,
3.14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
3.15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3.16 + * GNU General Public License for more details.
3.17 + *
3.18 + * You should have received a copy of the GNU General Public License
3.19 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
3.20 + */
3.21 +package cz.frantovo.xmlWebGenerator.makra;
3.22 +
3.23 +import java.io.File;
3.24 +import java.io.IOException;
3.25 +import java.io.PrintStream;
3.26 +import java.net.URLDecoder;
3.27 +import java.nio.charset.Charset;
3.28 +import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
3.29 +
3.30 +/**
3.31 + * Diagramy
3.32 + *
3.33 + * @author František Kučera (frantovo.cz)
3.34 + */
3.35 +public class Diagram {
3.36 +
3.37 + private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
3.38 + private static final String PŘÍKAZ_DOT = "dot";
3.39 + private static int počítadloDiagramů = 0;
3.40 + private static String počítadloDiagramůKontext = ""; // aktuálně zpracovávaná stránka, při změně vynulujeme počítadlo
3.41 +
3.42 + /**
3.43 + * Vytvoří obrázek s diagramem.
3.44 + * @param zadání definice diagramu ve formátu dot
3.45 + * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>)
3.46 + * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code>
3.47 + * @param kontext kam diagram patří – typicky název stránky, do které je vložen
3.48 + * diagramy se pak budou číslovat v rámci tohoto kontextu
3.49 + * → nebude docházet k přepisování diagramů jiných stránek při částečném přegenerování webu.
3.50 + * @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ě
3.51 + * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
3.52 + */
3.53 + public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní, String kontext, String souborZadání) throws IOException, InterruptedException {
3.54 + if (isPříkazDostupný(PŘÍKAZ_DOT)) {
3.55 +
3.56 + String soubor;
3.57 + if (souborZadání == null) {
3.58 + if (kontext == null) {
3.59 + počítadloDiagramů++;
3.60 + soubor = "diagram-" + počítadloDiagramů;
3.61 + } else {
3.62 + // TODO: tohle by se mělo udělat v XSLT
3.63 + kontext = URLDecoder.decode(kontext, Charset.defaultCharset().name());
3.64 +
3.65 + // Každá stránka bude mít svoje diagramy číslované od 1
3.66 + if (!počítadloDiagramůKontext.equals(kontext)) {
3.67 + počítadloDiagramůKontext = kontext;
3.68 + počítadloDiagramů = 0;
3.69 + }
3.70 +
3.71 + počítadloDiagramů++;
3.72 + soubor = "diagram-" + kontext + "-" + počítadloDiagramů;
3.73 + }
3.74 + } else {
3.75 + soubor = souborZadání;
3.76 + }
3.77 + String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
3.78 +
3.79 + String zdroják;
3.80 + if (kompletní) {
3.81 + zdroják = zadání;
3.82 + } else {
3.83 + StringBuilder b = new StringBuilder(zadání.length() + 200);
3.84 + b.append("digraph d {\n");
3.85 + b.append("\tbgcolor=\"transparent\";\n");
3.86 + if (vodorovně) {
3.87 + b.append("\trankdir=LR;");
3.88 + }
3.89 + b.append(zadání);
3.90 + b.append("}\n");
3.91 + zdroják = b.toString();
3.92 + }
3.93 +
3.94 + Runtime r = Runtime.getRuntime();
3.95 + Process p = r.exec(new String[]{PŘÍKAZ_DOT, "-T", "svg", "-o", souborSložka + ".svg"});
3.96 +
3.97 + /**
3.98 + * TODO: generovat i PNG bitmapu
3.99 + */
3.100 + PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
3.101 + vstupProcesu.print(zdroják.toString());
3.102 + vstupProcesu.close();
3.103 +
3.104 + String chyby = načtiProud(p.getErrorStream());
3.105 +
3.106 + p.waitFor();
3.107 +
3.108 + if (chyby.length() == 0) {
3.109 + return soubor;
3.110 + } else {
3.111 + System.err.print("Při vytváření diagramu došlo k chybě: " + chyby);
3.112 + return null;
3.113 + }
3.114 + } else {
3.115 + System.err.println("Příkaz " + PŘÍKAZ_DOT + " není na vašem systému dostupný → diagramy nelze vygreslit.");
3.116 + System.err.println("Můžete ho nainstalovat pomocí:");
3.117 + System.err.println("\t$ aptitude install graphviz # (Debian/Ubuntu)");
3.118 + System.err.println("\t$ yum install graphviz # (Fedora/RedHat)");
3.119 + return null;
3.120 + }
3.121 + }
3.122 +}
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Pre.java Sun Jan 08 16:52:30 2012 +0100
4.3 @@ -0,0 +1,88 @@
4.4 +/**
4.5 + * XML Web generátor – program na generování webových stránek
4.6 + * Copyright © 2012 František Kučera (frantovo.cz)
4.7 + *
4.8 + * This program is free software: you can redistribute it and/or modify
4.9 + * it under the terms of the GNU General Public License as published by
4.10 + * the Free Software Foundation, either version 3 of the License, or
4.11 + * (at your option) any later version.
4.12 + *
4.13 + * This program is distributed in the hope that it will be useful,
4.14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4.15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4.16 + * GNU General Public License for more details.
4.17 + *
4.18 + * You should have received a copy of the GNU General Public License
4.19 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
4.20 + */
4.21 +package cz.frantovo.xmlWebGenerator.makra;
4.22 +
4.23 +import java.io.IOException;
4.24 +import java.io.PrintStream;
4.25 +import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
4.26 +
4.27 +/**
4.28 + * Zvýrazňování syntaxe
4.29 + *
4.30 + * @author František Kučera (frantovo.cz)
4.31 + */
4.32 +public class Pre {
4.33 +
4.34 + private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize";
4.35 +
4.36 + /**
4.37 + * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize.
4.38 + * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu
4.39 + * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer>
4.40 + * @return zvýrazněný text nebo null, pokud došlo k chybě.
4.41 + * TODO:
4.42 + * - vracet místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
4.43 + * - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost pygmentize)
4.44 + */
4.45 + public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException {
4.46 + if (jazyk == null || jazyk.length() == 0) {
4.47 + System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat.");
4.48 + return null;
4.49 + } else if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) {
4.50 + Runtime r = Runtime.getRuntime();
4.51 + Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk});
4.52 +
4.53 + PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
4.54 + vstupProcesu.print(zdroják);
4.55 + vstupProcesu.close();
4.56 +
4.57 + String výsledek = načtiProud(p.getInputStream());
4.58 + String chyby = načtiProud(p.getErrorStream());
4.59 +
4.60 + p.waitFor();
4.61 +
4.62 + if (chyby.length() == 0) {
4.63 + // Pozor: pygmentize má i při chybě návratový kód 0 → je potřeba kontrolovat chybový výstup.
4.64 + return výsledek;
4.65 + } else {
4.66 + System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby);
4.67 + return null;
4.68 + }
4.69 + } else {
4.70 + System.err.println("Příkaz " + PŘÍKAZ_PYGMENTIZE + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat.");
4.71 + System.err.println("Můžete ho nainstalovat pomocí:");
4.72 + System.err.println("\t$ aptitude install python-pygments # (Debian/Ubuntu)");
4.73 + System.err.println("\t$ yum install python-pygments # (Fedora/RedHat)");
4.74 + return null;
4.75 + }
4.76 + }
4.77 +
4.78 + /**
4.79 + * Vygeneruje CSS styl pro zvýrazňování syntaxe.
4.80 + * @return obsah CSS souboru nebo null, pokud generování nebylo možné
4.81 + */
4.82 + public static String generujCssSyntaxe() throws IOException, InterruptedException {
4.83 + if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) {
4.84 + Runtime r = Runtime.getRuntime();
4.85 + Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-S", "default", "-f", "html"});
4.86 + return načtiProud(p.getInputStream());
4.87 + } else {
4.88 + return null;
4.89 + }
4.90 + }
4.91 +}
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Wiki.java Sun Jan 08 16:52:30 2012 +0100
5.3 @@ -0,0 +1,73 @@
5.4 +/**
5.5 + * XML Web generátor – program na generování webových stránek
5.6 + * Copyright © 2012 František Kučera (frantovo.cz)
5.7 + *
5.8 + * This program is free software: you can redistribute it and/or modify
5.9 + * it under the terms of the GNU General Public License as published by
5.10 + * the Free Software Foundation, either version 3 of the License, or
5.11 + * (at your option) any later version.
5.12 + *
5.13 + * This program is distributed in the hope that it will be useful,
5.14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5.15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5.16 + * GNU General Public License for more details.
5.17 + *
5.18 + * You should have received a copy of the GNU General Public License
5.19 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
5.20 + */
5.21 +package cz.frantovo.xmlWebGenerator.makra;
5.22 +
5.23 +import java.io.IOException;
5.24 +import java.io.PrintStream;
5.25 +import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
5.26 +
5.27 +/**
5.28 + * Wiki syntaxe
5.29 + *
5.30 + * @author František Kučera (frantovo.cz)
5.31 + */
5.32 +public class Wiki {
5.33 +
5.34 + private static final String PŘÍKAZ_MARKDOWN = "markdown";
5.35 +
5.36 + /**
5.37 + * Převede text ve wiki syntaxi do XHTML.
5.38 + * @param wiki vstupní text v dané wiki syntaxi
5.39 + * @param syntaxe null nebo volitelně syntaxe (markdown, texy)
5.40 + * @return naformátované XHTML
5.41 + * TODO:
5.42 + * - vracet místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
5.43 + * - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost markdownu)
5.44 +
5.45 + */
5.46 + public static String formátujWiki(String wiki, String syntaxe) throws IOException {
5.47 + if (isPříkazDostupný(PŘÍKAZ_MARKDOWN)) {
5.48 + Runtime r = Runtime.getRuntime();
5.49 + Process p = r.exec(new String[]{PŘÍKAZ_MARKDOWN});
5.50 +
5.51 + /**
5.52 + * TODO: oříznout mezery na začátcích řádků, pokud je jich všude stejně?
5.53 + * (odsazení v XML)
5.54 + */
5.55 + PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
5.56 + vstupProcesu.print(wiki);
5.57 + vstupProcesu.close();
5.58 +
5.59 + String chyby = načtiProud(p.getErrorStream());
5.60 + String xhtml = načtiProud(p.getInputStream());
5.61 +
5.62 + if (chyby.length() == 0) {
5.63 + return xhtml;
5.64 + } else {
5.65 + System.err.print("Při zpracování wiki syntaxe došlo k chybě: " + chyby);
5.66 + return null;
5.67 + }
5.68 + } else {
5.69 + System.err.println("Příkaz " + PŘÍKAZ_MARKDOWN + " není na vašem systému dostupný → nelze formátovat texty ve wiki syntaxi.");
5.70 + System.err.println("Můžete ho nainstalovat pomocí:");
5.71 + System.err.println("\t$ aptitude install markdown # (Debian/Ubuntu)");
5.72 + System.err.println("\t$ yum install perl-Text-Markdown # (Fedora/RedHat)");
5.73 + return null;
5.74 + }
5.75 + }
5.76 +}
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/package-info.java Sun Jan 08 16:52:30 2012 +0100
6.3 @@ -0,0 +1,6 @@
6.4 +/*
6.5 + * Podpůrné funkce pro jednotlivá makra (pokud to potřebují).
6.6 + * Java je tu většinou pouze v roli lepidla, které zajistí napojení XSLT na jiné programy.
6.7 + * Třída se jmenuje stejně jako makro.
6.8 + */
6.9 +package cz.frantovo.xmlWebGenerator.makra;
7.1 --- a/šablona/makra/diagramy.xsl Sun Jan 08 11:36:36 2012 +0100
7.2 +++ b/šablona/makra/diagramy.xsl Sun Jan 08 16:52:30 2012 +0100
7.3 @@ -19,7 +19,7 @@
7.4 <xsl:stylesheet version="2.0"
7.5 xmlns="http://www.w3.org/1999/xhtml"
7.6 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
7.7 - xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce"
7.8 + xmlns:j="java:cz.frantovo.xmlWebGenerator.makra.Diagram"
7.9 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7.10 exclude-result-prefixes="m j">
7.11
8.1 --- a/šablona/makra/wiki.xsl Sun Jan 08 11:36:36 2012 +0100
8.2 +++ b/šablona/makra/wiki.xsl Sun Jan 08 16:52:30 2012 +0100
8.3 @@ -19,7 +19,7 @@
8.4 <xsl:stylesheet version="2.0"
8.5 xmlns="http://www.w3.org/1999/xhtml"
8.6 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
8.7 - xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce"
8.8 + xmlns:j="java:cz.frantovo.xmlWebGenerator.makra.Wiki"
8.9 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
8.10 exclude-result-prefixes="m j">
8.11
9.1 --- a/šablona/makra/zvýraznění-syntaxe.xsl Sun Jan 08 11:36:36 2012 +0100
9.2 +++ b/šablona/makra/zvýraznění-syntaxe.xsl Sun Jan 08 16:52:30 2012 +0100
9.3 @@ -19,7 +19,7 @@
9.4 <xsl:stylesheet version="2.0"
9.5 xmlns="http://www.w3.org/1999/xhtml"
9.6 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
9.7 - xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce"
9.8 + xmlns:j="java:cz.frantovo.xmlWebGenerator.makra.Pre"
9.9 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
9.10 exclude-result-prefixes="m j">
9.11
10.1 --- a/šablona/syntaxe.xsl Sun Jan 08 11:36:36 2012 +0100
10.2 +++ b/šablona/syntaxe.xsl Sun Jan 08 16:52:30 2012 +0100
10.3 @@ -18,7 +18,7 @@
10.4 -->
10.5 <xsl:stylesheet version="2.0"
10.6 xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace"
10.7 - xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce"
10.8 + xmlns:j="java:cz.frantovo.xmlWebGenerator.makra.Pre"
10.9 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
10.10 xmlns:fn="http://www.w3.org/2005/xpath-functions">
10.11 <xsl:output method="text" encoding="UTF-8"/>