Changeset 51:df1f942f7b69

Show
Ignore:
Timestamp:
01/06/12 20:48:42 (8 years ago)
Author:
František Kučera <franta-hg@…>
Branch:
default
Message:

Přesun maker do samostatných souborů #8 + automatické generování seznamu maker
→ nová makra není potřeba nikde registrovat, prostě vytvoříme nový soubor v adresáři

šablona/makra nebo
vstup/makra

a spustíme „ant makra“ – vygenruje se „šablona/.makra-seznam.xsl“ který se vloží do šablony stránky.

Files:
7 added
4 modified
1 moved

Legend:

Unmodified
Added
Removed
  • .hgignore

    r40 r51  
    22výstup/* 
    33šablona/funkce/build/* 
     4šablona/.makra-seznam.xsl 
    45vstup/.seznam.xml 
    56analýza/princip.png 
  • build.xml

    r31 r51  
    55        <property name="výstup" value="výstup"/> 
    66        <property name="šablona" value="šablona"/> 
     7        <property name="seznamMaker" value="${šablona}/.makra-seznam.xsl"/> 
    78        <property name="temp" value="temp"/> 
    89        <property name="funkce" value="${šablona}/funkce/build/classes"/> 
     
    1415        </target> 
    1516         
    16         <target name="stránky" description="Vygeneruje samotné XHTML webové stránky." depends="statický-obsah,syntaxe,kompiluj-funkce">          
     17        <target name="stránky" description="Vygeneruje samotné XHTML webové stránky." depends="statický-obsah,syntaxe,kompiluj-funkce,makra">            
    1718                <xslt basedir="${vstup}" destdir="${výstup}" includes="*${vstupníPřípona}" extension="${výstupníPřípona}" style="${šablona}/stránka.xsl" processor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"> 
    1819                        <param name="konfigurák" expression="../${vstup}/"/>             
     
    3031        <target name="syntaxe" description="Vygeneruje CSS styl pro zvýrazňování syntaxe" depends="kompiluj-funkce"> 
    3132                <xslt in="${vstup}/web.conf" out="${výstup}/css/syntaxe.css" style="${šablona}/syntaxe.xsl" processor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"> 
     33                        <classpath location="/usr/share/java/saxonb-9.0.jar"/> 
     34                        <classpath location="${funkce}"/> 
     35                        <factory name="net.sf.saxon.TransformerFactoryImpl"> 
     36                                <attribute name="http://saxon.sf.net/feature/allow-external-functions" value="true"/>                            
     37                        </factory> 
     38                </xslt> 
     39        </target> 
     40         
     41        <target name="makra" description="Vygeneruje seznam maker podle souborů v příslušných složkách" depends="kompiluj-funkce"> 
     42                <xslt in="${vstup}/web.conf" out="${seznamMaker}" style="${šablona}/makra.xsl" processor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"> 
    3243                        <classpath location="/usr/share/java/saxonb-9.0.jar"/> 
    3344                        <classpath location="${funkce}"/> 
     
    100111                        <fileset dir="${výstup}" includes="**/*"/> 
    101112                        <fileset dir="${funkce}" includes="**/*"/> 
     113                        <fileset file="${seznamMaker}"/> 
    102114                </delete> 
    103115        </target> 
  • šablona/makra.xsl

    r19 r51  
    1 ../vstup/makra.xsl 
     1<?xml version="1.0" encoding="UTF-8"?> 
     2<xsl:stylesheet version="2.0" 
     3        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     4        xmlns:XSL="http://example.com/XSL"> 
     5        <xsl:output     method="xml" indent="yes" encoding="UTF-8" /> 
     6        <xsl:namespace-alias stylesheet-prefix="XSL" result-prefix="xsl"/> 
     7         
     8        <xsl:template match="/"> 
     9                <XSL:stylesheet version="2.0"> 
     10                <xsl:text> 
     11</xsl:text> 
     12                <xsl:comment> 
     13        Tento seznam maker je automaticky generovaný. 
     14        Neupravujte ho ručně – použijte příkaz „ant makra“. 
     15</xsl:comment> 
     16                <xsl:text> 
     17   </xsl:text> 
     18                        <!-- Makra dodávaná jako součást programu: --> 
     19                        <xsl:for-each select="collection('./makra/?select=*.xsl')"> 
     20                                <XSL:include href="{document-uri(.)}"/> 
     21                        </xsl:for-each> 
     22                         
     23                        <!-- Uživatelská makra --> 
     24                        <xsl:for-each select="collection('../vstup/makra/?select=*.xsl')"> 
     25                                <XSL:include href="{document-uri(.)}"/> 
     26                        </xsl:for-each> 
     27                </XSL:stylesheet> 
     28        </xsl:template> 
     29         
     30</xsl:stylesheet> 
  • šablona/stránka.xsl

    r50 r51  
    1818                doctype-public="-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"  
    1919                doctype-system="http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"/> 
    20                  
    21         <xsl:param name="vstup" select="'../vstup/'"/> 
    22         <xsl:param name="výstup" select="'../výstup/'"/> 
    23         <xsl:param name="vstupníPřípona" select="'.xml'"/> 
    24         <xsl:param name="výstupníPřípona" select="'.xhtml'"/> 
    25         <xsl:param name="vsuvkováPřípona" select="'.inc'"/> 
    26         <xsl:param name="podporaZaostalýchProhlížečů" select="false()" as="xs:boolean"/> 
     20        <xsl:include href="stránka-společné.xsl"/> 
    2721         
    28         <xsl:include href="makra.xsl"/> 
    29          
    30         <!-- Celý dokument: --> 
     22        <!--  
     23                Šablona stránky 
     24                *************** 
     25        --> 
    3126        <xsl:template match="/"> 
    32                 <xsl:variable name="konfigurace" select="document(concat($vstup, 'web.conf'))"/> 
    3327                <html> 
    3428                        <head> 
     
    4034                                <link title="Novinky (RSS)"  href="rss.xml"  type="application/rss+xml"  rel="alternate"/> 
    4135                                <xsl:apply-templates select="$konfigurace/k:web/k:js"/> 
    42                                 <xsl:apply-templates select="$konfigurace/k:web/k:css"/>                                 
     36                                <xsl:apply-templates select="$konfigurace/k:web/k:css"/> 
    4337                        </head> 
    4438                        <body> 
     
    7165                </html> 
    7266        </xsl:template> 
    73          
    74         <!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: --> 
    75         <xsl:template match="*"> 
    76                 <xsl:element name="{name()}"> 
    77                         <xsl:copy-of select="@*"/> 
    78                         <xsl:apply-templates/> 
    79                 </xsl:element> 
    80     </xsl:template> 
    8167     
    82     <!-- Varování pro případ, že jsme v režimu podpory pro zaostalé prohlížeče --> 
    83     <xsl:template name="varováníRetardace"> 
    84         <xsl:if test="$podporaZaostalýchProhlížečů"> 
    85                         <xsl:comment> 
    86                                 Generátor byl spuštěn v režimu podpory zaostalých prohlížečů. 
    87                                 Uživatelům doporučujeme upgrade na skutečný WWW prohlížeč, 
    88                                 jako je např. Firefox nebo Chromium (případně Opera či Safari). 
    89                         </xsl:comment> 
    90         </xsl:if> 
    91     </xsl:template> 
    92  
    93     <!-- Odkazy na JavaScript a kaskádové styly -->     
    94     <xsl:template match="k:web/k:js">            
    95         <script src="{text()}" type="text/javascript"> 
    96                 <xsl:call-template name="varováníRetardace"/> 
    97         </script> 
    98     </xsl:template> 
    99     <xsl:template match="k:web/k:css"> 
    100         <link href="{text()}" type="text/css" rel="StyleSheet" /> 
    101     </xsl:template> 
    102      
    103     <!-- 
    104         TODO: makra vyčlenit do samostatných souborů 
    105     --> 
    106     
    107     <!-- 
    108         Makro pro převod interních odkazů: 
    109                 - doplnění správné přípony 
    110                 - URL kódování znaků 
    111     --> 
    112     <xsl:template match="m:a"> 
    113         <a> 
    114                 <xsl:copy-of select="@*"/> 
    115                 <xsl:attribute name="href"> 
    116                         <xsl:value-of select="fn:encode-for-uri(concat(@href, $výstupníPřípona))"/> 
    117                 </xsl:attribute> 
    118                 <xsl:apply-templates/> 
    119         </a> 
    120     </xsl:template> 
    121      
    122     <!-- 
    123         Makro pro zvýraznění syntaxe: 
    124     -->     
    125     <xsl:template match="m:pre"> 
    126         <xsl:call-template name="zvýrazniZdroják"> 
    127                 <xsl:with-param name="zdroják" select="text()"/> 
    128         </xsl:call-template> 
    129     </xsl:template> 
    130      
    131     <xsl:template match="m:pre[@src]"> 
    132         <xsl:call-template name="zvýrazniZdroják"> 
    133                 <xsl:with-param name="zdroják" select="unparsed-text(concat($vstup, @src))"/> 
    134         </xsl:call-template> 
    135                 <xsl:if test="@odkaz = 'ano'"> 
    136                         <p class="zdroják-ke-stažení"> 
    137                                 <span>Stáhnout: <a href="{encode-for-uri(@src)}"><xsl:value-of select="@src"/></a></span> 
    138                         </p> 
    139                 </xsl:if> 
    140     </xsl:template> 
    141      
    142     <xsl:template name="zvýrazniZdroják"> 
    143         <xsl:param name="zdroják"/> 
    144         <xsl:variable name="zvýrazněnýZdroják" select="j:zvýrazniSyntaxi($zdroják, @jazyk)"/> 
    145         <xsl:choose> 
    146                 <xsl:when test="$zvýrazněnýZdroják"> 
    147                         <xsl:comment>Následující kód je v jazyce <xsl:value-of select="@jazyk"/></xsl:comment> 
    148                         <xsl:value-of disable-output-escaping="yes" select="$zvýrazněnýZdroják"/> 
    149                 </xsl:when> 
    150                 <xsl:otherwise> 
    151                         <xsl:message>Zvýraznění syntaxe se nezdařilo → bude vložen původní nezvýrazněný kód.</xsl:message> 
    152                         <pre><xsl:value-of select="$zdroják"/></pre> 
    153                 </xsl:otherwise> 
    154         </xsl:choose>            
    155     </xsl:template> 
    156      
    157     <!-- 
    158         Makro pro diagramy/grafy 
    159     --> 
    160     <xsl:template match="m:diagram"> 
    161         <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/> 
    162         <xsl:choose> 
    163                         <xsl:when test="$souborDiagramu"> 
    164                                 <div class="diagram"> 
    165                                         <a href="{$souborDiagramu}.svg"> 
    166                                                 <img 
    167                                                         src="{$souborDiagramu}.svg"  
    168                                                         alt="Diagram {$souborDiagramu} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru" 
    169                                                         title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/> 
    170                                         </a> 
    171                                         <!-- TODO: SVG+PNG 
    172                                         <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/> 
    173                                         <object 
    174                                                 data="{$souborDiagramu}.svg" 
    175                                                 type="image/svg+xml" 
    176                                                 style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> 
    177                                                         <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> 
    178                                         </object> 
    179                                         --> 
    180                                         <xsl:if test="@nadpis"> 
    181                                                 <p class="nadpis"><xsl:value-of select="@nadpis"/></p> 
    182                                         </xsl:if> 
    183                                 </div> 
    184                         </xsl:when> 
    185                         <xsl:otherwise> 
    186                                 <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message> 
    187                         </xsl:otherwise> 
    188         </xsl:choose> 
    189     </xsl:template> 
    190      
    191     <!-- 
    192         Makro pro Wiki syntaxi 
    193     --> 
    194     <xsl:template match="m:wiki"> 
    195         <xsl:variable name="wikiXHTML" select="j:formátujWiki(text(), @syntaxe)"/> 
    196         <xsl:choose> 
    197                         <xsl:when test="$wikiXHTML"> 
    198                                 <xsl:value-of select="$wikiXHTML" disable-output-escaping="yes"/> 
    199                         </xsl:when> 
    200                         <xsl:otherwise> 
    201                                 <xsl:message terminate="yes">Při zpracování wiki syntaxe došlo k chybě.</xsl:message> 
    202                         </xsl:otherwise> 
    203                 </xsl:choose> 
    204     </xsl:template> 
    205      
    206     <!--  
    207         Makro pro vycpávkový text 
    208     --> 
    209     <xsl:template match="m:vycpávka"> 
    210         <!--  
    211                 TODO: stáhnout jen jednou, uložit do souboru a při dalších generováních brát z něj. 
    212         --> 
    213         <xsl:message>Stahuji vycpávkový text z http://lipsum.lipsum.com/</xsl:message> 
    214         <xsl:variable name="prostýText" select="document(concat('http://lipsum.lipsum.com/feed/xml?amount=', @odstavců, '&amp;what=paragraphs'))/feed/lipsum"/> 
    215         <xsl:for-each select="fn:tokenize($prostýText, '\n')"> 
    216                 <p><xsl:value-of select="."/></p> 
    217         </xsl:for-each> 
    218     </xsl:template> 
    219      
    220     <!-- 
    221         Makro pro jednoduché tabulky 
    222     --> 
    223     <xsl:template match="m:tabulka"> 
    224         <table> 
    225                 <xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/> 
    226                 <xsl:variable name="hlavička" select="substring-before($data, '&#10;')"/> 
    227                 <xsl:variable name="tělo" select="substring-after($data, '&#10;')"/> 
    228                 <thead> 
    229                         <tr> 
    230                                 <xsl:for-each select="tokenize($hlavička, '\t+')"> 
    231                                         <xsl:if test="normalize-space(.)"> 
    232                                                         <td><xsl:value-of select="normalize-space(.)"/></td> 
    233                                                 </xsl:if> 
    234                                         </xsl:for-each> 
    235                         </tr> 
    236                 </thead> 
    237                 <tbody> 
    238                                 <xsl:for-each select="tokenize($tělo, '\n')"> 
    239                                         <xsl:if test="normalize-space(.)"> 
    240                                                 <tr> 
    241                                                         <xsl:for-each select="tokenize(., '\t+')"> 
    242                                                                 <xsl:if test="normalize-space(.)"> 
    243                                                                         <td><xsl:value-of select="normalize-space(.)"/></td> 
    244                                                                 </xsl:if> 
    245                                                         </xsl:for-each> 
    246                                                 </tr> 
    247                                         </xsl:if> 
    248                                 </xsl:for-each> 
    249                 </tbody> 
    250         </table>     
    251     </xsl:template> 
    252  
    25368</xsl:stylesheet>