Ver Mensaje Individual
  #41 (permalink)  
Antiguo 11/05/2011, 13:20
Avatar de stramin
stramin
 
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 11 meses
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