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
                });
            }
Example #4
0
        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);
        }
Example #5
0
        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);
 }
Example #8
0
 public LiedFormatResult Liturgie(ISlideInhoud regel, bool verkortBijVolledigeContent)
 {
     return(ToonWaarNodigMetVerzen(regel, verkortBijVolledigeContent));
 }
Example #9
0
 public LiedFormatResult Huidig(ISlideInhoud regel, ILiturgieContent vanafDeel, bool verkortBijVolledigeContent)
 {
     return(ToonMetVerzenEnEersteLos(regel, vanafDeel, verkortBijVolledigeContent));
 }