Microsoft MVP

Email y Rss

email rss

Klout

Seguidores en facebook

Timeline de mi Twitter

Tienes preguntas?

Ideas de un Conejo
Más allá de los sistemas de información: (C#)=> videojuegos, soluciones a problemas interesantes y Sistemas Operativos
XNA
C#
Sistemas Operativos
Varios
Metro
Acerca de

Configurar Sintaxis de Visual C# 8.0 en Geshi

April 1st, 2007 by JuanK

TweetFollow @JuanKRuiz

Share

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

Print Friendly
Share

TweetFollow @JuanKRuiz

  • No hay comentarios »
  • Publicado en la categoría 'GeSHi'

Deja un comentario

Redes Sociales

Follow @JuanKRuiz
Answer Questions

Busca en el blog

Artículos Relacionados

No hay artículos similares

Artículos Relacionados

No hay artículos similares

Nube de Temas

API - C# - codigo - Fiber - Forms - GeSHi - icon - IE - IE9 - imagenes - IT - Microsoft - MVP - Pinned - PowerShell - Proceso - rendimiento - RSS - sistema - Sistemas Operativos - Site - Thread - velocidad - Visual - WCF - Windows - WndProc - WPF - XML - XNA

Blogs recomendados

  • VBCodigoPocketPC Espacio para tratar temas de programacion para dispositivos moviles, Pocket PC, Compact Framework, Embbeded Visual Basic, Visual Basic.NET , C# (C Sharp)
  • Róbinson Moscoso Estaré publicando acá cosas sobre tecnologia .NET, situacioines cotidianas de las que voy aprendiendo… sirve como extensión de memoria.
  • .Net C# Blog de Nelsón Venegas
  • Warnov Microsoft Developer Evangelist
  • IT LIfe Blog de mi Hermano que esta en el lado claro: IT
  • Sorey Garcia Una chica del común con la firme intención de no serlo
  • Black Byte videojuegos, modelado y animación 3d
  • Road to IT World Cosas interesantes de IT
  • Marcela Chitiva Un poco de esto… un poco de aquello
  • Surviving the Nigth El mejor blog para aquellos que nos gustan los “internals”
  • Meta

    1. Log in
    2. WordPress

    Ideas de un Conejo is powered by Wordpress. Theme designed by Juan Carlos Ruiz.