Пример #1
0
        internal Texto Dividir(int posicionDivision)
        {
            Texto texto2 = new Texto();

            texto2.Iniciar();
            if (!_bloques.SinAsignar())
            {
                int primerbloque, ultimobloque;
                int deltaini, deltafin;
                ObtenerRango(posicionDivision, st.Length - posicionDivision, out primerbloque, out deltaini, out ultimobloque, out deltafin);
                Bloque bloqueinicio      = _bloques.Obtener(primerbloque);
                int    saldoprimerbloque = bloqueinicio.Cantidad - deltaini;
                bloqueinicio.CambiarCantidad(deltaini);
                _bloques.Guardar(primerbloque, bloqueinicio);
                texto2.AsegurarBloques();
                int deltaelim = 0;
                if (saldoprimerbloque != 0)
                {
                    Bloque clon = _bloques.Obtener(primerbloque);//.Clonar();
                    texto2._bloques.Agregar(saldoprimerbloque, clon.Formato);
                    deltaelim++;
                }
                for (int i = primerbloque + 1; i < _bloques.Cantidad; i++)
                {
                    Bloque b = _bloques.Obtener(i);
                    texto2._bloques.Agregar(b.Cantidad, b.Formato);
                }
                if (primerbloque + 1 != _bloques.Cantidad)
                {
                    _bloques.EliminarRango(primerbloque + 1, _bloques.Cantidad - (primerbloque + 1));
                }
            }
            texto2.st.Append(st.ToString(posicionDivision, st.Length - posicionDivision));
            st.Remove(posicionDivision, st.Length - posicionDivision);
#if DEBUG
            Verificar();
            texto2.Verificar();
#endif
            return(texto2);
        }
Пример #2
0
        internal Texto ObtenerRangoTexto(int inicio, int cantidad)
        {
            Texto t = new Texto();

            t.Iniciar();
            if (!_bloques.SinAsignar())
            {
                IEnumerable <Bloque> bloques = ObtenerRangoBloques(inicio, cantidad);
                t.AsegurarBloques();
                foreach (Bloque b in bloques)
                {
                    t._bloques.Agregar(b.Cantidad, b.Formato);
                }
                t.st.Append(st);
            }
            t.Iniciar();
            t.Append(st.ToString(inicio, cantidad));
#if DEBUG
            t.Verificar();
#endif
            return(t);
        }