Commit 5d877ca5 authored by lhommeni's avatar lhommeni

Merge conflicts avec integration tables & images

parents e0844396 4287e8fa
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
## What is Hdoc ? ## What is Hdoc ?
Please refer to the [Hdoc converter project website](http://hdoc.crzt.fr/2014/co/hdocConverter.html) Please refer to the [Hdoc converter project website](http://hdoc.crzt.fr/co/hdocConverter.html)
*Extract* *Extract*
>The aim of the project is to propose: >The aim of the project is to propose:
......
.ant-targets-mindMapping2Hdoc.ant .ant-targets-mindMapping2Hdoc.ant
result/** result/**
temp/**
ant -buildfile mindmapping_to_hdoc.ant -DinputPath samples/the_witcher.mm
Doc du pseudo langage:
======================
Idée générale:
- Le parser réalise une arborescence parfaite, en mettant le node racine en Module, les nodes suivants en unités et les feuilles en Grains.
- Un pseudo langage est définit pour modifier ce comportement de base.
Ordonnancement:
---------------
*base:* Récupération dans l'odre du fichier .mm
*langage:* #1 , #2, ... #n OU order(n) pour gérer l'ordonnancement entre les nodes d'un même père.
Gestion des balisages:
----------------------
*base:* application du comportement de base si pas de balisage
*langage:*
- #p OU p() : <p></p>
- #intro OU introduction : voir
- #conclu OU conclusion :
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="default"> <project basedir="." default="default" >
<property name="module" value="default"/> <property name="module" value="default"/>
<!-- <!--
only for the debug only for the debug
...@@ -14,25 +14,13 @@ ...@@ -14,25 +14,13 @@
<echo>----------------------------Begin of conversion----------------------------------</echo> <echo>----------------------------Begin of conversion----------------------------------</echo>
<!-- Sect Schema : only sect element --> <!-- Sect Schema : only sect element -->
<antcall target="Makehdoc"> <antcall target="Makehdoc">
<param name="myXSLT" value="sect.xsl"/> <param name="myXSLT" value="sect.xsl"/>
<param name="hdocName" value="sect"/> <param name="hdocName" value="sect"/>
</antcall> </antcall>
<!-- Div Schema : sect and div element -->
<antcall target="Makehdoc">
<param name="myXSLT" value="div.xsl"/>
<param name="hdocName" value="div"/>
</antcall>
<!-- Div Schema : sect, div and p element -->
<antcall target="Makehdoc">
<param name="myXSLT" value="threeLevel.xsl"/>
<param name="hdocName" value="three"/>
</antcall>
<delete dir="${basedir}/temp"/> <!-- For debug purposes <delete dir="${basedir}/temp"/> -->
<echo>----------------------------End of conversion----------------------------------</echo> <echo>----------------------------End of conversion----------------------------------</echo>
</target> </target>
...@@ -56,9 +44,9 @@ ...@@ -56,9 +44,9 @@
<mkdir dir="${basedir}/temp/${hdocName}/META-INF"/> <mkdir dir="${basedir}/temp/${hdocName}/META-INF"/>
<copy file="${basedir}/mimetype" tofile="${basedir}/temp/${hdocName}/mimetype"/> <copy file="${basedir}/mimetype" tofile="${basedir}/temp/${hdocName}/mimetype"/>
<!-- create the container file with an XSLT transformation --> <!-- create the container file with an XSLT transformation -->
<xslt in="${basedir}/${inputPath}" out="${basedir}/temp/${hdocName}/META-INF/container.xml" xslresource="${basedir}/xslt/makeContainer.xsl"/> <xslt classpath="lib/saxon9he.jar" in="${basedir}/${inputPath}" out="${basedir}/temp/${hdocName}/META-INF/container.xml" xslresource="${basedir}/xslt/makeContainer.xsl"/>
<!-- create the file which contains the freemind data converted--> <!-- create the file which contains the freemind data converted-->
<xslt in="${basedir}/${inputPath}" out="${basedir}/temp/${hdocName}/content.xml" xslresource="${basedir}/xslt/${myXSLT}"/> <xslt classpath="lib/saxon9he.jar" in="${basedir}/${inputPath}" out="${basedir}/temp/${hdocName}/content.xml" xslresource="${basedir}/xslt/${myXSLT}"/>
<!-- zipping files as the hdoc format --> <!-- zipping files as the hdoc format -->
<zip destfile="${resultFile}/hdoc/${hdocName}.hdoc" <zip destfile="${resultFile}/hdoc/${hdocName}.hdoc"
......
<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1449485059502" ID="ID_1970904157" MODIFIED="1449733283013">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
~ The Witcher 3 ~
</p>
</body>
</html>
</richcontent>
<node CREATED="1449485120501" ID="ID_285036978" MODIFIED="1449486395915" POSITION="right" TEXT="#1 Acte I">
<attribute NAME="order" VALUE="1"/>
<node CREATED="1449485132689" ID="ID_1708921691" MODIFIED="1449485148622" TEXT="Quetes"/>
<node CREATED="1449485269697" ID="ID_1301635939" MODIFIED="1449485272519" TEXT="Lieux">
<node CREATED="1449485274196" ID="ID_238813411" MODIFIED="1449485276580" TEXT="Novigrad"/>
</node>
</node>
<node CREATED="1449485258730" ID="ID_1761718607" MODIFIED="1449486226347" POSITION="left" TEXT="#2 Acte II">
<node CREATED="1449485281338" ID="ID_265132376" MODIFIED="1449485282862" TEXT="Lieux">
<node CREATED="1449485287639" ID="ID_1277197999" MODIFIED="1449485295018" TEXT="Skellige"/>
</node>
</node>
<node CREATED="1449485406760" ID="ID_509667816" MODIFIED="1449486233215" POSITION="right" TEXT="#3 Personnages importants">
<node CREATED="1449485412886" ID="ID_1349182688" MODIFIED="1449486653689" TEXT="Siri">
<attribute NAME="anchor" VALUE="siri"/>
<node CREATED="1449485527735" ID="ID_56403828" MODIFIED="1449485538397" TEXT="#p La fille adoptive de Geralt"/>
</node>
<node CREATED="1449485417061" ID="ID_337025738" MODIFIED="1449485592055" TEXT="Triss">
<node CREATED="1449486658368" ID="ID_454465874" MODIFIED="1449486667193" TEXT="#a siri"/>
</node>
<node CREATED="1449485429136" ID="ID_1500938933" MODIFIED="1449485431782" TEXT="Yennefer"/>
</node>
<node CREATED="1449485926526" ID="ID_289476678" MODIFIED="1449486753624" POSITION="left" TEXT="Sc&#xe9;nario">
<node CREATED="1449485946398" ID="ID_596698657" MODIFIED="1449734206316" TEXT="#p Mon personnage bien a&#xee;m&#xe9; attaque tous les monstres alentours pour de l&apos;argent"/>
<node CREATED="1449486713098" ID="ID_983701334" MODIFIED="1449486715515" TEXT="#intro"/>
<node CREATED="1449486720318" ID="ID_737906523" MODIFIED="1449486722975" TEXT="#conclu"/>
<node CREATED="1449486747017" ID="ID_1777634105" MODIFIED="1449486750554" TEXT="#mcq"/>
</node>
</node>
</map>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" xmlns="http://www.utc.fr/ics/hdoc/xhtml" xmlns:utc="http://www.utc.fr/ics/hdoc/xhtml"
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" <!-- This is wrong -> xpath-default-namespace="http://www.utc.fr/ics/hdoc/xhtml"-->
xmlns="http://www.utc.fr/ics/hdoc/xhtml"
>
<xsl:output method="xml" indent="yes"/> <xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="map"> <xsl:template match="map">
<xsl:processing-instruction name="oxygen"> <xsl:processing-instruction name="oxygen">
RNGSchema="http://scenari.utc.fr/hdoc/schemas/xhtml/hdoc1-xhtml.rng" type="xml" RNGSchema="http://scenari.utc.fr/hdoc/schemas/xhtml/hdoc1-xhtml.rng" type="xml"
</xsl:processing-instruction> </xsl:processing-instruction>
<html> <html>
<head> <head>
<xsl:apply-templates mode="header"></xsl:apply-templates> <xsl:apply-templates mode="header"/>
</head> </head>
<body> <body>
<xsl:apply-templates/> <xsl:apply-templates/>
</body> </body>
</html> </html>
</xsl:template> </xsl:template>
<xsl:template match="node[1]" mode="header"> <xsl:template match="node[1]" mode="header">
<title><xsl:value-of select="@TEXT"/></title> <title>
<meta charset="utf-8"/> <xsl:value-of select="@TEXT"/><xsl:value-of select="richcontent"></xsl:value-of>
<meta name="author" content=""/> </title>
<meta charset="utf-8"/>
<meta name="author" content=""/>
</xsl:template> </xsl:template>
<!-- Default behavior for node -->
<xsl:template match="node"> <xsl:template match="node">
<xsl:element name="section" > <xsl:element name="section">
<header> <header>
<h1> <h1>
<xsl:value-of select="@TEXT"/> <xsl:value-of select="@TEXT"/>
<xsl:value-of select="richcontent"/>
</h1> </h1>
</header> </header>
<xsl:apply-templates/> <xsl:apply-templates select="node"/>
</xsl:element> </xsl:element>
</xsl:template> </xsl:template>
<xsl:template match="node[not(node)]" priority="5"> <!-- Behavior when node has no children -->
<xsl:element name="section" > <xsl:template
match="node[not(node)]|node[contains(//@TEXT, '#p')]|node[contains(//@TEXT, '#a')]"
priority="1">
<xd:doc xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl">
<xd:desc>
<xd:p></xd:p>
</xd:desc>
</xd:doc>
<xsl:element name="section">
<xsl:attribute name="data-hdoc-type">unit-of-content</xsl:attribute> <xsl:attribute name="data-hdoc-type">unit-of-content</xsl:attribute>
<header> <header>
<h1> <h1>
<xsl:value-of select="@TEXT"/> <xsl:value-of select="@TEXT"/>
<xsl:value-of select="richcontent"/>
</h1> </h1>
</header> </header>
<xsl:apply-templates/> <!--<xsl:apply-templates/>-->
</xsl:element> </xsl:element>
</xsl:template> </xsl:template>
<xsl:template match="node[contains(@TEXT, '#p')]" priority="2">
<xsl:element name="p">
<xsl:value-of select="utc:string-remove-all(@TEXT, '#p ')"/>
</xsl:element>
</xsl:template>
<xsl:template match="richcontent"/> <xsl:template match="node[contains(@TEXT, '#a')]" priority="2">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>#</xsl:text>
<xsl:value-of select="utc:string-remove-all(@TEXT, '#a ')"/>
</xsl:attribute>
<xsl:value-of select="utc:string-remove-all(@TEXT, '#a ')"/>
</xsl:element>
</xsl:template>
<xsl:template match="richcontent">
<xsl:value-of select="html/body/p"/>
</xsl:template>
<!-- Utility functions -->
<xsl:function name="utc:string-remove-all" as="xs:string">
<xsl:param name="text" as="xs:string"/>
<xsl:param name="replace" as="xs:string"/>
<!--
<xsl:call-template name="string-remove-all">
<xsl:with-param name="text" select="$text" />
<xsl:with-param name="replace" select="$replace" />
</xsl:call-template>-->
<xsl:value-of select="$text"/>
</xsl:function>
<xsl:template name="string-remove-all">
<xsl:param name="text" as="xs:string"/>
<xsl:param name="replace" as="xs:string"/>
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)"/>
<xsl:call-template name="string-remove-all">
<xsl:with-param name="text" select="substring-after($text,$replace)"/>
<xsl:with-param name="replace" select="$replace"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> </xsl:stylesheet>
...@@ -18,17 +18,6 @@ ...@@ -18,17 +18,6 @@
<antcall target="Makehdoc"> <antcall target="Makehdoc">
<param name="hdocName" value="sect"/> <param name="hdocName" value="sect"/>
</antcall> </antcall>
<!-- Div Schema : sect and div element -->
<antcall target="Makehdoc">
<param name="hdocName" value="div"/>
</antcall>
<!-- Div Schema : sect, div and p element -->
<antcall target="Makehdoc">
<param name="hdocName" value="three"/>
</antcall>
<delete dir="${basedir}/temp"/> <delete dir="${basedir}/temp"/>
<echo>----------------------------End of conversion----------------------------------</echo> <echo>----------------------------End of conversion----------------------------------</echo>
......
...@@ -36,6 +36,19 @@ ...@@ -36,6 +36,19 @@
<xslt classpath="lib/saxon9he.jar" in="input/${inputFile}" out="${tmpFolderPath}/${filename}_prepared.xml" style="${xsltFolderPath}/prepare_wiki_to_hdoc.xsl"> <xslt classpath="lib/saxon9he.jar" in="input/${inputFile}" out="${tmpFolderPath}/${filename}_prepared.xml" style="${xsltFolderPath}/prepare_wiki_to_hdoc.xsl">
<factory name="net.sf.saxon.TransformerFactoryImpl"/> <factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt> </xslt>
<!-- Prepare the ant script that will get our ressources(images )-->
<xslt classpath="lib/saxon9he.jar"
in="${tmpFolderPath}/${filename}_prepared.xml"
out="${tmpFolderPath}/${filename}_ressources.xml" style="${xsltFolderPath}/get_ressources_urls.xsl">
<factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt>
<ant antfile="${tmpFolderPath}/${filename}_ressources.xml"/>
</target> </target>
<!-- Create the hdoc structure of the new file --> <!-- Create the hdoc structure of the new file -->
...@@ -65,7 +78,11 @@ ...@@ -65,7 +78,11 @@
<copy todir="${tmpHdocResultFolderPath}/listing" > <copy todir="${tmpHdocResultFolderPath}/listing" >
<fileset dir="${hdocResultPath}/listing" includes="**"/> <fileset dir="${hdocResultPath}/listing" includes="**"/>
</copy> </copy>
<copy todir="${tmpHdocResultFolderPath}/ressources" >
<fileset dir="${hdocResultPath}/ressources" includes="**"/>
</copy>
<!-- Copy of the html file, hdoc needs "container.xml" file, not a html. The html file can be useful to the user --> <!-- Copy of the html file, hdoc needs "container.xml" file, not a html. The html file can be useful to the user -->
<copy file="${hdocResultPath}/${filename}.html" tofile="${tmpHdocResultFolderPath}/content.xml"/> <copy file="${hdocResultPath}/${filename}.html" tofile="${tmpHdocResultFolderPath}/content.xml"/>
</target> </target>
......
...@@ -44,6 +44,19 @@ ...@@ -44,6 +44,19 @@
<xslt classpath="lib/saxon9he.jar" in="${inputFile}" out="${tmpFolderPath}/${filename}_prepared.xml" style="${xsltFolderPath}/prepare_wiki_to_hdoc.xsl"> <xslt classpath="lib/saxon9he.jar" in="${inputFile}" out="${tmpFolderPath}/${filename}_prepared.xml" style="${xsltFolderPath}/prepare_wiki_to_hdoc.xsl">
<factory name="net.sf.saxon.TransformerFactoryImpl"/> <factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt> </xslt>
<!-- Prepare the ant script that will get our ressources(images )-->
<xslt classpath="lib/saxon9he.jar"
in="${tmpFolderPath}/${filename}_prepared.xml"
out="${tmpFolderPath}/${filename}_ressources.xml" style="${xsltFolderPath}/get_ressources_urls.xsl">
<factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt>
<ant antfile="${tmpFolderPath}/${filename}_ressources.xml"/>
</target> </target>
<!-- Create the hdoc structure of the new file --> <!-- Create the hdoc structure of the new file -->
...@@ -67,13 +80,23 @@ ...@@ -67,13 +80,23 @@
<!-- Applying wikipedia -> hdoc --> <!-- Applying wikipedia -> hdoc -->
<xslt classpath="lib/saxon9he.jar" in="${tmpFolderPath}/${filename}_prepared.xml" out="${hdocResultPath}/${filename}.html" style="${xsltFolderPath}/wiki_to_hdoc.xsl"> <xslt classpath="lib/saxon9he.jar" in="${tmpFolderPath}/${filename}_prepared.xml" out="${hdocResultPath}/${filename}.html" style="${xsltFolderPath}/wiki_to_hdoc.xsl">
<factory name="net.sf.saxon.TransformerFactoryImpl"/> <factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt> </xslt>
<!-- Copy listing files -->
<copy todir="${tmpHdocResultFolderPath}/listing" failonerror="false">
<fileset dir="${hdocResultPath}/listing" includes="**"/>
</copy>
<!-- Copy listing files --> <!-- Copy Tables files -->
<copy todir="${tmpHdocResultFolderPath}/listing" > <copy todir="${tmpHdocResultFolderPath}/tables" failonerror="false">
<fileset dir="${hdocResultPath}/listing" includes="**"/> <fileset dir="${hdocResultPath}/tables" includes="**"/>
</copy> </copy>
<copy todir="${tmpHdocResultFolderPath}/ressources" >
<fileset dir="${hdocResultPath}/ressources" includes="**"/>
</copy>
<!-- Copy of the html file, hdoc needs "container.xml" file, not a html. The html file can be useful to the user --> <!-- Copy of the html file, hdoc needs "container.xml" file, not a html. The html file can be useful to the user -->
<copy file="${hdocResultPath}/${filename}.html" tofile="${tmpHdocResultFolderPath}/content.xml"/> <copy file="${hdocResultPath}/${filename}.html" tofile="${tmpHdocResultFolderPath}/content.xml"/>
</target> </target>
......
MaClasse obj;
...
obj = new MaClasse(5, "bonjour");
String[] arguments = new String[10];
// ou bien :
int[][] uneMatrice = new int[4][5];
// ou encore :
int[][] quatreLignes = new int[4][];
class Object
{
public :
Object (); // Constructeur par défaut
Object (int n) : nombre(n){}; // Constructeur paramétrique
Object (const Object&); // Constructeur par recopie
~Object (); // Destructeur
int nombre;
};
int main ()
{
Object obj, *p_obj; // Appel du constructeur par défaut pour obj
p_obj=new Object(27); // Appel du constructeur paramétrique pour créer un objet pour p_obj
Object obj2(obj); // Appel du constructeur par recopie pour obj2
delete p_obj; // Appel du destructeur pour détruire l'objet contenu dans p_obj
} // Appel du destructeur pour obj et obj2
public class MaClasse
{
private int a;
private string b;
// Constructeur
public MaClasse() : this(42, "string")
{
}
// Surcharge d'un constructeur
public MaClasse(int a, string b)
{
this.a = a;
this.b = b;
}
}
// Instanciation d'un objet à l'aide du constructeur
MaClasse c = new MyClass(42, "string");
public class MaClasse
{
private static int _A;
// Constructeur statique
static MaClasse()
{
_A = 32;
}
// Constructeur standard
public MaClasse()
{
}
}
// Instanciation d'un objet à l'aide du constructeur
// juste avant l'instanciation
// Le constructeur statique est exécuté, _A prend la valeur 32
MaClasse c = new MaClasse();
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?><?oxygen RNGSchema="http://scenari.utc.fr/hdoc/schemas/xhtml/hdoc1-xhtml.rng" type="xml"?>
<html xmlns="http://www.utc.fr/ics/hdoc/xhtml">
<head>
<title>Constructeur (programmation) — Wikipédia</title>
<meta charset="utf-8"></meta>
<meta name="generator" content="HdocConverter/wikipedia"></meta>
<meta name="author" content="Wikipedia"></meta>
</head>
<body>
<section data-hdoc-type="introduction">
<header>
<h1>Introduction</h1>
</header>
<div>
<p>Un
<em>constructeur</em> est, en
<a href="http://wikipedia.org/wiki/Programmation_orient%C3%A9e_objet">programmation orientée objet</a>, une
<a href="http://wikipedia.org/wiki/Fonction_informatique">fonction</a> particulière appelée lors de l'
<a href="http://wikipedia.org/wiki/Instanciation">instanciation</a>. Elle permet d'
<a href="http://wikipedia.org/wiki/Allocation_de_m%C3%A9moire">allouer</a> la mémoire nécessaire à l'objet et d'initialiser ses
<a href="http://wikipedia.org/wiki/Attribut_(informatique)">attributs</a>.
</p>
<p>Si le langage l'autorise, la
<a href="http://wikipedia.org/wiki/Surd%C3%A9finition">surcharge</a> est possible et les constructeurs se différencient par le nombre et le type des paramètres
passés et renvoyés mais aussi par le formalisme employé. Dans de nombreux langages,
on distingue certains constructeurs en particulier :
</p>
<p>Ces deux constructeurs ont souvent une définition attribuée par défaut par le
<a href="http://wikipedia.org/wiki/Compilateur">compilateur</a>. Le constructeur par défaut n'a alors aucun effet ; le constructeur de recopie par
contre recopiera les valeurs de tous les membres de l'objet donné vers l'objet courant.
Ceci peut s'avérer particulièrement dangereux, spécialement dans le cas où des
<a href="http://wikipedia.org/wiki/Pointeur_(programmation)">pointeurs</a> sont alloués par le constructeurs et libérés par le
<a href="http://wikipedia.org/wiki/Destructeur">destructeur</a>.
</p>
</div>
</section>
<section>
<header>
<h1>En Java</h1>
</header>
<div>
<p>En
<a href="http://wikipedia.org/wiki/Java_(langage)">Java</a>,
<i>new</i> est un opérateur unaire de construction qui crée un nouvel objet ou un nouveau tableau.
</p>
<p>Pour créer un nouvel objet, le mot-clé
<i>new</i> doit être suivi d'une méthode qui soit un constructeur. Par exemple, on pourra avoir :
</p>
<object type="application/pdf" data="listing/listing1.txt"></object>
<p>si toutefois la classe
<i>MaClasse</i> a un constructeur qui possède deux paramètres : un entier et une chaîne de caractères.
</p>
<p>Pour créer un nouveau tableau, on peut par exemple écrire :</p>
<object type="application/pdf" data="listing/listing2.txt"></object>
</div>
</section>
<section>
<header>
<h1>En C++</h1>
</header>
<div>
<p>En
<a href="http://wikipedia.org/wiki/C%2B%2B">C++</a>, le constructeur est une fonction membre publique de la classe portant le même nom
que celle-ci. Il est appelé lors de la déclaration de l'objet ou lors de l'utilisation
du mot-clé
<i>new</i>. Le constructeur peut utiliser la syntaxe constructeur(argument) : variable(argument) pour initialiser les variables.
</p>
<object type="application/pdf" data="listing/listing3.txt"></object>
</div>
</section>
<section>
<header>
<h1>En C#</h1>
</header>
<div>
<p>Exemple de constructeur en
<a href="http://wikipedia.org/wiki/C_sharp">C#</a> :
</p>
<object type="application/pdf" data="listing/listing4.txt"></object>
<object type="application/pdf" data="listing/listing5.txt"></object>
<p>Il existe par ailleurs en C# des
<a href="http://wikipedia.orghttp://msdn.microsoft.com/fr-fr/library/k9x6w0hc.aspx">constructeurs statiques</a>, qui permettent d'initialiser une donnée statique et d'effectuer une action particulière
devant être effectuée une seule fois. Les constructeurs statiques sont appelés implicitement
avant qu'une instance ne soit crée. Tout appel à une classe (appel statique ou constructeur),
déclenche l'exécution du constructeur statique.
</p>
<p>Exemple d'utilisation d'un constructeur statique :</p>
<object type="application/pdf" data="listing/listing6.txt"></object>