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="xml" encoding="utf-8" indent="no" omit-xml-declaration="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">
29 <xsl:call-template name="standard-attributes" />
30 <xsl:apply-templates select="child::*">
31 <xsl:with-param name="mixed" select="false()" />
32 </xsl:apply-templates>
37 Przekształcenia poszczególnych elementów zgodnie z:
38 http://wiki.wolnepodreczniki.pl/Lektury:Sk%C5%82ad/Tagi_sk%C5%82adu
41 <!-- TAGI MASTERÓW STYLÓW
43 Tagi rozpoczynające i kończące tekst utworu lirycznego o standardowej szerokości łamu:
46 <xsl:template match="opowiadanie|powiesc">
47 <xsl:param name="mixed" />
49 <xsl:call-template name="standard-attributes" />
50 <xsl:apply-templates select="child::node()">
51 <xsl:with-param name="mixed" select="false()" />
52 </xsl:apply-templates>
56 <xsl:template match="liryka_l|liryka_lp">
57 <xsl:param name="mixed" />
59 <xsl:call-template name="standard-attributes" />
60 <xsl:apply-templates select="child::node()">
61 <xsl:with-param name="mixed" select="false()" />
62 </xsl:apply-templates>
66 <xsl:template match="dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny">
67 <xsl:param name="mixed" />
69 <xsl:call-template name="standard-attributes" />
70 <xsl:apply-templates select="child::node()">
71 <xsl:with-param name="mixed" select="false()" />
72 </xsl:apply-templates>
76 <xsl:template match="wywiad">
77 <xsl:param name="mixed" />
79 <xsl:call-template name="standard-attributes" />
80 <xsl:apply-templates select="child::node()">
81 <xsl:with-param name="mixed" select="false()" />
82 </xsl:apply-templates>
87 *****************************
88 ELEMENTY POZA TEKSTEM GŁÓWNYM
89 *****************************
93 Autor składanego utworu
95 Element strony tytułowej - lub odpowiadającej jej przestrzeni,
96 np. na stronie internetowej) :
98 <autor_utworu> imiona-itd.-autora-składanego-utworu </autor_utworu>
100 <xsl:template match="autor_utworu">
101 <xsl:param name="mixed" />
102 <h2 x-editable="true">
103 <xsl:call-template name="standard-attributes" />
104 <xsl:call-template name="context-menu" />
105 <xsl:apply-templates select="child::node()">
106 <xsl:with-param name="mixed" select="true()" />
107 </xsl:apply-templates>
112 Nazwa składanego utworu
114 Element strony tytułowej - lub odpowiadającej jej przestrzeni,
115 np. na stronie internetowej
117 <nazwa_utworu> tytuł-składanego-utworu </nazwa_utworu>
119 <xsl:template match="nazwa_utworu">
120 <xsl:param name="mixed" />
121 <h1 x-editable="true">
122 <xsl:call-template name="standard-attributes" />
123 <xsl:call-template name="context-menu" />
124 <xsl:apply-templates select="child::node()">
125 <xsl:with-param name="mixed" select="true()" />
126 </xsl:apply-templates>
131 Nazwa utworu nadrzędnego, w którego skład wchodzi dany utwór
132 <dzielo_nadrzedne> tytuł-dzieła-nadrzędnego </dzielo_nadrzedne>
138 <autor_utworu>Bruno Jasieński</autor_utworu>
139 <dzielo_nadrzedne>But w butonierce</dzielo_nadrzedne>
140 <nazwa_utworu>Deszcz</nazwa_utworu>
143 <xsl:template match="dzielo_nadrzedne">
144 <xsl:param name="mixed" />
145 <h2 x-editable="true">
146 <xsl:call-template name="standard-attributes" />
147 <xsl:call-template name="context-menu" />
148 <xsl:apply-templates select="child::node()">
149 <xsl:with-param name="mixed" select="true()" />
150 </xsl:apply-templates>
155 Podtytuł, czyli wszystkie dopiski do tytułu
157 Element strony tytułowej - lub odpowiadającej jej przestrzeni.
158 <podtytul> podtytuł-składanego-utworu </podtytul>
163 <autor_utworu>Daniel Defoe</autor_utworu>
164 <nazwa_utworu>Robinson Crusoe</nazwa_utworu>
165 <podtytul>Jego życia losy, doświadczenia i przypadki</podtytul>
168 <xsl:template match="podtytul">
169 <xsl:param name="mixed" />
170 <h3 x-editable="true">
171 <xsl:call-template name="standard-attributes" />
172 <xsl:call-template name="context-menu" />
173 <xsl:apply-templates select="child::node()">
174 <xsl:with-param name="mixed" select="true()" />
175 </xsl:apply-templates>
180 Tagi obejmujące tekst noty poprzedzającej tekst główny (styl wieloakapitowy):
182 <nota><akap> tekst-noty </akap></nota> (styl wieloakapitowy)
185 <xsl:template match="nota">
186 <xsl:param name="mixed" />
188 <xsl:call-template name="standard-attributes" />
189 <xsl:apply-templates select="child::node()">
190 <xsl:with-param name="mixed" select="false()" />
191 </xsl:apply-templates>
196 Tagi obejmujące tekst dedykacji (styl wieloakapitowy bądź wielostrofowy):
197 <dedykacja> tekst-dedykacji </dedykacja>
199 <xsl:template match="dedykacja">
200 <xsl:param name="mixed" />
202 <xsl:call-template name="standard-attributes" />
203 <xsl:apply-templates select="child::node()">
204 <xsl:with-param name="mixed" select="false()" />
205 </xsl:apply-templates>
210 Tagi obejmujące tekst motta (styl wieloakapitowy bądź wielostrofowy):
211 <motto> tekst-motta </motto>
213 <xsl:template match="motto">
214 <xsl:param name="mixed" />
216 <xsl:call-template name="standard-attributes" />
217 <xsl:apply-templates select="child::node()">
218 <xsl:with-param name="mixed" select="true()" />
219 </xsl:apply-templates>
223 <xsl:template match="motto_podpis">
224 <xsl:param name="mixed" />
225 <p x-editable="true">
226 <xsl:call-template name="standard-attributes" />
227 <xsl:call-template name="context-menu" />
228 <xsl:apply-templates select="child::node()">
229 <xsl:with-param name="mixed" select="true()" />
230 </xsl:apply-templates>
235 Tagi obejmujące listę osób poprzedzającą tekst dramatu
236 (zwykle składaną na osobnej stronie; to odmiana stylu listy):
238 <lista_osob> osoby </lista_osob>
240 <xsl:template match="lista_osob">
241 <xsl:param name="mixed" />
243 <xsl:call-template name="standard-attributes" />
244 <xsl:apply-templates select="child::node()">
245 <xsl:with-param name="mixed" select="false()" />
246 </xsl:apply-templates>
250 <xsl:template match="naglowek_listy">
251 <xsl:param name="mixed" />
252 <p x-editable="true">
253 <xsl:call-template name="standard-attributes" />
254 <xsl:call-template name="context-menu" />
255 <xsl:apply-templates select="child::node()">
256 <xsl:with-param name="mixed" select="true()" />
257 </xsl:apply-templates>
261 <xsl:template match="lista_osoba">
262 <xsl:param name="mixed" />
263 <p x-editable="true">
264 <xsl:call-template name="standard-attributes" />
265 <xsl:call-template name="context-menu" />
266 <xsl:apply-templates select="child::node()">
267 <xsl:with-param name="mixed" select="true()" />
268 </xsl:apply-templates>
272 <!-- Tagi obejmujące inne komentarze wprowadzające
273 przed tekstem dramatu (składane razem z listą osób):
275 <miejsce_czas> komentarze-wprowadzające </miejsce_czas>
277 <xsl:template match="miejsce_czas">
278 <xsl:param name="mixed" />
279 <p x-editable="true">
280 <xsl:call-template name="standard-attributes" />
281 <xsl:call-template name="context-menu" />
282 <xsl:apply-templates select="child::node()">
283 <xsl:with-param name="mixed" select="true()" />
284 </xsl:apply-templates>
290 ***************************
291 TAGI STYLÓW TEKSTU GŁÓWNEGO
292 ***************************
296 Tagi nagłówka części/księgi:
297 <naglowek_czesc> nagłówek-części-lub-księgi </naglowek_czesc>
299 <xsl:template match="naglowek_czesc">
300 <xsl:param name="mixed" />
301 <h2 x-editable="true">
302 <xsl:call-template name="standard-attributes" />
303 <xsl:call-template name="context-menu" />
304 <xsl:apply-templates select="child::node()">
305 <xsl:with-param name="mixed" select="true()" />
306 </xsl:apply-templates>
311 Tagi tytułu rozdziału:
312 <naglowek_rozdzial> nr-i/lub-tytuł </naglowek_rozdzial>
314 <xsl:template match="naglowek_rozdzial">
315 <xsl:param name="mixed" />
316 <h3 x-editable="true">
317 <xsl:call-template name="standard-attributes" />
318 <xsl:call-template name="context-menu" />
319 <xsl:apply-templates select="child::node()">
320 <xsl:with-param name="mixed" select="true()" />
321 </xsl:apply-templates>
326 Tagi tytułu podrozdziału:
327 <naglowek_podrozdzial> nr-i/lub-podtytuł </naglowek_podrozdzial>
329 <xsl:template match="naglowek_podrozdzial">
330 <xsl:param name="mixed" />
331 <h4 x-editable="true">
332 <xsl:call-template name="standard-attributes" />
333 <xsl:call-template name="context-menu" />
334 <xsl:apply-templates select="child::node()">
335 <xsl:with-param name="mixed" select="true()" />
336 </xsl:apply-templates>
342 <srodtytul> śródtytuł </srodtytul>
344 Tagi nagłówków aktów:
345 <naglowek_akt> nagłówek-aktu </naglowek_akt>
348 <xsl:template match="srodtytul">
349 <xsl:param name="mixed" />
350 <h2 x-editable="true">
351 <xsl:call-template name="standard-attributes" />
352 <xsl:call-template name="context-menu" />
353 <xsl:apply-templates select="child::node()">
354 <xsl:with-param name="mixed" select="true()" />
355 </xsl:apply-templates>
359 <xsl:template match="naglowek_akt">
360 <xsl:param name="mixed" />
361 <h2 x-editable="true">
362 <xsl:call-template name="standard-attributes" />
363 <xsl:call-template name="context-menu" />
364 <xsl:apply-templates select="child::node()">
365 <xsl:with-param name="mixed" select="true()" />
366 </xsl:apply-templates>
372 <naglowek_scena> nagłówek-sceny </naglowek_scena>
375 <xsl:template match="naglowek_scena">
376 <xsl:param name="mixed" />
377 <h3 x-editable="true">
378 <xsl:call-template name="standard-attributes" />
379 <xsl:call-template name="context-menu" />
380 <xsl:apply-templates select="child::node()">
381 <xsl:with-param name="mixed" select="true()" />
382 </xsl:apply-templates>
386 <xsl:template match="naglowek_osoba">
387 <xsl:param name="mixed" />
388 <h4 x-editable="true">
389 <xsl:call-template name="standard-attributes" />
390 <xsl:call-template name="context-menu" />
391 <xsl:apply-templates select="child::node()">
392 <xsl:with-param name="mixed" select="true()" />
393 </xsl:apply-templates>
398 ************************
399 Bloki w tekście głównym
400 ************************
403 <xsl:template match="dlugi_cytat">
404 <xsl:param name="mixed" />
406 <xsl:call-template name="standard-attributes" />
407 <xsl:apply-templates select="child::node()">
408 <xsl:with-param name="mixed" select="false()" />
409 </xsl:apply-templates>
413 <xsl:template match="poezja_cyt">
414 <xsl:param name="mixed" />
416 <xsl:call-template name="standard-attributes" />
417 <xsl:apply-templates select="child::node()">
418 <xsl:with-param name="mixed" select="false()" />
419 </xsl:apply-templates>
423 <xsl:template match="kwestia">
424 <xsl:param name="mixed" />
426 <xsl:call-template name="standard-attributes" />
427 <xsl:apply-templates select="child::node()">
428 <xsl:with-param name="mixed" select="false()" />
429 </xsl:apply-templates>
433 <xsl:template match="didaskalia">
434 <xsl:param name="mixed" />
436 <xsl:call-template name="standard-attributes" />
437 <xsl:apply-templates select="child::node()">
438 <xsl:with-param name="mixed" select="true()" />
439 </xsl:apply-templates>
443 <xsl:template match="wywiad_pyt">
444 <xsl:param name="mixed" />
446 <xsl:call-template name="standard-attributes" />
447 <xsl:apply-templates select="child::node()">
448 <xsl:with-param name="mixed" select="false()" />
449 </xsl:apply-templates>
453 <xsl:template match="wywiad_odp">
454 <xsl:param name="mixed" />
456 <xsl:call-template name="standard-attributes" />
457 <xsl:apply-templates select="child::node()">
458 <xsl:with-param name="mixed" select="false()" />
459 </xsl:apply-templates>
464 ***********************************
465 Style akapitowe oraz strofy i wersy
466 ***********************************
469 <xsl:template match="akap">
470 <xsl:param name="mixed" />
471 <p x-editable="true">
472 <xsl:call-template name="standard-attributes" />
473 <xsl:call-template name="context-menu" />
474 <xsl:apply-templates select="child::node()">
475 <xsl:with-param name="mixed" select="true()" />
476 </xsl:apply-templates>
480 <xsl:template match="akap_cd">
481 <xsl:param name="mixed" />
482 <p x-editable="true">
483 <xsl:call-template name="standard-attributes" />
484 <xsl:call-template name="context-menu" />
485 <xsl:apply-templates select="child::node()">
486 <xsl:with-param name="mixed" select="true()" />
487 </xsl:apply-templates>
491 <xsl:template match="akap_dialog">
492 <xsl:param name="mixed" />
493 <p x-editable="true">
494 <xsl:call-template name="standard-attributes" />
495 <xsl:call-template name="context-menu" />
496 <xsl:apply-templates select="child::node()">
497 <xsl:with-param name="mixed" select="true()" />
498 </xsl:apply-templates>
507 <xsl:template match="strofa">
508 <div x-editable="true">
509 <xsl:call-template name="standard-attributes" />
510 <xsl:call-template name="context-menu" />
513 <xsl:when test="count(br) > 0">
514 <xsl:variable name="first-verse" select="br[1]/preceding-sibling::node()" />
515 <xsl:call-template name="verse">
516 <xsl:with-param name="verse-content" select="$first-verse" />
518 <xsl:for-each select="br">
519 <xsl:variable name="lnum" select="count(preceding-sibling::br)" />
520 <!-- select all nodes up to the next br or end of stanza -->
521 <xsl:variable name="current-verse"
522 select="following-sibling::node()[count(preceding-sibling::br) = $lnum+1]" />
523 <xsl:call-template name="verse">
524 <xsl:with-param name="verse-content" select="$current-verse" />
529 <xsl:call-template name="verse">
530 <xsl:with-param name="verse-content" select="child::node()" />
537 <xsl:template name="verse">
538 <!-- the verse contents including the last br (if any) -->
539 <xsl:param name="verse-content" />
540 <xsl:variable name="first-tag-name" select="name($verse-content/self::*)" />
541 <!-- name of text nodes is '' == false -->
543 <!-- THIS IS A HORROR!!! -->
544 <!-- Possible variants: -->
546 <!-- Simple verse == not wers_ tags anywhere until the ending br -->
547 <xsl:when test="not($verse-content[starts-with(name(), 'wers_')])">
548 <p class="wers" x-node="wers">
549 <xsl:apply-templates select="$verse-content[local-name(.) != 'br']">
550 <xsl:with-param name="mixed" select="true()" />
551 </xsl:apply-templates>
556 <xsl:apply-templates select="$verse-content[local-name(.) != 'br']">
557 <xsl:with-param name="mixed" select="false()" />
558 </xsl:apply-templates>
563 <xsl:template match="wers_cd|wers_akap|wers_wciety">
564 <xsl:param name="mixed" />
566 <xsl:call-template name="standard-attributes" />
567 <xsl:apply-templates select="child::node()">
568 <xsl:with-param name="mixed" select="true()" />
569 </xsl:apply-templates>
573 <xsl:template match="br"><xsl:text>/</xsl:text></xsl:template>
583 Tagi obejmujące tytuł dzieła, np. książki, filmu, piosenki,
584 modlitwy, przedstawienia teatr. itd.:
586 <tytul_dziela> tytuł-dzieła </tytul_dziela>
588 <xsl:template match="tytul_dziela">
589 <xsl:param name="mixed" />
591 <xsl:call-template name="standard-attributes" />
592 <xsl:apply-templates select="child::node()">
593 <xsl:with-param name="mixed" select="true()" />
594 </xsl:apply-templates>
598 <xsl:template match="wyroznienie|slowo_obce|mat|didask_tekst|osoba|wyp_osoba|www">
599 <xsl:param name="mixed" />
601 <xsl:call-template name="standard-attributes" />
602 <xsl:apply-templates select="child::node()">
603 <xsl:with-param name="mixed" select="true()" />
604 </xsl:apply-templates>
613 <xsl:template match="sekcja_swiatlo">
614 <xsl:param name="mixed" />
615 <br><xsl:call-template name="standard-attributes" /></br>
618 <xsl:template match="sekcja_asterysk">
619 <xsl:param name="mixed" />
620 <hr><xsl:call-template name="standard-attributes" /></hr>
623 <xsl:template match="separator_linia">
624 <xsl:param name="mixed" />
625 <hr><xsl:call-template name="standard-attributes" /></hr>
628 <xsl:template match="zastepnik_wersu">
629 <xsl:param name="mixed" />
630 <hr><xsl:call-template name="standard-attributes" /></hr>
642 <xsl:template match="pr|pa|pe|pt">
643 <span x-editable="true">
644 <xsl:call-template name="standard-attributes">
645 <xsl:with-param name="extra-class" select="'annotation-inline-box'" />
647 <a name="anchor-{generate-id(.)}" />
648 <!-- the link to the non-inline version -->
649 <a href="#annotation-{generate-id(.)}" class="annotation"></a>
650 <!-- inline contents -->
651 <span x-annotation-box="true">
652 <xsl:call-template name="context-menu" />
653 <xsl:apply-templates select="node()">
654 <xsl:with-param name="mixed" select="true()" />
655 </xsl:apply-templates>
660 <xsl:template match="begin">
662 <xsl:call-template name="standard-attributes" />
663 <xsl:attribute name="theme-class">
664 <xsl:value-of select="substring-after(@id, 'b')" />
669 <xsl:template match="extra|uwaga">
671 <xsl:call-template name="standard-attributes" />
672 <xsl:apply-templates select="node()" />
676 <xsl:template match="motyw">
677 <span x-editable="true">
678 <xsl:call-template name="standard-attributes" />
679 <xsl:attribute name="theme-class">
680 <xsl:value-of select="substring-after(@id, 'm')" />
682 <xsl:call-template name="context-menu" />
683 <span class="theme-text-list"><xsl:value-of select="." /></span>
687 <xsl:template match="end">
689 <xsl:call-template name="standard-attributes" />
690 <xsl:attribute name="theme-class">
691 <xsl:value-of select="substring-after(@id, 'e')" />
703 <xsl:template match="text()">
704 <xsl:param name="mixed" />
706 <xsl:when test="normalize-space(.) = ''" />
707 <xsl:when test="not($mixed)"><span x-node="out-of-flow-text" class="out-of-flow-text"
708 x-content="{.}"></span></xsl:when>
709 <xsl:otherwise><xsl:value-of select="." /></xsl:otherwise>
713 <xsl:template match="comment()">
714 <xsl:comment><xsl:value-of select="." /></xsl:comment>
717 <xsl:template match="*[name() != local-name()]">
719 <xsl:call-template name="standard-attributes" />
720 <xsl:apply-templates select="child::node()">
721 <xsl:with-param name="mixed" select="true()" />
722 </xsl:apply-templates>
726 <xsl:template match="*">
727 <error>Unknown tag: <xsl:value-of select="name()" /></error>
730 <xsl:template name="context-menu">
731 <span class="default-menu context-menu">
732 <span class="edit-button">Edit</span>
733 <span class="delete-button">Delete</span>
735 <span class="edit-menu context-menu">
736 <span class="accept-button">Accept</span>
737 <span class="reject-button">Close</span>
741 <xsl:template name="standard-attributes">
742 <xsl:param name="extra-class" />
743 <xsl:attribute name="class"><xsl:value-of select="local-name()" /><xsl:text> </xsl:text><xsl:value-of select="$extra-class" /></xsl:attribute>
745 <!-- we use upper-case attribute names, so we don't have to wory about HTML parsers -->
746 <xsl:attribute name="x-node"><xsl:value-of select="name()" /></xsl:attribute>
748 <xsl:if test="local-name() != name()">
749 <xsl:attribute name="x-ns"><xsl:value-of select="namespace-uri()" /></xsl:attribute>
752 <xsl:for-each select="@*">
753 <xsl:variable name="id" select="generate-id()" />
754 <xsl:attribute name="x-attr-value-{$id}"><xsl:value-of select="."/></xsl:attribute>
755 <xsl:attribute name="x-attr-qname-{$id}"><xsl:value-of select="name()"/></xsl:attribute>
756 <xsl:if test="namespace-uri()">
757 <xsl:attribute name="x-attr-ns-{$id}"><xsl:value-of select="namespace-uri()"/></xsl:attribute>