public void TestSplit()
        {
            string[] resultadoEsperado =
            {
                "Texto1",
                "Texto2",
                "Texto3"
            };
            string[] textos =
            {
                string.Join("", resultadoEsperado[0], resultadoEsperado[1]),
                resultadoEsperado[2]
            };
            List <Spliter> spliters =
                new List <Spliter>()
            {
                new Spliter()
                {
                    EditIndexInicio = 0 + 1,
                    CharFin         = resultadoEsperado[0].Length,
                },
                new Spliter()
                {
                    EditIndexInicio = 0 + 1,
                    CharInicio      = resultadoEsperado[0].Length,
                }
            };

            string[] resultado = Spliter.GetParts(spliters, textos).ToArray();

            Assert.IsTrue(resultadoEsperado.AreEquals(resultado));
        }
        public void TestJoin()
        {
            string[] textos =
            {
                "Texto Frase 1",
                "Texto Frase 2",
                "Texto Frase 3"
            };
            string[] resultadoEsperado =
            {
                string.Join("", textos[0], textos[1]),
                textos[2]
            };
            List <Spliter> spliters =
                new List <Spliter>()
            {
                new Spliter()
                {
                    EditIndexInicio = 0 + 1,
                    EditIndexFin    = 1 + 1
                }
            };

            string[] resultado = Spliter.GetParts(spliters, textos).ToArray();
            Assert.IsTrue(resultadoEsperado.AreEquals(resultado));
        }
        public void TestSplitAndJoinWithCustomJoiner()
        {
            const string JOINER = ".";

            string[] resultadoEsperado =
            {
                "Texto1",
                "Texto2" + JOINER + "2",
                "Texto3",
                "Texto4",
                "Texto5"
            };
            string[] textos =
            {
                resultadoEsperado[0] + resultadoEsperado[1].Substring(0,                                             resultadoEsperado[1].Length - (JOINER.Length + 1)),
                resultadoEsperado[1][resultadoEsperado[1].Length - 1] + resultadoEsperado[2] + resultadoEsperado[3],
                resultadoEsperado[4]
            };
            List <Spliter> spliters =
                new List <Spliter>()
            {
                new Spliter()
                {
                    EditIndexInicio = 0 + 1,
                    CharFin         = resultadoEsperado[0].Length,
                },
                new Spliter()
                {
                    EditIndexInicio = 0 + 1,
                    EditIndexFin    = 1 + 1,
                    CharInicio      = resultadoEsperado[0].Length,
                    CharFin         = 1
                },

                new Spliter()
                {
                    EditIndexInicio = 1 + 1,
                    CharInicio      = 1,
                    CharFin         = 1 + resultadoEsperado[2].Length
                },

                new Spliter()
                {
                    EditIndexInicio = 1 + 1,
                    CharInicio      = 1 + resultadoEsperado[2].Length
                }
            };

            string[] resultado = Spliter.GetParts(spliters, textos, JOINER).ToArray();

            Assert.IsTrue(resultadoEsperado.AreEquals(resultado));
        }
        public void Refresh()
        {
            const string JOIN = "<join párrafo>";

            int            pos;
            Capitulo       capitulo;
            List <string>  parrafos;
            List <string>  parrafosAux;
            List <Spliter> splitersUsados;

            string[] partesParrafo;
            int      indexParrafo;
            int      indexParrafoOri;
            Run      parrafo;
            int      indexParrafoVer = 0;

            tbSpliterTextVer.Inlines.Clear();
            tbSpliterTextVer.Text = "";
            tbSpliterTextOri.Text = "";
            tbSpliterTextOri.Tag  = default;
            tbSpliterTextVer.Tag  = default;
            if (Spliter.IsValid)
            {
                if (Spliter.IsRelevant)
                {
                    if (Spliter.Saltar)
                    {
                        tbSpliterTextVer.Inlines.Add(new Run()
                        {
                            Text = $"Saltado párrafo {Spliter.EditIndexInicio}", Foreground = Brushes.Gold
                        });
                    }
                    else
                    {
                        pos                  = 1;
                        capitulo             = Ebook.GetCapitulo(Chapter);
                        parrafos             = Spliter.GetParts(capitulo.ParrafosEditados, Ebook.Version.GetContentElements(Chapter), JOIN, true).ToList();
                        splitersUsados       = capitulo.ParrafosEditados.Filtra((s) => s.IsRelevant && !s.Saltar);
                        indexParrafo         = splitersUsados.IndexOf(Spliter);
                        parrafosAux          = Spliter.GetParts(capitulo.ParrafosEditados, Ebook.Version.GetContentElements(Chapter), JOIN).ToList();
                        indexParrafoOri      = parrafosAux.IndexOf(parrafos[indexParrafo]);
                        partesParrafo        = parrafos[indexParrafo].Split(JOIN);
                        tbSpliterTextVer.Tag = Ebook.Version.GetContentElementsArray(Chapter).ToList().IndexOf(partesParrafo[0]);
                        foreach (string str in partesParrafo)
                        {
                            parrafo = new Run()
                            {
                                Text = (string.IsNullOrEmpty(str) ? "-SIN TEXTO A MOSTRAR-" : string.IsNullOrWhiteSpace(str) ? "-ESPACIO EN BLANCO-" : str) + "\n", Foreground = (pos++) % 2 == 0 ? Brushes.Gray : Brushes.Black
                            };
                            parrafo.PreviewMouseLeftButtonDown  += Parrafo_MouseButtonDown;
                            parrafo.PreviewMouseRightButtonDown += Parrafo_MouseButtonDown;
                            parrafo.Tag = indexParrafoVer;
                            indexParrafoVer++;


                            tbSpliterTextVer.Inlines.Add(parrafo);
                        }
                        tbSpliterTextOri.Text = Ebook.Reference.GetContentElementsArray(Chapter)[indexParrafoOri];
                        tbSpliterTextOri.Tag  = indexParrafoOri;
                    }
                }
                else
                {
                    tbSpliterTextVer.Inlines.Add(new Run()
                    {
                        Text = "No se usará este spliter, no es relevante", Foreground = Brushes.LightGreen
                    });
                }
            }
            else
            {
                tbSpliterTextVer.Inlines.Add(new Run()
                {
                    Text = "No se usará este spliter, no es valido", Foreground = Brushes.LightBlue
                });
            }
        }
        public void TestMix()
        {
            //falta saltando
            //strings del medio(entre strings editadas hay otras) que se tienen que poner enteras
            //split,entera,salto,join,resto
            string[] textos =
            {
                "Texto0",
                "Texto1Texto2",
                "Texto3",
                "Texto4Saltado",
                "Texto5P1",
                "Texto5P2Texto6TextoOmitido",
                "Texto7",
                "Texto8"
            };
            string[] resultadoEsperado =
            {
                textos[0],
                textos[1].Substring(0,             6),
                textos[1].Substring(6),
                textos[2],
                //salto textos[3],
                textos[4] + textos[5].Substring(0, 8),
                textos[5].Substring(8,             6),
                textos[6],
                textos[7]
            };
            List <Spliter> spliters = new List <Spliter>
            {
                new Spliter()
                {
                    EditIndexInicio = 1 + 1,
                    CharFin         = 6
                },
                new Spliter()
                {
                    EditIndexInicio = 1 + 1,
                    CharInicio      = 6
                },
                new Spliter()
                {
                    EditIndexInicio = 3 + 1,
                    Saltar          = true
                },
                new Spliter()
                {
                    EditIndexInicio = 4 + 1,
                    EditIndexFin    = 5 + 1,
                    CharFin         = 8
                },
                new Spliter()
                {
                    EditIndexInicio = 5 + 1,
                    CharInicio      = 8,
                    CharFin         = 8 + 6
                },
                new Spliter()
                {
                    EditIndexInicio = 5 + 1,
                    Saltar          = true
                }
            };

            string[] resultado = Spliter.GetParts(spliters, textos).ToArray();
            Assert.IsTrue(resultadoEsperado.AreEquals(resultado));
        }