Commit 60e6b85f253711bfebc02656bb69b57c8e76c813
1 parent
b4cb286b66
Exists in
master
ajout
Showing 1 changed file with 92 additions and 0 deletions
syllabes.sh
View file @
60e6b85
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 |