Changeset 28:3298cafa8686
- Timestamp:
- 08/22/11 01:10:55 (13 years ago)
- Author:
- František Kučera <franta-hg@…>
- Branch:
- default
- Message:
-
#12 Lepší ošetření chyb – vypíšeme varování a na výstup vložíme původní text bez zvýraznění syntaxe.
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
r27
|
r28
|
|
21 | 21 | <p>Aliquam erat volutpat. Quisque vitae libero est. Aliquam erat volutpat. Integer elementum, nisl nec lacinia facilisis, dolor tellus varius eros, sit amet facilisis sem sapien vitae nulla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer rutrum sodales venenatis. Donec mollis aliquet enim, id venenatis urna faucibus sed. Suspendisse pharetra neque et nibh tincidunt suscipit. Morbi ut justo sit amet lectus faucibus tempor quis non libero. Aenean in dolor sem, in lacinia sem.</p> |
22 | 22 | |
23 | | <m:pre>#!/bin/bash |
24 | | # tento kód nebude zvýrazněn |
25 | | # <blee/></m:pre> |
| 23 | |
26 | 24 | |
27 | 25 | <m:pre jazyk="java">public class Pokus { |
… |
… |
|
30 | 28 | }</m:pre> |
31 | 29 | |
32 | | <m:pre jazyk="grrrrrrr">public class Pokus { |
33 | | // komentář |
34 | | // <blee/> |
35 | | }</m:pre> |
| 30 | <m:pre jazyk="xml"><![CDATA[<xmlDokument> |
| 31 | <element1>toto je <strong>pěkné</strong> XML!!!</element1> |
| 32 | </xmlDokument>]]></m:pre> |
| 33 | |
| 34 | <m:pre jazyk="xxxxxxxx">chybný jazyk → syntaxe nebude zvýrazněna</m:pre> |
| 35 | |
| 36 | <m:pre>#!/bin/bash |
| 37 | # tento kód nebude zvýrazněn, protože atribut „jazyk“ chybý |
| 38 | # <blee/></m:pre> |
36 | 39 | |
37 | 40 | <p>Vhodnost zvířete do domácnosti:</p> |
-
r27
|
r28
|
|
11 | 11 | import java.net.URISyntaxException; |
12 | 12 | |
| 13 | /** |
| 14 | * Knihovna funkcí volaných z XSLT. |
| 15 | * |
| 16 | * TODO: časem rozdělit na více modulů (jmenných prostorů). |
| 17 | * |
| 18 | * @author fiki |
| 19 | */ |
13 | 20 | public class Funkce { |
14 | 21 | |
| 22 | /** |
| 23 | * Zjištuje, kdy byl naposledy daný soubor změněn. |
| 24 | * @param soubor cesta k souboru |
| 25 | * @return datum poslední změny |
| 26 | * @throws URISyntaxException |
| 27 | */ |
15 | 28 | public static Date posledníZměna(String soubor) throws URISyntaxException { |
16 | | return new Date(new File(new URI(soubor)).lastModified()); |
| 29 | URI uri = new URI(soubor); |
| 30 | File f = new File(uri); |
| 31 | return new Date(f.lastModified()); |
17 | 32 | } |
18 | 33 | |
… |
… |
|
21 | 36 | * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu |
22 | 37 | * @param jazyk předáme příkazu pygmentize jako parametr -l <lexer> |
23 | | * @return TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html |
| 38 | * @return zvýrazněný text nebo null, pokud došlo k chybě. |
| 39 | * TODO: použít (?) místo textu instanci com.icl.saxon.om.NodeInfo http://saxon.sourceforge.net/saxon6.5.3/extensibility.html |
24 | 40 | */ |
25 | 41 | public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { |
26 | | String příkaz = "pygmentizexxx"; |
| 42 | String příkaz = "pygmentize"; |
27 | 43 | |
28 | | if (isPrikazDostupny(příkaz)) { |
| 44 | if (jazyk == null || jazyk.length() == 0) { |
| 45 | System.err.println("Není vyplněn atribut „jazyk“ → není jasné, jak se má zvýrazňovat."); |
| 46 | return null; |
| 47 | } else if (isPrikazDostupny(příkaz)) { |
29 | 48 | Runtime r = Runtime.getRuntime(); |
30 | 49 | Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); |
… |
… |
|
40 | 59 | |
41 | 60 | if (chyby.length() == 0) { |
| 61 | // Pozor: pygmentize má i při chybě návratový kód 0 → je potřeba kontrolovat chybový výstup. |
42 | 62 | return výsledek; |
43 | 63 | } else { |
44 | | System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby); |
45 | | return "______chyba_____"; |
| 64 | System.err.print("Při zvýrazňování syntaxe došlo k chybě: " + chyby); |
| 65 | return null; |
46 | 66 | } |
47 | 67 | } else { |
48 | 68 | System.err.println("Příkaz " + příkaz + " není na vašem systému dostupný → zvýrazňování syntaxe nebude fungovat."); |
49 | | System.err.println("Můžete ho nainstalovat pomocí: aptitude install python-pygments"); |
50 | | // TODO: příkaz pro Fedoru/RedHat |
51 | | // TODO: vracet escapovaný zdroják v <pre/> |
52 | | return "__xxx____chyba_____"; |
| 69 | System.err.println("Můžete ho nainstalovat pomocí:"); |
| 70 | System.err.println("\t$ aptitude install python-pygments # (Debian/Ubuntu)"); |
| 71 | System.err.println("\t$ yum install python-pygments # (Fedora/RedHat)"); |
| 72 | return null; |
53 | 73 | } |
54 | 74 | } |
55 | 75 | |
| 76 | /** |
| 77 | * Čte proud dat dokud to jde a výsledek pak vrátí jako text. |
| 78 | * @param proud vstupní proud |
| 79 | * @return obsah proudu jako text |
| 80 | * @throws IOException |
| 81 | */ |
56 | 82 | private static String načtiProud(InputStream proud) throws IOException { |
57 | 83 | StringBuilder výsledek = new StringBuilder(); |
… |
… |
|
69 | 95 | } |
70 | 96 | |
| 97 | /** |
| 98 | * Pomocí programu which zjistí, jestli je daný příkaz v systému přítomný. |
| 99 | * @param příkaz jehož přítomnost zjišťujeme |
| 100 | * @return true pokud příkaz v systému existuje |
| 101 | */ |
71 | 102 | private static boolean isPrikazDostupny(String příkaz) { |
72 | 103 | try { |
-
r27
|
r28
|
|
118 | 118 | Makro pro zvýraznění syntaxe: |
119 | 119 | --> |
120 | | <xsl:template match="m:pre[@jazyk]"> |
121 | | <xsl:value-of disable-output-escaping="yes" select="j:zvýrazniSyntaxi(text(), @jazyk)"/> |
122 | | </xsl:template> |
123 | 120 | <xsl:template match="m:pre"> |
124 | | <!-- Pokud jazyk uveden není, nic nezvýrazňujeme. --> |
125 | | <pre><xsl:apply-templates/></pre> |
126 | | </xsl:template> |
127 | | |
| 121 | <xsl:variable name="zvýrazněnýText" select="j:zvýrazniSyntaxi(text(), @jazyk)"/> |
| 122 | <xsl:choose> |
| 123 | <xsl:when test="$zvýrazněnýText"> |
| 124 | <xsl:value-of disable-output-escaping="yes" select="$zvýrazněnýText"/> |
| 125 | </xsl:when> |
| 126 | <xsl:otherwise> |
| 127 | <xsl:message>Zvýraznění syntaxe se nezdařilo → bude vložen původní nezvýrazněný kód.</xsl:message> |
| 128 | <pre><xsl:apply-templates/></pre> |
| 129 | </xsl:otherwise> |
| 130 | </xsl:choose> |
| 131 | </xsl:template> |
128 | 132 | |
129 | 133 | </xsl:stylesheet> |