šablona/makra/tabulka.xsl
changeset 70 032c62852ef1
parent 61 9503eb8377f1
child 71 895757141bff
equal deleted inserted replaced
69:e7908e307b61 70:032c62852ef1
    15 
    15 
    16 You should have received a copy of the GNU General Public License
    16 You should have received a copy of the GNU General Public License
    17 along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17 along with this program.  If not, see <http://www.gnu.org/licenses/>.
    18 -->
    18 -->
    19 <xsl:stylesheet version="2.0"
    19 <xsl:stylesheet version="2.0"
    20 	xmlns="http://www.w3.org/1999/xhtml"
    20 xmlns="http://www.w3.org/1999/xhtml"
    21 	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
    21 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
    22 	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    22 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    23 	exclude-result-prefixes="m">
    23 exclude-result-prefixes="m">
    24 	    
    24 
    25 	<!--
    25 	<!--
    26 		Jednoduché tabulky
    26 		Jednoduché tabulky
    27 		******************
    27 		******************
    28 		Data zadáváme do těla elementu.
    28 		Data zadáváme do těla elementu.
    29 		Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí).
    29 		Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí).
    30 		První řádek se považuje za záhlaví (nadpisy sloupců).
    30 		První řádek se považuje za záhlaví (nadpisy sloupců).
    31 		*
    31 		*
       
    32 		@src volitelně můžeme data tabulky načítat ze souboru 
       
    33 		@oddělovač regulární výraz, který odděluje sloupce – např. „\t+“ pro tabulátory (výchozí pro tabulky vložené přímo do stránky) nebo „;“ pro středník (výchozí pro tabulky načítané ze souboru) 
    32 	-->
    34 	-->
    33     <xsl:template match="m:tabulka">
    35 	<xsl:template match="m:tabulka">
    34     	<table>
    36 		<xsl:call-template name="vykresliTabulku">
    35     		<xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/>
    37 			<xsl:with-param name="zadání" select="text()"/>
    36     		<xsl:variable name="hlavička" select="substring-before($data, '&#10;')"/>
    38 			<xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
    37     		<xsl:variable name="tělo" select="substring-after($data, '&#10;')"/>
    39 		</xsl:call-template>
    38     		<thead>
    40 	</xsl:template>
    39     			<tr>
    41 	
    40     				<xsl:for-each select="tokenize($hlavička, '\t+')">
    42 	<xsl:template match="m:tabulka[@src]">
    41     					<xsl:if test="normalize-space(.)">
    43 		<xsl:call-template name="vykresliTabulku">
       
    44 			<xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/>
       
    45 			<xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/>
       
    46 		</xsl:call-template>
       
    47 	</xsl:template>
       
    48 	
       
    49 	<xsl:template name="vykresliTabulku">
       
    50 		<xsl:param name="zadání"/>
       
    51 		<xsl:param name="oddělovač"/>
       
    52 		<table>
       
    53 			<xsl:variable name="data" select="replace(replace($zadání, '^\s+', ''),'\s+$','')"/>
       
    54 			<xsl:variable name="hlavička" select="substring-before($data, '&#10;')"/>
       
    55 			<xsl:variable name="tělo" select="substring-after($data, '&#10;')"/>
       
    56 			<thead>
       
    57 				<tr>
       
    58 					<xsl:for-each select="tokenize($hlavička, $oddělovač)">
       
    59 						<xsl:if test="normalize-space(.)">
    42 							<td><xsl:value-of select="normalize-space(.)"/></td>
    60 							<td><xsl:value-of select="normalize-space(.)"/></td>
    43 						</xsl:if>
    61 						</xsl:if>
    44 					</xsl:for-each>
    62 					</xsl:for-each>
    45     			</tr>
    63 				</tr>
    46     		</thead>
    64 			</thead>
    47     		<tbody>
    65 			<tbody>
    48 				<xsl:for-each select="tokenize($tělo, '\n')">
    66 				<xsl:for-each select="tokenize($tělo, '\n')">
    49 					<xsl:if test="normalize-space(.)">
    67 					<xsl:if test="normalize-space(.)">
    50 						<tr>
    68 						<tr>
    51 							<xsl:for-each select="tokenize(., '\t+')">
    69 							<xsl:for-each select="tokenize(., $oddělovač)">
    52 								<xsl:if test="normalize-space(.)">
    70 								<xsl:if test="normalize-space(.)">
    53 									<td><xsl:value-of select="normalize-space(.)"/></td>
    71 									<td><xsl:value-of select="normalize-space(.)"/></td>
    54 								</xsl:if>
    72 								</xsl:if>
    55 							</xsl:for-each>
    73 							</xsl:for-each>
    56 						</tr>
    74 						</tr>
    57 					</xsl:if>
    75 					</xsl:if>
    58 				</xsl:for-each>
    76 				</xsl:for-each>
    59     		</tbody>
    77 			</tbody>
    60     	</table>    
    78 		</table>
    61     </xsl:template>
    79 	</xsl:template>
    62 
    80 
    63 </xsl:stylesheet>
    81 </xsl:stylesheet>
    64 
    82