Example #1
0
        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++;
            }
        }
Example #2
0
        /// <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());
        }