Commit edb10d7d authored by Guillaume Huard's avatar Guillaume Huard
Browse files

Doc complete, reste à push sur Caséine

parent fa98cbb9
# Les commentaires en org démarrent par un #, les commandes par un #+
* Réglages :noexport:
# Réglages de la présentation de la description de l'activité générée à partir de ce fichier
#+OPTIONS: num:nil
#+OPTIONS: toc:nil
#+OPTIONS: html-postamble:nil
#+OPTIONS: html-preamble:nil
#+LANGUAGE: fr
# Réglages pour la génération des fichiers de l'activité
#+EXPORT_EXCLUDE_TAGS: noexport
#+PROPERTY: header-args :eval never :mkdirp yes :exports none
# Identifiant de l'activité VPL (pour le push)
#+BEGIN_SRC txt :tangle Hello/vpl_id.txt
26126
#+END_SRC
# Description de l'activité
Écrire un programme en bash qui affiche ='Hello world !'=.
#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases
# On initialise une table de hachage vide
my $cases = {};
#+END_SRC
* Hello world
Écrire un programme qui affiche ='Hello world !'=.
# Solution
#+BEGIN_SRC shell :tangle Hello/cf/hello_world.sh
echo "Hello world !"
#+END_SRC
# Fichier de cas de test
#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases
{
"hello_world.sh" => {
tests => {
test_1 => { show => 1, output => "Hello world !" }
}
#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases :output append
# Ajout du premier cas de test
$cases->{"hello_world.sh"} = {
tests => {
test_1 => { show => 1, output => "Hello world !" }
}
}
};
#+END_SRC
* Salut monde
Écrire un programme qui affiche ='Salut monde !'=.
#+NAME: solution_salut
#+BEGIN_SRC shell :tangle Hello/cf/salut_monde.sh
echo "Salut monde !"
#+END_SRC
#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases :output append :noweb yes
# l'opérateur q{} marcherait aussi, mais le 'here document' avec quotes est la
# forme d'inclusion la moins sensible à la présence de caractères d'échappement
my $solution = <<'END';
<<solution_salut>>
END
# Ajout du second cas de test
$cases->{"salut_monde.sh"} = {
solution => $solution,
tests => {
test_1 => {}
}
};
#+END_SRC
* Epilogue :noexport:
#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases :output append
# suppression d'un ou plusieurs cas de test, utile lors du developpement de l'activité
# delete($cases->{"hello_world.sh"});
# delete($cases->{"salut_monde.sh"});
$cases;
#+END_SRC
......@@ -48,7 +48,7 @@ d'écrire un programme qui affiche ="Hello world !"=.
,#+END_SRC
# Description de l'activité
Écrire un programme en bash qui affiche ='Hello world !'=.
Écrire un programme qui affiche ='Hello world !'=.
# Solution
,#+BEGIN_SRC shell :tangle Hello/cf/hello_world.sh
......@@ -177,3 +177,135 @@ duplication de certaines parties du texte. Cela repose essentiellement sur les i
- une activité est nommée à l'aide de la propriété =#+NAME= ;
- un bloc de code ayant pour argument =:noweb yes= peut inclure un bloc de code nommé s'il
contient, seule sur une ligne, une référence de la forme suivante : =<<nom>>=
- il est possible, à l'aide de tags, de ne pas inclure certaines sections dans l'export de la
description. Cela permet de profiter du /folding/ d'=emacs= pour toutes les parties du fichier de
description.
Tout ceci est illustré par l'exemple =Hello world= étendu avec un cas de test en français :
#+BEGIN_SRC org :exports code
,* Réglages :noexport:
,#+OPTIONS: num:nil
,#+OPTIONS: toc:nil
,#+OPTIONS: html-postamble:nil
,#+OPTIONS: html-preamble:nil
,#+LANGUAGE: fr
,#+EXPORT_EXCLUDE_TAGS: noexport
,#+PROPERTY: header-args :eval never :mkdirp yes :exports none
,#+BEGIN_SRC txt :tangle Hello/vpl_id.txt
26126
,#+END_SRC
,#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases
# On initialise une table de hachage vide
my $cases = {};
,#+END_SRC
,* Hello world
Écrire un programme qui affiche ='Hello world !'=.
,#+BEGIN_SRC shell :tangle Hello/cf/hello_world.sh
echo "Hello world !"
,#+END_SRC
,#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases :output append
# Ajout du premier cas de test
$cases->{"hello_world.sh"} = {
tests => {
test_1 => { show => 1, output => "Hello world !" }
}
};
,#+END_SRC
,* Salut monde
Écrire un programme qui affiche ='Salut monde !'=.
,#+NAME: solution_salut
,#+BEGIN_SRC shell :tangle Hello/cf/salut_monde.sh
echo "Salut monde !"
,#+END_SRC
,#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases :output append :noweb yes
# l'opérateur q{} marcherait aussi, mais le 'here document' avec quotes est la
# forme d'inclusion la moins sensible à la présence de caractères d'échappement
my $solution = <<'END';
<<solution_salut>>
END
# Ajout du second cas de test
$cases->{"salut_monde.sh"} = {
solution => $solution,
tests => {
test_1 => {}
}
};
,#+END_SRC
,* Epilogue :noexport:
,#+BEGIN_SRC perl :tangle Hello/ef/vpl_evaluate.cases :output append
# suppression d'un ou plusieurs cas de test, utile lors du developpement de l'activité
# delete($cases->{"hello_world.sh"});
# delete($cases->{"salut_monde.sh"});
$cases;
,#+END_SRC
#+END_SRC
Ce fichier permet de générer la description en html de l'activité ainsi que les fichiers suivants :
- dans =Hello/ef=, =vpl_evaluate.cases= :
#+BEGIN_SRC perl :export code
# On initialise une table de hachage vide
my $cases = {};
# Ajout du premier cas de test
$cases->{"hello_world.sh"} = {
tests => {
test_1 => { show => 1, output => "Hello world !" }
}
};
# l'opérateur q{} marcherait aussi, mais le 'here document' avec quotes est la
# forme d'inclusion la moins sensible à la présence de caractères d'échappement
my $solution = <<'END';
echo "Salut monde !"
END
# Ajout du second cas de test
$cases->{"salut_monde.sh"} = {
solution => $solution,
tests => {
test_1 => {}
}
};
# suppression d'un ou plusieurs cas de test, utile lors du developpement de l'activité
# delete($cases->{"hello_world.sh"});
# delete($cases->{"salut_monde.sh"});
$cases;
#+END_SRC
- dans =Hello/cf=, =hello_world.sh= :
#+BEGIN_SRC shell :export code
echo "Hello world !"
#+END_SRC
- dans =Hello/cf=, =salut_monde.sh= :
#+BEGIN_SRC shell :export code
echo "Salut monde !"
#+END_SRC
* Fichiers externes
Il n'est pas toujours possible d'inclure l'intégralité d'une activité dans un seul fichier,
quand celle-ci est trop grosse ou quand elle dépend de fichiers provenants de plusieurs projets
logiciels distincts. Il est alors possible de fournir les fichiers de l'activité =X= dans un
répertoire =X_files= qui peut être fabriqué par un bloc de code contenu dans =X.org=. Dans ce cas,
ce bloc de code devra être exécutable (argument =:eval yes=). Le répertoire =X_files= doit suivre la
même organisation que le répertoire =X= généré par =X.org=, autrement dit, ses fichiers doivent se
trouver dans les bons sous répertoires =ef=, =cf=, =rf=, =hf=.
A titre d'exemple, dans l'activité =Hello=, plutôt que d'include la solution du cas de test
="hello_world.sh"= dans =Hello.org=, celle ci aurait pu être récupérée de la manière suivante :
#+BEGIN_SRC org :exports code
,#+BEGIN_SRC shell :eval yes
mkdir -p Hello_files/cf
cp Chemin_vers_mes_fichiers_solution/hello_world.sh Hello_files/cf
,#+END_SRC
#+END_SRC
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