#7 Wiki syntaxe: Texy – experimentální a oficiálně nepodporované.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Thu Feb 09 12:54:49 2012 +0100 (2012-02-09)
changeset 928d34f2020884
parent 91 1a70b4045a19
child 93 5b55827de220
#7 Wiki syntaxe: Texy – experimentální a oficiálně nepodporované.
Používá Texy interpret na vzdáleném HTTP serveru.
vstup/css/styl.css
šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Wiki.java
     1.1 --- a/vstup/css/styl.css	Wed Feb 08 17:58:17 2012 +0100
     1.2 +++ b/vstup/css/styl.css	Thu Feb 09 12:54:49 2012 +0100
     1.3 @@ -119,13 +119,16 @@
     1.4  table {
     1.5  	border-collapse:collapse;
     1.6  	box-shadow: 3px 3px 3px grey;
     1.7 +	margin-top: 10px;
     1.8 +	margin-bottom: 10px;
     1.9  }
    1.10 -td {
    1.11 +td, th {
    1.12  	border: 1px solid black;
    1.13  	padding-top: 4px;
    1.14  	padding-bottom: 4px;
    1.15  	padding-left: 6px;
    1.16  	padding-right: 6px;
    1.17 +	font-weight: normal;
    1.18  }
    1.19  td.číslo {
    1.20  	text-align: right;
    1.21 @@ -190,3 +193,13 @@
    1.22  	margin-right: 4px;
    1.23  }
    1.24  
    1.25 +
    1.26 +blockquote {
    1.27 +	background-color: #ddf;
    1.28 +	padding-top: 3px;
    1.29 +	padding-bottom: 3px;
    1.30 +	padding-left: 16px;
    1.31 +	padding-right: 16px;
    1.32 +	border-radius: 4px;
    1.33 +}
    1.34 +
     2.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Wiki.java	Wed Feb 08 17:58:17 2012 +0100
     2.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Wiki.java	Thu Feb 09 12:54:49 2012 +0100
     2.3 @@ -1,46 +1,75 @@
     2.4  /**
     2.5   * XML Web generátor – program na generování webových stránek
     2.6   * Copyright © 2012 František Kučera (frantovo.cz)
     2.7 - * 
     2.8 + *
     2.9   * This program is free software: you can redistribute it and/or modify
    2.10   * it under the terms of the GNU General Public License as published by
    2.11   * the Free Software Foundation, either version 3 of the License, or
    2.12   * (at your option) any later version.
    2.13 - * 
    2.14 + *
    2.15   * This program is distributed in the hope that it will be useful,
    2.16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    2.17 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2.18 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    2.19   * GNU General Public License for more details.
    2.20 - * 
    2.21 + *
    2.22   * You should have received a copy of the GNU General Public License
    2.23 - * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    2.24 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    2.25   */
    2.26  package cz.frantovo.xmlWebGenerator.makra;
    2.27  
    2.28  import java.io.IOException;
    2.29  import java.io.PrintStream;
    2.30  import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
    2.31 +import java.io.BufferedReader;
    2.32 +import java.io.InputStreamReader;
    2.33 +import java.io.OutputStreamWriter;
    2.34 +import java.net.URL;
    2.35 +import java.net.URLConnection;
    2.36 +import java.net.URLEncoder;
    2.37  
    2.38  /**
    2.39   * Wiki syntaxe
    2.40 - * 
    2.41 + *
    2.42   * @author František Kučera (frantovo.cz)
    2.43   */
    2.44  public class Wiki {
    2.45  
    2.46 +	public enum SYNTAXE {
    2.47 +
    2.48 +		markdown,
    2.49 +		texy
    2.50 +	}
    2.51  	private static final String PŘÍKAZ_MARKDOWN = "markdown";
    2.52 +	/**
    2.53 +	 * Zde číhá tento PHP skript:
    2.54 +	 * https://hg.frantovo.cz/nekurak.net/file/tip/php/texy/http/index.php
    2.55 +	 */
    2.56 +	private static final String URL_TEXY = "http://nekurak.net/texy/http/";
    2.57  
    2.58  	/**
    2.59  	 * Převede text ve wiki syntaxi do XHTML.
    2.60 +	 *
    2.61  	 * @param wiki vstupní text v dané wiki syntaxi
    2.62  	 * @param syntaxe null nebo volitelně syntaxe (markdown, texy)
    2.63  	 * @return naformátované XHTML
    2.64 -	 * TODO: 
    2.65 -	 *	- vracet místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
    2.66 -	 *  - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost markdownu)
    2.67 -	 
    2.68 +	 * TODO:
    2.69 +	 * - vracet místo textu instanci com.icl.saxon.om.NodeInfo
    2.70 +	 * http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
    2.71 +	 * - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost
    2.72 +	 * markdownu případně texy)
    2.73 +	 *
    2.74  	 */
    2.75  	public static String formátujWiki(String wiki, String syntaxe) throws IOException {
    2.76 +		if (syntaxe == null || SYNTAXE.valueOf(syntaxe) == SYNTAXE.markdown) {
    2.77 +			return formátujMarkdown(wiki);
    2.78 +		} else if (SYNTAXE.valueOf(syntaxe) == SYNTAXE.texy) {
    2.79 +			return formátujTexy(wiki);
    2.80 +		} else {
    2.81 +			throw new IllegalArgumentException("Syntaxe není podporovaná: " + syntaxe);
    2.82 +		}
    2.83 +	}
    2.84 +
    2.85 +	private static String formátujMarkdown(String wiki) throws IOException {
    2.86  		if (isPříkazDostupný(PŘÍKAZ_MARKDOWN)) {
    2.87  			Runtime r = Runtime.getRuntime();
    2.88  			Process p = r.exec(new String[]{PŘÍKAZ_MARKDOWN});
    2.89 @@ -70,5 +99,63 @@
    2.90  			return null;
    2.91  		}
    2.92  	}
    2.93 +
    2.94 +	/**
    2.95 +	 * Texy! syntaxe je experimentální a oficiálně nepodporovaná.
    2.96 +	 *
    2.97 +	 * TODO: až bude balíček texy pro GNU/Linuxové distribuce:
    2.98 +	 * http://forum.texy.info/cs/873-balicek-pro-linuxove-distribuce
    2.99 +	 * řešit stejně jako Markdown.
   2.100 +	 */
   2.101 +	private static String formátujTexy(String wiki) throws IOException {
   2.102 +		System.out.println("Pozor: Texy! wiki syntaxe je experimentální a oficiálně nepodporovaná.");
   2.103 +		System.out.println("Pozor: používáte na vlastní nebezpečí!");
   2.104 +		System.out.println("Pozor: text k interpretování bude odeslán na vzdálené URL: " + URL_TEXY);
   2.105 +		System.out.println("Pokračovat? [a/N]");
   2.106 +		int pokračovat = System.in.read();
   2.107 +
   2.108 +		if (pokračovat == 'a') {
   2.109 +			OutputStreamWriter požadavek = null;
   2.110 +			BufferedReader odpověď = null;
   2.111 +			final String kódování = "UTF-8";
   2.112 +			try {
   2.113 +				URL url = new URL(URL_TEXY);
   2.114 +				URLConnection spojeni = url.openConnection();
   2.115 +				spojeni.setDoOutput(true);
   2.116 +
   2.117 +				/** Odešleme data */
   2.118 +				požadavek = new OutputStreamWriter(spojeni.getOutputStream());
   2.119 +				požadavek.write(URLEncoder.encode(wiki, kódování));
   2.120 +				požadavek.flush();
   2.121 +
   2.122 +				/** Přijmeme odpověď */
   2.123 +				odpověď = new BufferedReader(new InputStreamReader(spojeni.getInputStream(), kódování));
   2.124 +				StringBuilder vysledek = new StringBuilder();
   2.125 +				String radka;
   2.126 +				while ((radka = odpověď.readLine()) != null) {
   2.127 +					vysledek.append(radka);
   2.128 +					vysledek.append("\n");
   2.129 +				}
   2.130 +
   2.131 +				return vysledek.toString();
   2.132 +			} catch (Exception e) {
   2.133 +				throw new RuntimeException("Chyba při zpracovávání Texy! syntaxe: " + wiki, e);
   2.134 +			} finally {
   2.135 +				try {
   2.136 +					požadavek.close();
   2.137 +				} catch (IOException e) {
   2.138 +					e.printStackTrace(System.err);
   2.139 +				}
   2.140 +				try {
   2.141 +					odpověď.close();
   2.142 +				} catch (IOException e) {
   2.143 +					e.printStackTrace(System.err);
   2.144 +				}
   2.145 +			}
   2.146 +		} else {
   2.147 +			String hláška = "Texy! wiki syntaxe nebyla interpretována. Zdrojový text nebyl nikam odeslán.";
   2.148 +			System.out.println(hláška);
   2.149 +			return "<!-- " + hláška + " -->";
   2.150 +		}
   2.151 +	}
   2.152  }
   2.153 -