using System;
using System.IO;
namespace BBtoHtml
{
///
/// Summary description for CCast.
///
class CCast
{
#region Constantes
///
/// El archivo no existe
///
private const int archivoInexistente = 1;
///
/// El archivo esta vacio o ilegible
///
private const int archivoVacio = 2;
///
/// No se pudo generar el nuevo archivo
///
private const int archivoNoGenerado = 3;
#endregion
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
// Variables de uso local
int iRespuesta;
string sRuta;
string sCodigoBB;
string sCodigoHtml;
// Obtener achivo
Console.WriteLine("Archivo original:");
sRuta = Console.ReadLine();
sCodigoBB = leerArchivoOriginal(sRuta, out iRespuesta);
switch (iRespuesta)
{
case archivoInexistente:
Console.WriteLine("El archivo no existe");
break;
case archivoVacio:
Console.WriteLine("El archivo esta vacio");
break;
default:
sCodigoHtml = castBBtoHTML(sCodigoBB);
iRespuesta = escribirArchivo(sRuta, sCodigoHtml);
if (iRespuesta == archivoNoGenerado)
{
Console.WriteLine("Archivo no generado");
}
else
{
Console.WriteLine("Archivo generado");
}
break;
}
}
#region Metodos personalizados
///
/// Obtener el contenido de un archivo dado
///
/// Direccion y nombre del archivo
/// Codigo de repuesta
/// Contenido del archivo
private static string leerArchivoOriginal(string ruta, out int respuesta)
{
// Variables de uso local
bool bExisteArchivo = false;
StreamReader archivo;
string sCodigoBB = string.Empty;
string sLinea = string.Empty;
string sRuta = ruta.Trim();
respuesta = 0;
// Validar la existencia del archivo
bExisteArchivo = File.Exists(sRuta);
if (bExisteArchivo) // El archivo existe
{
// Abrir el archivo
archivo = File.OpenText(sRuta);
// Leer la primera linea
sLinea = archivo.ReadLine();
sCodigoBB += sLinea;
// Leer hasta el final
while (sLinea != null)
{
sLinea = archivo.ReadLine();
sCodigoBB += "
" + sLinea;
}
// Validar el contenido del archivo leido
if (sCodigoBB.Length <= 0)
{
respuesta = archivoVacio;
}
}
else // El archivo no existe
{
respuesta = archivoInexistente;
}
return sCodigoBB; // Valor de retorno
}
///
/// Crear un archivo cualquiera
///
/// Nombre del archivo
/// Contenido del archivo
///
private static int escribirArchivo( string nombre, string contenido )
{
//Variables de uso local
int iRespuesta = 0;
string sArchivo = nombre + ".html"; // Nombre del archivo
string sMensaje = contenido.Trim(); // Mensaje en el archivo
try
{
//Crear o abrir el archivo log
StreamWriter sr = File.AppendText( sArchivo );
//Escribir en el archivo
sr.WriteLine(sMensaje);
sr.Flush();
sr.Close(); //Cerrarlo de nuevo
}
catch
{
iRespuesta = archivoNoGenerado;
}
return iRespuesta; // Valor de retorno
}
///
/// Transforma BBcode en HTML
///
/// BBcode
/// HTML
private static string castBBtoHTML(string bbcode)
{
// Variables de uso local
int iLongitud = 0;
int iIndex = 0;
int iIndexIni = 0;
int iIndexFin = 0;
string sCodigoBB = string.Empty;
string sCodigoHtml = string.Empty;
string sOriginal = bbcode.Trim();
#region Detalles de formato
sOriginal = sOriginal.Replace(" =", "=");
sOriginal = sOriginal.Replace("= ", "=");
sOriginal = sOriginal.Replace("[URL=", "[url=");
sOriginal = sOriginal.Replace("[/URL]", "[/url]");
sOriginal = sOriginal.Replace("[COLOR=", "[color=");
sOriginal = sOriginal.Replace("[/COLOR]", "[/color]");
#endregion
#region Conversion de etiquetas
#region negritas
sOriginal = sOriginal.Replace("[b]", "");
sOriginal = sOriginal.Replace("[/b]", "");
sOriginal = sOriginal.Replace("[B]", "");
sOriginal = sOriginal.Replace("[/B]", "");
#endregion
#region italica o cursiva
sOriginal = sOriginal.Replace("[i]", "");
sOriginal = sOriginal.Replace("[/i]", "");
sOriginal = sOriginal.Replace("[I]", "");
sOriginal = sOriginal.Replace("[/I]", "");
#endregion
#region subrayado
sOriginal = sOriginal.Replace("[s]", "");
sOriginal = sOriginal.Replace("[/s]", "");
sOriginal = sOriginal.Replace("[S]", "");
sOriginal = sOriginal.Replace("[/S]", "");
sOriginal = sOriginal.Replace("[u]", "");
sOriginal = sOriginal.Replace("[/u]", "");
sOriginal = sOriginal.Replace("[U]", "");
sOriginal = sOriginal.Replace("[/U]", "");
#endregion
#region imagen
sOriginal = sOriginal.Replace("[img]", "
");
sOriginal = sOriginal.Replace("[IMG]", "
");
#endregion
#region enlaces
sOriginal = sOriginal.Replace("[/url]", "");
iIndex = 0; // Inicializar la posicion de busqueda
while (iIndex >= 0) // Si se encontro
{
iIndex = sOriginal.IndexOf("[url=", iIndexIni); // Buscar en la cadena
if (iIndex >= 0)
{
iIndexIni = iIndex + 5; // Avanzar cinco caracteres
iIndexFin = sOriginal.IndexOf("]", iIndexIni); // Buscar en la cadena
iLongitud = iIndexFin - iIndex + 1;
if (iLongitud > 0)
{
sCodigoBB = sOriginal.Substring(iIndex, iLongitud);
sCodigoHtml = sCodigoBB.Replace("[url=","");
sOriginal = sOriginal.Replace(sCodigoBB, sCodigoHtml);
iIndexIni = iIndexFin;
}
}
else
{
break;
}
} // Fin del ciclo de busqueda de enlaces
#endregion
#region color
sOriginal = sOriginal.Replace("[/color]", "");
iIndex = 0; // Inicializar la posicion de busqueda
while (iIndex >= 0) // Si se encontro
{
iIndex = sOriginal.IndexOf("[color=", iIndexIni); // Buscar en la cadena
if (iIndex >= 0)
{
iIndexIni = iIndex + 7; // Avanzar cinco caracteres
iIndexFin = sOriginal.IndexOf("]", iIndexIni); // Buscar en la cadena
iLongitud = iIndexFin - iIndex + 1;
if (iLongitud > 0)
{
sCodigoBB = sOriginal.Substring(iIndex, iLongitud);
sCodigoHtml = sCodigoBB.Replace("[color=","");
sOriginal = sOriginal.Replace(sCodigoBB, sCodigoHtml);
iIndexIni = iIndexFin;
}
}
else
{
break;
}
} // Fin del ciclo de busqueda de enlaces
#endregion
#endregion
return sOriginal; // Valor de retorno
}
#endregion
}
}