Commit 60e6b85f253711bfebc02656bb69b57c8e76c813

Authored by root
1 parent b4cb286b66
Exists in master

ajout

Showing 1 changed file with 92 additions and 0 deletions

  1 +#!/bin/bash
  2 +
  3 +# Activer pour le debug
  4 +#set -x
  5 +
  6 +function preRequis {
  7 + for arg in $@; do
  8 + if ! which $arg >/dev/null; then
  9 + echo "La commande $arg n'est pas installée !!!"
  10 + echo "Fin du script."
  11 + exit 1
  12 + fi
  13 + done
  14 +}
  15 +
  16 +PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
  17 +
  18 +preRequis egrep sed
  19 +
  20 +# Si le nombre d'arguments passé au script est inférieur à 1
  21 +# On quitte le script immédiatement.
  22 +if [ $# -lt 1 ]; then
  23 + echo "Usage: `basename $0` mot1 [mot2 mot3 ...]"
  24 + exit 1
  25 +fi
  26 +
  27 +# Liste des voyelles
  28 +VOY="aeiouyàâäéèêëîïôöùûü"
  29 +# Liste des consonnes
  30 +CONS="zrtpqsdfghjklmwxcvbnç"
  31 +# Liste des groupes de lettres insécables
  32 +GR="bl cl fl gl pl br cr dr fr gr pr tr vr ch ph gn th"
  33 +
  34 +for MOT in $@; do
  35 +
  36 + # On convertit toutes les majuscules en minuscules
  37 + _MOT=$(tr "[A-Z]" "[a-z]" <<< "$MOT")
  38 +
  39 + # On exécute la première règle de découpe des syllabes
  40 + # avec les groupes de lettres insécables.
  41 + for _GR in $(echo $GR); do
  42 + _MOT=$(sed "s/$_GR/-$_GR/g" <<< "$_MOT")
  43 + done
  44 +
  45 + # Boucle infinie
  46 + while :; do
  47 +
  48 + # Une consonne placée entre deux voyelles introduit une nouvelle syllabe.
  49 + if SYL=$(grep -E -o "[$VOY]{1}[$CONS]{1}[$VOY]{1}" <<< "$_MOT"); then
  50 + for __SYL in $SYL; do
  51 + _SYL=$(sed -r "s/^(.)(.{2})$/\1-\2/" <<< "$__SYL")
  52 + _MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT")
  53 + done
  54 + continue
  55 + fi
  56 +
  57 + # Deux consonnes placées entre deux voyelles,
  58 + # la première appartient à la syllabe précédente,
  59 + # la seconde, à la syllabe suivante.
  60 + if SYL=$(grep -E -o "[$VOY]{1}[$CONS]{2}[$VOY]{1}" <<< "$_MOT"); then
  61 + for __SYL in $SYL; do
  62 + _SYL=$(sed -r "s/^(.{2})(.{2})$/\1-\2/" <<< "$__SYL")
  63 + _MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT")
  64 + done
  65 + continue
  66 + fi
  67 +
  68 + # Quand il y a trois consonnes ou voyelles consécutives à l’intérieur d’un mot,
  69 + # ordinairement les deux premières terminent une syllabe,
  70 + # l’autre commence une nouvelle syllabe.
  71 + if SYL=$(grep -E -o "[$CONS]{3}|[$VOY]{3}" <<< "$_MOT"); then
  72 + for __SYL in $SYL; do
  73 + _SYL=$(sed -r "s/^(.{2})(.)$/\1-\2/" <<< "$__SYL")
  74 + _MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT")
  75 + done
  76 + continue
  77 + fi
  78 +
  79 + # On quitte la boucle infinie si aucune des conditions précédentes n'est vraie
  80 + break
  81 +
  82 + done
  83 +
  84 + # On corrige quelques erreurs
  85 + _MOT=$(sed "s/^-//" <<< "$_MOT")
  86 + _MOT=$(sed -r "s/^(.*)-([$VOY]{1})$/\1\2/" <<< "$_MOT")
  87 + # On affiche le résultat
  88 + echo -e "$MOT => $_MOT"
  89 +
  90 +done
  91 +
  92 +exit 0