3 - Génération de squelettes

Le but de cet exercice est de faire un un script pour générer des squelettes: C, latex, ou shell. Manipulation des variables, switch, fonction, redirections dans des fichiers.

Énoncé:

Bien souvent lorsque l’on crée des fichier C, shell, ou encore latex, on a toujours besoin du même squelette qu’il est fastidieux de retaper à chaque création de fichier. Le but de cet exercice est de faire un script qui vous permette de générer des squelettes personnalisés et contenant l’ensemble des informations de bases spécifiques à chaque langage.

Exemple de squelette C pour monfichier.c:

/**
 *
 * @filename monfichier.c
 * @date 2019-10-18 15:13
 * @author Prenom Nom <prenom.nom@enseirb-matmeca.fr>
 * @brief ...
 *
 */
#include <stdlib.h>
#include <stdio.h>

#define _NB_MIN_PARAMS_ 1

void print_usage( char *argv[] ) {
	fprintf( stderr, "Usage: %s ....\n", argv[0] );
	return;
}

int main( int argc, char *argv[] )
{
	if ( argc < _NB_MIN_PARAMS_ ) {
		print_usage( argv );
		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
}

Exemple de squelette tex pour monfichier.tex:

%%
%% @filename monfichier.tex
%% @date 2019-10-18 15:13
%% @author Prenom Nom <prenom.nom@enseirb-matmeca.fr>
%% @brief ...
%%
\documentclass[a4paper, draft]{article}

\usepackage[utf8]{inputenc}
\usepackage[french]{babel} 

% Figures
\usepackage{graphicx}
\graphicspath{{./img/}}

% Math
\usepackage{amsmath, amssymb}
\newtheorem{defi}{Définition}

% Algortihmes
\usepackage[vlined,lined,linesnumbered,boxed,french]{algorithm2e}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator{\myfunc}{myfunc}
\DeclareMathOperator*{\sign}{sign}
\DeclareMathOperator*{\imwh}{width}
\DeclareMathOperator*{\imht}{height}

% Extra
\usepackage[left=3cm,right=3cm,top=2cm,bottom=2cm]{geometry}
\usepackage{url}

\begin{document}


\end{document}

Exemple de squelette shell pour monfichier.sh:

#!/bin/sh/env bash
#
# @filename monfichier.sh
# @date 2019-10-18 15:13
# @author Prenom Nom <prenom.nom@enseirb-matmeca.fr>
# @brief ...
#

CMD=$( basename $0 )
nbminparams=1

usage()
{
	echo "Usage: $CMD ..."
}

if [ $# -lt $nbminparams ]
then
	usage
	exit 1
fi
  1. Commençons par écrire une première version de notre script utilisant seulement la fonction echo pour un des trois templates présentés ici.

Le nom de fichier sera passé en paramètre.

./skeleton.sh monfichier
  1. Vérifier le nombre de paramètres du script et faite appel à une fonction usage décrivant le comportement si il y a une erreur.

  2. On souhaite maintenant générer plusieurs types de squelettes. Déplacer la génération du script initial dans une fonction. On a va créer une fonction par template, donc par type de fichier.

  3. améliorer le script en mettant en place un aiguillage (case) permettant d’appeler la bonne fonction en fonction du type du fichier.

./skeleton monfichier tex

devra par exemple générer le template latex.

  1. On remarque que l’entête est très similaire d’un format de fichier à l’autre. Il s’agit toujours des mêmes lignes. Factoriser le code à l’aide d’une fonction qui prend en paramètre le symbole qui différencie chacune des entêtes.

  2. On peut aller plus loin dans la factorisation et l’automatisation du code.

    • Le nom de fichier de l’entête par exemple doit être défini par une variable de telle sorte qu’il contienne systématiquement le bon nom.
    • La date peut être remplacer par un appel à la commande date avec le bon format de sortie.