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:
1 modified

Legend:

Unmodified
Added
Removed
  • š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 {