-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLetra.cs
119 lines (101 loc) · 3.63 KB
/
Letra.cs
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System;
namespace Textuo
{
public static class Letra
{
public const char NoVálida = '\0';
private static bool TieneTilde(this char letra)
{
switch(letra)
{
case 'á':
case 'é':
case 'í':
case 'ó':
case 'ú':
return true;
default:
return false;
}
}
private static bool EsVocal(this char letra, out TipoDeVocal tipoDeVocal)
{
if(letra != NoVálida)
{
tipoDeVocal = TipoDeVocal(letra);
return EsVocal(letra);
}
tipoDeVocal = Textuo.TipoDeVocal.Ninguna;
return false;
}
private static bool EsVocal(this char letra) => "aáeéiíoóuúü".IndexOf(letra) >= 0;
public static TipoDeVocal TipoDeVocal(this char letra) =>
"iíuúü".IndexOf(letra) >= 0
? Textuo.TipoDeVocal.Cerrada
: EsVocal(letra)
? Textuo.TipoDeVocal.Abierta
: Textuo.TipoDeVocal.Ninguna;
public static bool EsLetra(this char letra)
{
if(letra >= 'a' && letra <= 'z' || letra == 'ñ')
return true;
if(letra == 'á' || letra == 'é' || letra == 'í' || letra == 'ó' || letra == 'ú' || letra == 'ü')
return true;
return false;
}
public static bool EsGrupoConsonántico(this (char letraA, char letraB) letras, Configuración configuración = null)
{
if(letras.letraB == 'l' || letras.letraB == 'r')
{
switch(letras.letraA)
{
// Grupos br, cr, kr, dr, fr, gr, pr y tr,
// bl, cl, kl, dl, fl, gl, pl y tl
case 'b':
case 'c':
case 'd':
case 'f':
case 'g':
case 'k':
case 'p':
return true;
case 't':
return (letras.letraB == 'l')
? configuración?.TratarTlComoGrupoConsonántico == true
: true;
// Grupos ll y rr
case 'l':
case 'r':
return true;
}
}
else if(letras == ('c','h') ||
letras == ('q','u'))
return true;
return false;
}
public struct Info
{
// Última letra leída, o bien 'Letra.NoVálida' si no se ha podido leer.
public char Letra;
// Indica si la última letra leída es una vocal.
public bool EsVocal;
// Indica si la última letra leída es una vocal acentuada.
public bool EstáAcentuada;
// Tipo de la última vocal leída, o bien 'Vocal.Ninguna' si no se ha podido leer o no es una vocal.
public TipoDeVocal TipoDeVocal;
public Info(char letra)
{
Letra = letra;
EsVocal = letra.EsVocal(out TipoDeVocal);
EstáAcentuada = letra.TieneTilde();
}
}
}
public enum TipoDeVocal
{
Ninguna,
Cerrada,
Abierta,
}
}