manifest.xsl 5.59 KB
Newer Older
cliclac's avatar
cliclac committed
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xpath-default-namespace="http://www.utc.fr/ics/hdoc/xhtml"
    exclude-result-prefixes="xs"
6
    xmlns="http://www.idpf.org/2007/opf"
cliclac's avatar
cliclac committed
7
    version="2.0">
cliclac's avatar
cliclac committed
8
    <xsl:param name="images"/>
cliclac's avatar
cliclac committed
9
10
    <xsl:template name="manifest">
        <manifest>
cliclac's avatar
cliclac committed
11
            <!-- Table des matières -->
12
            <item id="tDMncx" href="tableDesMatieres.ncx" media-type="application/x-dtbncx+xml"/>
cliclac's avatar
cliclac committed
13
            <!-- Chapitre -->
cliclac's avatar
cliclac committed
14
            <xsl:for-each select="//section[(count(ancestor::section) = 1 and position() &gt; 1) or (count(ancestor::section) = 0)]">
cliclac's avatar
cliclac committed
15
16
17
18
19
20
                <item>
                    <xsl:attribute name="href">chapitres/chapitre<xsl:number level="multiple" count="section" format="1_1"/>.xhtml</xsl:attribute>
                    <xsl:attribute name="id">ch_<xsl:number level="multiple" count="section" format="1_1"/></xsl:attribute>
                    <xsl:attribute name="media-type">application/xhtml+xml</xsl:attribute>
                </item>
            </xsl:for-each>
cliclac's avatar
cliclac committed
21
            <!-- CSS -->
cliclac's avatar
cliclac committed
22
23
24
            <item id="CSS" href="styles/stylesheet.css" media-type="text/css"/>  
            <!-- Première page -->
            <item href="chapitres/titlepage.xhtml" id="titlepage" media-type="application/xhtml+xml"/>
cliclac's avatar
cliclac committed
25
            <!-- Images -->
cliclac's avatar
cliclac committed
26
27
28
29
30
            <xsl:call-template name="parse-comma-separated">
                <xsl:with-param name="text" select="$images"/>
                <xsl:with-param name="i" select="1"/>
            </xsl:call-template>
            
cliclac's avatar
cliclac committed
31
32
        </manifest>
    </xsl:template>
cliclac's avatar
cliclac committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    
    <xsl:template name="parse-comma-separated">
        <xsl:param name="text"/>
        <xsl:param name="i"/>
        
        <xsl:choose>
            <xsl:when test="contains($text, ',')">
                <!-- Récupération du nom du fichier et de son extension -->
                <xsl:variable name="filename"><xsl:value-of select="normalize-space(substring-before($text, ','))"/></xsl:variable>
                <xsl:variable name="extension">
                    <xsl:call-template name="get-file-extension">
                        <xsl:with-param name="path" select="$filename" />
                    </xsl:call-template>
                </xsl:variable>
                <!-- Création de l'item -->
                <item>
                    <!-- Test sur son extension -->
                    <xsl:choose>
                        <xsl:when test="$extension = 'jpg' or $extension = 'jpeg'">
                            <xsl:attribute name="media-type">image/jpeg</xsl:attribute>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:attribute name="media-type">image/<xsl:value-of select="$extension"/></xsl:attribute>
                        </xsl:otherwise>
                    </xsl:choose>
                    <xsl:attribute name="href">images/<xsl:value-of select="$filename"/></xsl:attribute>
                    <xsl:attribute name="id">img<xsl:value-of select="$i"/></xsl:attribute>
                </item>
                
                <!-- Boucle tant qu'il y a des ',' -->
                <xsl:call-template name="parse-comma-separated">
                    <xsl:with-param name="text" select="substring-after($text, ',')"/>
                    <xsl:with-param name="i" select="$i + 1"/>
                </xsl:call-template>
                
            </xsl:when>
            <xsl:otherwise>
                <!-- Récupération du nom du fichier et de son extension -->
                <xsl:variable name="filename"><xsl:value-of select="normalize-space($text)"/></xsl:variable>
                <xsl:variable name="extension">
                    <xsl:call-template name="get-file-extension">
                        <xsl:with-param name="path" select="$filename" />
                    </xsl:call-template>
                </xsl:variable>
                <!-- Création de l'item -->
                <item>
                    <!-- Test sur son extension -->
                    <xsl:choose>
                        <xsl:when test="$extension = 'jpg' or $extension = 'jpeg'">
                            <xsl:attribute name="media-type">image/jpeg</xsl:attribute>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:attribute name="media-type">image/<xsl:value-of select="$extension"/></xsl:attribute>
                        </xsl:otherwise>
                    </xsl:choose>
                    <xsl:attribute name="href">images/<xsl:value-of select="$filename"/></xsl:attribute>
                    <xsl:attribute name="id">img<xsl:value-of select="$i"/></xsl:attribute>
                </item>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    
    <!-- Récupère l'extension du fichier -->
    <xsl:template name="get-file-extension">
        <xsl:param name="path"/>
        <xsl:choose>
            <xsl:when test="contains($path, '/')">
                <xsl:call-template name="get-file-extension">
                    <xsl:with-param name="path" select="substring-after($path, '/')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="contains($path, '.')">
                <xsl:call-template name="get-file-extension">
                    <xsl:with-param name="path" select="substring-after($path, '.')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$path"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
114
</xsl:stylesheet>