Exercice 2 : traduction partielle d'un fichier markdown en html

Principe

Un fichier au format markdown (d'extension .md) est un fichier TEXTE qui contient des informations simples pour mettre en forme le texte. Ce format de fichier se veut "compréhensible" par toute personne qui en a un peu l'habitude.

# texte avec un entete principal

un paragraphe de texte avec un texte **important**.

il peut y avoir plein de choses : liens, listes, tableaux...

Il est relativement classique de convertir un tel fichier en un fichier au format HTML affichable par un navigateur web.

Pour redonner quelques éléments sur le langage HTML vus pendant les semaines bloquées, le language HTML est un langage à balises (encore appelées tags) : <balise> et </balise>. Les balises peuvent être imbriquées :

	<balise1><balise2></balise2></balise1>

mais elles ne peuvent pas se croiser.

	<balise1><balise2></balise1></balise2>

Vous n'allez pas réaliser la traduction complète entre les deux formats. L'idée va être de lire un fichier texte, de détecter les entêtes (ou headers), les zones importantes (emphasis) à écrire en italique et les zones encore plus importantes (strong emphasis) à écrire en gras.

Un exemple de fichier markdown est donné par exemple.md.

Une traduction partielle est donnée par exemple.html.

Notes sur le travail à réaliser

Vous allez procéder en différentes étapes :

Travail préliminaire

Les entêtes commencent par un ou plusieurs caractères #. S'il n'y a qu'un seul #, c'est le titre de plus haut niveau que l'on appelle h1 en HTML. Plus il y a de #, moins le niveau est important (h2 est moins important que h1 et h6 est moins important que h5).

Dans un premier temps, vous allez vous contenter de détecter les entêtes, dans les dernières questions, vous ajouterez les balises correspondantes.

Une emphase en markdown est un texte encadré par des étoiles ou tirets simples *texte* ou _texte_ et doit être affichée en italique en html : <i>texte</i>

Une emphase forte en markdown est un texte encadré par des étoiles ou tirets doubles **texte** ou __texte__ et doit être affichée en gras (bold) en html : <b>texte</b>

Travail avec un fichier

Pour la suite de l'exercice, vous allez devoir CHOISIR un format de fichier à lire ou à écrire. Dans tous les cas, les lignes ont une longueur maximale que l'on n'atteindra pas (ce serait facile dans le cas contraire de s'arranger pour diviser les lignes trop grandes).

Le premier format de fichier est une matrice de caractères où la taille des lignes et le nombre des lignes sont fixées statiquement (à la compilation). Là encore, on supposera que les fichiers à lire et à écrire ont le bon nombre de lignes. La dernière ligne du fichier contiendra le caractère EOF.

Le second format de fichier est une liste chaînée de lignes. Le nombre de lignes est déterminé à l'exécution (dynamiquement). Si vous réussissez tous les tests, ce format vous permettra d'atteindre la note maximale.

Les opérations à réaliser avec les fichiers sont :