function procesos(texto,cuales) {
    if(texto!="") {
        if(cuales>=32){   //Reemplazo listas introducidas a mano por listas HTML
           cuales-=32;
		   rExp = /^\s*[-+*]\s*([^\f\n\r]*)[\n\r]?/mgi;
		   texto = texto.replace(rExp,"<li>$1</li>");
		   rExp = /(<ul>)*(<li>.*<\/li>)+(<\/ul>)*/gi;
           texto = texto.replace(rExp,"<ul>$2</ul>");
        }
        if(cuales>=16){   //Separa párrafos
           cuales-=16
           //Reemplaza : .{espacio}*{salto}{espacio}*{alfanumérico}
           //Por : .<br /><br />{alfanumérico}
			  rExp = /\. *(\r\n)+ *(\w)/gi	//mayoría de navegadores con windows
			  texto = texto.replace(rExp,".<br /><br />$2")
			  rExp = /\. *(\n)+ *(\w)/gi		//navegadores de mac, linux, etc.
           texto = texto.replace(rExp,".<br /><br />$2")
			  //alert(texto);
        }
        if(cuales>=8){    //Elimino espacios en blanco de longitud mayor que 2
           cuales-=8
           rExp = / {2,}/gi;
           texto = texto.replace(rExp," ")
        }
        if(cuales>=4){    //Convierte el resto de saltos en <br />s
           cuales-=4
			  //previamente elimino cualquier salto existente entre párrafos para evitar que posteriormente meta brs cada vez que se cargan las ventanas en modo visual.
			  rExp = /(<\/p>)[\r\n\f]+(<p>)/gi;
			  texto = texto.replace(rExp,"</p><p>")
			  rExp = /\r\n/gi;
			  texto = texto.replace(rExp,"<br />");
			  rExp = /\n/gi;
			  texto = texto.replace(rExp,"<br />");
			  rExp = /\f/gi;
			  texto = texto.replace(rExp,"<br />");
        }
        if(cuales>=2){      //Marca subtítulos
           cuales-=2;
			  //de la primera línea (si se han reemplazado los saltos de línea por brs)
           rExp = /^([^<>:\*\-]{3,55})<br \/>/gi;
           texto = texto.replace(rExp,"<b>$1</b><br />");
           //de dos líneas
           rExp = /<br \/>([^<>:\*\-]{3,55})<br \/>/gi;
           texto = texto.replace(rExp,"<br /><b>$1</b><br />");
			  
			  //si no se han reemplazado los saltos de línea por brs
			  //de la primera línea
			  rExp = /^([^<>:\*\-]{3,55})\r\n/gi;
           texto = texto.replace(rExp,"<b>$1</b><br />");
			  //del resto de líneas
           rExp = /\r\n([^<>:\*\-]{3,55})\r\n/gi;
           texto = texto.replace(rExp,"<br /><b>$1</b><br />");
        }
        if(cuales>=1){      //Convierto posibles enlaces en verdaderos enlaces
			// Proceso de urls que empiezan por http
			rExp = /(^|[\s\.,:\(\[\-\n\r])(https?:\/\/[A-Z0-9._%-]+\.[A-Z]{2,4}(\/[\w\-\/_%\.]+[\w\-\/_%]+)?(\/?\?[\w\-\/\=\&\+_%]+)?)(\b)/gi;
			texto = texto.replace(rExp,"$1<a class=enlace style=font-size:100%; href=$2>$2</a>$5");
			
			// Proceso de urls que empiezan por www.
			rExp = /(^|[\s\.,:\(\[\-\n\r])(w{3}\.[A-Z0-9._%-]+\.[A-Z]{2,4}(\/[\w\-\/_%\.]+[\w\-\/_%]+)?(\/?\?[\w\-\/\=\&\+_%]+)?)(\.\s|[\s\,\;\)\:\n\r]|$|\.$|\/|(<\/))/gi;
			texto = texto.replace(rExp,"$1<a class=enlace style=font-size:100%; href=http://$2\>$2</a>$5");

			// Proceso de mailto:
			rExp = /(^|[\s\.,>\(\[\-\n\r])([A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4})(\b)/gi;
			texto = texto.replace(rExp," $1<a class=enlace style=font-size:100%; href=mailto:$2>$2</a>$3");
        }
        //Convertimos la primera letra en mayscula.
		  texto = texto.substr(0,1).toUpperCase() + texto.substr(1);
			//Borrar todos los saltos innecesarios
			rExp = /[\f\r\n]+/gi;
			texto = texto.replace(rExp," ")
			//Inserto saltos en un par de sitios estratégicos para que funcione correctamente código de OpenX.
			rexp = /(<!--\/\/<!\[CDATA\[)/gi;
			texto = texto.replace(rexp,"\r\n$1\r\n");
			rexp = /(\/\/\]\]>-->)/gi;
			texto = texto.replace(rexp,"\r\n$1\r\n");
			//Inserto saltos en un par de sitios estratégicos para que funcione correctamente código de Google AdSense
			rexp = /<!--([^\/][^\/].+?)\/\/ -->/gi; //"[^\/][^\/]" se añade para evitar que destroce el código de OpenX de arriba
			texto = texto.replace(rexp,"<!--\r\n$1\r\n// -->");
    }
    //Final
    return (texto)
}