public IVerwerkResultaat Verwerk(ISlideInhoud regel, IEnumerable <ISlideOpbouw> volgenden, CancellationToken token) { var content = regel.Content.ToList(); ZetProgressieStatistiekenSets(content.Count); // Per onderdeel in de regel moet een sheet komen var index = 0; foreach (var inhoud in regel.Content) { if (token.IsCancellationRequested) { break; } if (inhoud.InhoudType == InhoudType.Tekst) { InvullenTekstOpTemplate(regel, inhoud, volgenden, token); } else { ToevoegenSlides(inhoud, volgenden, token); } index++; ZetProgressieBijSet(index); } return(new VerwerkResultaat() { SlidesGemist = _slidesGemist }); }
private void InvullenTekstOpTemplate(ISlideInhoud regel, IEnumerable <ISlideOpbouw> volgenden, CancellationToken token) { var tekstPerSlide = TekstVerdelerBijbeltekst.OpdelenPerSlide(TekstOpknippen(regel.Content), _buildDefaults.RegelsPerBijbeltekstSlide, _lengteBerekenaar, _buildDefaults.BijbeltekstVersOnderbrekingOverSlidesHeen) .ToList(); ZetProgressieStatistieken(tekstPerSlide.Count); //zolang er nog iets is in te voegen in sheets int index = 0; foreach (var tekst in tekstPerSlide) { if (token.IsCancellationRequested) { return; } //regel de template om de bijbeltekst op af te beelden var presentatie = OpenPps(_dependentFileList.FullTemplateBijbeltekst); var slide = presentatie.EersteSlide(); //alleen eerste slide gebruiken we //voor elk object op de slides (we zoeken naar de tekst die vervangen moet worden in de template) foreach (var shape in slide.Shapes().Where(s => s is IMppShapeTextbox).Cast <IMppShapeTextbox>()) { var tagReplacementResult = ProcessForTagReplacement(shape.Text, additionalSearchForTagReplacement: (s) => { switch (s) { case "liturgieregel": return(new SearchForTagReplacementResult(_liedFormatter.Huidig(regel, null, _buildDefaults.VerkortVerzenBijVolledigeContent).Display)); case "inhoud": return(new SearchForTagReplacementResult(tekst.ToString())); case "volgende": //we moeten dan wel al op de laatste slide zitten ('InvullenVolgende' is wel al intelligent maar in het geval van 1 //lange tekst over meerdere dia's kan 'InvullenVolgende' niet de juiste keuze maken) var display = tekstPerSlide.Last() == tekst ? _liedFormatter.Volgende(volgenden, 0, _buildDefaults.VerkortVerzenBijVolledigeContent) : null; return(new SearchForTagReplacementResult(display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty)); } return(SearchForTagReplacementResult.Unresolved); }); if (tagReplacementResult.TagsReplaced) { shape.Text = tagReplacementResult.NewValue; } } //voeg slide in in het grote geheel _slidesGemist += _presentatie.SlidesKopieNaarPresentatie(new List <IMppSlide> { slide }); //sluit de template weer af presentatie.Dispose(); index++; ZetProgressieBijPagina(index); } }
public IVerwerkResultaat Verwerk(ISlideInhoud regel, IEnumerable <ISlideOpbouw> volgenden, CancellationToken token) { InvullenTekstOpTemplate(regel, volgenden, token); return(new VerwerkResultaat() { SlidesGemist = _slidesGemist }); }
private static LiedFormatResult ToonWaarNodigMetVerzen(ISlideInhoud regel, bool verkortBijVolledigeContent) { var result = new LiedFormatResult() { Naam = regel.Display.NaamOverzicht ?? regel.Display.Naam, }; if (!string.IsNullOrWhiteSpace(regel.Display.SubNaam)) { result.SubNaam = regel.Display.SubNaam; } result.Verzen = LiedVerzen(regel.Display, false, verkortBijVolledigeContent, regel.Content); return(result); }
private static LiedFormatResult ToonMetVerzenEnEersteLos(ISlideInhoud regel, ILiturgieContent vanafDeelHint, bool verkortBijVolledigeContent) { var result = new LiedFormatResult() { Naam = regel.Display.Naam }; if (!string.IsNullOrWhiteSpace(regel.Display.SubNaam)) { result.SubNaam = regel.Display.SubNaam; } if (regel.Content == null) { result.Verzen = LiedVerzen(regel.Display, true, verkortBijVolledigeContent); } else { var vanafDeel = vanafDeelHint ?? regel.Content.FirstOrDefault(); // Bij een deel hint tonen we alleen nog de huidige en komende versen var gebruikDeelRegels = regel.Content.SkipWhile(r => r != vanafDeel); result.Verzen = LiedVerzen(regel.Display, true, verkortBijVolledigeContent, gebruikDeelRegels); } return(result); }
/// <summary> /// Lied in template plaatsen /// </summary> private void InvullenTekstOpTemplate(ISlideInhoud regel, ILiturgieContent inhoud, IEnumerable <ISlideOpbouw> volgenden, CancellationToken token) { var tekstOmTeRenderen = inhoud.Inhoud; var tekstOmTeRenderenLijst = new List <string>(); // knip de te renderen tekst in stukken (zodat we van tevoren het aantal weten) while (!string.IsNullOrWhiteSpace(tekstOmTeRenderen)) { if (token.IsCancellationRequested) { return; } // plaats zo veel mogelijk tekst op de slide totdat het niet meer past, krijg de restjes terug var uitzoeken = TekstVerdelerLied.InvullenLiedTekst(tekstOmTeRenderen, _buildDefaults.RegelsPerLiedSlide, _buildDefaults.LiedtekstVisualiseerAfbreking); tekstOmTeRenderenLijst.Add(uitzoeken.Invullen); tekstOmTeRenderen = uitzoeken.Over; } ZetProgressieStatistieken(tekstOmTeRenderenLijst.Count); //zolang er nog iets is in te voegen in sheets var index = 0; foreach (var tekst in tekstOmTeRenderenLijst) { if (token.IsCancellationRequested) { return; } //regel de template om het lied op af te beelden var presentatie = OpenPps(_dependentFileList.FullTemplateLied); var slide = presentatie.EersteSlide(); //alleen eerste slide gebruiken we //voor elk object op de slides (we zoeken naar de tekst die vervangen moet worden in de template) foreach (var shape in slide.Shapes().Where(s => s is IMppShapeTextbox).Cast <IMppShapeTextbox>()) { var tagReplacementResult = ProcessForTagReplacement(shape.Text, additionalSearchForTagReplacement: (s) => { switch (s) { case "liturgieregel": return(new SearchForTagReplacementResult(_liedFormatter.Huidig(regel, inhoud, _buildDefaults.VerkortVerzenBijVolledigeContent).Display)); case "inhoud": return(new SearchForTagReplacementResult(tekst)); case "volgende": //we moeten dan wel al op de laatste slide zitten ('InvullenVolgende' is wel al intelligent maar in het geval van 1 //lange tekst over meerdere dia's kan 'InvullenVolgende' niet de juiste keuze maken) var display = IsLaatsteSlide(tekstOmTeRenderenLijst, tekst, regel, inhoud) ? _liedFormatter.Volgende(volgenden, 0, _buildDefaults.VerkortVerzenBijVolledigeContent) : null; return(new SearchForTagReplacementResult(display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty)); } return(SearchForTagReplacementResult.Unresolved); }); if (tagReplacementResult.TagsReplaced) { shape.Text = tagReplacementResult.NewValue; } } //voeg slide in in het grote geheel _slidesGemist += _presentatie.SlidesKopieNaarPresentatie(new List <IMppSlide> { slide }); //sluit de template weer af presentatie.Dispose(); index++; ZetProgressieBijPagina(index); } }
/// Een 'volgende' tekst is alleen relevant om te tonen op de laatste pagina binnen een item voordat /// een nieuw item komt. /// Je kunt er echter ook voor kiezen dat een volgende item gewoon niet aangekondigd wordt. Dat gaat /// via 'TonenInVolgende'. protected static bool IsLaatsteSlide(IEnumerable <string> tekstOmTeRenderen, string huidigeTekst, ISlideInhoud regel, ILiturgieContent deel) { return(tekstOmTeRenderen.Last() == huidigeTekst && regel.Content.Last() == deel); }
public LiedFormatResult Liturgie(ISlideInhoud regel, bool verkortBijVolledigeContent) { return(ToonWaarNodigMetVerzen(regel, verkortBijVolledigeContent)); }
public LiedFormatResult Huidig(ISlideInhoud regel, ILiturgieContent vanafDeel, bool verkortBijVolledigeContent) { return(ToonMetVerzenEnEersteLos(regel, vanafDeel, verkortBijVolledigeContent)); }