public bool EncontroVocalicoConsonantal(string palavra) { if (!Vogais.IsVowel(0, palavra) && !Vogais.IsVowel(1, palavra)) { return(true); } else { return(false); } }
public Chave PrimeiraVogal(Chave chave) { int current = 0; while (current < chave.Origem.Length) { if (Vogais.IsVowel(current, chave.Origem)) { chave.AddMetaphoneCharacter(chave.Origem[current].ToString(), current); return(chave); } current++; } return(chave); }
public Chave UltimaVogal(Chave chave) { int current = chave.Origem.Length - 1; while (current > 0) { if (Vogais.IsVowel(current, chave.Origem)) { chave.AddMetaphoneCharacter(chave.Origem[current].ToString(), current); return(chave); } current--; } return(chave); }
public Chave RegraVogais(Chave chave) { Encontro encontro = new Encontro(); int qtdEncontros = encontro.ProximoEncontroVocalico(chave.Origem).Count(); int current = chave.Origem.Length; //if(chave.Origem[0].Equals("H")) current--; switch (current) { case 1: chave = PrimeiraVogal(chave); break; case 2: chave = PrimeiraVogal(chave); break; case 3: chave = PrimeiraVogal(chave); break; case 4: if (qtdEncontros == 0) { chave = PrimeiraVogal(chave); } break; case 5: if (qtdEncontros == 0) { if (!encontro.EncontroVocalicoConsonantal(chave.Origem)) { chave = PrimeiraVogal(chave); } else { chave = UltimaVogal(chave); } } break; case 6: if (qtdEncontros == 0) { if (!Vogais.IsVowel(chave.Origem.Length - 1, chave.Origem)) { chave = PrimeiraVogal(chave); } else { chave = UltimaVogal(chave); } } break; case 7: chave = UltimaVogal(chave); break; default: chave = UltimaVogal(chave); break; } return(chave); }
public Chave RegraConsoante(string nome) { int current = 0; Chave chave = new Chave(nome); while (current < nome.Length) { switch (nome[current]) { case 'Y': //chave.AddMetaphoneCharacter("I", current); chave.Origem = chave.Origem.Remove(current, 1); chave.Origem = chave.Origem.Insert(current, "I"); current += 1; break; case 'B': chave.AddMetaphoneCharacter("B", current); current += 1; break; case 'Ç': chave.AddMetaphoneCharacter("S", current); current += 1; break; case 'C': if (current < nome.Length - 1) { if (nome.Substring(current, 2).Equals("CH")) { if (current + 2 < nome.Length) { if (Vogais.IsVowel(current + 2, nome)) { chave.AddMetaphoneCharacter("X", current); current += 2; break; } } } } if (current < nome.Length - 1) { if (nome.Substring(current, 2).Equals("CE") || nome.Substring(current, 2).Equals("CI") || nome.Substring(current, 2).Equals("CY")) { chave.AddMetaphoneCharacter("S", current); current += 1; break; } } chave.AddMetaphoneCharacter("C", current); current += 1; break; case 'D': chave.AddMetaphoneCharacter("D", current); current += 1; break; case 'F': chave.AddMetaphoneCharacter("F", current); current += 1; break; case 'G': if (current < nome.Length - 1) { if (nome.Substring(current, 2).Equals("GE") || nome.Substring(current, 2).Equals("GI") || nome.Substring(current, 2).Equals("GY")) { chave.AddMetaphoneCharacter("J", current); current += 1; break; } } chave.AddMetaphoneCharacter("G", current); current += 1; break; case 'H': if (current == 0 && Vogais.IsVowel(current + 1, nome)) { //chave.AddMetaphoneCharacter(nome.Substring(current + 1,1), current); current += 2; break; } // somente mantém se primeira & vogal anterior ou entre 2 vogais... //else if (((current == 0) || IsVowel(current - 1,nome)) && IsVowel(current + 1,nome)) //{ // chave.AddMetaphoneCharacter("H",current); // current += 2; //} if (current - 1 > 0) { if (nome.Substring(current - 1, 2).Equals("NH") || nome.Substring(current - 1, 2).Equals("LH")) { chave.AddMetaphoneCharacter("I", current); current += 1; break; } } // também toma cuidado com 'HH' current += 1; break; case 'J': chave.AddMetaphoneCharacter("J", current); current += 1; break; case 'K': chave.AddMetaphoneCharacter("C", current); current += 1; break; case 'L': chave.AddMetaphoneCharacter("L", current); current += 1; break; case 'M': chave.AddMetaphoneCharacter("M", current); current += 1; break; case 'N': chave.AddMetaphoneCharacter("N", current); current += 1; break; case 'Ñ': // '�' chave.AddMetaphoneCharacter("N", current); current += 1; break; case 'P': if (current < nome.Length - 1) { if (nome.Substring(current + 1, 1).Equals("H")) { chave.AddMetaphoneCharacter("F", current); current += 2; break; } } chave.AddMetaphoneCharacter("P", current); current += 1; break; case 'Q': chave.AddMetaphoneCharacter("C", current); current += 1; break; case 'R': chave.AddMetaphoneCharacter("R", current); current += 1; break; case 'S': if (current < nome.Length - 1) { if (nome.Substring(current, 2).Equals("SH")) { chave.AddMetaphoneCharacter("X", current); current += 2; break; } } chave.AddMetaphoneCharacter("S", current); current += 1; break; case 'T': chave.AddMetaphoneCharacter("T", current); current += 1; break; case 'V': chave.Origem = chave.Origem.Remove(current, 1); chave.Origem = chave.Origem.Insert(current, "U"); current += 1; break; case 'W': chave.Origem = chave.Origem.Remove(current, 1); chave.Origem = chave.Origem.Insert(current, "U"); current += 1; break; case 'X': chave.AddMetaphoneCharacter("X", current); current += 1; break; case 'Z': chave.AddMetaphoneCharacter("S", current); current += 1; break; default: current += 1; break; } } return(chave); }