X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/a2f8ee881d66601e9cb714069dc88d3ed9703db6..43fe93caf99d223acd1defc31afdfda6b596551b:/librarian/xslt/book2html.xslt diff --git a/librarian/xslt/book2html.xslt b/librarian/xslt/book2html.xslt old mode 100755 new mode 100644 index 682ed9b..d39a76a --- a/librarian/xslt/book2html.xslt +++ b/librarian/xslt/book2html.xslt @@ -10,389 +10,17 @@ xmlns:dc="http://purl.org/dc/elements/1.1/" > <xsl:output encoding="utf-8" indent="yes" omit-xml-declaration = "yes" version="2.0" /> +<xsl:strip-space elements="opowiadanie powiesc dramat_wierszowany_l dramat_wierszowany_lp dramat_wspolczesny liryka_l liryka_lp wywiad"/> <xsl:template match="utwor"> <xsl:choose> <xsl:when test="@full-page"> <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 href="https://static.wolnelektury.pl/css/compressed/book_text.css" rel="stylesheet" type="text/css" /> + </head> <body> <xsl:call-template name="book-text" /> </body> @@ -412,11 +40,17 @@ <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" /></p> + <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> <xsl:apply-templates select="text()|*" mode="inline" /> @@ -478,7 +112,25 @@ </xsl:template> <xsl:template match="motto"> - <div class="motto"><xsl:apply-templates mode="inline" /></div> + <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> @@ -505,23 +157,28 @@ <!-- 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="naglowek_scena|naglowek_rozdzial"> + <xsl:call-template name="section-anchor"/> <h3><xsl:apply-templates mode="inline" /></h3> </xsl:template> <xsl:template match="naglowek_osoba|naglowek_podrozdzial"> + <xsl:call-template name="section-anchor"/> <h4><xsl:apply-templates mode="inline" /></h4> </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> @@ -530,11 +187,15 @@ </xsl:template> <xsl:template match="akap|akap_dialog|akap_cd"> - <p class="paragraph"><xsl:apply-templates mode="inline" /></p> + <p class="paragraph"> + <xsl:call-template name="section-anchor"/> + <xsl:apply-templates mode="inline" /> + </p> </xsl:template> <xsl:template match="strofa"> <div class="stanza"> + <xsl:call-template name="section-anchor"/> <xsl:choose> <xsl:when test="count(br) > 0"> <xsl:call-template name="verse"> @@ -591,6 +252,20 @@ <p class="motto_podpis"><xsl:apply-templates mode="inline" /></p> </xsl:template> +<xsl:template match="tabela|tabelka"> + <table><xsl:apply-templates /></table> +</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 = --> @@ -604,7 +279,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"> @@ -700,6 +375,7 @@ <xsl:template match="extra|uwaga" mode="inline" /> <xsl:template match="nota_red" /> +<xsl:template match="abstrakt" /> <!-- ======== --> <!-- = TEXT = --> @@ -709,5 +385,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> \ No newline at end of file +</xsl:stylesheet>