Configurar Sintaxis de Visual C# 8.0 en Geshi
April 1st, 2007 by JuanK
GeSHi Es un coloreador de sintaxis que puede ser de mucha utilidad cuando se desea incluir código fuente en un página web ya que GeSHi realiza la tediosa tarea del coloreado de sintaxis y lo mejor es que es totalmente parametrizable.
Esta herramienta incluye soporte para gran cantidad de lenguajes y para los que no tiene soporte se les pude adicionar muy facilmente. Por defecto el archivo de configuración de GeSHi para C# no provee un buen coloreado de sintaxis, al menos no para mi gusto, a mi me gusta el coloreado de sintaxis que provee Visual Studio 8.0 por defecto, así que me puse en la tarea de modificar el archivo de configuracion de C#.
Modificando el archivo de configuracion para C#
Lo primero que hay que tener en mente es que lo que quiero es usar la instaxis de VS 8.0 así es que el primer paso es ubicar el archivo de configuración de sintaxis para C#, este se encuentra en geshi/csharp.php este es el listado de modificaciones que se deben realizar :
Cambio1
Original
'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
Modificado
'COMMENT_SINGLE' => array(1 => '/// => '//', 2 => '#'),
Cambio2
Luego en el array de KEYWORDS, es decir despues de la linea 161 hay que agregar esto:
6 => array(
'Array',
'Int32',
'Int16',
'Int64',
'UInt32',
'UInt16',
'UInt64',
'String'
),
Cambio 3
Mas abajo se hace este cambio, que es uno de los más importantes ya que modifica la mayoria de los estilos de coloreado, el array STYLES se cambia para que quede de esta manera:
'STYLES' => array( 'KEYWORDS' => array( 1 => 'color: #0600FF; font-weight: bold;', 2 => 'color: #FF8000; ', 3 => 'color: #0000FF; font-weight: bold;', 4 => 'color: #0000FF;', 5 => 'color: #000000; font-weight: bold;', 6 => 'color: #008080;' ), 'COMMENTS' => array( 1 => 'color: #808080;', 2 => 'color: #008000; font-style: italic;', 3 => 'color: #008080;', 'MULTI' => 'color: #008000; font-style: italic;' ), 'ESCAPE_CHAR' => array( 0 => 'color: #008080; font-weight: bold;' ), 'BRACKETS' => array( 0 => 'color: #000000;' ), 'STRINGS' => array( 0 => 'color: #970000;' ), 'NUMBERS' => array( 0 => 'color: #000000;' ), 'METHODS' => array( 1 => 'color: #000000;', 2 => 'color: #000000;' ), 'SYMBOLS' => array( 0 => 'color: #008000;' ), 'REGEXPS' => array( 1 => 'color: #008080;', 2 => 'color: #000000;' ), 'SCRIPT' => array( )
Cambio 4
Un poco mas abajo el array REGEXPS se debe modificar para dejarlo asi:
'REGEXPS' => array( 1 => array( GESHI_SEARCH => '(\s|,)([A-Z][a-zA-Z]+)(.|\s|(\[|\())', GESHI_REPLACE => '\\2', GESHI_MODIFIERS => '', GESHI_BEFORE => '\\1', GESHI_AFTER => '\\3' ), , 2 => array( GESHI_SEARCH => '(\$)([a-zA-Z]+)', GESHI_REPLACE => '\\2', GESHI_MODIFIERS => '', GESHI_BEFORE => '', GESHI_AFTER => '' ), ),
Esto es habilitar en geshi una nueva expresion regular que le permite identificar los nombres de clase, al menos si se usan teniendo en cuenta que inician en mayuscula.
Listo!!! eso es todo, aca un ejemplo de codigo C# coloreado con geshi
using System;
using System.IO;
using System.Text;
namespace FileGrouper
{
class Program
{
static int Main(string[] args)
{
if (args.Length > 0)
{
if (args[0] == "-help" || args[0] == "-?"
|| args[0] == "/help" || args[0] == "/?"
)
{
WriteHelp();
return 1;
}
else if (args[0] == "-parf")
{
if (args.Length > 0)
{
TextReader tr = File.OpenText(args[1]);
string[] parameters = tr.ReadToEnd().Split(new char[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
JoinFiles(parameters);
tr.Close();
}
return 1;
}
else
{
JoinFiles(args);
return 1;
}
}
else
{
TextReader tr = File.OpenText("params.txt");
string[] parameters = tr.ReadToEnd().Split(new char[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
JoinFiles(parameters);
tr.Close();
return 1;
}
}
/// <summary>
/// Join a group files in a single file, use the first
/// argument for the out and the other ones to the in
/// </summary>
/// <param name="args">File Parameters</param>
private static void JoinFiles(string[] args)
{
if (args.Length > 0)
{
Stream sr;
BinaryReader br;
Stream sw = File.Open(args[0], FileMode.Create);
BinaryWriter bw = new BinaryWriter(sw);
//4bytes
bw.Write(args.Length - 1);
for (int i = 1; i < args.Length; i++)
{
sr = File.OpenRead(args[i]);
br = new BinaryReader(sr);
//8 bytes- length
bw.Write(br.BaseStream.Length+8);
//File bytes
bw.Write(br.ReadBytes((int)br.BaseStream.Length));
br.Close();
}
bw.Close();
}
}
private static void WriteHelp()
{
Console.WriteLine(" A Y U D A ");
Console.WriteLine(" - - - - - ");
Console.WriteLine("Uso 1: BitmapGrouper archdest [archOri...]");
Console.WriteLine("archdest Nombre de archivo de destino");
Console.WriteLine("[archOri...] Nombre de los archivos de origen de 1 a n");
Console.WriteLine("Ejemplo:");
Console.WriteLine("BitmapGrouper miBmpGrouper.bm1 image1.bmp image2.bmp image3.bmp");
Console.WriteLine("Uso 2: BitmapGrouper -parf");
Console.WriteLine("Lee los parametros desde el archivo indicado");
Console.WriteLine("Ejemplo:");
Console.WriteLine("BitmapGrouper -parf imageparams.txt");
}
}
}
Que tal ha?? buenisimo!! NO??? :’(
Ok, lo reconozco no soy un genio del html ni del php, no se si ya lo notaron pero hay un problema con los metodos…
Si el metodo no se llama utilizando el objeto padre y el método comienza con mayúscula entonces el metodo se resalta como si fuera una clase, de igual forma en la declaración del método si este comienza con mayúscula se resalta como si fuera una clase, desde luego hay una solución, no muy elegante que digamos, pero funciona, y es que al nombre del metodo se le anteponga el signo $… lo se, es una solución poco elegante pero es de utilidad, desde luego al aplicar el coloreado de sintaxis el signo $ desaparece, no se muestra.
He aquí un ejemplo
el método se llama JoinFiles primero con su uso normal y luego anteponiendole el signo $, como se puede ver el signo $ nunca aparece.
//sin usar el signo $ JoinFiles(); //Usando el sigo $ $JoinFiles();
//Si usar el signo $
///<summary>
/// Join a group files in a single file, use the first
/// argument for the out and the other ones to the in</summary>
/// <param name="args">File Parameters</param>
private static void JoinFiles(string[] args)
{
if (args.Length > 0)
{
Stream sr;
BinaryReader br;
Stream sw = File.Open(args[0], FileMode.Create);
BinaryWriter bw = new BinaryWriter(sw);
//4bytes
bw.Write(args.Length - 1);
for (int i = 1; i < args.Length; i++)
{
sr = File.OpenRead(args[i]);
br = new BinaryReader(sr);
//8 bytes- length
bw.Write(br.BaseStream.Length+8);
//File bytes
bw.Write(br.ReadBytes((int)br.BaseStream.Length));
br.Close();
}
bw.Close();
}
}
//Usando el signo $
/// <summary>
/// Join a group files in a single file, use the first
/// argument for the out and the other ones to the in
/// <param name="args">File Parameters</param>
private static void $JoinFiles(string[] args)
{
if (args.Length > 0)
{
Stream sr;
BinaryReader br;
Stream sw = File.Open(args[0], FileMode.Create);
BinaryWriter bw = new BinaryWriter(sw);
//4bytes
bw.Write(args.Length - 1);
for (int i = 1; i < args.Length; i++)
{
sr = File.OpenRead(args[i]);
br = new BinaryReader(sr);
//8 bytes- length
bw.Write(br.BaseStream.Length+8);
//File bytes
bw.Write(br.ReadBytes((int)br.BaseStream.Length));
br.Close();
}
bw.Close();
}
}
Anteponer el signo $ a cualquier palabra deshabilitara el coloreado de sintaxis en dicha palabra.
Ahora si eso fue todo hasta luego, espero que les sea de utilidad.
Download : Archivo de configuracion GeSHi para C# (sintaxis estilo Visual Studio 8.0)
Juan Carlos Ruiz Pacheco
Ingeniero de Sistemas
- No hay comentarios »
- Publicado en la categoría 'GeSHi'

Wordpress