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. no tuve tiempo de probarlo ...... pero creeria que con propuesto por ti stramin deberia funcionar perfectamente ... solo le falta que al contar los ...

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

no tuve tiempo de probarlo ...... pero creeria que con propuesto por ti stramin deberia funcionar perfectamente ... solo le falta que al contar los caracteres haga la excepcion con los ~ ...... una cosa que se podria hacer es tomar una copia de la cadena con los ~ asi despues se tiene uan referencia .... pero me parece mas bardo .. no se ... disculpen que no he tenido tiempo para aportar ... auqnue ni se si podria ... esto esta al limite de mis conocimientos!
  #32 (permalink)  
Antiguo 11/05/2011, 09:47
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

créeme que para mi también, el único que se siente como en su casa es abimaelrc XD así que a estudiar!
__________________
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
  #33 (permalink)  
Antiguo 11/05/2011, 09:52
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Justificacion con silabeo

Cita:
Iniciado por stramin Ver Mensaje
La verdad aún no logro entender como puedes hacer todo esos códigos XD
Yo tampoco, a veces me sorprendo, es verdad que tengo que esperar como 10 años para hacer algo así, pero ahí vamos

Cita:
Iniciado por stramin Ver Mensaje
vamos avanzando, pronto tendremos un código que podría salvar la vida de alguien :)
Que dramático

Es algo sencillo
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. preg_match_all('/<[^>]+>/', $str, $replaceMatch);
  17.  
  18. if(!empty($replaceMatch[0])){
  19.     foreach($replaceMatch[0] as $k => $v){
  20.         $str = str_replace($v, '%' . ($k+1) . '$s', $str);
  21.     }
  22. }
  23.  
  24. preg_match_all('/(?:.+?){1,' . $maxChars . '}(?:\%\d*\$s)?[\,\.\;\:]?/i', $str, $lines);
  25.  
  26. if(!empty($lines[0])){
  27.     /**
  28.      * Another way for old versions of php
  29.      * foreach($lines[0] as $k => $v){
  30.      *     $lines[0][$k] = vsprintf($v, $replaceMatch[0]);
  31.      * }
  32.      */
  33.     foreach($lines[0] as &$v){
  34.         $v = vsprintf($v, $replaceMatch[0]);
  35.         $v = str_replace($eraseFromString, '', $v);
  36.     }
  37.     /**
  38.      * This is important, erase reference
  39.      */
  40.     unset($v);
  41. }
  42.  
  43. echo !empty($lines[0])
  44.     ? implode('<br />', $lines[0])
  45.     : $str;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #34 (permalink)  
Antiguo 11/05/2011, 10:33
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

perfecto, incluso noté que si hay 2 cadenas iguales las guarda en el mismo numero para no gastar espacio.

Como haría para reemplazar todos los "%#$s" por ""

sin tener que hacer algo como:

$texto=str_replace("%1$s","",$texto);
$texto=str_replace("%2$s","",$texto);
$texto=str_replace("%3$s","",$texto);
$texto=str_replace("%4$s","",$texto);
$texto=str_replace("%5$s","",$texto);
...etc...

para poder contar el ancho en pixels sin considerar esos identificadores?
__________________
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
  #35 (permalink)  
Antiguo 11/05/2011, 10:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Justificacion con silabeo

Mira el segundo preg_match_all para que veas como hago para leer esos datos.

Edito: Se me olvidaba, necesitas usar preg_replace para lograrlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #36 (permalink)  
Antiguo 11/05/2011, 10:40
 
Fecha de Ingreso: julio-2008
Mensajes: 45
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Justificacion con silabeo

esto ya se me va de las manos..... increible gente, nunca me habia pasado de proponer una funcion asi y que alguien se cope a hacerla!!!!
  #37 (permalink)  
Antiguo 11/05/2011, 10:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Justificacion con silabeo

Ehhh, por si acaso, ese código no verifica totalmente si cumple con la división de silabas. Solo hace división por cada 80 caracteres, eso incluye los espacios en blanco.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #38 (permalink)  
Antiguo 11/05/2011, 10:55
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

te refieres a esto!?

preg_match_all('/(?:.+?){1,' . $maxChars . '}(?:\%\d*\$s)?[\,\.\;\:]?/i', $str, $lines);

NO TENGO IDEA QUE ES ESO! XD

supongo que podría ser algo así:

preg_replace('/(?:.+?){1,' . $maxChars . '}(?:\%\d*\$s)?[\,\.\;\:]?/i',"",$str);

pero no entiendo por que esta ese $maxChars, fijate que no estoy usando el separador de lineas, estoy usando la cadena completa que generas ($str).

había visto expresiones regulares en JS, pero en PHP las entiendo poco...
__________________
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
  #39 (permalink)  
Antiguo 11/05/2011, 11:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Justificacion con silabeo

Es lo mismo, tal vez alguna que otra cosa le añaden, pero te aseguro gran porciento de las expresiones regulares es igual que en otro lenguaje.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #40 (permalink)  
Antiguo 11/05/2011, 11:59
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

en ese caso, podría ser así?

preg_replace('.*(\%\d+\$s)+.*',"",$str);

voy a probar, si no me resulta te mato 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
  #41 (permalink)  
Antiguo 11/05/2011, 13:20
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

ok, lo logre, ya quita los enlaces y corta las lineas al superar cierta cantidad de pixels, viene la parte complicada (que tengo comentada en el siguiente código), la separación por silabas!

espero que alguien entienda el código yo creo que por hoy no puedo seguir con esto XD

Código PHP:
<font face="Verdana">
<?php
error_reporting
(0);
function 
box($cadena){
    
$cadena=preg_replace('/(?:\%\d*\$s)?/i',"",$cadena);
    
$box=imagettfbbox("11",0,"verdana.ttf",$cadena);
    return 
$box[2]-$box[0];
}
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;
}
$str '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.

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.

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.
LOREIMIPSUM'
;

$eraseFromString = array('<br />');

preg_match_all('/<[^>]+>/'$str$replaceMatch);
 
if(!empty(
$replaceMatch[0])){
    foreach(
$replaceMatch[0] as $k => $v){
        
$str str_replace($v'%' . ($k+1) . '$s'$str);
    }
}

$texto=$str;
$w=0;
while(
strlen($texto)>0){
    
$segmento=$texto;
    if(
strlen($segmento)>100$len=100; else $len=strlen($segmento);
    for(
$f=$len;box(substr($segmento,0,$f))>400;$f--){
        
    }
    
    
//////////// AQUI ESTA LA SEPARACION POR SILABAS ////
    
    /*$next="";
    for($f=$f+1;$f>0;$f--){
        $current=substr($segmento,$f,1);
        $prev=$next=substr($segmento,$f-1,1);
        $reprev=$next=substr($segmento,$f-2,1);
        if((esvoc($prev) and escons($current) and $next!=" " and !escons($next)) or (escons($prev) and escons($current) and!juntas($prev.$current))){
            $lines[$w]=substr($segmento,0,$f);
            $f=0;
        }elseif(esvoc($reprev) and escons($prev) and escons($current)){
            $lines[$w]=substr($segmento,0,$f);
            $f=0;
        }
        $next=$current;
    }*/
    /////////////
    
$w++;
    
$texto=substr($segmento,$f);
}

if(!empty(
$lines)){
    foreach(
$lines as &$v){
        
$v vsprintf($v$replaceMatch[0]);
        
$v str_replace($eraseFromString''$v);
        
$v str_replace('
'
'<br>'$v);
    }
    unset(
$v);
}

echo !empty(
$lines)
    ? 
implode('<br />'$lines)
    : 
$str;
?>
</font>
Les recuerdo que para que este código funcione se debe tener el archivo verdana.ttf en la misma carpeta, ademas de las librerias TTF y GD2
__________________
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 10:09.