šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java
changeset 37 2e4e7891a2f7
parent 36 5be21d1ef5f8
child 38 43505795334d
--- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java	Tue Aug 23 20:05:56 2011 +0200
+++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java	Tue Sep 13 18:06:07 2011 +0200
@@ -23,6 +23,7 @@
 
 	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 PŘÍKAZ_WHICH = "which";
 	private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
 	private static int počítadloDiagramů = 0;
@@ -147,6 +148,43 @@
 	}
 
 	/**
+	 * Převede text ve wiki syntaxi do XHTML.
+	 * @param wiki vstupní text v dané wiki syntaxi
+	 * @param syntaxe null nebo volitelně syntaxe (markdown, texy)
+	 * @return naformátované XHTML
+	 */
+	public static String formátujWiki(String wiki, String syntaxe) throws IOException {
+		if (isPříkazDostupný(PŘÍKAZ_MARKDOWN)) {
+			Runtime r = Runtime.getRuntime();
+			Process p = r.exec(new String[]{PŘÍKAZ_MARKDOWN});
+
+			/**
+			 * TODO: oříznout mezery na začátcích řádků, pokud je jich všude stejně?
+			 * (odsazení v XML)
+			 */
+			PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
+			vstupProcesu.print(wiki);
+			vstupProcesu.close();
+
+			String chyby = načtiProud(p.getErrorStream());
+			String xhtml = načtiProud(p.getInputStream());
+
+			if (chyby.length() == 0) {
+				return xhtml;
+			} else {
+				System.err.print("Při zpracování wiki syntaxe došlo k chybě: " + chyby);
+				return null;
+			}
+		} else {
+			System.err.println("Příkaz " + PŘÍKAZ_MARKDOWN + " není na vašem systému dostupný → nelze formátovat texty ve wiki syntaxi.");
+			System.err.println("Můžete ho nainstalovat pomocí:");
+			System.err.println("\t$ aptitude install markdown         # (Debian/Ubuntu)");
+			System.err.println("\t$ yum install perl-Text-Markdown    # (Fedora/RedHat)");
+			return null;
+		}
+	}
+
+	/**
 	 * Čte proud dat dokud to jde a výsledek pak vrátí jako text.
 	 * @param proud vstupní proud
 	 * @return obsah proudu jako text