Foros del Web » Programando para Internet » PHP »

PHP OO Justificacion con silabeo

Estas en el tema de Justificacion con silabeo en el foro de PHP en Foros del Web. Hola a todos! Les escribo para hacerles una pregunta: un cliente me esta pidiendo que en un newsletter, en el cual la info se agrega ...

  #1 (permalink)  
Antiguo 09/05/2011, 14:57
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Pregunta Justificacion con silabeo

Hola a todos!
Les escribo para hacerles una pregunta: un cliente me esta pidiendo que en un newsletter, en el cual la info se agrega por php antes de generar el html, los textos esten justificados. Mi respuesta fue: de toque! ... le puse text-align:justify .... se lo entregue y quedo feliz ... pero no tanto .. ahora quiere que no se generen espacios en balnco tan grandes ... en otras palabras, que corte automaticamente las palabras por silabeo y les agregue el guión antes de descender de linea......Por lo que he visto esto es bien raro y no encunetro una buena solución para esto..... alguien sabe como hacerlo ... no hay una función en php armada para esto? wordwrap() no alcanza....... ah, para complicarla, entre el texto hay varias etiquetas html!
Muchisimas gracias por la ayuda!
Saludos!
Pablo
  #2 (permalink)  
Antiguo 09/05/2011, 15:03
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Justificacion con silabeo

por que le das un aliniado a la izquierda.. y agregas margenes a la derecha y a la izquierda (considerables) o necesitas mas que esto?
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #3 (permalink)  
Antiguo 09/05/2011, 15:11
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

mmmm, no no ... porque necesito que encaje justo con una foto que esta arriba ..... necesito que se corten como en un libro, como en word ....
esta dificil la cosa ... ya busque a muerte y no encontre nada
  #4 (permalink)  
Antiguo 09/05/2011, 15:11
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Justificacion con silabeo

y si agregas un div para la foto? nose digo...
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #5 (permalink)  
Antiguo 09/05/2011, 15:37
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

mmm leo ... muchas gracias por tu ayuda ... pero ese no es el camino ... sea como sea ... estoy necesitando alguna funcion que haga por ejemplo esto:
yo calculo que en una celda de 200 de ancho me entran, digamos, entre 50 y 55 caracteres... dependiendo los caracteres cierto? entonces quiero que cada 50 caracteres divida por silabas ... se entiende?
  #6 (permalink)  
Antiguo 09/05/2011, 15:51
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Justificacion con silabeo

si creo que entiendo... veo complicada la parte de dividir en silabas.. para hacer uno la funcion, pero calculo que ya deben exitir algunas funciones como estas....
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #7 (permalink)  
Antiguo 09/05/2011, 15:58
Avatar de leo_nqn  
Fecha de Ingreso: abril-2010
Ubicación: Neuquen
Mensajes: 461
Antigüedad: 14 años
Puntos: 24
Respuesta: Justificacion con silabeo

Mira esto:
http://www.programacionweb.net/artic...iculo/?num=112
no se si te va a servir, pero talvez te pueda guiar.. Saludos!
__________________

Blog: http://leonardonqn.blogspot.com
Twitter:@Leo_FFerreyra
  #8 (permalink)  
Antiguo 09/05/2011, 16:27
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

el problema es que no puede existir una función en PHP que haga esto por que para empezar PHP no esta hecha en español y por lo tanto una palabra como

SALE que en español se divide en 2 silabas (del verbo salir) SA - LE.

en ingles significa "venta" y se lee "seil" como una silaba.

dejando de lado la clase de ingles, creo que es posible cortar en silabas españolas deduciendo que la mayoria de las palabras en español se cortan al encontrarse una vocal con una consonante que no continue con otra consonante, o mejor dicho cualquier combinacion consonante-silaba debería ser el comienzo de una silaba.

Resumiendo

Estas palabras se separaría usando este método
CE - LU - LAR
MA - RIO - NE - TA
PSI - CO - LO - GIA
TE - CLA - DO
BO - TE - LLA

Aqui se comete un error no tan grave al no separar TE-A pero es pasable
AN - FI - TEA - TRO

Aquí si se cometen errores grave usando este método
MA - NTE - QUI - LLA
CA - LCE - TA
CA - STI - LLO
PE - RDON
CO - RTAR

habría que identificar cuales consonantes deberían separarse si están juntas para crear una función.

ABIMAELRC, AQUI TIENES UNA BUENA IDEA DE FUNCIÓN XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #9 (permalink)  
Antiguo 09/05/2011, 19:28
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

Bien, muchas gracias por la ayuda .... el tema es que hay demasiadas excepciones ... ademas hay que tener en cuenta que la cadena es muy posible que tenga etiquetas html (aunque creo que es un problema menor este) ...
Esa funcion ya no la habra escrito alguien!??!?!? para mi que si .. solo hay que encontrarla ... pero no se donde!!!
gracias a todos!
  #10 (permalink)  
Antiguo 09/05/2011, 20:04
Avatar de AndresTorres  
Fecha de Ingreso: abril-2011
Ubicación: Capital Federal, ARG
Mensajes: 49
Antigüedad: 13 años
Puntos: 13
Respuesta: Justificacion con silabeo

Me parece una perdida de tiempo realizar una función para esto, a veces hay que adaptarse a lo que se tiene y en todo caso tu problema se podría solucionar con un rediseño de la newsletter, no complicandote la vida por un pequeño detalle vistual, es decir, para mi la solución es darle la vuelta por otro lado mas que programar, al menos tomalo como recomendación.
  #11 (permalink)  
Antiguo 09/05/2011, 20:08
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

si si, de acuerdo ..... le avise al cliente que solo lo intentaba solucionar como desafio personal, no para el ... al el ya le dije que NO SE PODIA! ... pero estaria bueno lograrlo solo por lograrlo!!
  #12 (permalink)  
Antiguo 09/05/2011, 20:19
Avatar de AndresTorres  
Fecha de Ingreso: abril-2011
Ubicación: Capital Federal, ARG
Mensajes: 49
Antigüedad: 13 años
Puntos: 13
Respuesta: Justificacion con silabeo

Cita:
Iniciado por pabletein Ver Mensaje
si si, de acuerdo ..... le avise al cliente que solo lo intentaba solucionar como desafio personal, no para el ... al el ya le dije que NO SE PODIA! ... pero estaria bueno lograrlo solo por lograrlo!!
Te felicito por esa iniciativa de hacerlo por hacerlo, a más de uno le serviría, la verdad a mi me podes meter en programación cualquier tema menos lengua y ortografía, deber ser por eso que ni por mi mismo lo haría, suerte y si lo logras hacer compartilo, sería muy util!
  #13 (permalink)  
Antiguo 09/05/2011, 20:27
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

jajaja .... si si ... es meterse en la boca del lobo esto ... cuando tenga tiempo voy ver si lo logro....auqneu tal vez es demasiado enrosque al pedo.... veremos
  #14 (permalink)  
Antiguo 10/05/2011, 07:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Justificacion con silabeo

Cita:
Iniciado por stramin Ver Mensaje
ABIMAELRC, AQUI TIENES UNA BUENA IDEA DE FUNCIÓN XD
¿Como sabía que iba a leer este tema ?

Bueno, es muy complicado crear este tipo de función. Se debe saber las normas y todo lo que conlleva. Si uno tiene en cuenta todas las normas, en ese caso se podría crear este tipo de función. Por mi parte lo dejo para algún día que no tenga algo que hacer
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 10/05/2011, 07:15
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

si quieren podriamos hacerla por partes y vamos aportando un poco cada uno...les parece?
  #16 (permalink)  
Antiguo 10/05/2011, 08:27
Avatar de AndresTorres  
Fecha de Ingreso: abril-2011
Ubicación: Capital Federal, ARG
Mensajes: 49
Antigüedad: 13 años
Puntos: 13
Respuesta: Justificacion con silabeo

Cita:
Iniciado por pabletein Ver Mensaje
si quieren podriamos hacerla por partes y vamos aportando un poco cada uno...les parece?
No comparto esa metodología... es para no terminarlo más posiblemente por eso no hay una existente
  #17 (permalink)  
Antiguo 10/05/2011, 08:31
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

jajaja ... es posible, es cierto ... pero tambien he visto esas cosas colaborativas y terminan siendo unas muy buenas funciones ... apenas tenga tiempo tiro las primeras lineas
  #18 (permalink)  
Antiguo 10/05/2011, 11:40
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

Pues a mi me parece interesante la idéa, creo que bastaría con entender las excepciones, solo tenemos 21 consonantes y 21x21 son 441 combinaciones... ok si que son muchas

Consonantes (sin contar ñ)
BCDFGHJKLMNPQRSTVWXYZ

Tras realizar pruebas con todas las consonantes descubrí que todas siguen el mismo patrón, hay 3 tipos de consonantes, algunas mas fuertes y otras mas débiles, ademas de algunas excepciones, en definitiva las reglas deberían ser:
  • Una palabra empezada en una o mas consonantes no se separan nunca (TRA-CCION)
  • Una palabra que termina en una o mas consonantes no se separan nunca (HONG KONG)

Si contine 2 o mas consonantes y no esta al inicio o al final de la palabra entonces se emplean estas reglas:

hay 3 niveles de consonantes que llamare Fuertes, medias o débiles

Solo se mantienen juntas las uniones de consonantes fuerte-media en ese orden

Fuertes(3): BCDFGJKPQTVX
Medias(2): HLRSWYZ
Debiles(1): MN (se separan siempre)

Excepción: si la primera es H se separan siempre (AH-BA)

Ejemplos:

MOSTRAR: ST Media con una superior se separan MOS-TRAR (TR Fuerte con media no se separan)

FIRMA: RM la segunda es débil se separan FIR-MA

TEXTO: XT ambas son fuertes, se separan. TEX-TO

CABLE: BL Superior con media no se separan

entonces en programación solo quedaría poner que si hay don consonantes juntas obtener el nivel de ambas, si la primera es fuerte(3) y la segunda es media(2) no separar la silaba, todas las demás posibilidades si se separan.

Espero que alguien se anime a hacer la función XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #19 (permalink)  
Antiguo 10/05/2011, 11:52
Avatar de AndresTorres  
Fecha de Ingreso: abril-2011
Ubicación: Capital Federal, ARG
Mensajes: 49
Antigüedad: 13 años
Puntos: 13
Respuesta: Justificacion con silabeo

Llamenme cagón, pero se lo que pasa con estas funciones, arranca de un bosquejo ordenado y llamativo y termina siendo un nido de if , excepsiones y demás, jaja yo paso ^^ suerte
  #20 (permalink)  
Antiguo 10/05/2011, 12:48
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

Bueno, organicemos un poquito entonces... voy a describir la parte mas facil:
1. tendriamos que sacarle a la cadena las etiquetas html
aca tenemos algo que puede ayudar:
[URL="http://ar2.php.net/manual/es/function.wordwrap.php"]http://ar2.php.net/manual/es/function.wordwrap.php[/URL]
2. habria que calcular a mano en la medida que definimos cuantos son los carateres que mas presisamente entran (esto habria que hacerlo a mano ya que eso va a depender del estilo del texto) ... entonces, digamos, si el div mide 200px, sabemos que entran ej. 70 caracteres por linea como maximo.
3. habria que detectar la ultima palabra, mejor dicho el espacio mas cercano al caracter 70
tenemos algo de ayuda con eso aca:
[URL="http://foros.cristalab.com/php-como-recortar-un-texto-sin-cortar-la-ultima-palabra-t12854/"]http://foros.cristalab.com/php-como-recortar-un-texto-sin-cortar-la-ultima-palabra-t12854/[/URL]. De este modo sabemos ya cual es la ultima palabra.
4. separarla en silabas (he aqui el gran kilombo)
5. ir sumando silabas hasta llegar lo mas cerca posible de 70 caracteres.
6.cortar la cadena por esa silaba, agregarle "-<br />"
7. volver a ponerle las etiquetas html

ufffff.... que kilombo, y eso que ni me meti en la parte de dividirla por silabas ... lo que se podria hacer son 2 funciones por separado tal vez....

ojala lleguemos a algo usable!
  #21 (permalink)  
Antiguo 10/05/2011, 13:13
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

1. tendriamos que sacarle a la cadena las etiquetas html
aca tenemos algo que puede ayudar:
[URL="http://ar2.php.net/manual/es/function.wordwrap.php"]http://ar2.php.net/manual/es/function.wordwrap.php[/URL]


Te dejo esa parte XD, lo interesante sería sacar los links y marcar en que partes estaba de modo de volver a ponerlo después de separar las silabas

2. habría que calcular a mano en la medida que definimos cuantos son los carateres que mas presisamente entran (esto habria que hacerlo a mano ya que eso va a depender del estilo del texto) ... entonces, digamos, si el div mide 200px, sabemos que entran ej. 70 caracteres por linea como máximo.

para eso tenemos la función imageftbox() y imagettfbbox() que calculan el tamaño de las palabras dependiendo del tipo de fuente.

3. habria que detectar la ultima palabra, mejor dicho el espacio mas cercano al caracter 70
tenemos algo de ayuda con eso aca:
[URL="http://foros.cristalab.com/php-como-recortar-un-texto-sin-cortar-la-ultima-palabra-t12854/"]http://foros.cristalab.com/php-como-recortar-un-texto-sin-cortar-la-ultima-palabra-t12854/[/URL]. De este modo sabemos ya cual es la ultima palabra.


para eso también usamos las funciones bbox ya mencionadas.

4. separarla en silabas (he aqui el gran kilombo)

Esto ya lo hice :)

5,6,7. ir sumando silabas hasta llegar lo mas cerca posible de 70 caracteres.
cortar la cadena por esa silaba, agregarle "-<br />"
volver a ponerle las etiquetas html


si logramos todo eso nevará XD

Bueno esta es la función que hice para separar silabas, puede que tenga errores y estoy seguro que abimaelrc lo habría hecho mejor XD

Código PHP:
<?php
function escons($char){
    
$char=strtolower($char);
    if(
$char=="a" or $char=="e" or $char=="i" or $char=="o" or $char=="u" or $char=="" or $char==" ")return false;
    else return 
true;
}
function 
esvoc($char){
    
$char=strtolower($char);
    if(
$char=="a" or $char=="e" or $char=="i" or $char=="o" or $char=="u")return true;
    else return 
false;
}
function 
juntas($chars){
    
$chars=strtolower($chars);
    
$char1=substr($chars,0,1);
    
$char2=substr($chars,1,1);
    if(
$char1=="h") return true;
    if(
$char1=="b" or $char1=="c" or $char1=="d" or $char1=="f" or $char1=="g" or $char1=="j" or $char1=="k" or $char1=="p" or $char1=="q" or $char1=="t" or $char1=="v" or $char1=="x")
        if(
$char2=="h" or $char2=="l" or $char2=="r" or $char2=="s" or $char2=="w" or $char2=="y" or $char2=="z")return true;
    if(
$char1==$char2)
        if(
$char1=="l" or $char1=="r")return true;
    return 
false;
}
$texto="esto es un texto de prueba: Llamenme cagon pero se lo que pasa con estas funciones arranca de un bosquejo ordenado y llamativo y termina siendo un nido de if  excepsiones y demas jaja yo paso ^^ suerte";
$prev="";$reprev="";
for(
$f=0;$f<strlen($texto);$f++){
    
$current=substr($texto,$f,1);
    
$next=substr($texto,$f+1,1);
    if((
esvoc($prev) and escons($current) and $next!=" " and !escons($next)) or (escons($prev) and escons($current) and!juntas($prev.$current))){
        
$texto=substr($texto,0,$f)."-".substr($texto,$f);
        
$f++;
    }elseif(
esvoc($reprev) and escons($prev) and escons($current)){
        
$texto=substr($texto,0,$f-1)."-".substr($texto,$f-1);
        
$f++;
    }
    
$reprev=$prev;
    
$prev=$current;
}
echo 
$texto;
?>
no funciona con tildes y puede dar problemas si hay comas (,), puntos (.), guiones(-) y otros símbolos, así como esta devuelve:

es-to es un tex-to de prue-ba: Lla-men-me ca-gon pe-ro se lo que pa-sa con es-tas fun-cio-nes a-rran-ca de un bos-que-jo or-de-na-do y lla-ma-ti-vo y ter-mi-na sien-do un ni-do de if ex-ce-psio-nes y de-mas ja-ja yo pa-so ^-^ suer-te

lo cual me parece excelente!

(el texto elegido para la prueba fué al azar, nada personal)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #22 (permalink)  
Antiguo 10/05/2011, 13:21
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

pufffff .... tremendo avance!!!
en unos dias reviso esas funciones de las que me hablas! ... no tengo tiempo estos dias
  #23 (permalink)  
Antiguo 10/05/2011, 13:48
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

y aquí el código para calcular la cantidad de letras necesarias para no salirse de un espacio de 400px, lo hice con verdana y necesita tener el archivo verdana.ttf para funcionar:

Código PHP:
Ver original
  1. <font face="Verdana">
  2. <?php
  3. function box($cadena){
  4.     $box=imagettfbbox("11",0,"verdana.ttf",$cadena);
  5.     return $box[2]-$box[0];
  6. }
  7. $texto="Todos los MMORPG siguen el modelo cliente-servidor. Los jugadores, que usan el programa cliente, son representados en el mundo del juego a través de un avatar una representación gráfica del personaje con el que juegan-. Los proveedores (normalmente los creadores del juego), guardan el mundo persistente en el que habitan estos jugadores. Esta interacción entre un mundo virtual, siempre disponible para jugar, y un oscilante flujo mundial de jugadores es lo que caracteriza a los juegos de rol multijugador masivos en línea. Una vez que un jugador entra en el mundo virtual, puede participar en una amplia variedad de actividades con otros jugadores a lo largo de todo ese mundo. Los desarrolladores de MMORPG se encargan de supervisar el mundo virtual y ofrecer a los usuarios un conjunto de actividades y mejoras constantemente actualizado, para garantizar el interés de sus clientes.";
  8. while(strlen($texto)>0){
  9.     $segmento=$texto;
  10.     if(strlen($segmento)>100) $len=100; else $len=strlen($segmento);
  11.     for($f=$len;box(substr($segmento,0,$f))>400;$f--){
  12.        
  13.     }
  14.     echo "letras: ".$f." (".box(substr($segmento,0,$f))."px)<br>";
  15.     echo substr($segmento,0,$f)."<br>";
  16.     $texto=substr($segmento,$f);
  17. }
  18. ?>
  19. </font>

el texto de prueba esta muy largo y salen unos errores extraños que dicen "something happen" XD, con error_reporting(0), no se ven, supongo que son errores de la función que es algo nueva...

la salida es esta:

Cita:

letras: 51 (399px)
Todos los MMORPG siguen el modelo cliente-servidor.
letras: 53 (400px)
Los jugadores, que usan el programa cliente, son rep
letras: 52 (396px)
resentados en el mundo del juego a través de un avat
letras: 53 (394px)
ar una representación gráfica del personaje con el qu
letras: 50 (395px)
e juegan-. Los proveedores (normalmente los creado
letras: 53 (399px)
res del juego), guardan el mundo persistente en el qu
letras: 53 (393px)
e habitan estos jugadores. Esta interacción entre un
letras: 53 (397px)
mundo virtual, siempre disponible para jugar, y un os
letras: 55 (398px)
cilante flujo mundial de jugadores es lo que caracteriz
letras: 54 (396px)
a a los juegos de rol multijugador masivos en línea. U
letras: 52 (394px)
na vez que un jugador entra en el mundo virtual, pue
letras: 53 (395px)
de participar en una amplia variedad de actividades c
letras: 52 (396px)
on otros jugadores a lo largo de todo ese mundo. Los
letras: 49 (395px)
desarrolladores de MMORPG se encargan de supervi
letras: 54 (396px)
sar el mundo virtual y ofrecer a los usuarios un conju
letras: 52 (400px)
nto de actividades y mejoras constantemente actualiz
letras: 54 (393px)
ado, para garantizar el interés de sus clientes.
como verán las lineas se cortan al llegar a 400px.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #24 (permalink)  
Antiguo 10/05/2011, 13:53
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

groso Stramin!!!! increible!!! ya con eso estas a punto!!!! jajajja.... al final no he hecho un carajo!!! jajajaja
  #25 (permalink)  
Antiguo 10/05/2011, 13:56
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

la verdad ya no falta tanto, pero no se me ocurre bien como juntar las 2 cosas XD

ademas falta toda la parte de sacar los códigos HTML, no creo que eso sea tan complicado y deben haber funciones hechas.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #26 (permalink)  
Antiguo 10/05/2011, 13:59
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

mira, para sacar las etiquetas html hay algo aca ... en el primer ejemplo
http://ar2.php.net/manual/es/function.wordwrap.php
  #27 (permalink)  
Antiguo 10/05/2011, 14:09
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

yo creo que lo que hay que hacer es buscar todo los "<" y los ">", guardarlos en una cadena por ejemplo $tags[] y dejar en el texto original un identificador por ejemplo "~". luego de hacer las separaciones de lineas y silabas reemplazar todos esos tag por su <tag> correspondiente, por ejemplo:

esto es un <a href="">link</a> a <b>ningun</b> lado.

encontrar las etiquetas:

esto es un <a href="">link</a> a <b>ningun</b> lado.

guardarlas en el arreglo

$tags[0]=<a href="">
$tags[1]=</a>
$tags[2]=<b>
$tags[3]=</b>

dejar los identificadores:

esto es un ~link~ a ~ningun~ lado.

separar silabas por lineas

esto es un ~link~ a ~nin-<br>
gun~ lado.

reponer las etiqeutas:

esto es un <a href="">link</a> a <b>nin-<br>
gun</b> lado.

y estaría lista XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #28 (permalink)  
Antiguo 10/05/2011, 14:19
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

mas o menos ..... solo faltaria que al contar los caracteres esas ~ no las tenga en cuenta!!!! esto si que es hilar fino!!! jajajja
increible igual Strammin!!!
  #29 (permalink)  
Antiguo 10/05/2011, 16:31
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Justificacion con silabeo

Bueno estuve un rato a ver si sacaba algo, me gusto esto, traten a ver si les da algún problema.
Código PHP:
Ver original
  1. <?php
  2. $str = <<<LOREIMIPSUM
  3. Lorem ipsum dolor sit amet, <a href="#">consectetur</a> adipiscing elit. Praesent <b>ac</b> eros velit, quis ornare sapien. Donec tincidunt euismod convallis. Suspendisse cursus <a href="##########">dignissim</a> ligula sed sodales. Vivamus vitae tempor orci. Ut eros purus, vehicula ullamcorper cursus vel, sodales eget nibh. Suspendisse ullamcorper, nibh facilisis tempor tristique, metus libero luctus urna, sed hendrerit nibh neque a orci. Pellentesque quis felis vitae dolor lacinia tincidunt in at nisi. Pellentesque sed justo eros, pretium adipiscing ante. Morbi sodales mattis tristique. Praesent nulla elit, scelerisque vel luctus eu, porta non magna. Fusce dapibus porttitor leo, eget sagittis nisl ultrices vitae. Aenean vitae dolor id ipsum ultricies egestas vitae vitae enim.
  4.  
  5. Nam placerat sollicitudin laoreet. <strong>Mauris</strong> nec rhoncus mi. <a href="###############">Pellentesque</a> imperdiet turpis nunc, et convallis ipsum. Sed eget enim libero. Aliquam euismod imperdiet nibh et iaculis. Sed urna tellus, gravida eu aliquam in, consectetur ut turpis. Proin mollis ligula at nisl sagittis vel scelerisque sapien condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin facilisis fermentum augue ut pharetra. Nunc non tempor mi. In hac habitasse platea dictumst. Fusce et tellus quis libero interdum accumsan. Phasellus sit amet nisl eros, facilisis dignissim purus. Donec accumsan egestas justo, vitae pellentesque erat cursus vel. Cras mi nunc, faucibus id porttitor vel, venenatis sed justo. Quisque eget sem at est pretium eleifend vehicula rutrum erat. Aliquam feugiat erat at nunc vulputate porta. Sed diam nibh, malesuada a mattis vel, varius non massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
  6.  
  7. Curabitur iaculis molestie eros. <a href="################################################">Suspendisse</a> potenti. <br />Sed rutrum ullamcorper arcu, eu molestie nisl suscipit ut. Etiam gravida faucibus nulla, ac commodo tellus vulputate eget. Etiam molestie pretium turpis, in rutrum libero viverra et. Donec augue ligula, dignissim viverra consequat vitae, fringilla sed ante. Aenean at nibh id urna lacinia adipiscing. Nam id leo quam. Suspendisse et felis dui. Nulla facilisi.
  8. LOREIMIPSUM;
  9.  
  10. /**
  11.  * Configuration values
  12.  */
  13. $eraseFromString = array('<br />', '°');
  14. $maxChars = 80;
  15.  
  16.  
  17. preg_match_all('/<[^>]+>(?:(.+?)<[^>]+>)?/', $str, $replaceMatch);
  18.  
  19. if(!empty($replaceMatch[0])){
  20.     foreach($replaceMatch[0] as $k => $v){
  21.         $n = '%' . ($k+1) . '$s';
  22.         $strPad = strlen($replaceMatch[1][$k]) - strlen($n);
  23.         $str = str_replace($v, $n . str_pad('', ($strPad < 0 ? 0 : $strPad), '°'), $str);
  24.     }
  25. }
  26.  
  27. preg_match_all('/(?:.+?){1,' . $maxChars . '}%?\d*?\$?s?°*[\,\.\;\:]?/i', $str, $lines);
  28.  
  29. if(!empty($lines[0])){
  30.     /**
  31.      * Another way for old versions of php
  32.      * foreach($lines[0] as $k => $v){
  33.      *     $lines[0][$k] = vsprintf($v, $replaceMatch[0]);
  34.      * }
  35.      */
  36.     foreach($lines[0] as &$v){
  37.         $v = vsprintf($v, $replaceMatch[0]);
  38.         $v = str_replace($eraseFromString, '', $v);
  39.     }
  40.     /**
  41.      * This is important, erase reference
  42.      */
  43.     unset($v);
  44. }
  45.  
  46. echo !empty($lines[0])
  47.     ? implode('<br />', $lines[0])
  48.     : $str;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #30 (permalink)  
Antiguo 11/05/2011, 09:41
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Justificacion con silabeo

Según lo probé ese código efectivamente sirve para quitar las etiquetas y luego volverlas a poner donde estaban, pero encuentro un problema...

Al quitar las etiquetas no se puede ver el texto que esta dentro de ellas ya que se cambia por ° por lo tanto no se pueden cortar, también hay problemas si los textos tienen menos de 4 letras ya que no corresponde la cantidad de caracteres por linea.

sería genial que hiciera lo mismo pero solo con las etiquetas y no con el contenido de ellas, por ejemplo:

este <a href="#####">enlace azul</a> no hace nada.

podría quedar así:

este %1$senlace azul%2$s no hace nada.

de modo de poder cortar la parte de adentro.

este %1$senla-
ce azul%2$s no
hace nada.

también sería bueno que deje el resultado sin cortar las lineas con <br>.

La verdad aún no logro entender como puedes hacer todo esos códigos XD

vamos avanzando, pronto tendremos un código que podría salvar la vida de alguien :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: html, justificacion, silabeo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:33.