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; } }
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; } } }
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); } }
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()); } }
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; } }
public static void ProbarObtenerParrafo() { Documento d = new Documento(); Parrafo p = d.ObtenerParrafo(1); Debug.Assert(p != null); }
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); }
public void LimpiarSeleccion() { parrafoInicioRango = null; posicionInicioRango = null; parrafoFinRango = null; posicionFinRango = null; }
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); }
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()); } }
public ListaLineas(Documento documento, ListaPaginas listaPaginas) { _documento = documento; _lineas = new List <Linea>(); parrafoActual = documento.ObtenerPrimerParrafo(); numcaracterActual = 0; _listaPaginas = listaPaginas; }
internal Seleccion(Documento documento, Parrafo inicio, int posicionInicio, Parrafo fin, int posicionFin) { Documento = documento; Inicio = inicio; Fin = fin; PosicionParrafoInicio = posicionInicio; PosicionParrafoFin = posicionFin; }
public void InsertarTexto(string cadena) { ReemplazarSeleccion(); Parrafo final = _documentoEdicion.InsertarParrafos(ObtenerParrafos(cadena), parrafoSeleccionado, posicionInsercion); parrafoSeleccionado = final; posicionInsercion = 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)); }
public Posicion ObtenerPosicionCursor( int lineabusqueda, Parrafo parrafo, int posicion) { Posicion pos = BuscarParrafo(parrafo); pos.Avanzar(posicion); return(pos); }
public void InsertarParrafo() { ReemplazarSeleccion(); Parrafo nuevo = _documentoEdicion.InsertarParrafo(parrafoSeleccionado, posicionInsercion); parrafoSeleccionado.SimplificarFormato(); nuevo.SimplificarFormato(); parrafoSeleccionado = nuevo; posicionInsercion = 0; _estadisticas.RegistrarInsercionParrafo(parrafoSeleccionado, posicionInsercion, nuevo); }
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() == ""); }
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; }
internal void RegistrarInsercionParrafo(Parrafo parrafoSeleccionado, int posicion, Parrafo nuevo) { if (parrafoSeleccionado.EsSiguiente(nuevo)) { RegistrarCambios(parrafoSeleccionado, nuevo); } else { RegistrarCambios(nuevo, parrafoSeleccionado); } }
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() == ""); }
public void SeleccionarTodo() { Parrafo inicio = _documentoEdicion.ObtenerPrimerParrafo(); Parrafo fin = _documentoEdicion.ObtenerUltimoParrafo(); parrafoInicioRango = inicio; posicionInicioRango = 0; parrafoFinRango = fin; posicionFinRango = fin.Longitud; parrafoSeleccionado = parrafoInicioRango; posicionInsercion = 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); }
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"); }
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; } } }
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); }
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; } }
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"); } }
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); }
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"); } }
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); } }