Changeset 27:037a9f20bf3a

Show
Ignore:
Timestamp:
08/22/11 00:23:38 (13 years ago)
Author:
František Kučera <franta-hg@…>
Branch:
default
Message:

Zvýrazňování syntaxe #12 – začátek.

Files:
3 modified

Legend:

Unmodified
Added
Removed
  • vstup/produkty.xml

    r18 r27  
    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> 
     26 
     27                <m:pre jazyk="java">public class Pokus { 
     28                // komentář 
     29                // &lt;blee/&gt; 
     30}</m:pre> 
     31 
     32        <m:pre jazyk="grrrrrrr">public class Pokus { 
     33                // komentář 
     34                // &lt;blee/&gt; 
     35}</m:pre> 
     36                 
    2337                <p>Vhodnost zvířete do domácnosti:</p> 
    2438                <m:měřák hodnota="80"/> 
  • šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java

    r21 r27  
    11package cz.frantovo.xmlWebGenerator; 
    22 
     3import java.io.BufferedReader; 
    34import java.io.File; 
     5import java.io.IOException; 
     6import java.io.InputStream; 
     7import java.io.InputStreamReader; 
     8import java.io.PrintStream; 
    49import java.util.Date; 
    510import java.net.URI; 
     
    712 
    813public class Funkce { 
     14 
    915        public static Date posledníZměna(String soubor) throws URISyntaxException { 
    1016                return new Date(new File(new URI(soubor)).lastModified()); 
    1117        } 
     18 
     19        /** 
     20         * Zvýrazňuje syntaxi zdrojového kódu. Používá k tomu externí program/knihovnu pygmentize. 
     21         * @param zdroják zdrojový kód, který předáme příkazu pygmentize na standardním vstupu 
     22         * @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 
     24         */ 
     25        public static String zvýrazniSyntaxi(String zdroják, String jazyk) throws IOException, InterruptedException { 
     26                String příkaz = "pygmentizexxx"; 
     27 
     28                if (isPrikazDostupny(příkaz)) { 
     29                        Runtime r = Runtime.getRuntime(); 
     30                        Process p = r.exec(new String[]{příkaz, "-f", "html", "-l", jazyk}); 
     31 
     32                        PrintStream vstupProcesu = new PrintStream(p.getOutputStream()); 
     33                        vstupProcesu.print(zdroják); 
     34                        vstupProcesu.close(); 
     35 
     36                        String výsledek = načtiProud(p.getInputStream()); 
     37                        String chyby = načtiProud(p.getErrorStream()); 
     38 
     39                        p.waitFor(); 
     40 
     41                        if (chyby.length() == 0) { 
     42                                return výsledek; 
     43                        } else { 
     44                                System.err.println("Při zvýrazňování syntaxe došlo k chybě: " + chyby); 
     45                                return "______chyba_____"; 
     46                        } 
     47                } else { 
     48                        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_____"; 
     53                } 
     54        } 
     55 
     56        private static String načtiProud(InputStream proud) throws IOException { 
     57                StringBuilder výsledek = new StringBuilder(); 
     58                BufferedReader buf = new BufferedReader(new InputStreamReader(proud)); 
     59                while (true) { 
     60                        String radek = buf.readLine(); 
     61                        if (radek == null) { 
     62                                break; 
     63                        } else { 
     64                                výsledek.append(radek); 
     65                                výsledek.append("\n"); 
     66                        } 
     67                } 
     68                return výsledek.toString(); 
     69        } 
     70 
     71        private static boolean isPrikazDostupny(String příkaz) { 
     72                try { 
     73                        Runtime r = Runtime.getRuntime(); 
     74                        Process p = r.exec(new String[]{"which", příkaz}); 
     75                        p.waitFor(); 
     76                        return p.exitValue() == 0; 
     77                } catch (Exception e) { 
     78                        return false; 
     79                } 
     80        } 
    1281} 
    13  
  • šablona/stránka.xsl

    r20 r27  
    66        xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace" 
    77        xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" 
     8        xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce" 
    89        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    910        xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    1011        xmlns:svg="http://www.w3.org/2000/svg" 
    1112        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    12         exclude-result-prefixes="fn h s k m xs"> 
     13        exclude-result-prefixes="fn h s k m j xs"> 
    1314        <xsl:output  
    1415                method="xml"  
     
    113114        </a> 
    114115    </xsl:template> 
     116     
     117    <!-- 
     118        Makro pro zvýraznění syntaxe: 
     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    <xsl:template match="m:pre"> 
     124        <!-- Pokud jazyk uveden není, nic nezvýrazňujeme. --> 
     125        <pre><xsl:apply-templates/></pre>        
     126    </xsl:template> 
     127     
    115128 
    116129</xsl:stylesheet>