Portál AbcLinuxu, 30. dubna 2025 10:48
Před několika měsíci jsem vytvořil program XML Web generátor, jak již název napovídá, program slouží ke generování webů. Práce není od té doby moc intenzivní, ale občas na to sáhnu. Nedávno jsem přidal dvě nové funkce: zvýrazňování syntaxe kódu v <pre/> a možnost vkládání grafů/diagramů.
Ačkoli je dneska asi většina webů dynamická a používá nějaký skriptovací/programovací jazyk na straně serveru, statické weby úplně nevymřely a čas od času se hodí. Vytvořit takový web je hračka, stačí k tomu textový editor a základní znalost (X)HTML značek. Jenže pak člověk zjistí, že by chtěl mít na všech stránkách nabídku s odkazy na ostatní stránky, nebo když se rozhodně změnit rozvržení stránky, musí to dělat na všech stránkách ručně.
Další věc je třeba RSS/Atom/Sitemap.xml, které se už vůbec člověku nebude chtít psát ručně. Vkládání záhlaví/zápatí je taky celkem nuda.
Proto je dobré ručně udržovat jen ty informace, které jsou jedinečné (obsah stránek) a všechno ostatní automaticky dogenerovat. A k tomu slouží tento program.
Ze sady vstupních XML dokumentů vytváří pomocí XSLT transformace webové stránky.
Formát vstupních dokumentů je velmi jednoduchý a vypadá takhle:
<stránka xmlns="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana"> <nadpis>Nadpis stránky</nadpis> <perex>Krátký popis</perex> <pořadí>10</pořadí> <text xmlns="http://www.w3.org/1999/xhtml"> <p>Sem už píšeme obsah stránky – normální (X)HTML, jak ho známe</p> </text> </stránka>
Je to vlastně jen hlavička obsahující nadpis a popis stránky, pořadí v nabídce (pokud chybí, stránka v nabídce nebude, ale vygeneruje se) a pak už následuje obsah stránky uvnitř <text/>, kam už píšeme standardní značky.
Kromě nich můžeme do textu vkládat i „makra“ – vlastní značky, ze kterých generátor něco vyrobí.
Do textu např. vložíme:
<m:měřák hodnota="95"/>
a ve vygenerované stránce bude:
Program obsahuje několik vestavěných maker a další si může dopsat uživatel sám (je to celkem triviální, stačí se inspirovat u těch už hotových).
Více se o programu dočtete na jeho oficiální stránkách nebo v článku Generujeme jednoduchý web pomocí XML.
Funkce, které jsem nedávno přidal:
Když člověk vkládá na web nějakou ukázku kódu, je dobré mít tam zvýrazněnou syntaxi, je to přehlednější. Je škoda, že se o to nemůže postarat prohlížeč sám od sebe, ale co se dá dělat. Do generátoru jsem přidal možnost zvýrazňování – do zdrojového souboru jednoduše vložíme:
<m:pre jazyk="bash">#!/bin/bash # Matrixový spořič :–) case "$1" in start) echo -e "\033[22;32m"; cat /dev/urandom | hexdump; ;; stop) echo -e "\033[0m"; ;; *) $0 start; ;; esac</m:pre>
a generátor z toho vyrobí:
U složitějších zdrojáků oceníte možnosti XML – kód můžete uzavřít do <![CDATA[…]]>, a pak v něm nemusíte řešit escapování (např. generika v Javě). Časem (snad) bude v generátoru možnost vkládat externí soubory přes XInclude.
Bylo by asi zbytečné psát si vlastní zvýrazňovač syntaxe, tak jsem použil už hotový – Pygments – a propojil ho s generátorem.
Občas potřebujeme do stránky vložit diagram, třeba UML, nebo nějaký jiný – obrázek řekne víc. Proto jsem přidal toto makro – do zdrojového souboru vložíme:
<m:diagram orientace="vodorovně"> A -> B; B -> C; </m:diagram>
a generátor z toho vyrobí:
Atribut orientace
je nepovinný (výchozí je svisle).
Jako atribut je taky možné uvést název (zobrazuje se pod grafem).
Vygenerovaný obrázek je ve formátu SVG, takže hezky škáluje, když si ho chce uživatel přiblížit. Časem budou i bitmapové obrázky (PNG), pro případ, že by SVG nešlo zobrazit (<img/> vnořený do <object/>).
Syntaxe použitá pro popis diagramů je vám asi povědomá – použil jsem Graphviz. Můžete pomocí něj tvořit mnohem složitější a hezčí grafy, než jsou tyto ukázky.
Stejně jako Pygments je to externí nástroj volaný při transformaci. Pokud v systému chybí příkaz pygmentize
a stránka obsahuje kódy, které se mají zvýraznit, jen se vypíše varování a stránka se vygeneruje bez zvýraznění (to není taková tragédie). Ale pokud stránka obsahuje diagramy a příkaz dot
chybí, generování spadne – je potřeba Graphviz doinstalovat. Pokud uživatel tyto funkce nechce využívat, samozřejmě tyto programy nainstalované mít nemusí, generátor bude fungovat bez nich.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.