Changeset 28:3298cafa8686

Show
Ignore:
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:
3 modified

Legend:

Unmodified
Added
Removed
  • vstup/produkty.xml

    r27 r28  
    2121                <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> 
    2222                 
    23                 <m:pre>#!/bin/bash 
    24 # tento kód nebude zvýrazněn 
    25 # &lt;blee/&gt;</m:pre> 
     23                 
    2624 
    2725                <m:pre jazyk="java">public class Pokus { 
     
    3028}</m:pre> 
    3129 
    32         <m:pre jazyk="grrrrrrr">public class Pokus { 
    33                 // komentář 
    34                 // &lt;blee/&gt; 
    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# &lt;blee/&gt;</m:pre> 
    3639                 
    3740                <p>Vhodnost zvířete do domácnosti:</p> 
  • šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java

    r27 r28  
    1111import java.net.URISyntaxException; 
    1212 
     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 */ 
    1320public class Funkce { 
    1421 
     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         */ 
    1528        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()); 
    1732        } 
    1833 
     
    2136         * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu 
    2237         * @param jazyk předáme příkazu pygmentize jako parametr -l &lt;lexer&gt; 
    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 
    2440         */ 
    2541        public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { 
    26                 String příkaz = "pygmentizexxx"; 
     42                String příkaz = "pygmentize"; 
    2743 
    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)) { 
    2948                        Runtime r = Runtime.getRuntime(); 
    3049                        Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); 
     
    4059 
    4160                        if (chyby.length() == 0) { 
     61                                // Pozor: pygmentize má i při chybě návratový kód 0 → je potřeba kontrolovat chybový výstup. 
    4262                                return výsledek; 
    4363                        } 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; 
    4666                        } 
    4767                } else { 
    4868                        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; 
    5373                } 
    5474        } 
    5575 
     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         */ 
    5682        private static String načtiProud(InputStream proud) throws IOException { 
    5783                StringBuilder výsledek = new StringBuilder(); 
     
    6995        } 
    7096 
     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         */ 
    71102        private static boolean isPrikazDostupny(String příkaz) { 
    72103                try { 
  • šablona/stránka.xsl

    r27 r28  
    118118        Makro pro zvýraznění syntaxe: 
    119119    -->     
    120     <xsl:template match="m:pre[@jazyk]"> 
    121         <xsl:value-of disable-output-escaping="yes" select="j:zvýrazniSyntaxi(text(), @jazyk)"/> 
    122     </xsl:template> 
    123120    <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>    
    128132 
    129133</xsl:stylesheet>