Commit 14ec2763 authored by simei.yin's avatar simei.yin

Merge branch 'master' of ssh://gitlab.utc.fr/crozatst/hdoc

parents 42f376ba 64c99ecf
......@@ -15,4 +15,5 @@ Un utilisateur a cr
- Activity created in the .programme, transclusion available.
- Information/Warning/Advice/ect...
- Method and Remind fully functional.
- Add QCU and QCM. Transclusion of them available too. Need to fix a schema validation error when putting a title to a question, without filling the question content.
\ No newline at end of file
- Add QCU and QCM. Transclusion of them available too. Need to fix a schema validation error when putting a title to a question, without filling the question content.
-Add "Exercice redactionnel" and transclusion.
\ No newline at end of file
......@@ -27,8 +27,7 @@
<body>
<xsl:apply-templates select="cp:programM/sp:abstract"/>
<xsl:apply-templates select="child::*[name() != 'cp:programM']"/>
<!-- TODO : apply-templates des exercices -->
<xsl:apply-templates select="descendant::*[sp:question]/sp:question | descendant::*[sp:exercice]/sp:exercice"/>
<xsl:apply-templates select="descendant::*[sp:question and ../name() != 'sp:question']/sp:question | descendant::*[sp:exercice]/sp:exercice"/>
</body>
</html>
</xsl:template>
......@@ -321,29 +320,60 @@
<!-- ******** EXERCICE AVEC CORRIGE ******** -->
<!-- Questionnement -->
<!-- TODO gerer multiple texte, remarque prof, ect... -->
<xsl:template match="sp:question/cp:openQuestion">
<xsl:template match="sp:question/cp:openQuestion | sp:exercice/cp:openQuestion">
<section data-hdoc-type='exercise'>
<header>
<h1><xsl:value-of select="cp:questionM/sp:title"/></h1>
</header>
<!-- TODO work with description -->
<xsl:if test="sp:question/cp:flow/*">
<div data-hdoc-type='question'>
<xsl:apply-templates select="sp:question/cp:flow/sp:txt/cp:txt/sc:para"/>
</div>
</xsl:if>
<xsl:if test="sp:solution">
<div data-hdoc-type='solution'>
<xsl:apply-templates select="sp:solution/cp:flow/sp:txt/cp:txt/sc:para"/>
</div>
</xsl:if>
<section>
<header><h1/></header>
<xsl:if test="sp:question/cp:flow/*">
<div data-hdoc-type='openQuestion'>
<xsl:apply-templates select="sp:question/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
<div data-hdoc-type='hint'>
<xsl:apply-templates select="sp:question/cp:flow/sp:profInstruction/cp:txt//sc:para"/>
</div>
</xsl:if>
<xsl:if test="../name() = 'sp:question' and sp:solution">
<div data-hdoc-type='solution'>
<xsl:apply-templates select="sp:solution/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
</xsl:if>
</section>
</section>
</xsl:template>
<xsl:template match="sc:item/cp:openQuestion">
<xsl:param name="withoutExplanation"/>
<section data-hdoc-type='exercise'>
<header>
<h1><xsl:value-of select="cp:questionM/sp:title"/></h1>
</header>
<section>
<header><h1/></header>
<xsl:if test="sp:question/cp:flow/*">
<div data-hdoc-type='openQuestion'>
<xsl:apply-templates select="sp:question/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
<div data-hdoc-type='hint'>
<xsl:apply-templates select="sp:question/cp:flow/sp:profInstruction/cp:txt//sc:para"/>
</div>
</xsl:if>
<xsl:if test="$withoutExplanation = 'sp:question' and sp:solution">
<div data-hdoc-type='solution'>
<xsl:apply-templates select="sp:solution/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
</xsl:if>
</section>
</section>
</xsl:template>
<!-- QCM and QCU-->
<xsl:template match="sp:question/cp:qcm | sp:exercice/cp:qcm | sc:item/cp:qcm">
<!-- TODO Gérer les explications par choix -->
<xsl:template match="sc:item/cp:qcm">
<xsl:param name="withoutExplanation"/>
<section>
<header>
<h1><xsl:value-of select="cp:questionM/sp:title"/></h1>
......@@ -352,7 +382,7 @@
<xsl:apply-templates select='sc:question/cp:block'/>
</div>
<xsl:apply-templates select="sc:choices/sc:choice"/>
<xsl:if test="sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt">
<xsl:if test="$withoutExplanation = 'sp:question' and sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt">
<div data-hdoc-type='explanation'>
<xsl:apply-templates select="sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
......@@ -360,7 +390,25 @@
</section>
</xsl:template>
<xsl:template match="sp:question/cp:qcu | sp:exercice/cp:qcu | sc:item/cp:qcu">
<xsl:template match="sp:question/cp:qcm | sp:exercice/cp:qcm">
<section>
<header>
<h1><xsl:value-of select="cp:questionM/sp:title"/></h1>
</header>
<div data-hdoc-type = 'question'>
<xsl:apply-templates select='sc:question/cp:block'/>
</div>
<xsl:apply-templates select="sc:choices/sc:choice"/>
<xsl:if test="../name() = 'sp:question' and sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt">
<div data-hdoc-type='explanation'>
<xsl:apply-templates select="sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
</xsl:if>
</section>
</xsl:template>
<xsl:template match="sc:item/cp:qcu">
<xsl:param name="withoutExplanation"/>
<section>
<header>
<h1><xsl:value-of select="cp:questionM/sp:title"/></h1>
......@@ -370,7 +418,26 @@
</div>
<xsl:apply-templates select="sc:choices//sc:choice"/>
<div data-hdoc-type='solution'><p><xsl:value-of select="sc:solution/@choice"/></p></div>
<xsl:if test="sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt">
<xsl:if test="$withoutExplanation = 'sp:question' and sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt">
<div data-hdoc-type='explanation'>
<xsl:apply-templates select="sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
</xsl:if>
</section>
</xsl:template>
<xsl:template match="sp:question/cp:qcu | sp:exercice/cp:qcu">
<section>
<header>
<h1><xsl:value-of select="cp:questionM/sp:title"/></h1>
</header>
<div data-hdoc-type='singlechoicequestion'>
<xsl:apply-templates select="sc:question/cp:block"/>
</div>
<xsl:apply-templates select="sc:choices//sc:choice"/>
<div data-hdoc-type='solution'><p><xsl:value-of select="sc:solution/@choice"/></p></div>
<xsl:if test="../name() = 'sp:question' and sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt">
<div data-hdoc-type='explanation'>
<xsl:apply-templates select="sc:globalExplanation/cp:block/sp:body/cp:flow/sp:txt/cp:txt//sc:para"/>
</div>
......@@ -412,9 +479,12 @@
</xsl:template>
<xsl:template match="sp:question[@sc:refUri] | sp:exercice[@sc:refUri]">
<xsl:apply-templates select="document(@sc:refUri)"/>
<xsl:apply-templates select="document(@sc:refUri)/sc:item/*">
<xsl:with-param name="withoutExplanation" select="name()"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="sp:question | sp:exercice">
<xsl:apply-templates select="./*"/>
</xsl:template>
......
......@@ -18,6 +18,6 @@ An .scar example is already in the input folder.
- Information/Warning/Advice/ect...
- Method and Remind fully functional
- QCM and QCU working, even with transclusion.
- Add "Exercice redactionnel" and transclusion.
......@@ -30,26 +30,6 @@ Vous êtes un utilisateur de framapad et en créez un pour un projet. Après avo
3. run the `run.[bat|sh]` script of your choice depending on your OS
4. and retrieve the hdoc outputs in the `/output` folder
## Unsupported
- Markdown
- Author paternity
- Etherpad timeline
- Chat
## Known bugs
- Nested lists in lists are not supported
Example :
`<ul>
<li>
<ul>
<li>
Never gonna give you up.
</li>
</ul>
</li>
<ul>`
- As a consequence, etherpad indentation is not supported because it is coded as nested lists.
## Product Backlog
Currently available on: https://framemo.org/framapad_to_opale
......@@ -57,15 +37,13 @@ Currently available on: https://framemo.org/framapad_to_opale
See also : https://bimestriel.framapad.org/p/nf29_framapad_to_opale for the full documentation of our working process.
## TODO
- Nested Lists
- Indentation
- Titles (and therefore Structure of the doc)
- Coloured text
- Code
- Markdown
## Technical notes
### Description of etherpad_to_hdoc.ant
### Description of framapad_to_hdoc.ant
#### Prelude
- Importation of necessary classes (antlib, htmlcleaner, jing)
......
......@@ -10,7 +10,7 @@
- Fecherolle Cecile (2014)
## Presentation
How to transform an framapad document in opale document.
How to transform a framapad document in opale document.
Filepaths in this document are relative to this readme file.
......@@ -19,8 +19,7 @@ Filepaths in this document are relative to this readme file.
- Hdoc2Opale
## User Documentation
1. Download a framapad document in html format.
1. Create or join a framapad document then export it in html format (Import/Export Button) in the `/input` directory (if the directory does not exists, you have to create it).
1. Create a framapad document then export it in html format (Import/Export Button) and put it in the `/input` directory (if the directory does not exists, you have to create it).
2. Execute the file `/run.bat` or `/run.sh` depending on the OS. A `.scar` file is created in the directory `/output`
*If the `/input` directory contains multiple files, they will be all treated.
3. Open the document with Opale
......@@ -29,29 +28,6 @@ Filepaths in this document are relative to this readme file.
3. Import your `.scar` file in the directory.
4. Open the file Main.xml created.
## Unsupported
- MarkDown
- Timeline and author paternity
- Chat
## Known bugs
Nested lists in lists are not supported.
Here's an example :
`<ul>
<li>
<ul>
<li>
Never gonna give you up.
</li>
</ul>
</li>
<ul>`
## TODO
- Work with markdown
- Correct nested lists
## Technical notes
### Description of framapad_to_hdoc.ant
......
......@@ -39,11 +39,19 @@ Image : JPEG; JPG, PNG, SVG (non testé pour SVG)
Gestion du multifichiers en input
Hypertexte
Unsupported
-----------
ODG : non supporté en EPUB => "Élément non supporté en EPUB : <xsl:value-of select="@data"/>"
Problème sur la liseuse vis à vis du CSS (à détailler)
Exercices
Méthode et Rappels (data-hdoc-type)
Known bugs
----------
......@@ -57,8 +65,13 @@ Problème avec les keywords : le hdoc contient des keywords mais nous ne savons
Todo list
---------
Étude compatibilité entre EPUB2 et EPUB3
Trouver une solution pour le dimentionnement des images
Repérer le problème avec le css
Faire l'affichage des exercices
Faire l'affichage des nouveaux types : Méthode et Rappels
Technical Notes
---------------
This diff is collapsed.
body{
margin: 0px;
padding: 0px;
height: 100%;
font: 12px Tahoma, Arial, Sans-serif;
}
h1, h2, h3, h4, h5, h6{
font-weight: bold;
}
h1{
font-size: 1.8em;
color: #4463A1;
text-align: center;
}
h2{
font-size:1.8em;
color:#4463A1;
}
h3{
font-size: 1.4em;
color: #4463A1;
}
h4, h5, h6{
font-size: 1.3em;
color: #4463A1;
}
p{
text-align: justify;
font-size: 1.2em;
margin: 0.2em 1em 0.7em 1em;
}
table, td, th {
border: 1px solid #4463A1;
text-align: center;
font-size: 1.2em;
}
td p, th p{
text-align: center;
font-size: 15px;
}
tr:first-child {
font-weight: bold;
color : white;
background-color : #4463A1;
}
table {
border-collapse: collapse;
width: 100%;
}
th {
padding: 10px;
}
td{
padding: 5px;
}
.textTitle{
float : left;
}
.title{
float : right;
}
.border{
background: #f5fcff;
border: 2px solid #4463A1;
box-shadow: 0px 5px 5px #888888;
padding: 5px;
clear: both;
}
.warning{
color:#cc0000;
}
.borderWarning{
background: #ffcccc;
border: 2px solid #cc0000;
box-shadow: 0px 5px 5px #888888;
padding: 5px;
clear: both;
}
.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;
}
.imgContainer1{
text-indent:0;
text-align:center;
margin-right:auto;
margin-left:auto;
width:99%;
page-break-before:auto;
page-break-inside:avoid;
page-break-after:auto;
}
.imgContainer2{
margin-left:0;
margin-right:0;
text-align:center;
text-indent:0;
height:100%;
width:100%;
}
p .imgContainer3{
display:inline-block;
text-indent:0;
width:100%;
}
img{
max-width:99%;
max-height:75%;
}
body{
margin: 0px;
padding: 0px;
height: 100%;
font: 12px Tahoma, Arial, Sans-serif;
}
h1, h2, h3, h4, h5, h6{
font-weight: bold;
}
h1{
font-size: 1.8em;
color: #4463A1;
text-align: center;
}
h2{
font-size:1.8em;
color:#4463A1;
}
h3{
font-size: 1.4em;
color: #4463A1;
}
h4, h5, h6{
font-size: 1.3em;
color: #4463A1;
}
p{
text-align: justify;
font-size: 1.2em;
margin: 0.2em 1em 0.7em 1em;
}
table, td, th {
border: 1px solid #4463A1;
text-align: center;
font-size: 1.2em;
}
td p, th p{
text-align: center;
font-size: 15px;
}
tr:first-child {
font-weight: bold;
color : white;
background-color : #4463A1;
}
table {
border-collapse: collapse;
width: 100%;
}
th {
padding: 10px;
}
td{
padding: 5px;
}
.textTitle{
float : left;
}
.title{
float : right;
}
.border{
background: #f5fcff;
border: 2px solid #4463A1;
box-shadow: 0px 5px 5px #888888;
padding: 5px;
clear: both;
}
.warning{
color:#cc0000;
}
.borderWarning{
background: #ffcccc;
border: 2px solid #cc0000;
box-shadow: 0px 5px 5px #888888;
padding: 5px;
clear: both;
}
.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;
}
.imgContainer1{
text-indent:0;
text-align:center;
margin-right:auto;
margin-left:auto;
width:99%;
page-break-before:auto;
page-break-inside:avoid;
page-break-after:auto;
}
.imgContainer2{
margin-left:0;
margin-right:0;
text-align:center;
text-indent:0;
height:100%;
width:100%;
}
p .imgContainer3{
display:inline-block;
text-indent:0;
width:100%;
}
img{
max-width:99%;
max-height:75%;
}
......@@ -629,6 +629,75 @@
<xsl:copy-of select="document(fn:concat($filename,'/decompressedHdoc/',@data))/sc:item/op:code"/>
</sp:listing>
</xsl:template>
<!-- Open Question -->
<xsl:template match="h:section[@data-hdoc-type = 'exercise']">
<sp:practUc>
<op:practUc>
<op:exeM>
<sp:title>
<xsl:value-of select="h:header/h:h1"/>
</sp:title>
</op:exeM>
<!-- TODO handle desc -->
<!-- Question/Response -->
<xsl:apply-templates select=".//h:section"/>
</op:practUc>
</sp:practUc>
</xsl:template>
<xsl:template match="h:section[h:div[@data-hdoc-type='openQuestion']]">
<sp:quest>
<op:practUcQ>
<sp:desc>
<xsl:apply-templates select="./h:div[@data-hdoc-type = 'openQuestion']"/>
</sp:desc>
<sp:hint>
<xsl:apply-templates select="./h:div[@data-hdoc-type = 'hint']"/>
</sp:hint>
<xsl:if test="h:div[@data-hdoc-type = 'solution']">
<sp:sol>
<op:pb>
<xsl:apply-templates select="./h:div[@data-hdoc-type = 'solution']"/>
</op:pb>
</sp:sol>
</xsl:if>
</op:practUcQ>
</sp:quest>
</xsl:template>
<xsl:template match="h:div[@data-hdoc-type = 'openQuestion']">
<op:res>
<xsl:apply-templates select="./*"/>
</op:res>
</xsl:template>
<xsl:template match="h:div[@data-hdoc-type = 'hint']">
<op:res>
<xsl:apply-templates select="./*"/>
</op:res>
</xsl:template>
<xsl:template match="h:section[parent::h:section[@data-hdoc-type='exercise']]/h:div[@data-hdoc-type = 'solution']" priority="1">
<!-- TODO add warning/ect... blocks -->
<sp:info>
<op:pbTi>
<xsl:if test="string-length(./h:h6/text()) > 0">
<sp:title>
<xsl:value-of select="./h:h6"/>
</sp:title>
</xsl:if>
</op:pbTi>
<op:res>
<xsl:apply-templates select="./*"/>
</op:res>
</sp:info>
</xsl:template>
<!-- MCQ-->
<xsl:template match="h:section[h:div[@data-hdoc-type = 'question']]">
......
......@@ -58,6 +58,8 @@
<value>explanation</value>
<value>explanation-choice-correct</value>
<value>explanation-choice-incorrect</value>
<value>openQuestion</value>
<value>hint</value>
</choice>
</attribute>
</optional>
......
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