private static ILiturgieInterpretatieBijbeltekst VerwerkAlsBijbeltekst(string[] voorOpties, IEnumerable<string> opties) { var regel = new InterpretatieBijbeltekst(); if (voorOpties.Length == 0) return null; var benamingStukken = voorOpties[0].Trim().Split(BenamingScheidingstekens, StringSplitOptions.RemoveEmptyEntries); if (benamingStukken.Length == 0) return null; // Opknippen zodat hoofdstukken bij verzen blijven // Opgeknipt moet 'johannes 3: 5, 7, 9 - 8:1, 3, 9: 5 - 10' geven: 'johannes', '3: 5, 7, 9 -', '8:1, 3, ', '9: 5 - 10' // Opknippen ook zodat koppeltekens doorgegeven worden // Opgeknipt moet 'johannes 3: 5 - 8:10' geven: 'johannes', '3: 5 -', '8: - 10' var onthouden = string.Empty; var onthoudenVoorLaatsteElementIsKoppelteken = false; var voorBenaming = string.Empty; var deelVersen = new List<ILiturgieInterpretatieBijbeltekstDeel>(); for (int teller = 0; teller < benamingStukken.Length; teller++) { var stuk = benamingStukken[teller].Trim(); if (onthoudenVoorLaatsteElementIsKoppelteken) stuk = $"{VersKoppeltekens[0]} {stuk}"; var heeftVolgendStuk = teller + 1 < benamingStukken.Length; if (!heeftVolgendStuk && teller != 0) { deelVersen.Add(new InterpretatieBijbeltekstDeel() { Deel = onthouden, VerzenZoalsIngevoerd = stuk, Verzen = (stuk ?? "") .Split(VersScheidingstekens, StringSplitOptions.RemoveEmptyEntries) .Select(v => v.Trim()) .ToList() }); break; } var elementen = teller == 0 ? stuk.Split(BenamingDeelScheidingstekens, StringSplitOptions.RemoveEmptyEntries) : stuk.Replace("-", " - ").Split(BenamingDeelScheidingstekens.Union(VersScheidingstekens).ToArray(), StringSplitOptions.RemoveEmptyEntries); var laatsteElement = string.Empty; if (elementen.Length >= 2) laatsteElement = elementen[elementen.Length - 1]; var voorLaatsteElementIsKoppelteken = elementen.Length >= 3 && VersKoppeltekens.Contains(elementen[elementen.Length - 2][0]); var stukZonderLaatsteElement = stuk.Substring(0, stuk.Length - laatsteElement.Length).Trim(); if (teller == 0) voorBenaming = stukZonderLaatsteElement; if (!heeftVolgendStuk && teller == 0) deelVersen.Add(new InterpretatieBijbeltekstDeel() { Deel = laatsteElement, Verzen = new List<string>() }); else if (teller != 0) deelVersen.Add(new InterpretatieBijbeltekstDeel() { Deel = onthouden, VerzenZoalsIngevoerd = stukZonderLaatsteElement, Verzen = (stukZonderLaatsteElement ?? "") .Split(VersScheidingstekens, StringSplitOptions.RemoveEmptyEntries) .Select(v => v.Trim()) .ToList() }); onthouden = laatsteElement; onthoudenVoorLaatsteElementIsKoppelteken = voorLaatsteElementIsKoppelteken; } regel.PerDeelVersen = deelVersen; regel.Benaming = voorBenaming; var optieLijst = opties.ToList(); // downward compatibility met ILiturgieInterpretatie regel.Deel = deelVersen.FirstOrDefault().Deel; regel.VerzenZoalsIngevoerd = deelVersen.FirstOrDefault().VerzenZoalsIngevoerd; regel.Verzen = deelVersen.FirstOrDefault().Verzen; // visualisatie handmatig regelen optieLijst.Add($"{LiturgieOplosser.LiturgieOplosserSettings.OptieAlternatieveNaamOverzicht} {voorOpties[0]}"); optieLijst.Add($"{LiturgieOplosser.LiturgieOplosserSettings.OptieAlternatieveNaam} {voorOpties[0]}"); // opties toekennen regel.Opties = optieLijst; return regel; }
private static ILiturgieInterpretatieBijbeltekst VerwerkAlsBijbeltekst(string voorOpties, LiturgieOptiesGebruiker opties) { var regel = new InterpretatieBijbeltekst(); if (voorOpties.Length == 0) { return(InterpretatieBijbeltekst.Empty); } var benamingStukken = voorOpties.Trim().Split(BenamingScheidingstekens, StringSplitOptions.RemoveEmptyEntries); if (benamingStukken.Length == 0) { return(InterpretatieBijbeltekst.Empty); } // Opknippen zodat hoofdstukken bij verzen blijven // Opgeknipt moet 'johannes 3: 5, 7, 9 - 8:1, 3, 9: 5 - 10' geven: 'johannes', '3: 5, 7, 9 -', '8:1, 3, ', '9: 5 - 10' // Opknippen ook zodat koppeltekens doorgegeven worden // Opgeknipt moet 'johannes 3: 5 - 8:10' geven: 'johannes', '3: 5 -', '8: - 10' var onthouden = string.Empty; var onthoudenVoorLaatsteElementIsKoppelteken = false; var voorBenaming = string.Empty; var deelVersen = new List <ILiturgieInterpretatieBijbeltekstDeel>(); var compatibilityVerzenZoalsIngevoerd = string.Empty; for (int teller = 0; teller < benamingStukken.Length; teller++) { // Heropbouwen naamgeving voor weergave op overzicht if (teller > 0) { compatibilityVerzenZoalsIngevoerd += benamingStukken[teller]; if (teller < benamingStukken.Length - 1) { compatibilityVerzenZoalsIngevoerd += BenamingScheidingstekens.First(); } } // var stuk = benamingStukken[teller].Trim(); if (onthoudenVoorLaatsteElementIsKoppelteken) { stuk = $"{VersKoppeltekens[0]} {stuk}"; } var heeftVolgendStuk = teller + 1 < benamingStukken.Length; if (!heeftVolgendStuk && teller != 0) { deelVersen.Add(new InterpretatieBijbeltekstDeel() { Deel = onthouden, VerzenZoalsIngevoerd = stuk, Verzen = (stuk ?? "") .Split(VersScheidingstekens, StringSplitOptions.RemoveEmptyEntries) .Select(v => v.Trim()) .ToList() }); break; } // var elementen = teller == 0 ? stuk.Split(BenamingDeelScheidingstekens, StringSplitOptions.RemoveEmptyEntries) : stuk.Replace("-", " - ").Split(BenamingDeelScheidingstekens.Union(VersScheidingstekens).ToArray(), StringSplitOptions.RemoveEmptyEntries); var laatsteElement = string.Empty; if (elementen.Length >= 2) { laatsteElement = elementen[elementen.Length - 1]; } var voorLaatsteElementIsKoppelteken = elementen.Length >= 3 && VersKoppeltekens.Contains(elementen[elementen.Length - 2][0]); var stukZonderLaatsteElement = stuk.Substring(0, stuk.Length - laatsteElement.Length).Trim(); if (teller == 0) { voorBenaming = stukZonderLaatsteElement; } if (!heeftVolgendStuk && teller == 0) { deelVersen.Add(new InterpretatieBijbeltekstDeel() { Deel = laatsteElement, Verzen = new List <string>() }); } else if (teller != 0) { deelVersen.Add(new InterpretatieBijbeltekstDeel() { Deel = onthouden, VerzenZoalsIngevoerd = stukZonderLaatsteElement, Verzen = (stukZonderLaatsteElement ?? "") .Split(VersScheidingstekens, StringSplitOptions.RemoveEmptyEntries) .Select(v => v.Trim()) .ToList() }); } // Volgende loop onthouden = laatsteElement; onthoudenVoorLaatsteElementIsKoppelteken = voorLaatsteElementIsKoppelteken; } regel.PerDeelVersen = deelVersen; regel.Benaming = voorBenaming; // downward compatibility met ILiturgieInterpretatie regel.Deel = deelVersen.FirstOrDefault().Deel; regel.VerzenZoalsIngevoerd = compatibilityVerzenZoalsIngevoerd.Trim(); regel.Verzen = new string[0]; // opties toekennen regel.OptiesGebruiker = opties; return(regel); }