Blame view

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