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 } }