Now stylesheet master.css is applied to all media types.
authorMarek Stępniowski <marek@stepniowski.com>
Sun, 31 Aug 2008 12:38:58 +0000 (14:38 +0200)
committerMarek Stępniowski <marek@stepniowski.com>
Sun, 31 Aug 2008 12:38:58 +0000 (14:38 +0200)
Moved converting custom text entities (like '...', '--', and '---') to custom XPath function substitute_entities in namespace http://wolnelektury.pl/functions (namespace is subject to change).

bin/book2html.py
bin/book2html.xslt

index f66117d..3907de3 100755 (executable)
@@ -9,6 +9,29 @@ import sys
 from lxml import etree
 
 
+ENTITY_SUBSTITUTIONS = [
+    (u'---', u'—'),
+    (u'--', u'–'),
+    (u'...', u'…'),
+    (u',,', u'„'),
+    (u'"', u'”'),
+]
+
+
+def substitute_entities(context, text):
+    """XPath extension function converting all entites in passed text."""
+    if isinstance(text, list):
+        text = ''.join(text)
+    for entity, substitutution in ENTITY_SUBSTITUTIONS:
+        text = text.replace(entity, substitutution)
+    return text
+
+
+# Register substitute_entities function with lxml
+ns = etree.FunctionNamespace('http://wolnelektury.pl/functions')
+ns['substitute_entities'] = substitute_entities
+
+
 def transform(input_filename, output_filename):
     """Transforms file input_filename in XML to output_filename in XHTML."""
     # Parse XSLT
@@ -21,7 +44,7 @@ def transform(input_filename, output_filename):
     f = open(input_filename, 'r')
     for line in f:
         line = line.decode('utf-8')
-        line = expr.sub(u'<br/>\n', line).replace(u'---', u'—').replace(u',,', u'„')
+        line = expr.sub(u'<br/>\n', line)
         doc_file.write(line.encode('utf-8'))
     f.close()
 
index 158caeb..86d27d6 100644 (file)
@@ -1,9 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:wl="http://wolnelektury.pl/functions" >
 
 <xsl:output method="xml" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" indent="yes" />
 
 <xsl:template match="text()" />
+<xsl:template match="text()" mode="inline">
+    <xsl:value-of select="wl:substitute_entities(.)" />
+</xsl:template>
 
 <xsl:template match="extra|uwaga" />
 <xsl:template match="extra|uwaga" mode="inline" />
         <head>
             <title>book2html output</title>
             <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
-            <link rel="stylesheet" href="master.css" type="text/css" media="screen" charset="utf-8" />
+            <link rel="stylesheet" href="master.css" type="text/css" media="all" charset="utf-8" />
         </head>
         <body>
             <xsl:apply-templates select="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny" />
-            <div id="footnotes">
-                <h3>Przypisy</h3>
-                <xsl:for-each select="descendant::*[self::pe or self::pa or self::pr or self::pt][not(parent::extra)]">
-                    <div>
-                        <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>
-                            </xsl:when>
-                            <xsl:otherwise>
-                                <xsl:apply-templates select="text()|*" mode="inline" />
-                            </xsl:otherwise>
-                        </xsl:choose>
-                    </div>
-                </xsl:for-each>
-            </div>
+            <xsl:if test="count(descendant::*[self::pe or self::pa or self::pr or self::pt][not(parent::extra)])">
+                <div id="footnotes">
+                    <h3>Przypisy</h3>
+                    <xsl:for-each select="descendant::*[self::pe or self::pa or self::pr or self::pt][not(parent::extra)]">
+                        <div>
+                            <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>
+                                </xsl:when>
+                                <xsl:otherwise>
+                                    <xsl:apply-templates select="text()|*" mode="inline" />
+                                </xsl:otherwise>
+                            </xsl:choose>
+                        </div>
+                    </xsl:for-each>
+                </div>
+            </xsl:if>
         </body>
     </html>
 </xsl:template>
@@ -60,7 +65,7 @@
     <span class="collection"><xsl:apply-templates mode="inline" /></span>
 </xsl:template>
 
-<xsl:template match="naglowek_akt|naglowek_czesc">
+<xsl:template match="naglowek_akt|naglowek_czesc|srodtytul">
     <h2><xsl:apply-templates mode="inline" /></h2>
 </xsl:template>