private void loadLesson(SyllablesLesson lesson) { var syllables = lesson.GetSyllables(); int i = 0; var labels = GetLinkLabels(); lsbWords.Items.Clear(); foreach (var lkl in labels) { lkl.Text = ""; } foreach (var syllable in syllables) { var lkl = labels[i]; lkl.Visible = true; lkl.Text = syllable; var words = lesson.GetWords(syllable); if (words?.Any() == true) { lsbWords.Items.AddRange(words); } i++; } }
/// <summary> /// Retorna um conjunto de lições. /// </summary> /// <param name="letters">consoantes que serão usadas para gerar as sílabas e por sua vez as palavras</param> /// <param name="randomize">indica para embaralhar a sequencia, funciona apenas quando "letters" é nulo</param> /// <param name="maxLessons">indica o número máximo de lições. Funciona quando o parametro "letters" é nulo</param> /// <param name="maxWordsPerLesson">número máximo de lições que devem ser retornadas. Só funciona quando o parametro "letters" é nulo</param> /// <returns>conjunto de lições</returns> public List <SyllablesLesson> GetLessons(string[] letters = null, bool randomize = true, ushort maxLessons = 5, byte maxWordsPerLesson = 5) { //wm.GetLessons(consonants.Select(c=>(c == "q")?"qu":c).ToArray()); //hack: não se usa q sem u... meu querido var syllables = GetSyllables(letters ?? new string[0]).Where(i => GetRxEndsWithVowel().IsMatch(i.First())).ToArray(); if (letters?.Any() == true) { maxLessons = (ushort)letters.Count(); } Regex rxWord = new Regex(string.Join("|", letters ?? new string[0]), RegexOptions.IgnoreCase); var allWords = GetWords(Level.Hard, false, false).Where(w => letters == null || rxWord.IsMatch(w))?.ToArray(); var hackMaxLesson = letters != null ? 0 : 5; if (letters == null && randomize) { syllables = this.randomize(syllables); } if (letters == null && maxLessons > 0) { syllables = syllables.Take(maxLessons + hackMaxLesson).ToArray(); } List <SyllablesLesson> lessons = new List <SyllablesLesson>(); foreach (var i in syllables) { SyllablesLesson sl = new SyllablesLesson(); foreach (var j in i) { //h hack var words = allWords?.Where(w => RemoveAccents(w).StartsWith(j))?.ToArray(); if (words.Any() != true && !Regex.IsMatch(j, $"^h[{GetVowelRegexList()}]$", RegexOptions.IgnoreCase)) { Regex rxSyllable = new Regex($@"[{GetVowelRegexList()}sn]{j}", RegexOptions.IgnoreCase); words = allWords?.Where(w => rxSyllable.IsMatch(RemoveAccents(w)))?.ToArray(); } bool hasWords = false; if (maxWordsPerLesson > 0 && (hasWords = words?.Any() == true)) { words = words?.Take(maxWordsPerLesson)?.ToArray(); } //Corrigir match de "tra" e "ra" Lesson l = new Lesson(); l.Syllable = j; if (hasWords) { l.Words = words.ToArray(); } ; sl.Add(l); } if (sl.GetAllWords().Any()) { lessons.Add(sl); } } return(lessons.Take(maxLessons).ToList()); }