X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/30d14a324bb0e8a99c54cbceea01476e59748b33..bfd8ac40bed4535a91bfd645cbe80b47c827a8de:/librarian/xslt/book2html.xslt?ds=sidebyside diff --git a/librarian/xslt/book2html.xslt b/librarian/xslt/book2html.xslt old mode 100755 new mode 100644 index eac63a7..7d2d6b5 --- a/librarian/xslt/book2html.xslt +++ b/librarian/xslt/book2html.xslt @@ -17,385 +17,19 @@ <html> <head> <title>KsiÄ Å¼ka z serwisu WolneLektury.pl</title> - <meta http-equiv="content-type" content="text/html;charset=utf-8"/> - </head> - <style> - body { - font-size: 16px; - font: Georgia, "Times New Roman", serif; - line-height: 1.5em; - margin: 0; - } - - a { - color: blue; - text-decoration: none; - } - - #book-text { - margin: 3em; - max-width: 36em; - } - - /* ================================== */ - /* = Header with logo and menu = */ - /* ================================== */ - #header { - margin: 3.4em 0 0 1.4em; - } - - img { - border: none; - } - - - #menu { - position: fixed; - left: 0em; - top: 0em; - width: 100%; - height: 1.5em; - background: #333; - color: #FFF; - opacity: 0.9; - z-index: 99; - } - - #menu ul { - list-style: none; - padding: 0; - margin: 0; - } - - #menu li a { - display: block; - float: left; - width: 7.5em; - height: 1.5em; - margin-left: 0.5em; - text-align: center; - color: #FFF; - } - - #menu li a:hover, #menu li a:active { - color: #000; - background: #FFF url(/static/img/arrow-down.png) no-repeat center right; - } - - #menu li a.selected { - color: #000; - background: #FFF url(/static/img/arrow-up.png) no-repeat center right; - } - #menu a.menu-link { - display: block; - float: left; - height: 1.5em; - margin-left: 0.5em; - text-align: center; - color: #FFF; - } - #menu span { - color: #888; - font-style: italic; - font-size: .75em; - margin-right: 0.5em; - } - - - #toc, #themes, #nota_red, #info { - position: fixed; - left: 0em; - top: 1.5em; - width: 37em; - padding: 1.5em; - background: #FFF; - border-bottom: 0.25em solid #DDD; - border-right: 0.25em solid #DDD; - display: none; - height: 16em; - overflow-x: hidden; - overflow-y: auto; - opacity: 0.9; - z-index: 99; - } - - #toc ol, #themes ol { - list-style: none; - padding: 0; - margin: 0; - } - - #toc ol li { - font-weight: bold; - } - - #toc ol ol { - padding: 0 0 1.5em 1.5em; - margin: 0; - } - - #toc ol ol li { - font-weight: normal; - } - - #toc h2 { - display: none; - } - - #toc .anchor { - float: none; - margin: 0; - color: blue; - font-size: 16px; - position: inherit; - } - - #info p { - text-align: justify; - margin: 1.5em 0 0; - } - - /* =================================================== */ - /* = Common elements: headings, paragraphs and lines = */ - /* =================================================== */ - h1 { - font-size: 3em; - margin: 1.5em 0; - text-align: center; - line-height: 1.5em; - font-weight: bold; - } - - h2 { - font-size: 2em; - margin: 1.5em 0 0; - font-weight: bold; - line-height: 1.5em; - } - - h3 { - font-size: 1.5em; - margin: 1.5em 0 0; - font-weight: normal; - line-height: 1.5em; - } - - h4 { - font-size: 1em; - margin: 1.5em 0 0; - line-height: 1.5em; - } - - p { - margin: 0; - } - - /* ======================== */ - /* = Footnotes and themes = */ - /* ======================== */ - .theme-begin { - border-left: 0.1em solid #DDDDDD; - color: #777; - padding: 0 0.5em; - width: 7.5em; - - font-style: normal; - font-weight: normal; - font-variant: normal; - letter-spacing: 0; - text-transform: none; - text-decoration: none; - - font-size: 16px; - float: right; - margin-right: -9.5em; - margin-bottom: 0.5em; - clear: both; - left: 40em; - line-height: 1.5em; - text-align: left; - } - - .annotation { - font-style: normal; - font-weight: normal; - font-size: 12px; - padding-left: 2px; - position: relative; - top: -4px; - } - - #footnotes .annotation { - display: block; - float: left; - width: 2.5em; - clear: both; - } - - #footnotes div { - margin: 1.5em 0 0 0; - } - - #footnotes p { - margin-left: 2.5em; - font-size: 0.875em; - } - - blockquote { - font-size: 0.875em; - } - - /* ============= */ - /* = Numbering = */ - /* ============= */ - .verse, .paragraph { - position:relative; - } - .anchor { - position: absolute; - margin: -0.25em -0.5em; - left: -3em; - color: #777; - font-size: 12px; - width: 2em; - text-align: center; - padding: 0.25em 0.5em; - line-height: 1.5em; - } - - .anchor:hover, #book-text .anchor:active { - color: #FFF; - background-color: #CCC; - } - - /* =================== */ - /* = Custom elements = */ - /* =================== */ - span.author { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-bottom: 0.25em; - } - - span.collection { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-bottom: -0.25em; - } - - span.subtitle { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-top: -0.25em; - } - - span.translator { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-top: 0.25em; - } - - div.didaskalia { - font-style: italic; - margin: 0.5em 0 0 1.5em; - } - - div.kwestia { - margin: 0.5em 0 0; - } - - div.stanza { - margin: 1.5em 0 0; - } - - div.kwestia div.stanza { - margin: 0; - } - - p.paragraph { - text-align: justify; - margin: 1.5em 0 0; - } - - p.motto { - text-align: justify; - font-style: italic; - margin: 1.5em 0 0; - } - - p.motto_podpis { - font-size: 0.875em; - text-align: right; - } - - div.fragment { - border-bottom: 0.1em solid #999; - padding-bottom: 1.5em; - } - - div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { - text-align: right; - font-style: italic; - } - - hr.spacer { - height: 3em; - visibility: hidden; - } - - hr.spacer-line { - margin: 1.5em 0; - border: none; - border-bottom: 0.1em solid #000; - } - - p.spacer-asterisk { - padding: 0; - margin: 1.5em 0; - text-align: center; - } - - div.person-list ol { - list-style: none; - padding: 0 0 0 1.5em; - } - - p.place-and-time { - font-style: italic; - } - - em.math, em.foreign-word, em.book-title, em.didaskalia { - font-style: italic; - } - - em.author-emphasis { - letter-spacing: 0.1em; - } - - em.person { - font-style: normal; - font-variant: small-caps; - } - - .verse:after { - content: "\feff"; - } - - - /* =================================== */ - /* = Hide some elements for printing = */ - /* =================================== */ - - @media print { - #menu {display: none;} - } - </style> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> + <link rel="stylesheet" type="text/css"> + <xsl:attribute name="href"> + <xsl:value-of select="$css" /> + </xsl:attribute> + </link> + </head> <body> - <xsl:call-template name="book-text" /> + <xsl:call-template name="book-text" /> + + <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> + <script src="http://malsup.github.io/min/jquery.cycle2.min.js"></script> </body> </html> </xsl:when> @@ -413,12 +47,16 @@ <h3>Przypisy</h3> <xsl:for-each select="descendant::*[self::pe or self::pa or self::pr or self::pt][not(parent::extra)]"> <div> + <xsl:attribute name="class">fn-<xsl:value-of select="name()" /></xsl:attribute> <a name="{concat('footnote-', generate-id(.))}" /> <a href="{concat('#anchor-', generate-id(.))}" class="annotation">[<xsl:number value="count(preceding::*[self::pa or self::pe or self::pr or self::pt]) + 1" />]</a> <xsl:choose> <xsl:when test="count(akap|akap_cd|strofa) = 0"> <p><xsl:apply-templates select="text()|*" mode="inline" /> <xsl:if test="name()='pa'"> [przypis autorski]</xsl:if> + <xsl:if test="name()='pt'"> [przypis tÅumacza]</xsl:if> + <xsl:if test="name()='pr'"> [przypis redakcyjny]</xsl:if> + <xsl:if test="name()='pe'"> [przypis edytorski]</xsl:if> </p> </xsl:when> <xsl:otherwise> @@ -458,6 +96,7 @@ </xsl:template> <xsl:template match="lista_osob"> + <xsl:call-template name="section-anchor"/> <div class="person-list"> <h3><xsl:value-of select="naglowek_listy" /></h3> <ol> @@ -470,6 +109,10 @@ <div class="dedication"><xsl:apply-templates /></div> </xsl:template> +<xsl:template match="ramka"> + <div class="frame"><xsl:apply-templates /></div> +</xsl:template> + <xsl:template match="kwestia"> <div class="kwestia"> <xsl:apply-templates select="strofa|akap|didaskalia" /> @@ -481,7 +124,32 @@ </xsl:template> <xsl:template match="motto"> - <div class="motto"><xsl:apply-templates mode="inline" /></div> + <xsl:call-template name="section-anchor"/> + <div class="motto"><xsl:apply-templates /></div> +</xsl:template> + +<xsl:template match="ilustr" mode="inline"> + <xsl:apply-templates select="."/> +</xsl:template> + +<xsl:template match="ilustr"> + <img> + <xsl:attribute name="src"> + <xsl:value-of select="$gallery" /><xsl:value-of select="@src" /> + </xsl:attribute> + <xsl:attribute name="alt"> + <xsl:value-of select="@alt" /> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:value-of select="@alt" /> + </xsl:attribute> + </img> +</xsl:template> + +<xsl:template match="animacja"> + <div class="animacja cycle-slideshow" data-cycle-pause-on-hover="true" data-cycle-next="> img" data-cycle-fx="fadeout" data-cycle-paused="true"> + <xsl:apply-templates/> + </div> </xsl:template> @@ -508,23 +176,46 @@ <!-- Section headers (included in index)--> <xsl:template match="naglowek_akt|naglowek_czesc|srodtytul"> + <xsl:call-template name="section-anchor"/> <h2><xsl:apply-templates mode="inline" /></h2> </xsl:template> +<xsl:template match="podtytul_akt|podtytul_czesc"> + <div class="subtitle2"> + <xsl:apply-templates mode="inline" /> + </div> +</xsl:template> + <xsl:template match="naglowek_scena|naglowek_rozdzial"> + <xsl:call-template name="section-anchor"/> <h3><xsl:apply-templates mode="inline" /></h3> </xsl:template> +<xsl:template match="podtytul_scena|podtytul_rozdzial"> + <div class="subtitle3"> + <xsl:apply-templates mode="inline" /> + </div> +</xsl:template> + <xsl:template match="naglowek_osoba|naglowek_podrozdzial"> + <xsl:call-template name="section-anchor"/> <h4><xsl:apply-templates mode="inline" /></h4> </xsl:template> +<xsl:template match="podtytul_podrozdzial"> + <div class="subtitle4"> + <xsl:apply-templates mode="inline" /> + </div> +</xsl:template> + <!-- Other paragraph tags --> <xsl:template match="miejsce_czas"> + <xsl:call-template name="section-anchor"/> <p class="place-and-time"><xsl:apply-templates mode="inline" /></p> </xsl:template> <xsl:template match="didaskalia"> + <xsl:call-template name="section-anchor"/> <div class="didaskalia"><xsl:apply-templates mode="inline" /></div> </xsl:template> @@ -534,19 +225,23 @@ <xsl:template match="akap|akap_dialog|akap_cd"> <p class="paragraph"> - <a name="{concat('sect', position())}" /> + <xsl:call-template name="section-anchor"/> <xsl:apply-templates mode="inline" /> </p> </xsl:template> +<xsl:template match="strofa" mode="inline"> + <xsl:apply-templates select="." /> +</xsl:template> + <xsl:template match="strofa"> <div class="stanza"> - <a name="{concat('sect', position())}" /> + <xsl:call-template name="section-anchor"/> <xsl:choose> <xsl:when test="count(br) > 0"> <xsl:call-template name="verse"> <xsl:with-param name="verse-content" select="br[1]/preceding-sibling::text() | br[1]/preceding-sibling::node()" /> - <xsl:with-param name="verse-type" select="br[1]/preceding-sibling::*[name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd'][1]" /> + <xsl:with-param name="verse-type" select="br[1]/preceding-sibling::*[name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd' or name() = 'wers_do_prawej'][1]" /> </xsl:call-template> <xsl:for-each select="br"> <!-- Each BR tag "consumes" text after it --> @@ -554,14 +249,14 @@ <xsl:call-template name="verse"> <xsl:with-param name="verse-content" select="following-sibling::text()[count(preceding-sibling::br) = $lnum+1] | following-sibling::node()[count(preceding-sibling::br) = $lnum+1]" /> - <xsl:with-param name="verse-type" select="following-sibling::*[count(preceding-sibling::br) = $lnum+1 and (name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd')][1]" /> + <xsl:with-param name="verse-type" select="following-sibling::*[count(preceding-sibling::br) = $lnum+1 and (name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd' or name() = 'wers_do_prawej')][1]" /> </xsl:call-template> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:call-template name="verse"> <xsl:with-param name="verse-content" select="text() | node()" /> - <xsl:with-param name="verse-type" select="wers_wciety|wers_akap|wers_cd[1]" /> + <xsl:with-param name="verse-type" select="wers_wciety|wers_akap|wers_cd|wers_do_prawej[1]" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> @@ -571,7 +266,7 @@ <xsl:template name="verse"> <xsl:param name="verse-content" /> <xsl:param name="verse-type" /> - <p class="verse"> + <div class="verse"> <xsl:choose> <xsl:when test="name($verse-type) = 'wers_akap'"> <xsl:attribute name="style">padding-left: 1em</xsl:attribute> @@ -589,15 +284,41 @@ <xsl:when test="name($verse-type) = 'wers_cd'"> <xsl:attribute name="style">padding-left: 12em</xsl:attribute> </xsl:when> + <xsl:when test="name($verse-type) = 'wers_do_prawej'"> + <xsl:attribute name="style">text-align: right</xsl:attribute> + </xsl:when> </xsl:choose> <xsl:apply-templates select="$verse-content" mode="inline" /> - </p> + </div> </xsl:template> <xsl:template match="motto_podpis"> + <xsl:call-template name="section-anchor"/> <p class="motto_podpis"><xsl:apply-templates mode="inline" /></p> </xsl:template> +<xsl:template match="tabela|tabelka"> + <xsl:call-template name="section-anchor"/> + <xsl:choose> + <xsl:when test="@ramka = '1'"> + <table class="border"><xsl:apply-templates /></table> + </xsl:when> + <xsl:otherwise> + <table><xsl:apply-templates /></table> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +<xsl:template match="wiersz"> + <tr><xsl:apply-templates /></tr> +</xsl:template> +<xsl:template match="kol"> + <td><xsl:apply-templates mode="inline" /></td> +</xsl:template> + +<xsl:template match="mat"> + <math xmlns="http://www.w3.org/1998/Math/MathML"><xsl:copy-of select="*" /></math> +</xsl:template> + <!-- ================================================ --> <!-- = INLINE TAGS = --> @@ -611,7 +332,7 @@ <!-- Other inline tags --> <xsl:template match="mat" mode="inline"> - <em class="math"><xsl:apply-templates mode="inline" /></em> + <math xmlns="http://www.w3.org/1998/Math/MathML"><xsl:copy-of select="*" /></math> </xsl:template> <xsl:template match="didask_tekst" mode="inline"> @@ -632,6 +353,14 @@ <em class="author-emphasis"><xsl:apply-templates mode="inline" /></em> </xsl:template> +<xsl:template match="wieksze_odstepy" mode="inline"> + <em class="wieksze-odstepy"><xsl:apply-templates mode="inline" /></em> +</xsl:template> + +<xsl:template match="indeks_dolny" mode="inline"> + <sub><xsl:apply-templates mode="inline" /></sub> +</xsl:template> + <xsl:template match="osoba" mode="inline"> <em class="person"><xsl:apply-templates mode="inline" /></em> </xsl:template> @@ -707,6 +436,7 @@ <xsl:template match="extra|uwaga" mode="inline" /> <xsl:template match="nota_red" /> +<xsl:template match="abstrakt" /> <!-- ======== --> <!-- = TEXT = --> @@ -716,5 +446,19 @@ <xsl:value-of select="wl:substitute_entities(.)" /> </xsl:template> +<!-- ========= --> +<!-- = utils = --> +<!-- ========= --> +<xsl:template name="section-anchor"> + <!-- + this formula works as follows: + - get all ancestors including self + - choose the header (third one from root): utwor/book-type/header + - get all preceding siblings + - count them + - create an <a name="sec123"/> tag. + --> + <a name="{concat('sec', count(ancestor-or-self::*[last()-2]/preceding-sibling::*) + 1)}" /> +</xsl:template> </xsl:stylesheet>