Commit a8330f76 authored by cliclac's avatar cliclac

Image / Divers PB...

parent 4d252c24
......@@ -29,12 +29,22 @@ User Documentation
------------------
### Scenario
La personne possède un hdoc et voudrait le convertir en epub. Il se dirige vers le site hdoc et télécharge le zip. Il extrait le zip et se rend vers le dossier hdoc_to_epub. Il lit le README.md et suit les directives pour obtenir son format epub. Pour cela, il doit coller son hdoc dans le dossier input et lancer l'exécutable "run". Enfin, il aura son epub dans le dossier output.
La personne possède un (ou des) hdoc et voudrait le convertir en epub. Il se dirige vers le site hdoc et télécharge le zip. Il extrait le zip et se rend vers le dossier hdoc_to_epub. Il lit le README.md et suit les directives pour obtenir son format epub. Pour cela, il doit coller son (ou ses) hdoc dans le dossier input et lancer l'exécutable "run". Enfin, il aura son (ou ses) epub dans le dossier output.
Supported
---------
Image : JPEG; JPG, PNG, SVG (non testé pour SVG)
Gestion du multifichiers en input
Unsupported
-----------
ODG : non supporté en EPUB => "Élément non supporté en EPUB : <xsl:value-of select="@data"/>"
Known bugs
----------
......@@ -47,15 +57,8 @@ Problème avec les keywords : le hdoc contient des keywords mais nous ne savons
Todo list
---------
Validation de l'epub actuel
Mise en place de la première page
Validation
Étude compatibilité entre EPUB2 et EPUB3
Test : Mettre un élément fondamental avec une taille plus grande qu'une page.
Technical Notes
---------------
......@@ -93,3 +93,20 @@ td{
.noCut{
page-break-inside: avoid;
}
.titlePage{
margin: 30vh 0 0 0;
text-align: center;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
font-size: 30px;
}
.subTitlePage{
text-align: center;
font-size: 15px;
}
.bold{
font-weight: bold;
}
......@@ -95,7 +95,26 @@
</target>
<target name="MakeOPF">
<xslt in="${tmp}/${filename}/decompressedHdoc/content.xml" out="${tmpRetour}/oebps/content.opf" classpath="${lib}/saxon9he.jar" style="${xsl}/content.xsl"/>
<!-- Récupération du nom des images dans my.images séparé par des ','-->
<path id="pathImage">
<fileset dir="${tmp}/${filename}/decompressedHdoc/re">
<include name="**/*.jpeg"/>
<include name="**/*.jpg"/>
<include name="**/*.svg"/>
<include name="**/*.png"/>
</fileset>
</path>
<!-- Récupération que du nom de l'image et non de tout le chemin -->
<pathconvert pathsep="," property="my.images" refid="pathImage">
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="*"/>
</chainedmapper>
</pathconvert>
<xslt in="${tmp}/${filename}/decompressedHdoc/content.xml" out="${tmpRetour}/oebps/content.opf" classpath="${lib}/saxon9he.jar" style="${xsl}/content.xsl">
<param name="images" expression="${my.images}"/>
</xslt>
</target>
<target name="MakeOPS">
......@@ -103,7 +122,12 @@
<copy file="${file}/stylesheet.css" todir="${tmpRetour}/oebps/styles"/>
<mkdir dir="${tmpRetour}/oebps/images"/>
<copy todir="${tmpRetour}/oebps/images" failonerror="false">
<fileset dir="${tmp}/${filename}/decompressedHdoc/re" includes="**"/>
<fileset dir="${tmp}/${filename}/decompressedHdoc/re">
<include name="**/*.jpeg"/>
<include name="**/*.jpg"/>
<include name="**/*.svg"/>
<include name="**/*.png"/>
</fileset>
</copy>
<mkdir dir="${tmpRetour}/oebps/chapitres"/>
<xslt in="${tmp}/${filename}/decompressedHdoc/content.xml" out="${tmpRetour}/oebps/tableDesMatieres.ncx" classpath="${lib}/saxon9he.jar" style="${xsl}/tdmncx.xsl"/>
......
......@@ -9,10 +9,23 @@
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/html" priority="10">
<xsl:result-document method="xml" href="../../../retour/oebps/chapitres/titlepage.xhtml">
<html xml:lang="fr" lang="fr" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
<title><xsl:value-of select="head/title"/></title>
<meta content="http://www.w3.org/1999/xhtml; charset=utf-8" http-equiv="Content-Type"/>
<link href="../styles/stylesheet.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<div class="titlePage"><xsl:value-of select="head/title"/></div>
<div class="subTitlePage"><xsl:value-of select="head/meta[@name='author']/@content"/></div>
</body>
</html>
</xsl:result-document>
<xsl:for-each select="/html/body/section">
<xsl:variable name="path">../../../retour/oebps/chapitres/chapitre<xsl:number level="multiple" count="section" format="1"/>.xhtml</xsl:variable>
<xsl:result-document method="xml" href="{$path}">
<html xml:lang="en" lang="en" xmlns:epub="http://www.idpf.org/2007/ops">
<html xml:lang="fr" lang="fr" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
<title><xsl:value-of select="header/h1"/></title>
<meta content="http://www.w3.org/1999/xhtml; charset=utf-8" http-equiv="Content-Type"/>
......@@ -30,7 +43,7 @@
<xsl:template match="//section[count(ancestor::section) = 1 and position() &gt; 1]" priority="9">
<xsl:variable name="path">../../../retour/oebps/chapitres/chapitre<xsl:number level="multiple" count="section" format="1_1"/>.xhtml</xsl:variable>
<xsl:result-document method="xml" href="{$path}">
<html xml:lang="en" lang="en" xmlns:epub="http://www.idpf.org/2007/ops">
<html xml:lang="fr" lang="fr" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
<title><xsl:value-of select="header/h1"/></title>
<meta content="http://www.w3.org/1999/xhtml; charset=utf-8" http-equiv="Content-Type"/>
......@@ -109,16 +122,32 @@
</div>
</div>
</xsl:template>
<xsl:template match="//div[@data-hdoc-type='syntax']" priority="4">
<div class="noCut">
<h3>
<xsl:if test="h6">
<span class="textTitle"><xsl:value-of select="h6"/></span>
</xsl:if>
<span class="title">Syntaxe</span>
</h3>
<div class="border">
<xsl:apply-templates/>
</div>
</div>
</xsl:template>
<xsl:template match="//div[@data-hdoc-type='warning']" priority="4">
<h3 class="warning">
<xsl:if test="h6">
<span class="textTitle"><xsl:value-of select="h6"/></span>
</xsl:if>
<span class="title">Attention</span>
</h3>
<div class="borderWarning">
<xsl:apply-templates/>
<div class="noCut">
<h3 class="warning">
<xsl:if test="h6">
<span class="textTitle"><xsl:value-of select="h6"/></span>
</xsl:if>
<span class="title">Attention</span>
</h3>
<div class="borderWarning">
<xsl:apply-templates/>
</div>
</div>
</xsl:template>
......@@ -135,6 +164,42 @@
</div>
</div>
</xsl:template>
<xsl:template match="//div[@data-hdoc-type='definition']" priority="4">
<div class="noCut">
<h3>
<xsl:if test="h6">
<span class="textTitle"><xsl:value-of select="h6"/></span>
</xsl:if>
<span class="title">Définition</span>
</h3>
<div class="border">
<xsl:apply-templates/>
</div>
</div>
</xsl:template>
<xsl:template match="//span[@data-hdoc-type='syntax']" priority="4">
<span class="bold"><xsl:value-of select="."/></span>
</xsl:template>
<xsl:template match="//img" priority="4">
<xsl:element name="img">
<xsl:attribute name="src">../images/<xsl:value-of select="./@alt"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="./@alt"/></xsl:attribute>
</xsl:element>
</xsl:template>
<xsl:template match="//a[not(starts-with(@href,'http'))]" priority="4">
<xsl:element name="a">
<xsl:attribute name="href">http://<xsl:value-of select="@href"/></xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="//object[@type='application/vnd.oasis.opendocument.graphics']" priority="4">
Élément non supporté en EPUB : <xsl:value-of select="@data"/>
</xsl:template>
<!-- Identity transformation -->
<xsl:template match="node()|@*">
......
......@@ -5,11 +5,11 @@
exclude-result-prefixes="xs"
xmlns="http://www.idpf.org/2007/opf"
version="2.0">
<xsl:import href="content/metadata.xsl"/>
<xsl:import href="content/manifest.xsl"/>
<xsl:import href="content/spine.xsl"/>
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="html">
......
......@@ -5,19 +5,13 @@
exclude-result-prefixes="xs"
xmlns="http://www.idpf.org/2007/opf"
version="2.0">
<xsl:param name="images"/>
<xsl:template name="manifest">
<manifest>
<!-- Table des matières -->
<item id="tDMncx" href="tableDesMatieres.ncx" media-type="application/x-dtbncx+xml"/>
<!-- Chapitre -->
<xsl:for-each select="body/section">
<item>
<xsl:attribute name="href">chapitres/chapitre<xsl:number level="multiple" count="section" format="1"/>.xhtml</xsl:attribute>
<xsl:attribute name="id">ch_<xsl:number level="multiple" count="section" format="1"/></xsl:attribute>
<xsl:attribute name="media-type">application/xhtml+xml</xsl:attribute>
</item>
</xsl:for-each>
<xsl:for-each select="//section[count(ancestor::section) = 1 and position() &gt; 1]">
<xsl:for-each select="//section[(count(ancestor::section) = 1 and position() &gt; 1) or (count(ancestor::section) = 0)]">
<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>
......@@ -25,14 +19,96 @@
</item>
</xsl:for-each>
<!-- CSS -->
<item id="CSS" href="styles/stylesheet.css" media-type="text/css"/>
<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"/>
<!-- Images -->
<!--<xsl:for-each select="collection('../../tmp/retour/oebps/images/')" >
<xsl:element name='file'>
<xsl:value-of select="tokenize(document-uri(.), '/')[last()]"/>
</xsl:element>
</xsl:for-each>-->
<xsl:call-template name="parse-comma-separated">
<xsl:with-param name="text" select="$images"/>
<xsl:with-param name="i" select="1"/>
</xsl:call-template>
</manifest>
</xsl:template>
<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>
</xsl:stylesheet>
......@@ -7,12 +7,8 @@
version="2.0">
<xsl:template name="spine">
<spine toc="tDMncx">
<xsl:for-each select="body/section">
<itemref>
<xsl:attribute name="idref">ch_<xsl:number level="multiple" count="section" format="1"/></xsl:attribute>
</itemref>
</xsl:for-each>
<xsl:for-each select="//section[count(ancestor::section) = 1 and position() &gt; 1]">
<itemref idref="titlepage"/>
<xsl:for-each select="//section[(count(ancestor::section) = 1 and position() &gt; 1) or (count(ancestor::section) = 0)]">
<itemref>
<xsl:attribute name="idref">ch_<xsl:number level="multiple" count="section" format="1_1"/></xsl:attribute>
</itemref>
......
......@@ -9,7 +9,7 @@
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="html">
<ncx version="2005-1" xml:lang="en-US">
<ncx version="2005-1" xml:lang="fra">
<head>
<meta content="org-example-5059463624137734586" name="dtb:uid"/>
</head>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment