none
Editor HTML problemas string RRS feed

  • Pergunta

  • Ola pessoal , tenho um duvida que a principio parece basica, mais que ta me fazendo perder algumas horas, enfim nao consigo a logica disso.

    Meu problema e:    dado que tenho um controle textboxEditor (e o controle onde posso formatar o texto como esse que estou escrevendo agora)

    Preciso :   limite de caracteres desse controle e de 8 mil:   

    Se o kra digita mais que 8 mil, tenho que pegar a parte que ele digitou a mais e colorir:

    A principio eu fiz isso:

    StringBuilder sb = new StringBuilder();

    sb.Append("<html><body> <p> Esse e meu texto </p></body><html>"); // meu conteudo html

      string ret = sb.ToString().Substring(0, 6); //aqui eu corto a string ate 6, mais na aplicacao devera ser 8000

      string textColorer = sb.ToString().Replace(ret, "");// aqui eu pego a sobra, ou seja, todos os carateres depois de 6, pois preciso dela pra colorir.

    ai vem o problema :

    a variavel ret contem :   "<html><"

    e a variavel textColorer contem o resto : "body> <p> Esse e meu texto </p></body><html>"

    Vejam que o body esta faltando uma abertura:  na minha aplicacao real tenho styles"fonti si

    ou seja sempre quebrado.   

    Eu tentei o codigo abaixo pra poder percorrer a string e localizar tags html e exclui-las.

     textColorer = Regex.Replace(textColorer, @"<[^>]*>"String.Empty)";

    ai a variavel textColorer = body> Esse e meu texto

    ou seja ainda ficou o body, pois a regex nao sabe que tem carater quebrado e por isso nao tira.

    Enfim eu preciso juntar as 2 partes e formar um novo html sendo que a parte quebrada mais a parte restante no caso:

    ret + textColorer.

    Para a variavel textColorer nao ha problema, pois eu posso usar a regex e exluir tudo que e html e depois colocar um codigo assim:  <font color="red"> + textColorer + </font>

    Assim ela fica vermelha, mais nao consigo a logica pra juntar, pois como eu quebrei a string nao consigo juntar de novo. Ja tentei fazer um for each char , caracter por caracter e fiz algumas coisas mais nada sai.

    Algum dos colegas podem me dar uma luz com essa logica ?

    Eu agradeco a paciencia de todos .

    sexta-feira, 27 de abril de 2012 21:09

Respostas

  • Ola Lourival,

    Fiz uma pequena adaptação no seu codigo abaixo. Tente usa-lo como base para o que vc precisa:

                string ret = string.Empty;
                string textColorer = string.Empty;
     
                int limiteString = 6;
                int tam_max_check_tags = 10;
                int indiceQuebraTexto = -1;
                string texto = sb.ToString();
                int textoLength = texto.Length;
                int tamTexto = limiteString + tam_max_check_tags + 1;
                int tamTextoChecagem = (tamTexto < textoLength ? tamTexto : textoLength);
                string textoParaChecagem = texto.Substring(0tamTextoChecagem);
     
                bool estaEmTag = false;
                for (int i = 0i < tam_max_check_tagsi++)
                {
                    if (limiteString + i >= textoLengthbreak;
     
                    // Vejo se estou em alguma tag, procurando por um ">" ate o limite de tamanho de tag
                    if (textoParaChecagem[limiteString + i== '>')
                    {
                        estaEmTag = true;
                        break;
                    }
                }
                if (estaEmTag)
                {
                    for (int i = 0i < tam_max_check_tagsi++)
                    {
                        if (limiteString - i < 0break;
     
                        // Procuro por um "<" ate o limite de tamanho de tag
                        if (textoParaChecagem[limiteString - i== '<')
                        {
                            indiceQuebraTexto = limiteString - i;
                            break;
                        }
                    }
                }
     
                if (indiceQuebraTexto == -1)
                {
                    indiceQuebraTexto = limiteString;
                }
     
                ret = texto.Substring(0indiceQuebraTexto);
                textColorer = texto.Substring(indiceQuebraTextotexto.Length - indiceQuebraTexto);
                textColorer = Regex.Replace(textColorer@"<[^>]*>"String.Empty);
    

    Basicamente, ele tenta saber se a quebra foi no meio de uma tag (suponho que toda a tag possui um '<' e um '>' e que o tamanho maximo eh de 10 caracteres). Se estiver, faz a quebra um pouco antes para que a tag se mantenha inteira. Veja se funciona e me avisa.

    Abracos, Daniel.


    -- Se minha sugestão ajudou, por favor marque-a como útil; Se resolveu a questão, por favor marque-a como resposta. Contribua para melhorar o fórum! | daniel@dimamura.com.br

    segunda-feira, 30 de abril de 2012 18:23