public interface Boxable {

    /**
     * Retourne la largeur de la boîte
     * 
     * @return la largeur exprimée en nombre de caractères
     **/
    public int getWidth();

    /**
     * Retourne la largeur maximale de cette boîte
     *
     * @return la largeur maximale exprimée en nombre de caractères
     **/
    public int getMaxWidth();

    /**
     * Retourne le contenu textuel de la boîte.
     * 
     * @return la chaîne de caractères représentant le contenu textuel.
     **/
    public String getText();

    /**
     * Détermine si une boîte peut être agrandie.
     * 
     * Une boîte peut être agrandie si elle est redimensionnable et si
     * sa largeur actuelle est (strictement) plus petite que sa
     * largeur maximale.
     *
     * @return true s'il est possible d'agrandir la boîte.
     **/
    public boolean isResizable();

    /**
     * Agrandit la boîte d'une largeur donnée en respectant la
     * contrainte de largeur maximale.
     *
     * L'élargissement se fait en agrandissant le contenu de la boîte
     * (par exemple en agrandissant l'espace entre les lettres).
     *
     * Si la boîte ne peut pas être élargie (this.isResizable() est
     * faux), cette méthode ne modifie pas la largeur de la boite et
     * renvoie 0. Sinon la boîte est élargie autant que possible (tout
     * en respectant la contrainte de largeur maximale) et la fonction
     * renvoie la largeur ajoutée (c.-à-d. le nombre de caractères
     * dont la largeur de la boîte a été augmentée).
     *
     * @param width l'agrandissement demandé
     * @return la largeur ajoutée à la boîte
     */
    public int extend(int width);
}
