1 <xsl:stylesheet version="1.0"
2 xmlns="http://www.w3.org/1999/xhtml"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
6 Dokument ten opisuje jednoznaczne przekształcenie WLML 0.1 -> XHTML.
8 <xsl:output method="html" encoding="utf-8" indent="yes" />
10 <xsl:template match="/">
11 <xsl:apply-templates select="chunk|utwor" />
15 Base tag for rendering a fragment of text
17 <xsl:template match="chunk">
18 <xsl:apply-templates select="child::node()">
19 <xsl:with-param name="mixed" select="true()" />
20 </xsl:apply-templates>
24 Base tag for rendering the whole text
27 <xsl:template match="utwor">
28 <xsl:apply-templates select="child::*[name() = local-name()]">
29 <xsl:with-param name="mixed" select="false()" />
30 </xsl:apply-templates>
34 Przekształcenia poszczególnych elementów zgodnie z:
35 http://wiki.wolnepodreczniki.pl/Lektury:Sk%C5%82ad/Tagi_sk%C5%82adu
38 <!-- TAGI MASTERÓW STYLÓW
40 Tagi rozpoczynające i kończące tekst utworu lirycznego o standardowej szerokości łamu:
43 <xsl:template match="opowiadanie|powiesc">
44 <xsl:param name="mixed" />
45 <div class="{name()}" x-node="{name()}">
46 <xsl:apply-templates select="child::node()">
47 <xsl:with-param name="mixed" select="false()" />
48 </xsl:apply-templates>
52 <xsl:template match="liryka_l|liryka_lp">
53 <xsl:param name="mixed" />
54 <div class="{name()}" x-node="{name()}">
55 <xsl:apply-templates select="child::node()">
56 <xsl:with-param name="mixed" select="false()" />
57 </xsl:apply-templates>
61 <xsl:template match="dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny">
62 <xsl:param name="mixed" />
63 <div class="{name()}" x-node="{name()}">
64 <xsl:apply-templates select="child::node()">
65 <xsl:with-param name="mixed" select="false()" />
66 </xsl:apply-templates>
70 <xsl:template match="wywiad">
71 <xsl:param name="mixed" />
72 <div class="{name()}" x-node="{name()}">
73 <xsl:apply-templates select="child::node()">
74 <xsl:with-param name="mixed" select="false()" />
75 </xsl:apply-templates>
80 *****************************
81 ELEMENTY POZA TEKSTEM GŁÓWNYM
82 *****************************
86 Autor składanego utworu
88 Element strony tytułowej - lub odpowiadającej jej przestrzeni,
89 np. na stronie internetowej) :
91 <autor_utworu> imiona-itd.-autora-składanego-utworu </autor_utworu>
93 <xsl:template match="autor_utworu">
94 <xsl:param name="mixed" />
95 <h2 class="{name()}" x-editable="true" x-node="{name()}">
96 <xsl:call-template name="context-menu" />
97 <xsl:apply-templates select="child::node()">
98 <xsl:with-param name="mixed" select="true()" />
99 </xsl:apply-templates>
104 Nazwa składanego utworu
106 Element strony tytułowej - lub odpowiadającej jej przestrzeni,
107 np. na stronie internetowej
109 <nazwa_utworu> tytuł-składanego-utworu </nazwa_utworu>
111 <xsl:template match="nazwa_utworu">
112 <xsl:param name="mixed" />
113 <h1 class="{name()}" x-editable="true" x-node="{name()}">
114 <xsl:call-template name="context-menu" />
115 <xsl:apply-templates select="child::node()">
116 <xsl:with-param name="mixed" select="true()" />
117 </xsl:apply-templates>
122 Nazwa utworu nadrzędnego, w którego skład wchodzi dany utwór
123 <dzielo_nadrzedne> tytuł-dzieła-nadrzędnego </dzielo_nadrzedne>
129 <autor_utworu>Bruno Jasieński</autor_utworu>
130 <dzielo_nadrzedne>But w butonierce</dzielo_nadrzedne>
131 <nazwa_utworu>Deszcz</nazwa_utworu>
134 <xsl:template match="dzielo_nadrzedne">
135 <xsl:param name="mixed" />
136 <h2 class="{name()}" x-editable="true" x-node="{name()}">
137 <xsl:call-template name="context-menu" />
138 <xsl:apply-templates select="child::node()">
139 <xsl:with-param name="mixed" select="true()" />
140 </xsl:apply-templates>
145 Podtytuł, czyli wszystkie dopiski do tytułu
147 Element strony tytułowej - lub odpowiadającej jej przestrzeni.
148 <podtytul> podtytuł-składanego-utworu </podtytul>
153 <autor_utworu>Daniel Defoe</autor_utworu>
154 <nazwa_utworu>Robinson Crusoe</nazwa_utworu>
155 <podtytul>Jego życia losy, doświadczenia i przypadki</podtytul>
158 <xsl:template match="podtytul">
159 <xsl:param name="mixed" />
160 <h3 class="{name()}" x-editable="true" x-node="{name()}">
161 <xsl:call-template name="context-menu" />
162 <xsl:apply-templates select="child::node()">
163 <xsl:with-param name="mixed" select="true()" />
164 </xsl:apply-templates>
169 Tagi obejmujące tekst noty poprzedzającej tekst główny (styl wieloakapitowy):
171 <nota><akap> tekst-noty </akap></nota> (styl wieloakapitowy)
174 <xsl:template match="nota">
175 <xsl:param name="mixed" />
176 <div class="{name()}" x-node="{name()}">
177 <xsl:apply-templates select="child::node()">
178 <xsl:with-param name="mixed" select="false()" />
179 </xsl:apply-templates>
184 Tagi obejmujące tekst dedykacji (styl wieloakapitowy bądź wielostrofowy):
185 <dedykacja> tekst-dedykacji </dedykacja>
187 <xsl:template match="dedykacja">
188 <xsl:param name="mixed" />
189 <div class="{name()}" x-node="{name()}">
190 <xsl:apply-templates select="child::node()">
191 <xsl:with-param name="mixed" select="false()" />
192 </xsl:apply-templates>
197 Tagi obejmujące tekst motta (styl wieloakapitowy bądź wielostrofowy):
198 <motto> tekst-motta </motto>
200 <xsl:template match="motto">
201 <xsl:param name="mixed" />
202 <div class="{name()}" x-node="{name()}">
203 <xsl:apply-templates select="child::node()">
204 <xsl:with-param name="mixed" select="false()" />
205 </xsl:apply-templates>
209 <xsl:template match="motto_podpis">
210 <xsl:param name="mixed" />
211 <p class="{name()}" x-editable="true" x-node="{name()}">
212 <xsl:call-template name="context-menu" />
213 <xsl:apply-templates select="child::node()">
214 <xsl:with-param name="mixed" select="true()" />
215 </xsl:apply-templates>
220 Tagi obejmujące listę osób poprzedzającą tekst dramatu
221 (zwykle składaną na osobnej stronie; to odmiana stylu listy):
223 <lista_osob> osoby </lista_osob>
225 <xsl:template match="lista_osob">
226 <xsl:param name="mixed" />
227 <div class="{name()}" x-node="{name()}">
228 <xsl:apply-templates select="child::node()">
229 <xsl:with-param name="mixed" select="false()" />
230 </xsl:apply-templates>
234 <xsl:template match="naglowek_listy">
235 <xsl:param name="mixed" />
236 <p class="{name()}" x-editable="true" x-node="{name()}">
237 <xsl:call-template name="context-menu" />
238 <xsl:apply-templates select="child::node()">
239 <xsl:with-param name="mixed" select="true()" />
240 </xsl:apply-templates>
244 <xsl:template match="lista_osoba">
245 <xsl:param name="mixed" />
246 <p class="{name()}" x-editable="true" x-node="{name()}">
247 <xsl:call-template name="context-menu" />
248 <xsl:apply-templates select="child::node()">
249 <xsl:with-param name="mixed" select="true()" />
250 </xsl:apply-templates>
256 ***************************
257 TAGI STYLÓW TEKSTU GŁÓWNEGO
258 ***************************
262 Tagi nagłówka części/księgi:
263 <naglowek_czesc> nagłówek-części-lub-księgi </naglowek_czesc>
265 <xsl:template match="naglowek_czesc">
266 <xsl:param name="mixed" />
267 <h2 class="{name()}" x-editable="true" x-node="{name()}">
268 <xsl:call-template name="context-menu" />
269 <xsl:apply-templates select="child::node()">
270 <xsl:with-param name="mixed" select="true()" />
271 </xsl:apply-templates>
276 Tagi tytułu rozdziału:
277 <naglowek_rozdzial> nr-i/lub-tytuł </naglowek_rozdzial>
279 <xsl:template match="naglowek_rozdzial">
280 <xsl:param name="mixed" />
281 <h3 class="{name()}" x-editable="true" x-node="{name()}">
282 <xsl:call-template name="context-menu" />
283 <xsl:apply-templates select="child::node()">
284 <xsl:with-param name="mixed" select="true()" />
285 </xsl:apply-templates>
290 Tagi tytułu podrozdziału:
291 <naglowek_podrozdzial> nr-i/lub-podtytuł </naglowek_podrozdzial>
293 <xsl:template match="naglowek_podrozdzial">
294 <xsl:param name="mixed" />
295 <h4 class="{name()}" x-editable="true" x-node="{name()}">
296 <xsl:call-template name="context-menu" />
297 <xsl:apply-templates select="child::node()">
298 <xsl:with-param name="mixed" select="true()" />
299 </xsl:apply-templates>
305 <srodtytul> śródtytuł </srodtytul>
307 Tagi nagłówków aktów:
308 <naglowek_akt> nagłówek-aktu </naglowek_akt>
311 <xsl:template match="srodtytul">
312 <xsl:param name="mixed" />
313 <h2 class="{name()}" x-editable="true" x-node="{name()}">
314 <xsl:call-template name="context-menu" />
315 <xsl:apply-templates select="child::node()">
316 <xsl:with-param name="mixed" select="true()" />
317 </xsl:apply-templates>
321 <xsl:template match="naglowek_akt">
322 <xsl:param name="mixed" />
323 <h2 class="{name()}" x-editable="true" x-node="{name()}">
324 <xsl:call-template name="context-menu" />
325 <xsl:apply-templates select="child::node()">
326 <xsl:with-param name="mixed" select="true()" />
327 </xsl:apply-templates>
333 <naglowek_scena> nagłówek-sceny </naglowek_scena>
336 <xsl:template match="naglowek_scena">
337 <xsl:param name="mixed" />
338 <h3 class="{name()}" x-editable="true" x-node="{name()}">
339 <xsl:call-template name="context-menu" />
340 <xsl:apply-templates select="child::node()">
341 <xsl:with-param name="mixed" select="true()" />
342 </xsl:apply-templates>
346 <xsl:template match="naglowek_osoba">
347 <xsl:param name="mixed" />
348 <h4 class="{name()}" x-editable="true" x-node="{name()}">
349 <xsl:call-template name="context-menu" />
350 <xsl:apply-templates select="child::node()">
351 <xsl:with-param name="mixed" select="true()" />
352 </xsl:apply-templates>
357 ************************
358 Bloki w tekście głównym
359 ************************
362 <xsl:template match="dlugi_cytat">
363 <xsl:param name="mixed" />
364 <div class="{name()}" x-node="{name()}">
365 <xsl:apply-templates select="child::node()">
366 <xsl:with-param name="mixed" select="false()" />
367 </xsl:apply-templates>
371 <xsl:template match="poezja_cyt">
372 <xsl:param name="mixed" />
373 <div class="{name()}" x-node="{name()}">
374 <xsl:apply-templates select="child::node()">
375 <xsl:with-param name="mixed" select="false()" />
376 </xsl:apply-templates>
380 <xsl:template match="kwestia">
381 <xsl:param name="mixed" />
382 <div class="{name()}" x-node="{name()}">
383 <xsl:apply-templates select="child::node()">
384 <xsl:with-param name="mixed" select="false()" />
385 </xsl:apply-templates>
389 <xsl:template match="didaskalia">
390 <xsl:param name="mixed" />
391 <div class="{name()}" x-node="{name()}">
392 <xsl:apply-templates select="child::node()">
393 <xsl:with-param name="mixed" select="false()" />
394 </xsl:apply-templates>
398 <xsl:template match="wywiad_pyt">
399 <xsl:param name="mixed" />
400 <div class="{name()}" x-node="{name()}">
401 <xsl:apply-templates select="child::node()">
402 <xsl:with-param name="mixed" select="false()" />
403 </xsl:apply-templates>
407 <xsl:template match="wywiad_odp">
408 <xsl:param name="mixed" />
409 <div class="{name()}" x-node="{name()}">
410 <xsl:apply-templates select="child::node()">
411 <xsl:with-param name="mixed" select="false()" />
412 </xsl:apply-templates>
417 ***********************************
418 Style akapitowe oraz strofy i wersy
419 ***********************************
422 <xsl:template match="akap">
423 <xsl:param name="mixed" />
424 <p class="{name()}" x-editable="true" x-node="{name()}">
425 <xsl:call-template name="context-menu" />
426 <xsl:apply-templates select="child::node()">
427 <xsl:with-param name="mixed" select="true()" />
428 </xsl:apply-templates>
432 <xsl:template match="akap_cd">
433 <xsl:param name="mixed" />
434 <p class="{name()}" x-editable="true" x-node="{name()}">
435 <xsl:call-template name="context-menu" />
436 <xsl:apply-templates select="child::node()">
437 <xsl:with-param name="mixed" select="true()" />
438 </xsl:apply-templates>
442 <xsl:template match="akap_dialog">
443 <xsl:param name="mixed" />
444 <p class="{name()}" x-editable="true" x-node="{name()}">
445 <xsl:call-template name="context-menu" />
446 <xsl:apply-templates select="child::node()">
447 <xsl:with-param name="mixed" select="true()" />
448 </xsl:apply-templates>
457 <xsl:template match="strofa">
458 <div class="{name()}" x-editable="true" x-node="{name()}">
459 <xsl:call-template name="context-menu" />
461 <xsl:when test="count(br) > 0">
462 <xsl:variable name="first-verse" select="br[1]/preceding-sibling::node()" />
463 <xsl:call-template name="verse">
464 <xsl:with-param name="verse-content" select="$first-verse" />
466 <xsl:for-each select="br">
467 <xsl:variable name="lnum" select="count(preceding-sibling::br)" />
468 <!-- select all nodes up to the next br or end of stanza -->
469 <xsl:variable name="current-verse"
470 select="following-sibling::node()[count(preceding-sibling::br) = $lnum+1]" />
471 <xsl:call-template name="verse">
472 <xsl:with-param name="verse-content" select="$current-verse" />
477 <xsl:call-template name="verse">
478 <xsl:with-param name="verse-content" select="child::node()" />
485 <xsl:template name="verse">
486 <!-- the verse contents including the last br (if any) -->
487 <xsl:param name="verse-content" />
489 <xsl:variable name="first-tag-name" select="name($verse-content/self::*)" />
490 <!-- name of text nodes is '' == false -->
493 <xsl:when test="starts-with($first-tag-name, 'wers')">
494 <p class="{$first-tag-name}" x-node="{$first-tag-name}">
495 <xsl:for-each select="$verse-content[name(.) != 'br']">
496 <xsl:apply-templates select=".">
497 <xsl:with-param name="mixed" select="true()" />
498 </xsl:apply-templates>
504 <p class="wers" x-node="wers">
505 <xsl:for-each select="$verse-content[name(.) != 'br']">
506 <xsl:apply-templates select=".">
507 <xsl:with-param name="mixed" select="true()" />
508 </xsl:apply-templates>
516 <xsl:template match="wers_cd|wers_akap|wers_wciety">
517 <xsl:param name="mixed" />
518 <xsl:call-template name="copy-attributes" />
519 <xsl:apply-templates select="child::node()">
520 <xsl:with-param name="mixed" select="true()" />
521 </xsl:apply-templates>
532 Tagi obejmujące tytuł dzieła, np. książki, filmu, piosenki,
533 modlitwy, przedstawienia teatr. itd.:
535 <tytul_dziela> tytuł-dzieła </tytul_dziela>
537 <xsl:template match="tytul_dziela">
538 <xsl:param name="mixed" />
539 <em class="{name()}" x-node="{name()}">
540 <xsl:apply-templates select="child::node()">
541 <xsl:with-param name="mixed" select="true()" />
542 </xsl:apply-templates>
546 <xsl:template match="wyroznienie|slowo_obce|mat|didask_tekst|osoba|wyp_osoba|www">
547 <xsl:param name="mixed" />
548 <em class="{name()}" x-node="{name()}">
549 <xsl:apply-templates select="child::node()">
550 <xsl:with-param name="mixed" select="true()" />
551 </xsl:apply-templates>
560 <xsl:template match="sekcja_swiatlo">
561 <xsl:param name="mixed" />
562 <br class="{name()}" x-node="{name()}" />
565 <xsl:template match="sekcja_asterysk">
566 <xsl:param name="mixed" />
567 <hr class="{name()}" x-node="{name()}" />
570 <xsl:template match="separator_linia">
571 <xsl:param name="mixed" />
572 <hr class="{name()}" x-node="{name()}" />
575 <xsl:template match="zastepnik_wersu">
576 <xsl:param name="mixed" />
577 <hr class="{name()}" x-node="{name()}" />
589 <xsl:template match="pr|pa|pe|pt">
590 <span class="annotation-inline-box" x-node="{name()}" x-editable="true">
591 <a name="anchor-{generate-id(.)}" />
592 <!-- the link to the non-inline version -->
593 <a href="#annotation-{generate-id(.)}" class="annotation"></a>
594 <!-- inline contents -->
595 <span x-annotation-box="true">
596 <xsl:call-template name="context-menu" />
597 <xsl:apply-templates select="node()">
598 <xsl:with-param name="mixed" select="true()" />
599 </xsl:apply-templates>
604 <xsl:template match="begin">
605 <span class="theme-begin" x-node="begin">
606 <xsl:call-template name="copy-attributes" />
610 <xsl:template match="motyw">
611 <span class="theme-ref" x-node="motyw">
612 <xsl:call-template name="copy-attributes" />
613 <xsl:value-of select="." />
617 <xsl:template match="end">
618 <span class="theme-end" x-node="end">
619 <xsl:call-template name="copy-attributes" />
630 <xsl:template match="text()">
631 <xsl:param name="mixed" />
633 <xsl:when test="normalize-space(.) = ''" />
634 <xsl:when test="not($mixed)">
635 <span x-node="text" class="out-of-flow-text"
636 x-content="{normalize-space(.)}"></span>
639 <xsl:value-of select="." />
644 <xsl:template match="*">
645 <div x-node="error" x-content="{name()}" />
648 <xsl:template name="context-menu">
649 <span class="default-menu context-menu">
650 <span class="edit-button">Edit</span>
652 <span class="edit-menu context-menu">
653 <span class="accept-button">OK</span>
654 <span class="reject-button">Cancel</span>
658 <xsl:template name="copy-attributes">
659 <xsl:for-each select="@*">
660 <xsl:attribute name="x-attrib-{name(.)}"><xsl:value-of select="."/></xsl:attribute>