šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java
changeset 36 5be21d1ef5f8
parent 32 6bc25517ac4f
child 37 2e4e7891a2f7
equal deleted inserted replaced
35:860cc8ae1808 36:5be21d1ef5f8
    11 import java.net.URISyntaxException;
    11 import java.net.URISyntaxException;
    12 
    12 
    13 /**
    13 /**
    14  * Knihovna funkcí volaných z XSLT.
    14  * Knihovna funkcí volaných z XSLT.
    15  *  
    15  *  
    16  * TODO: 
    16  * TODO:
    17  *	- rozdělit na více modulů (jmenných prostorů).
    17  *	- rozdělit na více modulů (jmenných prostorů).
    18  *	- CLI konektor
    18  *	- CLI konektor
    19  * 
    19  * 
    20  * @author fiki
    20  * @author fiki
    21  */
    21  */
    43 	 * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize.
    43 	 * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize.
    44 	 * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu
    44 	 * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu
    45 	 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer>
    45 	 * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer>
    46 	 * @return zvýrazněný text nebo null, pokud došlo k chybě.
    46 	 * @return zvýrazněný text nebo null, pokud došlo k chybě.
    47 	 * TODO: 
    47 	 * TODO: 
    48 	 *	- použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
    48 	 *	- vracet místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html
    49 	 *  - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost pygmentize)
    49 	 *  - nebo kontrolovat validitu vygenerovaného kódu (v současnosti se spoléháme na bezchybnost pygmentize)
    50 	 */
    50 	 */
    51 	public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException {
    51 	public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException {
    52 		if (jazyk == null || jazyk.length() == 0) {
    52 		if (jazyk == null || jazyk.length() == 0) {
    53 			System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat.");
    53 			System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat.");
    54 			return null;
    54 			return null;
    55 		} else if (isPrikazDostupny(PŘÍKAZ_PYGMENTIZE)) {
    55 		} else if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) {
    56 			Runtime r = Runtime.getRuntime();
    56 			Runtime r = Runtime.getRuntime();
    57 			Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk});
    57 			Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-f", "html", "-l", jazyk});
    58 
    58 
    59 			PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
    59 			PrintStream vstupProcesu = new PrintStream(p.getOutputStream());
    60 			vstupProcesu.print(zdroják);
    60 			vstupProcesu.print(zdroják);
    84 	/**
    84 	/**
    85 	 * Vygeneruje CSS styl pro zvýrazňování syntaxe.
    85 	 * Vygeneruje CSS styl pro zvýrazňování syntaxe.
    86 	 * @return obsah CSS souboru nebo null, pokud generování nebylo možné
    86 	 * @return obsah CSS souboru nebo null, pokud generování nebylo možné
    87 	 */
    87 	 */
    88 	public static String generujCssSyntaxe() throws IOException, InterruptedException {
    88 	public static String generujCssSyntaxe() throws IOException, InterruptedException {
    89 		if (isPrikazDostupny(PŘÍKAZ_PYGMENTIZE)) {
    89 		if (isPříkazDostupný(PŘÍKAZ_PYGMENTIZE)) {
    90 			Runtime r = Runtime.getRuntime();
    90 			Runtime r = Runtime.getRuntime();
    91 			Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-S", "default", "-f", "html"});
    91 			Process p = r.exec(new String[]{PŘÍKAZ_PYGMENTIZE, "-S", "default", "-f", "html"});
    92 			return načtiProud(p.getInputStream());
    92 			return načtiProud(p.getInputStream());
    93 		} else {
    93 		} else {
    94 			return null;
    94 			return null;
   100 	 * @param zadání definice diagramu ve formátu dot
   100 	 * @param zadání definice diagramu ve formátu dot
   101 	 * @param vodorovně zda má být graf orientovaný vodorovně
   101 	 * @param vodorovně zda má být graf orientovaný vodorovně
   102 	 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
   102 	 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
   103 	 */
   103 	 */
   104 	public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException {
   104 	public static String vytvořDiagram(String zadání, boolean vodorovně) throws IOException, InterruptedException {
   105 		if (isPrikazDostupny(PŘÍKAZ_DOT)) {
   105 		if (isPříkazDostupný(PŘÍKAZ_DOT)) {
   106 			počítadloDiagramů++;
   106 			počítadloDiagramů++;
   107 			String soubor = "diagram-" + počítadloDiagramů;
   107 			String soubor = "diagram-" + počítadloDiagramů;
   108 			String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
   108 			String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
   109 
   109 
   110 			StringBuilder zdroják = new StringBuilder(zadání.length() + 200);
   110 			StringBuilder zdroják = new StringBuilder(zadání.length() + 200);
   170 	/**
   170 	/**
   171 	 * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný.
   171 	 * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný.
   172 	 * @param příkaz jehož přítomnost zjišťujeme
   172 	 * @param příkaz jehož přítomnost zjišťujeme
   173 	 * @return true pokud příkaz v systému existuje
   173 	 * @return true pokud příkaz v systému existuje
   174 	 */
   174 	 */
   175 	private static boolean isPrikazDostupny(String příkaz) {
   175 	private static boolean isPříkazDostupný(String příkaz) {
   176 		try {
   176 		try {
   177 			Runtime r = Runtime.getRuntime();
   177 			Runtime r = Runtime.getRuntime();
   178 			Process p = r.exec(new String[]{PŘÍKAZ_WHICH, příkaz});
   178 			Process p = r.exec(new String[]{PŘÍKAZ_WHICH, příkaz});
   179 			p.waitFor();
   179 			p.waitFor();
   180 			return p.exitValue() == 0;
   180 			return p.exitValue() == 0;