Exemplo n.º 1
0
        public void IrAPosicion(int numCaracter, bool seleccionar)
        {
            if (anteriorFormato != null)
            {
                if (!parrafoSeleccionado.EstaEliminado)
                {
                    parrafoSeleccionado.SimplificarFormato();
                }
                anteriorFormato = null;
            }
            Parrafo p    = _documentoEdicion.ObtenerPrimerParrafo();
            int     suma = 0;
            Parrafo ultimoParrafo;

            while (p != null)
            {
                int longitud = p.Longitud;
                if (suma + longitud > numCaracter)
                {
                    IndicarPosicion(p.ID, numCaracter - suma, seleccionar);
                    return;
                }
                ultimoParrafo = p;
                p             = p.Siguiente;
            }
        }
Exemplo n.º 2
0
            public void RegistrarCambios(Parrafo inicio, Parrafo fin)
            {
                if (parrafoInicial == null)
                {
                    parrafoInicial = inicio;
                }
                else
                {
                    if (inicio.EsSiguiente(parrafoInicial))
                    {
                        parrafoInicial = inicio;
                    }
                }

                if (parrafoFinal == null)
                {
                    parrafoFinal = fin;
                }
                else
                {
                    if (parrafoFinal.EsSiguiente(fin))
                    {
                        parrafoInicial = fin;
                    }
                }
            }
Exemplo n.º 3
0
        public Posicion BuscarParrafo(Parrafo parrafoBuscado)
        {
            Pagina pag     = _Paginas[_Paginas.Count - 1];
            Linea  inicial = _Lineas.Obtener(pag.LineaInicio);

            if (inicial.Parrafo == parrafoBuscado || inicial.Parrafo.EsSiguiente(parrafoBuscado))
            {
                int indice        = _Paginas.Count - 1;
                int lineabusqueda = -1;

                //Hacer búsqueda lineal, puesto que aún no se ha calculado
                IEnumerable <Pagina> pags = ObtenerDesde(_Paginas.Count - 1);
                bool salirbucle           = false;
                foreach (Pagina p in pags)
                {
                    int lim = p.LineaInicio + p.Cantidad;
                    for (int q = p.LineaInicio; q < lim; q++)
                    {
                        Linea l = _Lineas.Obtener(q);
                        if (l.Parrafo == parrafoBuscado)
                        {
                            lineabusqueda = q;
                            salirbucle    = true;
                            break;
                        }
                        else if (l.Parrafo.EsSiguiente(parrafoBuscado))
                        {
                            //continuar
                        }
                        else
                        {
                            lineabusqueda = q;
                            salirbucle    = true;
                            break;
                        }
                    }
                    if (salirbucle)
                    {
                        break;
                    }
                    indice++;
                }
                if (lineabusqueda == -1)
                {
                    throw new Exception("Párrafo no encontrado");
                }
                int      linea = lineabusqueda;//BuscarLineaInicioParrafo(lineabusqueda, parrafoBuscado);
                Posicion pos   = new Posicion(_docimpreso);

                _docimpreso.Completar(pos, indice, linea, 0);
                Debug.Assert(pos.Linea != null);
                return(pos);
            }
            else
            {
                Posicion pos = BuscarParrafo(parrafoBuscado, 0, _Paginas.Count - 1);
                Debug.Assert(pos.Linea != null);
                return(pos);
            }
        }
Exemplo n.º 4
0
        public IHttpActionResult AddParagraphs(ParrafoEntity model)
        {
            try
            {
                using (var ts = new TransactionScope())
                {
                    Parrafo parrafo = new Parrafo();
                    if (!model.ParrafoId.HasValue)
                    {
                        context.Parrafo.Add(parrafo);
                        parrafo.Estado        = ConstantHelpers.ESTADO.ACTIVO;
                        parrafo.FechaRegistro = DateTime.Now;
                    }

                    parrafo.Texto      = model.Texto;
                    parrafo.Orden      = model.Orden;
                    parrafo.HistoriaId = model.HistoriaId;
                    parrafo.SonidoId   = model.SonidoId;

                    context.SaveChanges();
                    ts.Complete();
                }
                response.Data    = "Parrafo agregado con éxito";
                response.Error   = false;
                response.Message = "Success";
                return(Ok(response));
            }
            catch (Exception ex)
            {
                return(Unauthorized());
            }
        }
Exemplo n.º 5
0
        public void RevisarIntegridad()
        {
            int lineaanterior = 0;

            int posparrafoanterior = 0;

            foreach (Linea l in _Lineas)
            {
                if (l.Inicio == 0)
                {
                    posparrafoanterior = 0;
                }
                try
                {
                    Parrafo par = _documento.ObtenerParrafo(l.Parrafo.ID);
                }
                catch
                {
                    Debug.Assert(false);
                }
                Debug.Assert(posparrafoanterior == l.Inicio);
                Debug.Assert(l.Inicio >= 0);
                Debug.Assert(l.Inicio + l.Cantidad <= l.Parrafo.Longitud);
                posparrafoanterior = l.Inicio + l.Cantidad;
            }
        }
Exemplo n.º 6
0
        public static void ProbarObtenerParrafo()
        {
            Documento d = new Documento();
            Parrafo   p = d.ObtenerParrafo(1);

            Debug.Assert(p != null);
        }
Exemplo n.º 7
0
 public bool IrSiguienteCaracter(bool moverSeleccion, TipoAvance TipoAvance)
 {
     if (TipoAvance == TipoAvance.AvanzarPorDocumento)
     {//Ir al principio del documento
         Parrafo ultimoParrafo = _documentoEdicion.ObtenerUltimoParrafo();
         IndicarPosicion(ultimoParrafo.ID, ultimoParrafo.Longitud, moverSeleccion);
     }
     else if (TipoAvance == TipoAvance.AvanzarPorParrafos)
     {
         if (parrafoSeleccionado.Siguiente != null)
         {
             IndicarPosicion(parrafoSeleccionado.Siguiente.ID, 0, moverSeleccion);
         }
         else
         {
             IndicarPosicion(parrafoSeleccionado.ID, parrafoSeleccionado.Longitud, moverSeleccion);
         }
     }
     else
     {
         if (posicionInsercion == parrafoSeleccionado.Longitud)
         {
             if (parrafoSeleccionado.Siguiente == null)
             {
                 return(false);
             }
             IndicarPosicion(parrafoSeleccionado.Siguiente.ID, 0, moverSeleccion);
         }
         else
         {
             IndicarPosicion(parrafoSeleccionado.ID, SiguientePosicion(TipoAvance), moverSeleccion);
         }
     }
     return(true);
 }
Exemplo n.º 8
0
 public void LimpiarSeleccion()
 {
     parrafoInicioRango  = null;
     posicionInicioRango = null;
     parrafoFinRango     = null;
     posicionFinRango    = null;
 }
Exemplo n.º 9
0
        internal bool Contiene(Parrafo parrafo, int numcaracter)
        {
            Parrafo ini    = ObtenerParrafoInicial();
            Parrafo fin    = ObtenerParrafoFinal();
            int     posini = ObtenerPosicionInicial();
            int     posfin = ObtenerPosicionFinal();

            if (Inicio == Fin && Inicio == parrafo)
            {
                return(numcaracter >= posini && numcaracter <= posfin);
            }
            if (parrafo == Inicio)
            {
                return(numcaracter >= posini);
            }
            else if (parrafo == Fin)
            {
                return(numcaracter <= posfin);
            }
            else
            {
                if (ini.EsSiguiente(parrafo) && parrafo.EsSiguiente(fin))
                {
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 10
0
        public IHttpActionResult EditParagraphs(ParrafoEntity model)
        {
            try
            {
                using (var ts = new TransactionScope())
                {
                    Parrafo parrafo = new Parrafo();
                    if (model.ParrafoId.HasValue)
                    {
                        parrafo = context.Parrafo.FirstOrDefault(x => x.ParrafoId == model.ParrafoId);
                    }

                    parrafo.Texto      = model.Texto;
                    parrafo.Orden      = model.Orden;
                    parrafo.HistoriaId = model.HistoriaId;
                    parrafo.SonidoId   = model.SonidoId;

                    context.SaveChanges();
                    ts.Complete();
                }
                response.Data    = "Parrafo Actualizada con éxito";
                response.Error   = false;
                response.Message = "Success";
                return(Ok(response));
            }
            catch (Exception ex)
            {
                return(Unauthorized());
            }
        }
Exemplo n.º 11
0
 public ListaLineas(Documento documento, ListaPaginas listaPaginas)
 {
     _documento        = documento;
     _lineas           = new List <Linea>();
     parrafoActual     = documento.ObtenerPrimerParrafo();
     numcaracterActual = 0;
     _listaPaginas     = listaPaginas;
 }
Exemplo n.º 12
0
 internal Seleccion(Documento documento, Parrafo inicio, int posicionInicio, Parrafo fin, int posicionFin)
 {
     Documento             = documento;
     Inicio                = inicio;
     Fin                   = fin;
     PosicionParrafoInicio = posicionInicio;
     PosicionParrafoFin    = posicionFin;
 }
Exemplo n.º 13
0
        public void InsertarTexto(string cadena)
        {
            ReemplazarSeleccion();
            Parrafo final = _documentoEdicion.InsertarParrafos(ObtenerParrafos(cadena), parrafoSeleccionado, posicionInsercion);

            parrafoSeleccionado = final;
            posicionInsercion   = 0;
        }
Exemplo n.º 14
0
        public Punto Dibujar(IGraficador g, Punto posicionInicial, Seleccion seleccion, AvanceBloques avance, Medicion anchoLinea, bool incluirEspacioAnterior, bool incluirEspacioPosterior)
        {
            List <Bloque>     lista            = new List <Bloque>(avance.ObtenerBloquesDe(this));
            bool              esultimalinea    = EsUltimaLineaParrafo;
            Medicion          espacioanterior  = EsPrimeraLineaParrafo?(incluirEspacioAnterior ? (Parrafo.Formato.ObtenerEspacioAnterior()) : Medicion.Cero):Medicion.Cero;
            Medicion          espacioposterior = EsUltimaLineaParrafo?(incluirEspacioPosterior?(Parrafo.Formato.ObtenerEspacioPosterior()):Medicion.Cero):Medicion.Cero;
            Medicion          altolinea        = AltoLinea - espacioposterior;
            Medicion          deltacalc        = ObtenerDeltaAlineacion(anchoLinea);
            AlineacionParrafo alineacion       = Parrafo.Formato.ObtenerAlineacionHorizontal();
            Punto             posicion         = new Punto(posicionInicial.X, posicionInicial.Y);

            for (int i = 0; i < 2; i++)
            {
                Medicion deltax;
                if (alineacion == AlineacionParrafo.Centro || alineacion == AlineacionParrafo.Derecha)
                {
                    deltax = posicion.X + deltacalc;
                }
                else
                {
                    deltax = posicion.X;
                }
                Punto pt      = posicion;
                int   posbase = Inicio;

                Medicion altobase = AltoBase;
                Bloque   ultb     = new Bloque(0, Parrafo.Formato.ObtenerFormatoTexto());
                foreach (Bloque b in lista)
                {
                    ultb = b;
                    if (b.Cantidad == 0)
                    {
                        continue;
                    }
                    Estilo    e         = new Estilo(b);
                    Medicion  baset     = e.MedirAlto();
                    string    total     = Parrafo.ObtenerSubCadena(posbase, b.Cantidad);
                    TamBloque tb        = e.Medir(total);
                    Punto     posdibujo = new Punto(deltax, posicion.Y + (altolinea - baset) - altobase);
                    Dibujar(g, posdibujo, seleccion, e, posbase, b.Cantidad, total, i);
                    posbase += b.Cantidad;
                    deltax  += tb.Ancho;
                }
                if (seleccion != null && EsUltimaLineaParrafo && seleccion.Contiene(Parrafo, Inicio + Cantidad))
                {
                    Estilo   e     = new Estilo(ultb);
                    Medicion baset = e.MedirAlto();
                    Estilo   sel   = e.Clonar();
                    sel.ColorFondo = new BrochaSolida(new ColorDocumento(0, 0, 0));
                    sel.ColorLetra = new BrochaSolida(new ColorDocumento(255, 255, 255));
                    Punto posdibujo = new Punto(deltax, posicion.Y + (altolinea - baset) - altobase);
                    DibujarConTam(sel, g, posdibujo, " ", "", i);
                }
            }
            return(new Punto(posicion.X, posicion.Y + AltoLinea));
        }
Exemplo n.º 15
0
        public Posicion ObtenerPosicionCursor(
            int lineabusqueda,
            Parrafo parrafo,
            int posicion)
        {
            Posicion pos = BuscarParrafo(parrafo);

            pos.Avanzar(posicion);
            return(pos);
        }
Exemplo n.º 16
0
        public void InsertarParrafo()
        {
            ReemplazarSeleccion();
            Parrafo nuevo = _documentoEdicion.InsertarParrafo(parrafoSeleccionado, posicionInsercion);

            parrafoSeleccionado.SimplificarFormato();
            nuevo.SimplificarFormato();
            parrafoSeleccionado = nuevo;
            posicionInsercion   = 0;
            _estadisticas.RegistrarInsercionParrafo(parrafoSeleccionado, posicionInsercion, nuevo);
        }
Exemplo n.º 17
0
        public static void ProbarInsertarParrafoFin()
        {
            Documento d = new Documento();
            Parrafo   p = d.ObtenerParrafo(1);

            p.AgregarCadena("Esta es una prueba");

            d.InsertarParrafo(p, p.Longitud);
            Debug.Assert(p.ToString() == "Esta es una prueba");
            Debug.Assert(p.Siguiente.ToString() == "");
        }
Exemplo n.º 18
0
        private int BuscarInt(int lineainicio, Parrafo parrafoBuscado)
        {
            if (_lineas.Count == 0)
            {
                return(-1);
            }
            if (_lineas[_lineas.Count - 1].Parrafo.EsSiguiente(parrafoBuscado))
            {
                return(-1);//No se encuentra en líneas disponibles
            }
            int iniciob = BusquedaBin(_lineas, parrafoBuscado, 0, _lineas.Count - 1);

            if (iniciob != -1)
            {
                while (iniciob > 0 && _lineas[iniciob].Inicio != 0)
                {
                    iniciob--;
                }
            }
            return(iniciob);
            //if (_lineas[lineainicio].Parrafo.EsSiguiente(p))
            //{
            //    for (int i = lineainicio + 1; i < _lineas.Count; i++)
            //    {

            //        if (_lineas[i].Parrafo == p)
            //        {
            //            return i;
            //        }
            //        if (!_lineas[i].Parrafo.EsSiguiente(p))
            //        {
            //            break;
            //        }
            //    }
            //}
            //else
            //{
            //    for (int i = lineainicio; i >= 0; i--)
            //    {
            //        Linea act = _lineas[i];
            //        if (act.Parrafo == p)
            //        {
            //            if (act.Inicio == 0)
            //            {
            //                return i;
            //            }
            //        } else if (!p.EsSiguiente(_lineas[i].Parrafo))
            //        {
            //            break;
            //        }
            //    }
            //}
            //return -1;
        }
Exemplo n.º 19
0
 internal void RegistrarInsercionParrafo(Parrafo parrafoSeleccionado, int posicion, Parrafo nuevo)
 {
     if (parrafoSeleccionado.EsSiguiente(nuevo))
     {
         RegistrarCambios(parrafoSeleccionado, nuevo);
     }
     else
     {
         RegistrarCambios(nuevo, parrafoSeleccionado);
     }
 }
Exemplo n.º 20
0
        public static void ProbarInsertarParrafoInicio()
        {
            Documento d = new Documento();
            Parrafo   p = d.ObtenerParrafo(1);

            p.AgregarCadena("Esta es una prueba");

            d.InsertarParrafo(p, 0);
            Debug.Assert(p.ToString() == "Esta es una prueba");
            Debug.Assert(p.Anterior.ToString() == "");
        }
Exemplo n.º 21
0
        public void SeleccionarTodo()
        {
            Parrafo inicio = _documentoEdicion.ObtenerPrimerParrafo();
            Parrafo fin    = _documentoEdicion.ObtenerUltimoParrafo();

            parrafoInicioRango  = inicio;
            posicionInicioRango = 0;
            parrafoFinRango     = fin;
            posicionFinRango    = fin.Longitud;
            parrafoSeleccionado = parrafoInicioRango;
            posicionInsercion   = 0;
        }
Exemplo n.º 22
0
        public static void ProbarInsertarParrafoMedio()
        {
            Documento d = new Documento();
            Parrafo   p = d.ObtenerParrafo(1);

            p.AgregarCadena("Esta es una prueba");

            d.InsertarParrafo(p, 5);
            //cursor antes de caracter
            Debug.Assert(p.ToString() == "Esta ");
            Debug.Assert(p.Siguiente.ToString() == "es una prueba");
            Debug.Assert(p.Siguiente.Anterior == p);
        }
Exemplo n.º 23
0
        public static void PruebaAgregarCaracter()
        {
            Documento doc = new Documento();
            Parrafo   p   = doc.ObtenerParrafo(1);

            p.AgregarCaracter(0, 'a');
            Debug.Assert(p.ToString() == "a");
            p.AgregarCaracter(0, 'h');
            Debug.Assert(p.ToString() == "ha");
            p.AgregarCaracter(1, 'o');
            Debug.Assert(p.ToString() == "hoa");
            p.AgregarCaracter(2, 'l');
            Debug.Assert(p.ToString() == "hola");
        }
Exemplo n.º 24
0
 private void AvanzarHastaLinea(Parrafo parrafoInicio, Linea linea)
 {
     _parrafoActual = parrafoInicio;
     _enumerador    = _parrafoActual.ObtenerIndices().GetEnumerator();
     while (_enumerador.MoveNext())
     {
         _primerBloque = _enumerador.Current;
         if (_primerBloque.ContieneCaracter(linea.Inicio))
         {
             _primerBloque.AvanzarIndice(linea.Inicio - _primerBloque.Inicio);
             break;
         }
     }
 }
Exemplo n.º 25
0
        public static void PruebaBorrarCaracter()
        {
            Documento doc = new Documento();
            Parrafo   p   = doc.ObtenerParrafo(1);

            p.AgregarCaracter(0, 'a');
            Debug.Assert(p.ToString() == "a");
            p.AgregarCaracter(0, 'h');
            p.BorrarCaracter(0);
            Debug.Assert("h" == p.ToString());
            p.BorrarCaracter(0);
            Debug.Assert("" == p.ToString());
            p.BorrarCaracter(0);
        }
Exemplo n.º 26
0
        private void Recalcular(Parrafo p)
        {
            Parrafo busq         = p;
            int     indicelinea  = 0;
            int     indicepagina = 0;

            indicelinea = _Lineas.Recalcular(p, p);
            if (_Paginas.Count > 0)
            {
                Pagina act;
                indicelinea  = Math.Max(indicelinea - 1, 0);//Recalcular desde una linea antes (caso de inicio de página, y linea que disminuye de tamaño hasta entrar en página anterior
                indicepagina = BuscarPaginaExistenteLinea(indicelinea, 0, _Paginas.Count - 1);
                if (indicepagina == -1)
                {
                    indicepagina = 0;
                    act          = _Paginas[0];
                    while (indicepagina < _Paginas.Count - 1 && indicelinea > act.LineaInicio + act.Cantidad)
                    {
                        indicepagina++;
                        act = _Paginas[indicepagina];
                    }
                }
                else
                {
                    act = _Paginas[indicepagina];
                }
                int inicioPagina = act.LineaInicio;
                int finPagina    = act.LineaInicio + act.Cantidad;

                if (inicioPagina <= indicelinea && indicelinea < finPagina)
                {
                    act.Recalcular(indicelinea);
                    _Paginas.RemoveRange(indicepagina + 1, _Paginas.Count - indicepagina - 1);
                    _listaCompleta = false;
                }
                else
                {
                    if (indicepagina == _Paginas.Count - 1)
                    {
                        _listaCompleta = false;
                    }
                }
            }
            else
            {
                _listaCompleta = false;
            }
        }
Exemplo n.º 27
0
 private void Recalcular(int indiceLinea, Parrafo actual)
 {
     if (!_enIteracionLineas)
     {
         if (indiceLinea < _lineas.Count)
         {
             parrafoActual     = actual;
             numcaracterActual = 0;
             completo          = false;
             _lineas.RemoveRange(indiceLinea, _lineas.Count - indiceLinea);
         }
     }
     else
     {
         throw new Exception("No se puede recalcular mientras se itera por las lineas");
     }
 }
Exemplo n.º 28
0
        public static void PruebaDividirParrafo3()
        {
            Documento doc = new Documento();
            Parrafo   p   = doc.ObtenerParrafo(1);

            p.AgregarCaracter(0, 'h');
            p.AgregarCaracter(1, 'o');
            p.AgregarCaracter(2, 'l');
            p.AgregarCaracter(3, 'a');
            Parrafo nuevo = p.DividirParrafo(2, 4);

            Debug.Assert(nuevo.ToString() == "");
            Debug.Assert(p.ToString() == "hola");
            Debug.Assert(p.Anterior == null);
            Debug.Assert(nuevo.Anterior == p);
            Debug.Assert(nuevo.Siguiente == null);
        }
Exemplo n.º 29
0
 public int Recalcular(Parrafo inicio, Parrafo fin)
 {
     if (!_enIteracionLineas)
     {
         if (_lineas.Count > 0)
         {
             int a = BuscarInt(0, inicio);
             if (a != -1)
             {
                 Recalcular(a, inicio);
                 return(a);
             }
             else
             {
                 if (inicio.Anterior != null)
                 {
                     a = BuscarInt(0, inicio.Anterior);
                     if (a != -1)
                     {
                         Recalcular(a, inicio.Anterior);
                         return(a);
                     }
                     else
                     {
                         return(Math.Max(_lineas.Count - 1, 0));
                         //throw new Exception("Párrafo no encontrado");
                     }
                 }
                 else
                 {
                     Recalcular(0, _documento.ObtenerPrimerParrafo());
                     return(0);
                 }
             }
         }
         else
         {
             return(0);
         }
     }
     else
     {
         throw new Exception("No se puede recalcular mientras se itera por las lineas");
     }
 }
Exemplo n.º 30
0
        public int ObtenerNumCaracter(Medicion posicionx, Medicion anchoLinea)
        {
            if (Cantidad == 0)
            {
                return(0);
            }
            posicionx -= ObtenerDeltaAlineacion(anchoLinea);
            if (posicionx < new Medicion(0))
            {
                posicionx = new Medicion(0);
                return(0);
            }

            string    linea = Parrafo.ToString().Substring(Inicio, Cantidad);
            Medicion  maxbase;
            TamBloque tam = MedirDeParrafo(Inicio, Cantidad, out maxbase);
            Medicion  anchocaracterespromedio = tam.Ancho / linea.Length;

            if (posicionx > tam.Ancho)
            {
                return(Cantidad);
            }
            else
            {
                int      posicionestimada = (int)(posicionx / anchocaracterespromedio);//((posicionx / anchocaracterespromedio) * tam.Width);
                Medicion pos = ObtenerPosicionCaracter(posicionestimada, out maxbase);
                while (posicionestimada > 0 && pos - posicionx > Medicion.Cero)
                {
                    posicionestimada--;
                    pos = ObtenerPosicionCaracter(posicionestimada);
                }
                while (posicionestimada < Cantidad - 1 && pos - posicionx < Medicion.Cero)
                {
                    posicionestimada++;
                    pos = ObtenerPosicionCaracter(posicionestimada, out maxbase);
                }
                if (posicionestimada > 0 && pos - posicionx > Medicion.Cero)
                {
                    posicionestimada--;
                    pos = ObtenerPosicionCaracter(posicionestimada, out maxbase);
                }
                Normalizar(ref posicionestimada);
                return(posicionestimada);
            }
        }