10.6. Vkládání výpisů zdrojových kódů

Pro vkládání zdrojových kódů používáme především blokový element programlisting, do kterého výpis kódu uzavřeme. Pokud kód obsahuje „nebezpečné znaky“, uzavřeme jej navíc do sekce CDATA. Ta, jak již víme z XML, zajistí že procesor nebude data v ní obsažená parsovat.

Pokud chceme u zdrojového kódu titulek s popisem, je vhodné jej celý obalit elementem example.

ikona
<example>
<title>Hello World!</title>
<programlisting>
<![CDATA[
#include <stdout>

using namespace std;

int main(int argc, char *argv)
{
 cout<<"Hello world"<<endl;
}
]]>
</programlisting>
</example>

vygeneruje

Příklad 10.1. Hello World!

#include <stdout>

using namespace std;

int main(int argc, char *argv)
{
 cout<<"Hello world"<<endl;
}

Zdrojový kód však můžeme i načítat z externího souboru. S úspěchem k tomu lze použít zmíněnou technologii XInclude. Při vkládání však musíme navíc uvést atribut parse="text", aby byl jeho obsah interpretován jako prostý text. Tím dojde k převedení speciálních znaků (&, >, <, ") na příslušné entity.

ikona
<example>
<title>Hello World!</title>
<programlisting>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
  href="source/hello.c" parse="text"/>
</programlisting>
</example>

Druhou možností výpisů zdrojových kódů jsou tzv. komentované výpisy. Ty vytvoříme spojením programlistings se seznamem calloutlist. Ve výpisu kódu označíme řádky, které budou komentovány elementem co, obsahujícím identifikátor.

ikona
<example>
 <title>Hello World.</title>
<programlisting>
<![CDATA[
#include <stdout>

using namespace std;          <co id="co.namespace"/>

int main(int argc, char *argv)
{
 cout<<"Hello world"<<endl;   <co id="co.stream"/>
}
]]>
</programlisting>

<calloutlist>
 <callout arearefs="co.namespace">
   <para>Jmenný prostor.</para>
 </callout>
 <callout arearefs="co.stream">
	<para>Standardní proud.</para>
 </callout>
</calloutlist>
</example>

vygeneruje

Příklad 10.2. Hello World.

#include <stdout>

using namespace std;          1

int main(int argc, char *argv)
{
 cout<<"Hello world"<<endl;   2
}
1

Jmenný prostor.

2

Standardní datový proud.

Odkazy na příslušné řádky jsou buď řešeny jako textové položky, nebo jako malé obrázky. Standardně se doplňují obrázky, které můžeme získat např. z HTML verze knihy [Sta-05] z adresáře obrazky/callouts.

Pokud chceme mít položky v textové podobě, stačí v XSL nastavit parametr callout.graphics na hodnotu 0

ikona
<xsl:param name="callout.graphics" select="0"/>