Example #1
0
            public void Klopt(string regel, string empty, string[] verwachtResultaat)
            {
                var opgeknipt = SplitRegels.KnipInWoorden(regel).ToList();

                Assert.AreEqual(verwachtResultaat.Length, opgeknipt.Count);
                verwachtResultaat.Select((r, i) => new { r, i }).ToList()
                .ForEach(r => Assert.AreEqual(verwachtResultaat[r.i], r.r));
            }
Example #2
0
        private static IEnumerable <string> KnipInWoorden(Regel regel)
        {
            var firstMatch = true;

            foreach (var woord in SplitRegels.KnipInWoorden(regel.Tekst))
            {
                if (firstMatch)
                {
                    yield return($"{regel.Nummer} {woord}");
                }
                else
                {
                    yield return(woord);
                }
                firstMatch = false;
            }
        }
        public static SaveFileHandling LoadFromWorkingFile(string input)
        {
            var output = new SaveFileHandling();

            if (input.Equals(""))
            {
                return(output);
            }

            var inputstring   = SplitRegels.Split(input);
            var liturgieLijst = new List <string>();
            var i             = 0;

            for (; i < inputstring.Length; i++)
            {
                if (inputstring[i].StartsWith("<"))
                {
                    break;
                }
                if (!inputstring[i].Equals(""))
                {
                    liturgieLijst.Add(inputstring[i]);
                }
            }
            output.Liturgie = liturgieLijst.ToArray();
            for (; i < inputstring.Length; i++)
            {
                if (inputstring[i].Equals(""))
                {
                    continue;
                }
                var inputstringparts = inputstring[i].Split('<', '>');
                switch (inputstringparts[1])
                {
                case "Voorganger:":
                    output.Voorganger = inputstringparts[2];
                    break;

                case "1e Collecte:":
                    output.Collecte1e = inputstringparts[2];
                    break;

                case "2e Collecte:":
                    output.Collecte2e = inputstringparts[2];
                    break;

                case "Lezen":
                    var lezenLijst = new List <string>();
                    for (var j = 2; j < inputstringparts.Length; j += 2)
                    {
                        lezenLijst.Add(inputstringparts[j]);
                    }
                    output.Lezen = lezenLijst.ToArray();
                    break;

                case "Tekst":
                    var tekstLijst = new List <string>();
                    for (var j = 2; j < inputstringparts.Length; j += 2)
                    {
                        tekstLijst.Add(inputstringparts[j]);
                    }
                    output.Tekst = tekstLijst.ToArray();
                    break;
                }
            }

            return(output);
        }
Example #4
0
        /// <summary>
        /// Vul de liedtekst over meerdere slides
        /// </summary>
        public static SlideVuller InvullenLiedTekst(string tempinhoud, int regelsPerLiedSlide, bool visualiseerAfbreking)
        {
            var returnValue = new SlideVuller();
            var regels      = SplitRegels.Split(tempinhoud);

            // We moeten goed opletten bij het invullen van een liedtekst op een slide:
            // -Het mogen niet te veel regels zijn (instellingen beperken dat)
            // -We willen niet beginregels verspillen aan witruimte
            // -Tussenwitregels willen we wel respecteren
            // -Als we afbreken in een aaneengesloten stuk tekst moeten we kijken of we toch niet
            //  naar een voorgaande witruimte kunnen afbreken

            // kijk waar we gaan beginnen. Sla begin witregels over
            var beginIndex = regels.Select((r, i) => new { Regel = r, Index = i })
                             .Where(r => !SkipRegel(r.Regel))
                             .Select(r => (int?)r.Index) // nullable int zodat als we niets vinden we dat weten
                             .FirstOrDefault();

            if (!beginIndex.HasValue)
            {
                return(returnValue);  // er is niets over
            }
            // kijk waar we eindigen als we instellinge-aantal tellen vanaf ons startpunt
            var eindIndex = regels.Select((r, i) => new { Regel = r, Index = i })
                            .Where(r => r.Index >= beginIndex && (r.Index - beginIndex) < regelsPerLiedSlide && r.Regel != NieuweSlideAanduiding)
                            .Select(r => r.Index) // eindindex is er altijd als er een begin is
                            .LastOrDefault();

            var optimaliseerEindIndex = eindIndex;

            // Kijk of we niet beter op een eerdere witregel kunnen stoppen
            if (!SkipRegel(regels[optimaliseerEindIndex]) && regels.Length != optimaliseerEindIndex + 1)
            {
                var tryOptimaliseerEindIndex = regels.Select((r, i) => new { Regel = r, Index = i })
                                               .Skip(beginIndex.Value).Take(optimaliseerEindIndex + 1 - beginIndex.Value)
                                               .OrderByDescending(r => r.Index)
                                               .Where(r => SkipRegel(r.Regel))
                                               .Select(r => (int?)r.Index)
                                               .FirstOrDefault();
                if (tryOptimaliseerEindIndex.HasValue && tryOptimaliseerEindIndex.Value > beginIndex.Value)
                {
                    optimaliseerEindIndex = tryOptimaliseerEindIndex.Value;
                }
            }

            // haal regels van het vers op
            var insertLines = regels
                              .Skip(beginIndex.Value).Take(optimaliseerEindIndex + 1 - beginIndex.Value)
                              .Select(r => (r ?? "").Trim()).ToList();

            // plaats de in te voegen regels in het tekstveld (geen enter aan het einde)
            returnValue.Invullen = string.Join("", insertLines.Select((l, i) => l + (i + 1 == insertLines.Count ? "" : "\r\n")));

            var overStart = optimaliseerEindIndex + 1;

            if (overStart >= regels.Length)
            {
                return(returnValue);
            }
            if (regels[overStart] == NieuweSlideAanduiding)
            {
                overStart++;
            }
            var overLines = regels.Skip(overStart).ToList();

            // afbreek teken tonen alleen als een vers doormidden gebroken is
            if (visualiseerAfbreking && !SkipRegel(insertLines.Last()) && overLines.Any() && !SkipRegel(overLines.First()))
            {
                returnValue.Invullen += $"\r\n{OnderbrekingAanduiding}";
            }

            // Geef de resterende regels terug
            returnValue.Over = string.Join("", overLines.Select((l, i) => l + (i + 1 == overLines.Count ? "" : "\r\n")));
            return(returnValue);
        }