#20 Skriptování: kód ke zvýraznění syntaxe generovaný skriptem
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 06 Jul 2012 13:41:35 +0200
changeset 112 7d4b23ccf144
parent 111 d59023a42d4b
child 113 18bf0044f5ab
#20 Skriptování: kód ke zvýraznění syntaxe generovaný skriptem
vstup/skriptování.xml
vstup/zdrojáky.xml
šablona/funkce/src/cz/frantovo/xmlWebGenerator/Xmlns.java
šablona/makra/zvýraznění-syntaxe.xsl
--- a/vstup/skriptování.xml	Thu Jul 05 23:31:49 2012 +0200
+++ b/vstup/skriptování.xml	Fri Jul 06 13:41:35 2012 +0200
@@ -286,6 +286,13 @@
 			Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky.
 		</p>
 
+		<p>
+			Skriptování lze použít i pro generování zdrojového kódu, který bude následně zvýrazněn
+			pomocí značky <code>&lt;m:pre jazyk="…"/&gt;</code>.
+			Toho využíváme na stránce <m:a href="zdrojáky">Zdrojové kódy</m:a> v případě SQL a XML ukázek.
+			Skript můžeme použít mj. i ke zkrácení zdrojáku – když chceme vypsat jen jeho relevantní část.
+		</p>
+
 	</text>
 
 </stránka>
--- a/vstup/zdrojáky.xml	Thu Jul 05 23:31:49 2012 +0200
+++ b/vstup/zdrojáky.xml	Fri Jul 06 13:41:35 2012 +0200
@@ -41,16 +41,26 @@
 
 		<h2>Java</h2>
 
-		<m:pre jazyk="java">public class Pokus {
-	// komentář
-	// &lt;JavaRulezz/&gt;
-}</m:pre>
+		<m:pre jazyk="java" src="../šablona/funkce/src/cz/frantovo/xmlWebGenerator/Xmlns.java"/>
 
 		<h2>XML</h2>
 
-		<m:pre jazyk="xml"><![CDATA[<xmlDokument>
-	<element1>toto je <strong>pěkné</strong> XML!!!</element1>
-</xmlDokument>]]></m:pre>
+		<p>
+			Zdroják aktuální stránky – <abbr title="diakritika byla odstraněna, protože v Pygmentize je chyba – neumí značky s diakritikou, přestože to je platné XML">upravený</abbr> a zkrácený pomocí <m:a href="skriptování">skriptu</m:a>:
+		</p>
+		<m:pre jazyk="xml"><m:skript jazyk="bash">
+# V zvýrazňovači Pygmentize je chyba: nepodporuje znaky s diakritikou, přestože v daném jazyce můžou být.
+# TODO: opravit to tam (zřejmě špatný regulární výraz).
+
+cat $XWG_STRANKA_SOUBOR | iconv -t ASCII//TRANSLIT -f UTF-8 | head -n 8;
+echo -e "\t\t… zkráceno …";
+cat $XWG_STRANKA_SOUBOR | iconv -t ASCII//TRANSLIT -f UTF-8 | tail -n 4;
+
+# Případně:
+# cat $XWG_STRANKA_SOUBOR | sed s/á/a/g | sed s/ř/r/g | sed s/í/i/g | head -n 8;
+# echo -e "\t\t… zkráceno …";
+# cat $XWG_STRANKA_SOUBOR | sed s/á/a/g | sed s/ř/r/g | sed s/í/i/g | tail -n 4;
+		</m:skript></m:pre>
 
 		<p>Další ukázka XML: <m:a href="šablona/makra/tabulka.xsl" typ="zdroják" řádek="25">tabulka.xsl</m:a>.</p>
 
@@ -58,6 +68,22 @@
 
 		<m:pre jazyk="bash" src="matrixový-spořič.sh" odkaz="ano"/>
 
+		<h2>SQL</h2>
+
+		<p>
+			Tento SQL kód není zapsán přímo ve stránce, ale byl vygenerován pomocí <m:a href="skriptování">skriptu</m:a>,
+			a poté zvýrazněn.
+		</p>
+
+		<m:pre jazyk="sql"><m:skript jazyk="perl"><![CDATA[
+use strict;
+use warnings;
+
+for (my $i = 0; $i < 10; $i++) {
+	print "INSERT INTO tabulka VALUES ('abc $i', 'def ". $i*($i+1) . "', " . 2**$i . ");\n";
+}
+		]]></m:skript></m:pre>
+
 		<h2>Chyby</h2>
 
 		<p>Následující ukázky kódu nebudou zvýrazněné:</p>
--- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Xmlns.java	Thu Jul 05 23:31:49 2012 +0200
+++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Xmlns.java	Fri Jul 06 13:41:35 2012 +0200
@@ -8,7 +8,8 @@
 public class Xmlns {
 
 	public static final String XHTML = "http://www.w3.org/1999/xhtml";
-	public static final String MAKRO = "https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro";
+	public static final String MAKRO =
+			"https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro";
 
 	private Xmlns() {
 	}
--- a/šablona/makra/zvýraznění-syntaxe.xsl	Thu Jul 05 23:31:49 2012 +0200
+++ b/šablona/makra/zvýraznění-syntaxe.xsl	Fri Jul 06 13:41:35 2012 +0200
@@ -33,8 +33,11 @@
 		@odkaz nastavíme hodnotu „ano“, pokud chceme vložit odkaz na soubor je stažení
 	-->
 	<xsl:template match="m:pre">
+		<xsl:variable name="zadání">
+			<xsl:apply-templates select="*|text()"/>
+		</xsl:variable>
 		<xsl:call-template name="zvýrazniZdroják">
-			<xsl:with-param name="zdroják" select="text()"/>
+			<xsl:with-param name="zdroják" select="$zadání/text()"/>
 		</xsl:call-template>
 	</xsl:template>